Skip to content

Commit 27e40d9

Browse files
committed
simplify loops with comprehension
1 parent c8edadc commit 27e40d9

File tree

4 files changed

+27
-46
lines changed

4 files changed

+27
-46
lines changed

python/rpdk/python/resolver.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,4 @@ def translate_type(resolved_type):
3838
def contains_model(resolved_type):
3939
if resolved_type.container in [ContainerType.LIST, ContainerType.SET]:
4040
return contains_model(resolved_type.type)
41-
if resolved_type.container == ContainerType.MODEL:
42-
return True
43-
return False
41+
return resolved_type.container == ContainerType.MODEL

src/cloudformation_cli_python_lib/interface.py

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -59,31 +59,21 @@ class HandlerErrorCode(str, _AutoName):
5959

6060
class BaseResourceModel:
6161
def _serialize(self) -> Mapping[str, Any]:
62-
ser = self.__dict__
63-
del_keys = []
64-
for k, v in ser.items():
65-
if isinstance(v, list):
66-
ser[k] = self._serialize_list(v)
67-
elif isinstance(v, BaseResourceModel):
68-
ser[k] = v._serialize() # pylint: disable=protected-access
69-
elif v is None:
70-
del_keys.append(k)
71-
else:
72-
ser[k] = v
73-
for k in del_keys:
74-
del ser[k]
75-
return ser
76-
77-
def _serialize_list(self, v: List[Any]) -> List[Any]:
78-
ser: List[Any] = []
79-
for i in v:
80-
if isinstance(i, list):
81-
ser.append(self._serialize_list(i))
82-
elif isinstance(i, BaseResourceModel):
83-
ser.append(i._serialize()) # pylint: disable=protected-access
84-
else:
85-
ser.append(i)
86-
return ser
62+
return {
63+
k: self._serialize_item(v)
64+
for k, v in self.__dict__.items()
65+
if v is not None
66+
}
67+
68+
def _serialize_item(self, v: Any) -> Any:
69+
if isinstance(v, list):
70+
return self._serialize_list(v)
71+
if isinstance(v, BaseResourceModel):
72+
return v._serialize() # pylint: disable=protected-access
73+
return v
74+
75+
def _serialize_list(self, src_list: List[Any]) -> List[Any]:
76+
return [self._serialize_item(i) for i in src_list]
8777

8878
@classmethod
8979
def _deserialize(

src/cloudformation_cli_python_lib/recast.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,17 @@ def _recast_lists(cls: Any, k: str, v: List[Any], classes: Dict[str, Any]) -> Li
3333
# Leave as is if type is Any
3434
if cls == typing.Any:
3535
return v
36-
casted_list: List[Any] = []
3736
if "__dataclass_fields__" not in dir(cls):
3837
pass
3938
elif k in cls.__dataclass_fields__:
4039
cls = _field_to_type(cls.__dataclass_fields__[k].type, k, classes)
41-
for item in v:
42-
casted_list.append(cast_sequence_item(cls, k, item, classes))
43-
return casted_list
40+
return [cast_sequence_item(cls, k, item, classes) for item in v]
4441

4542

4643
def _recast_sets(cls: Any, k: str, v: Set[Any], classes: Dict[str, Any]) -> Set[Any]:
47-
casted_set: Set[Any] = set()
4844
if "__dataclass_fields__" in dir(cls):
4945
cls = _field_to_type(cls.__dataclass_fields__[k].type, k, classes)
50-
for item in v:
51-
casted_set.add(cast_sequence_item(cls, k, item, classes))
52-
return casted_set
46+
return {cast_sequence_item(cls, k, item, classes) for item in v}
5347

5448

5549
def cast_sequence_item(cls: Any, k: str, item: Any, classes: Dict[str, Any]) -> Any:

src/cloudformation_cli_python_lib/utils.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,12 @@ def deserialize_list(
139139
) -> Optional[List[Any]]:
140140
if not json_data:
141141
return None
142-
output = []
143-
for item in json_data:
144-
if isinstance(item, list):
145-
output.append(deserialize_list(item, inner_dataclass))
146-
elif isinstance(item, dict):
147-
# pylint: disable=protected-access
148-
output.append(inner_dataclass._deserialize(item))
149-
else:
150-
raise InvalidRequest(f"cannot deserialize lists of {type(item)}")
151-
return output
142+
return [_deser_item(item, inner_dataclass) for item in json_data]
143+
144+
145+
def _deser_item(item: Any, inner_dataclass: Any) -> Any:
146+
if isinstance(item, list):
147+
return deserialize_list(item, inner_dataclass)
148+
if isinstance(item, dict):
149+
return inner_dataclass._deserialize(item) # pylint: disable=protected-access
150+
raise InvalidRequest(f"cannot deserialize lists of {type(item)}")

0 commit comments

Comments
 (0)