|
47 | 47 | DataModelFieldBase, |
48 | 48 | ) |
49 | 49 | from datamodel_code_generator.model.enum import Enum, Member |
| 50 | +from datamodel_code_generator.model.type_alias import TypeAliasBase |
50 | 51 | from datamodel_code_generator.parser import DefaultPutDict, LiteralType |
51 | 52 | from datamodel_code_generator.reference import ModelResolver, Reference |
52 | 53 | from datamodel_code_generator.types import DataType, DataTypeManager, StrictTypes |
@@ -1174,22 +1175,28 @@ def __sort_models( |
1174 | 1175 | models.sort(key=lambda x: x.class_name) |
1175 | 1176 |
|
1176 | 1177 | imported = {i for v in imports.values() for i in v} |
1177 | | - model_class_name_baseclasses: dict[DataModel, tuple[str, set[str]]] = {} |
| 1178 | + model_class_name_refs: dict[DataModel, tuple[str, set[str]]] = {} |
1178 | 1179 | for model in models: |
1179 | 1180 | class_name = model.class_name |
1180 | | - model_class_name_baseclasses[model] = ( |
1181 | | - class_name, |
1182 | | - {b.type_hint for b in model.base_classes if b.reference} - {class_name}, |
1183 | | - ) |
| 1181 | + base_class_refs = {b.type_hint for b in model.base_classes if b.reference} |
| 1182 | + if base_class_refs: |
| 1183 | + refs = base_class_refs - {class_name} |
| 1184 | + elif isinstance(model, TypeAliasBase): |
| 1185 | + refs = { |
| 1186 | + t.reference.short_name for f in model.fields for t in f.data_type.all_data_types if t.reference |
| 1187 | + } - {class_name} |
| 1188 | + else: |
| 1189 | + refs = set() |
| 1190 | + model_class_name_refs[model] = (class_name, refs) |
1184 | 1191 |
|
1185 | 1192 | changed: bool = True |
1186 | 1193 | while changed: |
1187 | 1194 | changed = False |
1188 | 1195 | resolved = imported.copy() |
1189 | 1196 | for i in range(len(models) - 1): |
1190 | 1197 | model = models[i] |
1191 | | - class_name, baseclasses = model_class_name_baseclasses[model] |
1192 | | - if not baseclasses - resolved: |
| 1198 | + class_name, refs = model_class_name_refs[model] |
| 1199 | + if not refs - resolved: |
1193 | 1200 | resolved.add(class_name) |
1194 | 1201 | continue |
1195 | 1202 | models[i], models[i + 1] = models[i + 1], model |
|
0 commit comments