in mephisto/abstractions/blueprint.py [0:0]
def extract_unique_mixins(blueprint_class: Type["Blueprint"]):
"""Return the unique mixin classes that are used in the given blueprint class"""
mixin_subclasses = [
clazz
for clazz in blueprint_class.mro()
if issubclass(clazz, BlueprintMixin)
]
target_class: Union[Type["Blueprint"], Type["BlueprintMixin"]] = blueprint_class
# Remove magic created with `mixin_args_and_state`
while target_class.__name__ == "MixedInBlueprint":
target_class = mixin_subclasses.pop(0)
removed_locals = [
clazz
for clazz in mixin_subclasses
if "MixedInBlueprint" not in clazz.__name__
]
filtered_subclasses = set(
clazz
for clazz in removed_locals
if clazz != BlueprintMixin and clazz != target_class
)
# we also want to make sure that we don't double-count extensions of mixins, so remove classes that other classes are subclasses of
def is_subclassed(clazz):
return True in [
issubclass(x, clazz) and x != clazz for x in filtered_subclasses
]
unique_subclasses = [
clazz for clazz in filtered_subclasses if not is_subclassed(clazz)
]
return unique_subclasses