Skip to content

Commit f58956a

Browse files
Revert manual api client changes and moved it to adapter
1 parent a210d3b commit f58956a

2 files changed

Lines changed: 52 additions & 3 deletions

File tree

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
1+
import datetime
2+
import decimal
3+
import re
4+
from enum import Enum
5+
16
from conductor.asyncio_client.http.api_client import ApiClient
27

3-
class ApiClientAdapter(ApiClient): ...
8+
9+
class ApiClientAdapter(ApiClient):
10+
def __deserialize(self, data, klass):
11+
"""Deserializes dict, list, str into an object.
12+
13+
:param data: dict, list or str.
14+
:param klass: class literal, or string of class name.
15+
16+
:return: object.
17+
"""
18+
if data is None:
19+
return None
20+
21+
if isinstance(klass, str):
22+
if klass.startswith("List["):
23+
m = re.match(r"List\[(.*)]", klass)
24+
assert m is not None, "Malformed List type definition"
25+
sub_kls = m.group(1)
26+
return [self.__deserialize(sub_data, sub_kls) for sub_data in data]
27+
28+
if klass.startswith("Dict["):
29+
m = re.match(r"Dict\[([^,]*), (.*)]", klass)
30+
assert m is not None, "Malformed Dict type definition"
31+
sub_kls = m.group(2)
32+
return {k: self.__deserialize(v, sub_kls) for k, v in data.items()}
33+
34+
# convert str to class
35+
if klass in self.NATIVE_TYPES_MAPPING:
36+
klass = self.NATIVE_TYPES_MAPPING[klass]
37+
else:
38+
klass = getattr(conductor.asyncio_client.adapters.models, klass)
39+
40+
if klass in self.PRIMITIVE_TYPES:
41+
return self.__deserialize_primitive(data, klass)
42+
elif klass == object:
43+
return self.__deserialize_object(data)
44+
elif klass == datetime.date:
45+
return self.__deserialize_date(data)
46+
elif klass == datetime.datetime:
47+
return self.__deserialize_datetime(data)
48+
elif klass == decimal.Decimal:
49+
return decimal.Decimal(data)
50+
elif issubclass(klass, Enum):
51+
return self.__deserialize_enum(data, klass)
52+
else:
53+
return self.__deserialize_model(data, klass)

src/conductor/asyncio_client/http/api_client.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,8 +456,7 @@ def __deserialize(self, data, klass):
456456
if klass in self.NATIVE_TYPES_MAPPING:
457457
klass = self.NATIVE_TYPES_MAPPING[klass]
458458
else:
459-
# Looking for our adapters instead of autogenerated models
460-
klass = getattr(conductor.asyncio_client.adapters.models, klass)
459+
klass = getattr(conductor.asyncio_client.http.models, klass)
461460

462461
if klass in self.PRIMITIVE_TYPES:
463462
return self.__deserialize_primitive(data, klass)

0 commit comments

Comments
 (0)