Skip to content

Commit f0ce9bc

Browse files
author
Val Brodsky
committed
Added taskcount filters
1 parent cb8fa5a commit f0ce9bc

File tree

4 files changed

+63
-18
lines changed

4 files changed

+63
-18
lines changed

libs/labelbox/src/labelbox/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2435,7 +2435,7 @@ def get_labeling_service_dashboards(
24352435
>>> seven_days_ago = (datetime.now() - timedelta(days=7)).strftime("%Y-%m-%d")
24362436
>>> workforce_requested_filter_before = WorkforceRequestedDateFilter(
24372437
>>> operation=OperationType.WorforceRequestedDate,
2438-
>>> value=DateValue(operator=DateOperator.GreaterThanOrEqual,
2438+
>>> value=DateValue(operator=RangeOperatorWithSingleValue.GreaterThanOrEqual,
24392439
>>> value=seven_days_ago))
24402440
>>> labeling_service_dashboard = [ld for ld in project.client.get_labeling_service_dashboards(search_query=[workforce_requested_filter_before])]
24412441

libs/labelbox/src/labelbox/schema/search_filters.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ class OperationType(Enum):
3636
Stage = 'stage'
3737
WorforceRequestedDate = 'workforce_requested_at'
3838
WorkforceStageUpdatedDate = 'workforce_stage_updated_at'
39+
TaskCompletedCount = 'task_completed_count'
40+
TaskRemainingCount = 'task_remaining_count'
3941

4042

4143
class IdOperator(Enum):
@@ -45,7 +47,7 @@ class IdOperator(Enum):
4547
Is = 'is'
4648

4749

48-
class DateOperator(Enum):
50+
class RangeOperatorWithSingleValue(Enum):
4951
"""
5052
Supported operators for dates
5153
"""
@@ -54,7 +56,7 @@ class DateOperator(Enum):
5456
LessThanOrEqual = 'LESS_THAN_OR_EQUAL'
5557

5658

57-
class DateRangeOperator(Enum):
59+
class RangeOperatorWithValue(Enum):
5860
"""
5961
Supported operators for date ranges
6062
"""
@@ -109,10 +111,15 @@ class DateValue(BaseSearchFilter):
109111
so for a string '2024-01-01' that is run on a computer in PST, we would convert it to '2024-01-01T08:00:00Z'
110112
while the same string in EST will get converted to '2024-01-01T05:00:00Z'
111113
"""
112-
operator: DateOperator
114+
operator: RangeOperatorWithSingleValue
113115
value: datetime.datetime
114116

115117

118+
class IntegerValue(BaseSearchFilter):
119+
operator: RangeOperatorWithSingleValue
120+
value: int
121+
122+
116123
class WorkforceStageUpdatedFilter(BaseSearchFilter):
117124
"""
118125
Filter for workforce stage updated date
@@ -141,7 +148,7 @@ class DateRangeValue(BaseSearchFilter):
141148
"""
142149
Date range value for a search filter
143150
"""
144-
operator: DateRangeOperator
151+
operator: RangeOperatorWithValue
145152
value: DateRange
146153

147154

@@ -161,11 +168,28 @@ class WorkforceStageUpdatedRangeFilter(BaseSearchFilter):
161168
value: DateRangeValue
162169

163170

171+
class TaskCompletedCountFilter(BaseSearchFilter):
172+
"""
173+
Filter for workforce stage updated date
174+
"""
175+
operation: Literal[OperationType.TaskCompletedCount]
176+
value: IntegerValue
177+
178+
179+
class TaskRemainingCountFilter(BaseSearchFilter):
180+
"""
181+
Filter for workforce stage updated date
182+
"""
183+
operation: Literal[OperationType.TaskRemainingCount]
184+
value: IntegerValue
185+
186+
164187
SearchFilter = Union[OrganizationFilter, WorkspaceFilter, TagFilter,
165188
ProjectStageFilter, WorkforceRequestedDateFilter,
166189
WorkforceStageUpdatedFilter,
167190
WorkforceRequestedDateRangeFilter,
168-
WorkforceStageUpdatedRangeFilter]
191+
WorkforceStageUpdatedRangeFilter, TaskCompletedCountFilter,
192+
TaskRemainingCountFilter]
169193

170194

171195
def _dict_to_graphql_string(d: Union[dict, list, str, int]) -> str:

libs/labelbox/tests/integration/test_labeling_dashboard.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from datetime import datetime, timedelta
22
from labelbox.schema.labeling_service import LabelingServiceStatus
3-
from labelbox.schema.search_filters import DateOperator, DateRange, DateRangeOperator, DateRangeValue, DateValue, IdOperator, OperationType, OrganizationFilter, WorkforceRequestedDateFilter, WorkforceRequestedDateRangeFilter, WorkspaceFilter
43
from labelbox.schema.ontology_kind import EditorTaskType
54
from labelbox.schema.media_type import MediaType
5+
from labelbox.schema.search_filters import RangeOperatorWithSingleValue, DateRange, RangeOperatorWithValue, DateRangeValue, DateValue, IdOperator, OperationType, OrganizationFilter, WorkforceRequestedDateFilter, WorkforceRequestedDateRangeFilter, WorkspaceFilter
66

77

88
def test_request_labeling_service_dashboard(rand_gen,
@@ -48,12 +48,13 @@ def test_request_labeling_service_dashboard_filters(requested_labeling_service):
4848

4949
workforce_requested_filter_before = WorkforceRequestedDateFilter(
5050
operation=OperationType.WorforceRequestedDate,
51-
value=DateValue(operator=DateOperator.GreaterThanOrEqual,
52-
value=datetime.strptime("2024-01-01", "%Y-%m-%d")))
51+
value=DateValue(
52+
operator=RangeOperatorWithSingleValue.GreaterThanOrEqual,
53+
value=datetime.strptime("2024-01-01", "%Y-%m-%d")))
5354
year_from_now = (datetime.now() + timedelta(days=365))
5455
workforce_requested_filter_after = WorkforceRequestedDateFilter(
5556
operation=OperationType.WorforceRequestedDate,
56-
value=DateValue(operator=DateOperator.LessThanOrEqual,
57+
value=DateValue(operator=RangeOperatorWithSingleValue.LessThanOrEqual,
5758
value=year_from_now))
5859

5960
labeling_service_dashboard = [
@@ -66,7 +67,7 @@ def test_request_labeling_service_dashboard_filters(requested_labeling_service):
6667

6768
workforce_date_range_filter = WorkforceRequestedDateRangeFilter(
6869
operation=OperationType.WorforceRequestedDate,
69-
value=DateRangeValue(operator=DateRangeOperator.Between,
70+
value=DateRangeValue(operator=RangeOperatorWithValue.Between,
7071
value=DateRange(min="2024-01-01T00:00:00-0800",
7172
max=year_from_now)))
7273

libs/labelbox/tests/unit/test_unit_search_filters.py

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from datetime import datetime
2-
from labelbox.schema.search_filters import DateOperator, DateRange, DateRangeOperator, DateRangeValue, DateValue, IdOperator, OperationType, OrganizationFilter, ProjectStageFilter, TagFilter, WorkforceRequestedDateFilter, WorkforceRequestedDateRangeFilter, WorkforceStageUpdatedFilter, WorkforceStageUpdatedRangeFilter, WorkspaceFilter, build_search_filter
2+
from labelbox.schema.search_filters import IntegerValue, RangeOperatorWithSingleValue, DateRange, RangeOperatorWithValue, DateRangeValue, DateValue, IdOperator, OperationType, OrganizationFilter, ProjectStageFilter, TagFilter, TaskCompletedCountFilter, TaskRemainingCountFilter, WorkforceRequestedDateFilter, WorkforceRequestedDateRangeFilter, WorkforceStageUpdatedFilter, WorkforceStageUpdatedRangeFilter, WorkspaceFilter, build_search_filter
33
from labelbox.utils import format_iso_datetime
44

55

@@ -31,12 +31,14 @@ def test_date_filters():
3131
filters = [
3232
WorkforceRequestedDateFilter(
3333
operation=OperationType.WorforceRequestedDate,
34-
value=DateValue(operator=DateOperator.GreaterThanOrEqual,
35-
value=local_time_start)),
34+
value=DateValue(
35+
operator=RangeOperatorWithSingleValue.GreaterThanOrEqual,
36+
value=local_time_start)),
3637
WorkforceStageUpdatedFilter(
3738
operation=OperationType.WorkforceStageUpdatedDate,
38-
value=DateValue(operator=DateOperator.LessThanOrEqual,
39-
value=local_time_end)),
39+
value=DateValue(
40+
operator=RangeOperatorWithSingleValue.LessThanOrEqual,
41+
value=local_time_end)),
4042
]
4143
expected_start = format_iso_datetime(local_time_start)
4244
expected_end = format_iso_datetime(local_time_end)
@@ -49,7 +51,7 @@ def test_date_range_filters():
4951
filters = [
5052
WorkforceRequestedDateRangeFilter(
5153
operation=OperationType.WorforceRequestedDate,
52-
value=DateRangeValue(operator=DateRangeOperator.Between,
54+
value=DateRangeValue(operator=RangeOperatorWithValue.Between,
5355
value=DateRange(min=datetime.strptime(
5456
"2024-01-01T00:00:00-0800",
5557
"%Y-%m-%dT%H:%M:%S%z"),
@@ -58,7 +60,7 @@ def test_date_range_filters():
5860
"%Y-%m-%dT%H:%M:%S%z")))),
5961
WorkforceStageUpdatedRangeFilter(
6062
operation=OperationType.WorkforceStageUpdatedDate,
61-
value=DateRangeValue(operator=DateRangeOperator.Between,
63+
value=DateRangeValue(operator=RangeOperatorWithValue.Between,
6264
value=DateRange(min=datetime.strptime(
6365
"2024-01-01T00:00:00-0800",
6466
"%Y-%m-%dT%H:%M:%S%z"),
@@ -69,3 +71,21 @@ def test_date_range_filters():
6971
assert build_search_filter(
7072
filters
7173
) == '[{value: {operator: "BETWEEN", value: {min: "2024-01-01T08:00:00Z", max: "2025-01-01T08:00:00Z"}}, type: "workforce_requested_at"}, {value: {operator: "BETWEEN", value: {min: "2024-01-01T08:00:00Z", max: "2025-01-01T08:00:00Z"}}, type: "workforce_stage_updated_at"}]'
74+
75+
76+
def test_task_count_filters():
77+
filters = [
78+
TaskCompletedCountFilter(
79+
operation=OperationType.TaskCompletedCount,
80+
value=IntegerValue(
81+
operator=RangeOperatorWithSingleValue.GreaterThanOrEqual,
82+
value=1)),
83+
TaskRemainingCountFilter(
84+
operation=OperationType.TaskRemainingCount,
85+
value=IntegerValue(
86+
operator=RangeOperatorWithSingleValue.LessThanOrEqual,
87+
value=10)),
88+
]
89+
90+
expected = '[{value: {operator: "GREATER_THAN_OR_EQUAL", value: 1}, type: "task_completed_count"}, {value: {operator: "LESS_THAN_OR_EQUAL", value: 10}, type: "task_remaining_count"}]'
91+
assert build_search_filter(filters) == expected

0 commit comments

Comments
 (0)