def fetch_persistence_class(cls, object_type: CdmObjectType, persistence_type: str) -> 'object': object_name = object_type.name.lower() # CdmObjectType[object_type] if object_name.endswith('def'): object_name = object_name[0:-4] elif object_name.endswith('ref'): object_name += 'erence' persistence_module_name = '{}_persistence'.format(object_name) persistence_class_name = ''.join( [x.title() for x in persistence_module_name.split('_')]) if persistence_class_name == 'ProjectionPersistence': # Projection persistence class is in a nested folder persistence_module = importlib.import_module( 'cdm.persistence.{}.projections.{}'.format( persistence_type.lower(), persistence_module_name)) else: persistence_module = importlib.import_module( 'cdm.persistence.{}.{}'.format(persistence_type.lower(), persistence_module_name)) PersistenceClass = getattr(persistence_module, persistence_class_name, None) if not PersistenceClass: raise CdmError( 'Persistence class for {} is not implemented in type {}.'. format(persistence_class_name, persistence_type)) instance = PersistenceClass() return instance
def _get_persistence_class(object_type: CdmObjectType, persistence_type: str) -> object: # persistence_layer: { [id: string]: IPersistence } = PersistenceTypes[persistence_type] as { [id: string]: IPersistence } # if persistence_layer: object_name = object_type.name.lower() # CdmObjectType[object_type] if object_name.endswith('def'): object_name = object_name[0:-4] elif object_name.endswith('ref'): object_name += 'erence' persistence_module_name = '{}_persistence'.format(object_name) persistence_class_name = ''.join( [x.title() for x in persistence_module_name.split('_')]) TargetClass = getattr( importlib.import_module('cdm.persistence.{}.{}'.format( persistence_type.lower(), persistence_module_name)), persistence_class_name) instance = TargetClass() if not instance: raise CdmError( 'Persistence class {} not implemented for type {}'.format( persistence_class_name, persistence_type)) return instance