@@ -362,6 +362,29 @@ def iter_models_field_data_types(
362362 yield model , field , data_type
363363
364364
365+ def _alias_base_class_imports (
366+ model : DataModel ,
367+ aliased_imports : dict [tuple [str | None , str ], Import ],
368+ ) -> None :
369+ """Apply aliased imports to a model's base classes and their _additional_imports."""
370+ for base_class in model .base_classes :
371+ if not base_class .import_ :
372+ continue
373+ key = (base_class .import_ .from_ , base_class .import_ .import_ )
374+ if key not in aliased_imports :
375+ continue
376+ old_import = base_class .import_
377+ aliased_import = aliased_imports [key ]
378+ base_class .type = aliased_import .alias # type: ignore[assignment]
379+ base_class .import_ = aliased_import
380+ for i , additional_import in enumerate (model ._additional_imports ): # pragma: no branch # noqa: SLF001
381+ if (
382+ additional_import .from_ == old_import .from_ and additional_import .import_ == old_import .import_
383+ ): # pragma: no branch
384+ model ._additional_imports [i ] = aliased_import # noqa: SLF001
385+ break
386+
387+
365388ReferenceMapSet = dict [str , set [str ]]
366389SortedDataModels = dict [str , DataModel ]
367390
@@ -2388,21 +2411,31 @@ def __alias_shadowed_imports( # noqa: PLR6301
23882411 models : list [DataModel ],
23892412 all_model_field_names : set [str ],
23902413 ) -> None :
2391- for _ , model_field , data_type in iter_models_field_data_types (models ):
2392- if (
2393- data_type
2394- and data_type .import_
2395- and data_type .type in all_model_field_names
2396- and data_type .type == model_field .name
2397- ):
2398- alias = data_type .type + "_aliased"
2399- data_type .type = alias
2400- data_type .import_ = Import (
2401- from_ = data_type .import_ .from_ ,
2402- import_ = data_type .import_ .import_ ,
2403- alias = alias ,
2404- reference_path = data_type .import_ .reference_path ,
2405- )
2414+ aliased_imports : dict [tuple [str | None , str ], Import ] = {}
2415+ for _ , _model_field , data_type in iter_models_field_data_types (models ):
2416+ if data_type and data_type .import_ and data_type .type in all_model_field_names :
2417+ key = (data_type .import_ .from_ , data_type .import_ .import_ )
2418+ if key not in aliased_imports :
2419+ aliased_imports [key ] = Import (
2420+ from_ = data_type .import_ .from_ ,
2421+ import_ = data_type .import_ .import_ ,
2422+ alias = data_type .type + "_aliased" ,
2423+ reference_path = data_type .import_ .reference_path ,
2424+ )
2425+
2426+ if not aliased_imports :
2427+ return
2428+
2429+ for _ , _model_field , data_type in iter_models_field_data_types (models ):
2430+ if data_type and data_type .import_ :
2431+ key = (data_type .import_ .from_ , data_type .import_ .import_ )
2432+ if key in aliased_imports :
2433+ aliased_import = aliased_imports [key ]
2434+ data_type .type = aliased_import .alias # type: ignore[assignment]
2435+ data_type .import_ = aliased_import
2436+
2437+ for model in models :
2438+ _alias_base_class_imports (model , aliased_imports )
24062439
24072440 def __apply_generic_base_class ( # noqa: PLR0912, PLR0914, PLR0915
24082441 self ,
0 commit comments