Skip to content

Commit 8e5548c

Browse files
author
Val Brodsky
committed
Use datetime instead of zone
1 parent 0045e5c commit 8e5548c

File tree

2 files changed

+26
-65
lines changed

2 files changed

+26
-65
lines changed

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from enum import Enum
33
from typing import List, Literal, Union
44

5-
from labelbox.pydantic_compat import BaseModel, Field
5+
from labelbox.pydantic_compat import BaseModel
6+
from labelbox.utils import format_iso_datetime
67

78

89
class BaseSearchFilter(BaseModel):
@@ -17,8 +18,8 @@ def dict(self, *args, **kwargs):
1718

1819
# go through all the keys and convert date to string
1920
for key in res:
20-
if isinstance(res[key], datetime.date):
21-
res[key] = res[key].isoformat()
21+
if isinstance(res[key], datetime.datetime):
22+
res[key] = format_iso_datetime(res[key])
2223
return res
2324

2425

@@ -71,8 +72,7 @@ class ProjectStageFilter(BaseSearchFilter):
7172

7273
class DateValue(BaseSearchFilter):
7374
operator: DateOperator
74-
value: datetime.date
75-
# timezone: TimeZoneName = Field(default=TimeZoneName.UTC) # type: ignore
75+
value: datetime.datetime
7676

7777

7878
class WorkforceStageUpdatedFilter(BaseSearchFilter):
@@ -86,8 +86,8 @@ class WorkforceRequestedDateFilter(BaseSearchFilter):
8686

8787

8888
class DateRange(BaseSearchFilter):
89-
min: datetime.date
90-
max: datetime.date
89+
min: datetime.datetime
90+
max: datetime.datetime
9191

9292

9393
class DateRangeValue(BaseSearchFilter):
@@ -97,13 +97,11 @@ class DateRangeValue(BaseSearchFilter):
9797

9898
class WorkforceRequestedDateRangeFilter(BaseSearchFilter):
9999
operation: Literal[OperationType.WorforceRequestedDate]
100-
# timezone: TimeZoneName = Field(default=TimeZoneName.UTC) # type: ignore
101100
value: DateRangeValue
102101

103102

104103
class WorkforceStageUpdatedRangeFilter(BaseSearchFilter):
105104
operation: Literal[OperationType.WorkforceStageUpdatedDate]
106-
# timezone: TimeZoneName = Field(default=TimeZoneName.UTC) # type: ignore
107105
value: DateRangeValue
108106

109107

Lines changed: 19 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from datetime import date, datetime
12
from labelbox.schema.search_filters import DateOperator, DateRange, DateRangeOperator, DateRangeValue, DateValue, IdOperator, OperationType, OrganizationFilter, ProjectStageFilter, TagFilter, WorkforceRequestedDateFilter, WorkforceRequestedDateRangeFilter, WorkforceStageUpdatedFilter, WorkforceStageUpdatedRangeFilter, WorkspaceFilter, build_search_filter
23

34

@@ -17,80 +18,42 @@ def test_id_filters():
1718
values=["requested"]),
1819
]
1920

20-
assert build_search_filter(filters) == [{
21-
"operator": "is",
22-
"values": ["clphb4vd7000cd2wv1ktu5cwa"],
23-
"type": "organization"
24-
}, {
25-
"operator": "is",
26-
"values": ["clphb4vd7000cd2wv1ktu5cwa"],
27-
"type": "workspace"
28-
}, {
29-
"operator": "is",
30-
"values": ["tag"],
31-
"type": "tag"
32-
}, {
33-
"operator": "is",
34-
"values": ["requested"],
35-
"type": "stage"
36-
}]
21+
assert build_search_filter(
22+
filters
23+
) == '[{operator: "is", values: ["clphb4vd7000cd2wv1ktu5cwa"], type: "organization"}, {operator: "is", values: ["clphb4vd7000cd2wv1ktu5cwa"], type: "workspace"}, {operator: "is", values: ["tag"], type: "tag"}, {operator: "is", values: ["requested"], type: "stage"}]'
3724

3825

3926
def test_date_filters():
4027
filters = [
4128
WorkforceRequestedDateFilter(
4229
operation=OperationType.WorforceRequestedDate,
4330
value=DateValue(operator=DateOperator.GreaterThanOrEqual,
44-
value="2024-01-01")),
31+
value=datetime.strptime("2024-01-01", "%Y-%m-%d"))),
4532
WorkforceStageUpdatedFilter(
4633
operation=OperationType.WorkforceStageUpdatedDate,
4734
value=DateValue(operator=DateOperator.LessThanOrEqual,
48-
value="2025-01-01")),
35+
value=datetime.strptime("2025-01-01", "%Y-%m-%d"))),
4936
]
50-
assert build_search_filter(filters) == [{
51-
"type": "workforce_requested_at",
52-
"value": {
53-
"operator": "GREATER_THAN_OR_EQUAL",
54-
"value": "2024-01-01",
55-
}
56-
}, {
57-
"type": "workforce_stage_updated_at",
58-
"value": {
59-
"operator": "LESS_THAN_OR_EQUAL",
60-
"value": "2025-01-01",
61-
}
62-
}]
37+
assert build_search_filter(
38+
filters
39+
) == '[{value: {operator: "GREATER_THAN_OR_EQUAL", value: "2024-01-01T08:00:00Z"}, type: "workforce_requested_at"}, {value: {operator: "LESS_THAN_OR_EQUAL", value: "2025-01-01T08:00:00Z"}, type: "workforce_stage_updated_at"}]'
6340

6441

6542
def test_date_range_filters():
6643
filters = [
6744
WorkforceRequestedDateRangeFilter(
6845
operation=OperationType.WorforceRequestedDate,
69-
value=DateRangeValue(operator=DateRangeOperator.Between,
70-
value=DateRange(min="2024-01-01",
71-
max="2025-01-01"))),
46+
value=DateRangeValue(
47+
operator=DateRangeOperator.Between,
48+
value=DateRange(min=datetime.strptime("2024-01-01", "%Y-%m-%d"),
49+
max=datetime.strptime("2025-01-01",
50+
"%Y-%m-%d")))),
7251
WorkforceStageUpdatedRangeFilter(
7352
operation=OperationType.WorkforceStageUpdatedDate,
7453
value=DateRangeValue(operator=DateRangeOperator.Between,
75-
value=DateRange(min="2024-01-01",
76-
max="2025-01-01")))
54+
value=DateRange(min="2024-01-01T08:00:00Z",
55+
max="2025-01-01T08:00:00Z")))
7756
]
78-
assert build_search_filter(filters) == [{
79-
"value": {
80-
"operator": "BETWEEN",
81-
"value": {
82-
"min": "2024-01-01",
83-
"max": "2025-01-01"
84-
}
85-
},
86-
"type": "workforce_requested_at"
87-
}, {
88-
"value": {
89-
"operator": "BETWEEN",
90-
"value": {
91-
"min": "2024-01-01",
92-
"max": "2025-01-01"
93-
}
94-
},
95-
"type": "workforce_stage_updated_at"
96-
}]
57+
assert build_search_filter(
58+
filters
59+
) == '[{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"}]'

0 commit comments

Comments
 (0)