Skip to content

Commit dbc82b9

Browse files
authored
Merge pull request #560 from UiPath/fix/json_encoder
fix(json_encoder): adapt json serialization to pydantic v2
2 parents 7f950e8 + 7218417 commit dbc82b9

11 files changed

Lines changed: 42 additions & 35 deletions

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "uipath"
3-
version = "2.1.46"
3+
version = "2.1.47"
44
description = "Python SDK and CLI for UiPath Platform, enabling programmatic interaction with automation services, process management, and deployment tools."
55
readme = { file = "README.md", content-type = "text/markdown" }
66
requires-python = ">=3.10"

src/uipath/models/action_schema.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from datetime import datetime
21
from typing import List, Optional
32

43
from pydantic import BaseModel, ConfigDict, Field
@@ -16,7 +15,6 @@ class ActionSchema(BaseModel):
1615
use_enum_values=True,
1716
arbitrary_types_allowed=True,
1817
extra="allow",
19-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
2018
)
2119

2220
key: str

src/uipath/models/actions.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from datetime import datetime
22
from typing import Any, Dict, List, Optional, Union
33

4-
from pydantic import BaseModel, ConfigDict, Field
4+
from pydantic import BaseModel, ConfigDict, Field, field_serializer
55

66

77
class Action(BaseModel):
@@ -11,9 +11,14 @@ class Action(BaseModel):
1111
use_enum_values=True,
1212
arbitrary_types_allowed=True,
1313
extra="allow",
14-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
1514
)
1615

16+
@field_serializer("*", when_used="json")
17+
def serialize_datetime(self, value):
18+
if isinstance(value, datetime):
19+
return value.isoformat() if value else None
20+
return value
21+
1722
task_definition_properties_id: Optional[int] = Field(
1823
default=None, alias="taskDefinitionPropertiesId"
1924
)

src/uipath/models/assets.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from datetime import datetime
21
from typing import Dict, List, Optional
32

43
from pydantic import BaseModel, ConfigDict, Field
@@ -11,9 +10,7 @@ class CredentialsConnectionData(BaseModel):
1110
use_enum_values=True,
1211
arbitrary_types_allowed=True,
1312
extra="allow",
14-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
1513
)
16-
1714
url: str
1815
body: str
1916
bearer_token: str = Field(alias="bearerToken")
@@ -26,9 +23,7 @@ class UserAsset(BaseModel):
2623
use_enum_values=True,
2724
arbitrary_types_allowed=True,
2825
extra="allow",
29-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
3026
)
31-
3227
name: Optional[str] = Field(default=None, alias="Name")
3328
value: Optional[str] = Field(default=None, alias="Value")
3429
value_type: Optional[str] = Field(default=None, alias="ValueType")

src/uipath/models/attachment.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from datetime import datetime
33
from typing import Optional
44

5-
from pydantic import BaseModel, ConfigDict, Field
5+
from pydantic import BaseModel, ConfigDict, Field, field_serializer
66

77

88
class Attachment(BaseModel):
@@ -17,9 +17,14 @@ class Attachment(BaseModel):
1717
use_enum_values=True,
1818
arbitrary_types_allowed=True,
1919
extra="allow",
20-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
2120
)
2221

22+
@field_serializer("creation_time", "last_modification_time", when_used="json")
23+
def serialize_datetime(self, value):
24+
if isinstance(value, datetime):
25+
return value.isoformat() if value else None
26+
return value
27+
2328
name: str = Field(alias="Name")
2429
creation_time: Optional[datetime] = Field(default=None, alias="CreationTime")
2530
last_modification_time: Optional[datetime] = Field(

src/uipath/models/connections.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from datetime import datetime
21
from typing import Any, Optional
32

43
from pydantic import BaseModel, ConfigDict, Field
@@ -11,9 +10,7 @@ class Connection(BaseModel):
1110
use_enum_values=True,
1211
arbitrary_types_allowed=True,
1312
extra="allow",
14-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
1513
)
16-
1714
id: Optional[str] = None
1815
name: Optional[str] = None
1916
owner: Optional[str] = None
@@ -40,9 +37,7 @@ class ConnectionToken(BaseModel):
4037
use_enum_values=True,
4138
arbitrary_types_allowed=True,
4239
extra="allow",
43-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
4440
)
45-
4641
access_token: str = Field(alias="accessToken")
4742
token_type: Optional[str] = Field(default=None, alias="tokenType")
4843
scope: Optional[str] = None

