Hi everyone! I’m using this filter ```task_filter ...
# ask-community
g
Hi everyone! I’m using this filter
Copy code
task_filter = TaskRunFilter(
    tags=TaskRunFilterTags(all_=[tag]),
    state_type=TaskRunFilterStateType(
        any_=[
            StateType.RUNNING.value,
            StateType.PENDING.value,
            StateType.CANCELLING.value,
            StateType.SCHEDULED.value,
            StateType.PAUSED.value
        ]
    )
)
but despite in the class doc it is written that it returns task runs meeting all conditions, it looks like it is an OR. Does it happen to you also?
Copy code
task_filter = TaskRunFilter(
    tags=TaskRunFilterTags(all_=[tag]),
    state=TaskRunFilterState(
        type=TaskRunFilterStateType(
            any_=[
                StateType.RUNNING.value,
                StateType.PENDING.value,
                StateType.CANCELLING.value,
                StateType.SCHEDULED.value,
                StateType.PAUSED.value
            ]
        )
    )
)
Marvin suggests this change, is it correct?
b
@Giacomo Chiarella it looks like
state_type
is not a valid parameter for the
TaskRunFilter
class. Marvin's suggestion should fix this.
g
oh I have not got any error regarding this. Alright!
g
@Brendan Dalpe I’ve run this
Copy code
task_filter = TaskRunFilter(
            tags=TaskRunFilterTags(all_=[tag]),
            state=TaskRunFilterState(
                type=TaskRunFilterStateType(
                    any_=[
                        StateType.RUNNING.value,
                        StateType.PENDING.value,
                        StateType.CANCELLING.value,
                        StateType.SCHEDULED.value,
                        StateType.PAUSED.value
                    ]
                )
            )
        )
task_runs = await client.read_task_runs(task_run_filter=task_filter, sort=TaskRunSort.NAME_ASC, limit=limit,
                                        offset=offset)
but I got this
Copy code
pydantic_core._pydantic_core.ValidationError: 1 validation error for TaskRunFilterState
name
  Field required [type=missing, input_value={'type': TaskRunFilterSta...LED, StateType.PAUSED])}, input_type=dict]
I don’t get if name is mandatory or there is something wrong with something else, any idea?
b
Which version of the SDK are you using?
g
Prefect 3.2.14
1
I could have got it. I tried this and I have no errors
Copy code
task_filter = TaskRunFilter(
    tags=TaskRunFilterTags(all_=[tag]),
    state=TaskRunFilterState(
        name=TaskRunFilterStateName(
            any_=[
                StateType.RUNNING.value,
                StateType.PENDING.value,
                StateType.CANCELLING.value,
                StateType.SCHEDULED.value,
                StateType.PAUSED.value
            ]
        ),
        type=TaskRunFilterStateType(
            any_=[
                StateType.RUNNING,
                StateType.PENDING,
                StateType.CANCELLING,
                StateType.SCHEDULED,
                StateType.PAUSED
            ]
        )
    )
)
could you validate it?
b
I'm unable to reproduce the pydantic validation error you're getting... This code is working for me on 3.2.14:
Copy code
from prefect.client.orchestration import get_client
from prefect.states import StateType
from prefect.server.schemas.filters import TaskRunFilter, TaskRunFilterState, TaskRunFilterStateType

with get_client(sync_client=True) as client:
    task_filter = TaskRunFilter(
        state=TaskRunFilterState(
            type=TaskRunFilterStateType(
                any_=[
                    StateType.RUNNING,
                    StateType.PENDING,
                    StateType.CANCELLING,
                    StateType.SCHEDULED,
                    StateType.PAUSED,
                    StateType.COMPLETED
                ]
            )
        )
    )
    
    result = client.read_task_runs(task_run_filter=task_filter)
    for task_run in result:
        print(f"Task Run ID: {task_run.id}, State: {task_run.state.type}")
g
weird, I had to add both type and name in TaskRunFilterState, setting type says name is missing and vice versa
b
Can you just double check the version installed?
Copy code
print(client.client_version())
g
yes it is
1