Skip to content

Commit 5dc1238

Browse files
committed
refactor: introduce AbstractResource base class for resource interface
- Create AbstractResource class defining common resource interface - Update Resource class to inherit from AbstractResource - Refactor ImportedResource to implement AbstractResource interface - Remove __getattr__ delegation in favor of explicit method implementations - Improve code architecture and type safety for resource management
1 parent 2fc098a commit 5dc1238

1 file changed

Lines changed: 89 additions & 4 deletions

File tree

genesis_core/elements/dm/models.py

Lines changed: 89 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
# License for the specific language governing permissions and limitations
1515
# under the License.
1616

17+
import abc
1718
import re
1819
import logging
1920
import enum
@@ -410,7 +411,62 @@ class Requirement(
410411
)
411412

412413

414+
class AbstractResource(metaclass=abc.ABCMeta):
415+
416+
@abc.abstractmethod
417+
def get_uri(self):
418+
raise NotImplementedError("Not implemented")
419+
420+
@abc.abstractmethod
421+
def to_str(self, field: str) -> str:
422+
raise NotImplementedError("Not implemented")
423+
424+
@abc.abstractmethod
425+
def get_parameter_value(self, parameter):
426+
raise NotImplementedError("Not implemented")
427+
428+
@abc.abstractmethod
429+
def get_actual_state_safe(self):
430+
raise NotImplementedError("Not implemented")
431+
432+
@abc.abstractmethod
433+
def render_target_state(self, engine=None):
434+
raise NotImplementedError("Not implemented")
435+
436+
@property
437+
@abc.abstractmethod
438+
def link(self):
439+
raise NotImplementedError("Not implemented")
440+
441+
@abc.abstractmethod
442+
def get_provider_element(self):
443+
raise NotImplementedError("Not implemented")
444+
445+
@property
446+
@abc.abstractmethod
447+
def kind(self):
448+
raise NotImplementedError("Not implemented")
449+
450+
@abc.abstractmethod
451+
def calculate_full_hash(self):
452+
raise NotImplementedError("Not implemented")
453+
454+
@abc.abstractmethod
455+
def actualize(self):
456+
raise NotImplementedError("Not implemented")
457+
458+
@abc.abstractmethod
459+
def delete(self, session=None):
460+
raise NotImplementedError("Not implemented")
461+
462+
@property
463+
@abc.abstractmethod
464+
def original(self):
465+
raise NotImplementedError("Not implemented")
466+
467+
413468
class Resource(
469+
AbstractResource,
414470
models.ModelWithUUID,
415471
models.ModelWithTimestamp,
416472
models.CustomPropertiesMixin,
@@ -757,17 +813,14 @@ def link(self):
757813
return f"{self.element.link}.imports.${self.name}"
758814

759815

760-
class ImportedResource:
816+
class ImportedResource(AbstractResource):
761817

762818
def __init__(self, element, resource, name):
763819
super().__init__()
764820
self._element = element
765821
self._resource = resource
766822
self._name = name
767823

768-
def __getattr__(self, name):
769-
return getattr(self._resource, name)
770-
771824
def get_parameter_value(self, parameter):
772825
return type(self._resource).get_parameter_value(self, parameter)
773826

@@ -783,6 +836,38 @@ def name(self):
783836
def link(self):
784837
return f"{self.element.link}.imports.${self.name}"
785838

839+
def get_uri(self):
840+
return self._resource.get_uri()
841+
842+
def to_str(self, field: str) -> str:
843+
return self._resource.to_str(field)
844+
845+
def get_actual_state_safe(self):
846+
return self._resource.get_actual_state_safe()
847+
848+
def render_target_state(self, engine=None):
849+
return self._resource.render_target_state(engine)
850+
851+
def get_provider_element(self):
852+
return self._resource.get_provider_element()
853+
854+
@property
855+
def kind(self):
856+
return self._resource.kind
857+
858+
def calculate_full_hash(self):
859+
return self._resource.calculate_full_hash()
860+
861+
def actualize(self):
862+
return self._resource.actualize()
863+
864+
def delete(self, session=None):
865+
return self._resource.delete(session)
866+
867+
@property
868+
def original(self):
869+
return self._resource
870+
786871

787872
class OutdatedResources(models.ModelWithUUID, orm.SQLStorableMixin):
788873

0 commit comments

Comments
 (0)