Ejemplo n.º 1
0
    async def to_data(instance: 'CdmReferencedEntityDeclarationDefinition',
                      res_opt: 'ResolveOptions',
                      options: 'CopyOptions') -> Optional['ReferenceEntity']:
        source_index = instance.entity_path.rfind('/')

        if source_index == -1:
            instance.ctx.logger.error(
                'Source name is not present in entityDeclaration path. | %s',
                instance.at_corpus_path)
            return

        reference_entity = ReferenceEntity()

        t2pm = TraitToPropertyMap(instance)

        reference_entity.type = 'ReferenceEntity'
        reference_entity.name = instance.entity_name
        reference_entity.source = instance.entity_path[source_index + 1:]
        reference_entity.description = instance.explanation
        reference_entity.lastFileStatusCheckTime = utils.get_formatted_date_string(
            instance.last_file_status_check_time)
        reference_entity.lastFileModifiedTime = utils.get_formatted_date_string(
            instance.last_file_modified_time)
        reference_entity.isHidden = bool(
            t2pm.fetch_trait_reference('is.hidden')) or None

        properties_trait = t2pm.fetch_trait_reference(
            'is.propertyContent.multiTrait')
        if properties_trait:
            reference_entity.modelId = properties_trait.arguments[0].value

        await utils.process_annotations_to_data(instance.ctx, reference_entity,
                                                instance.exhibits_traits)

        return reference_entity
Ejemplo n.º 2
0
    async def to_data(instance: 'CdmDataPartitionDefinition', res_opt: 'ResolveOptions', options: 'CopyOptions') -> Optional['Partition']:
        result = Partition()
        result.name = instance.name
        result.description = instance.description
        result.location = instance.ctx.corpus.storage.corpus_path_to_adapter_path(
            instance.ctx.corpus.storage.create_absolute_corpus_path(instance.location, instance.in_document))
        result.refreshTime = instance.refresh_time
        result.lastFileModifiedTime = utils.get_formatted_date_string(instance.last_file_modified_time)
        result.lastFileStatusCheckTime = utils.get_formatted_date_string(instance.last_file_status_check_time)

        if not result.location:
            logger.warning(DataPartitionPersistence.__name__, instance.ctx,
                           'Couldn\'t find data partition\'s location for partition {}.'.format(result.name), DataPartitionPersistence.to_data.__name__)

        # filter description since it is mapped to a property
        exhibits_traits = filter(lambda t: t.named_reference != 'is.localized.describedAs', instance.exhibits_traits)
        await utils.process_annotations_to_data(instance.ctx, result, exhibits_traits)

        t2pm = TraitToPropertyMap(instance)

        is_hidden_trait = t2pm.fetch_trait_reference('is.hidden')
        result.isHidden = bool(is_hidden_trait) or None

        csv_trait = t2pm.fetch_trait_reference('is.partition.format.CSV')
        if csv_trait:
            csv_format_settings = utils.create_csv_format_settings(csv_trait)

            if csv_format_settings:
                result.fileFormatSettings = csv_format_settings
                result.fileFormatSettings.type = 'CsvFormatSettings'
            else:
                logger.error(DataPartitionPersistence.__name__, instance.ctx, 'There was a problem while processing csv format trait inside data partition.')
                return

        return result
    async def to_data(instance: 'CdmLocalEntityDeclarationDefinition', res_opt: 'ResolveOptions', options: 'CopyOptions',
                      ctx: 'CdmCorpusContext') -> 'LocalEntity':
        # Fetch the document from entity schema.
        entity = await DocumentPersistence.to_data(instance.entity_path, res_opt, options, ctx)

        if not entity:
            return None

        entity.description = instance.explanation
        entity.lastFileStatusCheckTime = utils.get_formatted_date_string(instance.last_file_status_check_time)
        entity.lastFileModifiedTime = utils.get_formatted_date_string(instance.last_file_modified_time)
        entity.lastChildFileModifiedTime = utils.get_formatted_date_string(instance.last_child_file_modified_time)

        t2pm = TraitToPropertyMap(instance)

        # Find the trait containing the schema info.
        schemas = t2pm.fetch_property_value('cdmSchemas')
        if schemas:
            entity.schemas = schemas

        entity.isHidden = bool(t2pm.fetch_trait_reference('is.hidden')) or None

        if instance.data_partitions:
            entity.partitions = []
            for partition in instance.data_partitions:
                partiton = await DataPartitionPersistence.to_data(partition, res_opt, options, ctx)
                if partition:
                    entity.partitions.append(partiton)
                else:
                    ctx.logger.error('There was an error while trying to convert cdm data partition to model.json partition.')
                    return None

        return entity
