1414# License for the specific language governing permissions and limitations
1515# under the License.
1616
17+ import abc
1718from functools import partial
1819import logging
1920import 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+
509564class 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
9201006class OutdatedResources (models .ModelWithUUID , orm .SQLStorableMixin ):
9211007 __tablename__ = "em_outdated_resources_view"
0 commit comments