Skip to content

Commit 39138af

Browse files
Copilotbaywet
andcommitted
refactor: replace if/elif type chains with dispatch dict in get_collection_of_primitive_values
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
1 parent 0d36a64 commit 39138af

2 files changed

Lines changed: 34 additions & 50 deletions

File tree

packages/serialization/form/kiota_serialization_form/form_parse_node.py

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -120,34 +120,22 @@ def get_collection_of_primitive_values(self, primitive_type: type[T]) -> Optiona
120120
if not primitive_type:
121121
raise Exception("Primitive type for deserialization cannot be null")
122122

123-
primitive_types = {bool, str, int, float, UUID, datetime, timedelta, date, time, bytes}
124-
if primitive_type in primitive_types:
125-
items = self._node.split(',')
126-
result: list[T] = []
127-
for item in items:
128-
decoded_item = unquote_plus(item)
129-
if primitive_type == bool:
130-
result.append(self._get_bool_value(decoded_item))
131-
elif primitive_type == str:
132-
result.append(self._get_str_value(decoded_item))
133-
elif primitive_type == int:
134-
result.append(self._get_int_value(decoded_item))
135-
elif primitive_type == float:
136-
result.append(self._get_float_value(decoded_item))
137-
elif primitive_type == UUID:
138-
result.append(self._get_uuid_value(decoded_item))
139-
elif primitive_type == datetime:
140-
result.append(self._get_datetime_value(decoded_item))
141-
elif primitive_type == timedelta:
142-
result.append(self._get_timedelta_value(decoded_item))
143-
elif primitive_type == date:
144-
result.append(self._get_date_value(decoded_item))
145-
elif primitive_type == time:
146-
result.append(self._get_time_value(decoded_item))
147-
elif primitive_type == bytes:
148-
result.append(self._get_bytes_value(decoded_item))
149-
return result
150-
raise Exception(f"Encountered an unknown type during deserialization {primitive_type}")
123+
converters = {
124+
bool: self._get_bool_value,
125+
str: self._get_str_value,
126+
int: self._get_int_value,
127+
float: self._get_float_value,
128+
UUID: self._get_uuid_value,
129+
datetime: self._get_datetime_value,
130+
timedelta: self._get_timedelta_value,
131+
date: self._get_date_value,
132+
time: self._get_time_value,
133+
bytes: self._get_bytes_value,
134+
}
135+
converter = converters.get(primitive_type)
136+
if converter is None:
137+
raise Exception(f"Encountered an unknown type during deserialization {primitive_type}")
138+
return [converter(unquote_plus(item)) for item in self._node.split(',')]
151139

152140
def get_collection_of_object_values(self, factory: ParsableFactory[U]) -> Optional[list[U]]:
153141
raise Exception("Collection of object values is not supported with uri form encoding.")

packages/serialization/json/kiota_serialization_json/json_parse_node.py

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -118,29 +118,25 @@ def get_collection_of_primitive_values(self, primitive_type: type[T]) -> Optiona
118118
list[T]: The collection of primitive values
119119
"""
120120

121+
converters = {
122+
bool: self._get_bool_value,
123+
str: self._get_str_value,
124+
int: self._get_int_value,
125+
float: self._get_float_value,
126+
UUID: self._get_uuid_value,
127+
datetime: self._get_datetime_value,
128+
timedelta: self._get_timedelta_value,
129+
date: self._get_date_value,
130+
time: self._get_time_value,
131+
bytes: self._get_bytes_value,
132+
}
133+
121134
def func(item):
122-
generic_type = primitive_type if primitive_type else type(item)
123-
if generic_type == bool:
124-
return self._get_bool_value(item)
125-
if generic_type == str:
126-
return self._get_str_value(item)
127-
if generic_type == int:
128-
return self._get_int_value(item)
129-
if generic_type == float:
130-
return self._get_float_value(item)
131-
if generic_type == UUID:
132-
return self._get_uuid_value(item)
133-
if generic_type == datetime:
134-
return self._get_datetime_value(item)
135-
if generic_type == timedelta:
136-
return self._get_timedelta_value(item)
137-
if generic_type == date:
138-
return self._get_date_value(item)
139-
if generic_type == time:
140-
return self._get_time_value(item)
141-
if generic_type == bytes:
142-
return self._get_bytes_value(item)
143-
raise Exception(f"Encountered an unknown type during deserialization {generic_type}")
135+
t = primitive_type if primitive_type else type(item)
136+
converter = converters.get(t)
137+
if converter is None:
138+
raise Exception(f"Encountered an unknown type during deserialization {t}")
139+
return converter(item)
144140

145141
if isinstance(self._json_node, str):
146142
return list(map(func, json.loads(self._json_node)))

0 commit comments

Comments
 (0)