Ejemplo n.º 4
0
    async def to_data(instance: 'CdmTypeAttributeDefinition',
                      res_opt: 'ResolveOptions',
                      options: 'CopyOptions') -> 'Attribute':
        result = Attribute()

        result.name = instance.name
        result.description = instance.description
        result.dataType = TypeAttributePersistence.data_type_to_data[
            instance.data_format]

        await utils.process_annotations_to_data(instance.ctx, result,
                                                instance.applied_traits)

        t2pm = TraitToPropertyMap(instance)

        result.isHidden = bool(t2pm.fetch_trait_reference('is.hidden')) or None

        return result
Ejemplo n.º 5
0
    async def to_data(instance: 'CdmManifestDefinition',
                      res_opt: 'ResolveOptions',
                      options: 'CopyOptions') -> Optional['Model']:
        result = Model()

        # process_annotations_to_data also processes extensions.
        await utils.process_annotations_to_data(instance.ctx, result,
                                                instance.exhibits_traits)

        result.name = instance.manifest_name
        result.description = instance.explanation
        result.modifiedTime = utils.get_formatted_date_string(
            instance.last_file_modified_time)
        result.lastChildFileModifiedTime = utils.get_formatted_date_string(
            instance.last_child_file_modified_time)
        result.lastFileStatusCheckTime = utils.get_formatted_date_string(
            instance.last_file_status_check_time)

        t2pm = TraitToPropertyMap(instance)

        result.isHidden = bool(t2pm.fetch_trait_reference('is.hidden')) or None

        application_trait = t2pm.fetch_trait_reference('is.managedBy')
        if application_trait:
            result.application = application_trait.arguments[0].value

        version_trait = t2pm.fetch_trait_reference('means.measurement.version')
        if version_trait:
            result.version = version_trait.arguments[0].value
        else:
            result.version = '1.0'

        culture_trait = t2pm.fetch_trait_reference('is.partition.culture')
        if culture_trait:
            result.culture = culture_trait.arguments[0].value

        reference_entity_locations = {}
        reference_models = {}

        reference_models_trait = t2pm.fetch_trait_reference(
            'is.modelConversion.referenceModelMap')

        if reference_models_trait:
            ref_models = reference_models_trait.arguments[0].value

            for element in ref_models:
                reference_models[element.id] = element.location
                reference_entity_locations[element.location] = element.id

        if instance.entities:
            result.entities = []
            # Schedule processing of each entity to be added to the manifest
            for entity in instance.entities:
                element = None
                if entity.object_type == CdmObjectType.LOCAL_ENTITY_DECLARATION_DEF:
                    element = await LocalEntityDeclarationPersistence.to_data(
                        entity, res_opt, options, instance.ctx)
                elif entity.object_type == CdmObjectType.REFERENCED_ENTITY_DECLARATION_DEF:
                    element = await ReferencedEntityDeclarationPersistence.to_data(
                        entity, res_opt, options)

                    reference_entity = element
                    location = instance.ctx.corpus.storage.corpus_path_to_adapter_path(
                        entity.entity_path)
                    entity_index = location.rfind('/')
                    location = location[:entity_index]

                    if reference_entity.modelId:
                        if reference_entity.modelId not in reference_models:
                            reference_models[
                                reference_entity.modelId] = location
                            reference_entity_locations[
                                location] = reference_entity.modelId
                    elif location in reference_entity_locations:
                        reference_entity.modelId = reference_entity_locations[
                            location]
                    else:
                        reference_entity.modelId = str(uuid.uuid4())
                        reference_models[reference_entity.modelId] = location
                        reference_entity_locations[
                            location] = reference_entity.modelId

                if element:
                    result.entities.append(element)
                else:
                    instance.ctx.logger.error(
                        'There was an error while trying to convert entity declaration to model json format.'
                    )

        if reference_models:
            for value, key in reference_models.items():
                model = ReferenceModel()
                model.id = value
                model.location = key
                result.referenceModels.append(model)

        for cdm_relationship in instance.relationships:
            relationship = await RelationshipPersistence.to_data(
                cdm_relationship, res_opt, options, instance.ctx)

            if relationship:
                result.relationships.append(relationship)
            else:
                instance.ctx.logger.error(
                    'There was an error while trying to convert cdm relationship to model.json relationship.'
                )
                return None

        if instance.imports:
            result.imports = []
            for element in instance.imports:
                import_obj = ImportPersistence.to_data(element, res_opt,
                                                       options)
                if import_obj:
                    result.imports.append(import_obj)

        return result