diff --git a/src/videoag_common/api_object/object_class.py b/src/videoag_common/api_object/object_class.py index 8c66e50ed86756dcd1cec7d0688f31b4264b7ac7..aff041aa09d845341fce0cfefe5743e383317adb 100644 --- a/src/videoag_common/api_object/object_class.py +++ b/src/videoag_common/api_object/object_class.py @@ -140,6 +140,8 @@ class ApiObjectClass: raise Exception(f"Class '{self.orm_class.__name__}' has unknown variant '{base_variant_id}'") def _post_init_variant_fields(self, all_classes: dict[str, "ApiObjectClass"]): + variant_ignore_classes = set(recursive_flat_map_single(lambda c: c.__bases__, self.orm_class)) + for sub_class in self.orm_class.__subclasses__(): if not hasattr(sub_class, "__all_class_api_fields__"): continue @@ -153,13 +155,16 @@ class ApiObjectClass: f"'{self._variant_field.enum_class.__name__}'") # noinspection PyUnresolvedReferences - for sub_field in sub_class.__all_class_api_fields__: - assert isinstance(sub_field, ApiField) - try: - self._add_field(all_classes, sub_field, sub_class, variant_id) - except Exception as e: - raise Exception( - f"While initializing field for member '{sub_field.member_name}' in class '{sub_class.__name__}'") from e + for super_sub_class in set(recursive_flat_map_single(lambda c: c.__bases__, sub_class)) - variant_ignore_classes: + if not hasattr(super_sub_class, "__all_class_api_fields__"): + continue + for sub_field in super_sub_class.__all_class_api_fields__: + assert isinstance(sub_field, ApiField) + try: + self._add_field(all_classes, sub_field, sub_class, variant_id) + except Exception as e: + raise Exception( + f"While initializing field for member '{sub_field.member_name}' in class '{super_sub_class.__name__}'") from e for sub2_class in filter( lambda c: hasattr(c, "__all_class_api_fields__"), diff --git a/src/videoag_common/objects/medium.py b/src/videoag_common/objects/medium.py index e643c1ba8539250820b03ae3005ae86cc9e5566c..dafbd122f2a66073b6ec89785ac8cef48eeba371 100644 --- a/src/videoag_common/objects/medium.py +++ b/src/videoag_common/objects/medium.py @@ -286,7 +286,7 @@ class PlainAudioTargetMedium(TargetMedium, FileMedium, SingleAudioContainingMedi ) -class ThumbnailTargetMedium(FileMedium): +class ThumbnailTargetMedium(TargetMedium, FileMedium): __tablename__ = None # Prevent our own base from adding a table name. This should be a single-table inheritance __mapper_args__ = { "polymorphic_identity": TargetMediumType.THUMBNAIL