better check of overriden '__init__' method

This commit is contained in:
Jakub Trllo 2023-09-05 17:33:25 +02:00
parent 176fc9a935
commit e2c3a0f5be

View file

@ -214,7 +214,7 @@ class BaseCreator:
# Backwards compatibility for system settings
self.apply_settings(project_settings, system_settings)
init_overriden = self.__class__.__init__ is not BaseCreator.__init__
init_overriden = self._method_is_overriden("__init__")
if init_overriden or expect_system_settings:
self.log.warning((
"WARNING: Source - Create plugin {}."
@ -225,6 +225,19 @@ class BaseCreator:
" need to keep system settings."
).format(self.__class__.__name__))
def _method_is_overriden(self, method_name):
"""Check if method is overriden on objects class.
Implemented for deprecation warning validation on init.
Returns:
bool: True if method is overriden on objects class.
"""
cls_method = getattr(BaseCreator, method_name)
obj_method = getattr(self.__class__, method_name)
return cls_method is not obj_method
def apply_settings(self, project_settings):
"""Method called on initialization of plugin to apply settings.
@ -578,6 +591,11 @@ class Creator(BaseCreator):
)
super(Creator, self).__init__(*args, **kwargs)
def _method_is_overriden(self, method_name):
cls_method = getattr(Creator, method_name)
obj_method = getattr(self.__class__, method_name)
return cls_method is not obj_method
@property
def show_order(self):
"""Order in which is creator shown in UI.
@ -720,6 +738,11 @@ class HiddenCreator(BaseCreator):
def create(self, instance_data, source_data):
pass
def _method_is_overriden(self, method_name):
cls_method = getattr(HiddenCreator, method_name)
obj_method = getattr(self.__class__, method_name)
return cls_method is not obj_method
class AutoCreator(BaseCreator):
"""Creator which is automatically triggered without user interaction.
@ -731,6 +754,11 @@ class AutoCreator(BaseCreator):
"""Skip removement."""
pass
def _method_is_overriden(self, method_name):
cls_method = getattr(AutoCreator, method_name)
obj_method = getattr(self.__class__, method_name)
return cls_method is not obj_method
def discover_creator_plugins(*args, **kwargs):
return discover(BaseCreator, *args, **kwargs)