1414# License for the specific language governing permissions and limitations
1515# under the License.
1616
17+ import abc
1718import re
1819import logging
1920import 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+
413468class 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
787872class OutdatedResources (models .ModelWithUUID , orm .SQLStorableMixin ):
788873
0 commit comments