@@ -157,48 +157,47 @@ def _alias_dependencies(defn: TypeAliasDef, names: set[str]) -> set[str]:
157157 return dependencies
158158
159159
160- def _order_aliases (defns : tuple [TypeAliasDef , ...]) -> list [TypeAliasDef ]:
161- by_name = {item .name : item for item in defns }
160+ def _type_dependencies (defn : TypeAliasDef | TypedDictDef , names : set [str ]) -> set [str ]:
161+ match defn :
162+ case TypeAliasDef ():
163+ return _alias_dependencies (defn , names )
164+ case TypedDictDef ():
165+ return _typed_dict_dependencies (defn , names )
166+
167+
168+ def _order_type_definitions (
169+ aliases : tuple [TypeAliasDef , ...], typed_dicts : tuple [TypedDictDef , ...]
170+ ) -> list [TypeAliasDef | TypedDictDef ]:
171+ by_name : dict [str , TypeAliasDef | TypedDictDef ] = {
172+ item .name : item for item in (* aliases , * typed_dicts )
173+ }
162174 names = set (by_name )
163- ordered : list [TypeAliasDef ] = []
175+ ordered : list [TypeAliasDef | TypedDictDef ] = []
164176 temporary : set [str ] = set ()
165177 permanent : set [str ] = set ()
166178
167179 def visit (name : str ) -> None :
168180 if name in permanent or name in temporary :
169181 return
170182 temporary .add (name )
171- for dependency in sorted (_alias_dependencies (by_name [name ], names )):
183+ for dependency in sorted (_type_dependencies (by_name [name ], names )):
172184 visit (dependency )
173185 temporary .remove (name )
174186 permanent .add (name )
175187 ordered .append (by_name [name ])
176188
177189 for name in sorted (by_name ):
178190 visit (name )
179- return ordered
180-
181191
182- def _order_typeddicts (defns : tuple [TypedDictDef , ...]) -> list [TypedDictDef ]:
183- by_name = {item .name : item for item in defns }
184- names = set (by_name )
185- ordered : list [TypedDictDef ] = []
186- temporary : set [str ] = set ()
187- permanent : set [str ] = set ()
192+ return ordered
188193
189- def visit (name : str ) -> None :
190- if name in permanent or name in temporary :
191- return
192- temporary .add (name )
193- for dependency in sorted (_typed_dict_dependencies (by_name [name ], names )):
194- visit (dependency )
195- temporary .remove (name )
196- permanent .add (name )
197- ordered .append (by_name [name ])
198194
199- for name in sorted (by_name ):
200- visit (name )
201- return ordered
195+ def _format_type_definition (defn : TypeAliasDef | TypedDictDef ) -> str :
196+ match defn :
197+ case TypeAliasDef ():
198+ return _format_alias (defn )
199+ case TypedDictDef ():
200+ return _format_typeddict (defn )
202201
203202
204203def _call_parameters (op : OperationDef ) -> dict [str , str ]:
@@ -273,12 +272,11 @@ def _fallback_method_block(
273272
274273
275274def _render_types (spec : NormalizedSpec ) -> str :
276- aliases = (* _route_aliases (spec ), * _order_aliases (spec .aliases ))
277- blocks = (
278- [_format_enum (item ) for item in spec .enums ]
279- + [_format_alias (alias ) for alias in aliases ]
280- + [_format_typeddict (item ) for item in _order_typeddicts (spec .typed_dicts )]
281- )
275+ aliases = (* _route_aliases (spec ), * spec .aliases )
276+ type_definitions = _order_type_definitions (aliases , spec .typed_dicts )
277+ blocks = [_format_enum (item ) for item in spec .enums ] + [
278+ _format_type_definition (item ) for item in type_definitions
279+ ]
282280 return _render_template (
283281 "types.py.j2" ,
284282 type_blocks = "\n " .join (blocks ).strip () + "\n " ,
0 commit comments