src/uipath/models/context_grounding.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from datetime import datetime
21
from typing import Optional
32

43
from pydantic import BaseModel, ConfigDict, Field
@@ -11,7 +10,6 @@ class ContextGroundingMetadata(BaseModel):
1110
use_enum_values=True,
1211
arbitrary_types_allowed=True,
1312
extra="allow",
14-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
1513
)
1614
operation_id: str = Field(alias="operation_id")
1715
strategy: str = Field(alias="strategy")
@@ -24,7 +22,6 @@ class ContextGroundingQueryResponse(BaseModel):
2422
use_enum_values=True,
2523
arbitrary_types_allowed=True,
2624
extra="allow",
27-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
2825
)
2926
source: str = Field(alias="source")
3027
page_number: str = Field(alias="page_number")

src/uipath/models/context_grounding_index.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from datetime import datetime
22
from typing import Any, List, Optional
33

4-
from pydantic import BaseModel, ConfigDict, Field
4+
from pydantic import BaseModel, ConfigDict, Field, field_serializer
55

66

77
class ContextGroundingField(BaseModel):
@@ -21,7 +21,6 @@ class ContextGroundingDataSource(BaseModel):
2121
use_enum_values=True,
2222
arbitrary_types_allowed=True,
2323
extra="allow",
24-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
2524
)
2625
id: Optional[str] = Field(default=None, alias="id")
2726
folder: Optional[str] = Field(default=None, alias="folder")
@@ -35,8 +34,14 @@ class ContextGroundingIndex(BaseModel):
3534
use_enum_values=True,
3635
arbitrary_types_allowed=True,
3736
extra="allow",
38-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
3937
)
38+
39+
@field_serializer("last_ingested", "last_queried", when_used="json")
40+
def serialize_datetime(self, value):
41+
if isinstance(value, datetime):
42+
return value.isoformat() if value else None
43+
return value
44+
4045
id: Optional[str] = Field(default=None, alias="id")
4146
name: Optional[str] = Field(default=None, alias="name")
4247
description: Optional[str] = Field(default=None, alias="description")

src/uipath/models/job.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from datetime import datetime
21
from typing import Any, Dict, Optional
32

43
from pydantic import BaseModel, ConfigDict, Field
@@ -11,9 +10,7 @@ class JobErrorInfo(BaseModel):
1110
use_enum_values=True,
1211
arbitrary_types_allowed=True,
1312
extra="allow",
14-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
1513
)
16-
1714
code: Optional[str] = Field(default=None, alias="Code")
1815
title: Optional[str] = Field(default=None, alias="Title")
1916
detail: Optional[str] = Field(default=None, alias="Detail")
@@ -28,9 +25,7 @@ class Job(BaseModel):
2825
use_enum_values=True,
2926
arbitrary_types_allowed=True,
3027
extra="allow",
31-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
3228
)
33-
3429
key: Optional[str] = Field(default=None, alias="Key")
3530
start_time: Optional[str] = Field(default=None, alias="StartTime")
3631
end_time: Optional[str] = Field(default=None, alias="EndTime")

src/uipath/models/processes.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from datetime import datetime
21
from typing import Any, Dict, List, Optional
32

43
from pydantic import BaseModel, ConfigDict, Field
@@ -11,9 +10,7 @@ class Process(BaseModel):
1110
use_enum_values=True,
1211
arbitrary_types_allowed=True,
1312
extra="allow",
14-
json_encoders={datetime: lambda v: v.isoformat() if v else None},
1513
)
16-
1714
key: str = Field(alias="Key")
1815
process_key: str = Field(alias="ProcessKey")
1916
process_version: str = Field(alias="ProcessVersion")

0 commit comments

Comments
 (0)