Exemplo n.º 1
0
    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
Exemplo n.º 2
0
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