Skip to content

Commit 97bffa2

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 462d34f commit 97bffa2

1 file changed

Lines changed: 90 additions & 4 deletions

File tree

genesis_core/elements/dm/models.py

Lines changed: 90 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
from functools import partial
1819
import logging
1920
import enum
@@ -506,7 +507,62 @@ class Requirement(
506507
)
507508

508509

510+
class AbstractResource(metaclass=abc.ABCMeta):
511+
512+
@abc.abstractmethod
513+
def get_uri(self):
514+
raise NotImplementedError("Not implemented")
515+
516+
@abc.abstractmethod
517+
def to_str(self, field: str) -> str:
518+
raise NotImplementedError("Not implemented")
519+
520+
@abc.abstractmethod
521+
def get_parameter_value(self, parameter):
522+
raise NotImplementedError("Not implemented")
523+
524+
@abc.abstractmethod
525+
def get_actual_state_safe(self):
526+
raise NotImplementedError("Not implemented")
527+
528+
@abc.abstractmethod
529+
def render_target_state(self, engine=None):
530+
raise NotImplementedError("Not implemented")
531+
532+
@property
533+
@abc.abstractmethod
534+
def link(self):
535+
raise NotImplementedError("Not implemented")
536+
537+
@abc.abstractmethod
538+
def get_provider_element(self):
539+
raise NotImplementedError("Not implemented")
540+
541+
@property
542+
@abc.abstractmethod
543+
def kind(self):
544+
raise NotImplementedError("Not implemented")
545+
546+
@abc.abstractmethod
547+
def calculate_full_hash(self):
548+
raise NotImplementedError("Not implemented")
549+
550+
@abc.abstractmethod
551+
def actualize(self):
552+
raise NotImplementedError("Not implemented")
553+
554+
@abc.abstractmethod
555+
def delete(self, session=None):
556+
raise NotImplementedError("Not implemented")
557+
558+
@property
559+
@abc.abstractmethod
560+
def original(self):
561+
raise NotImplementedError("Not implemented")
562+
563+
509564
class Resource(
565+
AbstractResource,
510566
models.ModelWithUUID,
511567
models.ModelWithTimestamp,
512568
models.CustomPropertiesMixin,
@@ -891,16 +947,14 @@ def link(self):
891947
return f"{self.element.link}.imports.${self.name}"
892948

893949

894-
class ImportedResource:
950+
class ImportedResource(AbstractResource):
951+
895952
def __init__(self, element, resource, name):
896953
super().__init__()
897954
self._element = element
898955
self._resource = resource
899956
self._name = name
900957

901-
def __getattr__(self, name):
902-
return getattr(self._resource, name)
903-
904958
def get_parameter_value(self, parameter):
905959
return type(self._resource).get_parameter_value(self, parameter)
906960

@@ -916,6 +970,38 @@ def name(self):
916970
def link(self):
917971
return f"{self.element.link}.imports.${self.name}"
918972

973+
def get_uri(self):
974+
return self._resource.get_uri()
975+
976+
def to_str(self, field: str) -> str:
977+
return self._resource.to_str(field)
978+
979+
def get_actual_state_safe(self):
980+
return self._resource.get_actual_state_safe()
981+
982+
def render_target_state(self, engine=None):
983+
return self._resource.render_target_state(engine)
984+
985+
def get_provider_element(self):
986+
return self._resource.get_provider_element()
987+
988+
@property
989+
def kind(self):
990+
return self._resource.kind
991+
992+
def calculate_full_hash(self):
993+
return self._resource.calculate_full_hash()
994+
995+
def actualize(self):
996+
return self._resource.actualize()
997+
998+
def delete(self, session=None):
999+
return self._resource.delete(session)
1000+
1001+
@property
1002+
def original(self):
1003+
return self._resource
1004+
9191005

9201006
class OutdatedResources(models.ModelWithUUID, orm.SQLStorableMixin):
9211007
__tablename__ = "em_outdated_resources_view"

0 commit comments

Comments
 (0)