@@ -43,59 +43,47 @@ def __init__(self, client) -> None:
43
43
relationships : list [tuple ]
44
44
filters : list [tuple ]
45
45
46
- def _deserialize (self , item , included ): # noqa: C901
46
+ def _get_included_item (self , item_type : str , item_id , included : dict ):
47
+ included_item = next (
48
+ (
49
+ included_item
50
+ for included_item in included
51
+ if included_item .get ("type" ) == item_type and included_item .get ("id" ) == item_id
52
+ ),
53
+ None ,
54
+ )
55
+ if not included_item :
56
+ return None
57
+ included_model = self .client ._type_map [item_type ](self .client )
58
+ return included_model ._deserialize (included_item , included )
59
+
60
+ def _deserialize (self , item , included ):
47
61
for key , value in item ["attributes" ].items ():
48
62
transform = next (
49
63
(transform for name , _ , transform in self .__class__ .attributes if name == key ),
50
64
None ,
51
65
)
52
66
item ["attributes" ][key ] = (transform ).deserialize (value ) if transform else value
53
- relationships = item . get ( "relationships" )
54
- if not relationships :
67
+
68
+ if not ( relationships := item . get ( "relationships" )) :
55
69
return item
56
70
for key , value in relationships .items ():
57
- if not value :
71
+ if not value or not ( data := value . get ( "data" )) :
58
72
continue
59
- if value .get ("data" ):
60
- data = value ["data" ]
61
- if isinstance (data , list ):
62
- included_items = []
63
- for rel_data in data :
64
- item_type = rel_data ["type" ]
65
- item_id = rel_data ["id" ]
66
- included_item = next (
67
- (
68
- included_item
69
- for included_item in included
70
- if included_item .get ("type" ) == item_type
71
- and included_item .get ("id" ) == item_id
72
- ),
73
- None ,
73
+ if isinstance (data , list ):
74
+ if included_items := [
75
+ included_item
76
+ for relationship_data in data
77
+ if (
78
+ included_item := self ._get_included_item (
79
+ relationship_data ["type" ], relationship_data ["id" ], included
74
80
)
75
- if included_item :
76
- included_model = self .client ._type_map [item_type ](self .client )
77
- included_items .append (
78
- included_model ._deserialize (included_item , included )
79
- )
80
- item ["relationships" ][key ] = included_items
81
- else :
82
- item_type = data ["type" ]
83
- item_id = data ["id" ]
84
- included_item = next (
85
- (
86
- included_item
87
- for included_item in included
88
- if included_item .get ("type" ) == item_type
89
- and included_item .get ("id" ) == item_id
90
- ),
91
- None ,
92
81
)
93
- if included_item :
94
- included_model = self .client ._type_map [item_type ](self .client )
95
- item ["relationships" ][key ] = included_model ._deserialize (
96
- included_item , included
97
- )
98
-
82
+ ]:
83
+ item ["relationships" ][key ] = included_items
84
+ continue
85
+ if included_item := self ._get_included_item (data ["type" ], data ["id" ], included ):
86
+ item ["relationships" ][key ] = included_item
99
87
return item
100
88
101
89
def get (
0 commit comments