def from_data( ctx: 'CdmCorpusContext', data: Union[str, 'EntityReference', 'Projection']) -> 'CdmProjection': from cdm.persistence.cdmfolder.entity_reference_persistence import EntityReferencePersistence if not data: return None projection = ctx.corpus.make_object(CdmObjectType.PROJECTION_DEF) source = EntityReferencePersistence.from_data(ctx, data.get('source')) if data.explanation: projection.explanation = data.explanation if data.condition: projection.condition = data.condition projection.run_sequentially = data.runSequentially if data.operations is not None: operation_jsons = data.operations for operation_json in operation_jsons: type = operation_json.get('$type') if type == 'addCountAttribute': add_count_attribute_op = OperationAddCountAttributePersistence.from_data( ctx, operation_json) projection.operations.append(add_count_attribute_op) elif type == 'addSupportingAttribute': add_supporting_attribute_op = OperationAddSupportingAttributePersistence.from_data( ctx, operation_json) projection.operations.append(add_supporting_attribute_op) elif type == 'addTypeAttribute': add_type_attribute_op = OperationAddTypeAttributePersistence.from_data( ctx, operation_json) projection.operations.append(add_type_attribute_op) elif type == 'excludeAttributes': exclude_attributes_op = OperationExcludeAttributesPersistence.from_data( ctx, operation_json) projection.operations.append(exclude_attributes_op) elif type == 'arrayExpansion': array_expansion_op = OperationArrayExpansionPersistence.from_data( ctx, operation_json) projection.operations.append(array_expansion_op) elif type == 'combineAttributes': combine_attributes_op = OperationCombineAttributesPersistence.from_data( ctx, operation_json) projection.operations.append(combine_attributes_op) elif type == 'renameAttributes': rename_attributes_op = OperationRenameAttributesPersistence.from_data( ctx, operation_json) projection.operations.append(rename_attributes_op) elif type == 'replaceAsForeignKey': replace_as_foreign_key_op = OperationReplaceAsForeignKeyPersistence.from_data( ctx, operation_json) projection.operations.append(replace_as_foreign_key_op) elif type == 'includeAttributes': include_attributes_op = OperationIncludeAttributesPersistence.from_data( ctx, operation_json) projection.operations.append(include_attributes_op) elif type == 'addAttributeGroup': add_attribute_group_op = OperationAddAttributeGroupPersistence.from_data( ctx, operation_json) projection.operations.append(add_attribute_group_op) else: logger.error(_TAG, ctx, 'Invalid operation type \'{}\'.'.format(type), ProjectionPersistence.from_data.__name__) projection.source = source return projection
def to_data(instance: 'CdmProjection', res_opt: 'ResolveOptions', options: 'CopyOptions') -> 'Projection': from cdm.persistence.cdmfolder.entity_reference_persistence import EntityReferencePersistence if not instance: return None if instance.source and isinstance(instance.source, str): source = instance.source elif instance.source and instance.source.named_reference and instance.source.explicit_reference == None: source = instance.source.named_reference elif instance.source and isinstance(instance.source, CdmEntityReference): source = EntityReferencePersistence.to_data( instance.source, res_opt, options) operations = None if instance.operations and len(instance.operations) > 0: operations = [] for operation in instance.operations: if operation.object_type == CdmObjectType.OPERATION_ADD_COUNT_ATTRIBUTE_DEF: add_count_attribute_op = OperationAddCountAttributePersistence.to_data( operation, res_opt, options) operations.append(add_count_attribute_op) elif operation.object_type == CdmObjectType.OPERATION_ADD_SUPPORTING_ATTRIBUTE_DEF: add_supporting_attribute_op = OperationAddSupportingAttributePersistence.to_data( operation, res_opt, options) operations.append(add_supporting_attribute_op) elif operation.object_type == CdmObjectType.OPERATION_ADD_TYPE_ATTRIBUTE_DEF: add_type_attribute_op = OperationAddTypeAttributePersistence.to_data( operation, res_opt, options) operations.append(add_type_attribute_op) elif operation.object_type == CdmObjectType.OPERATION_EXCLUDE_ATTRIBUTES_DEF: exclude_attributes_op = OperationExcludeAttributesPersistence.to_data( operation, res_opt, options) operations.append(exclude_attributes_op) elif operation.object_type == CdmObjectType.OPERATION_ARRAY_EXPANSION_DEF: array_expansion_op = OperationArrayExpansionPersistence.to_data( operation, res_opt, options) operations.append(array_expansion_op) elif operation.object_type == CdmObjectType.OPERATION_COMBINE_ATTRIBUTES_DEF: combine_attributes_op = OperationCombineAttributesPersistence.to_data( operation, res_opt, options) operations.append(combine_attributes_op) elif operation.object_type == CdmObjectType.OPERATION_RENAME_ATTRIBUTES_DEF: rename_attributes_op = OperationRenameAttributesPersistence.to_data( operation, res_opt, options) operations.append(rename_attributes_op) elif operation.object_type == CdmObjectType.OPERATION_REPLACE_AS_FOREIGN_KEY_DEF: replace_as_foreign_key_op = OperationReplaceAsForeignKeyPersistence.to_data( operation, res_opt, options) operations.append(replace_as_foreign_key_op) elif operation.object_type == CdmObjectType.OPERATION_INCLUDE_ATTRIBUTES_DEF: include_attributes_op = OperationIncludeAttributesPersistence.to_data( operation, res_opt, options) operations.append(include_attributes_op) elif operation.object_type == CdmObjectType.OPERATION_ADD_ATTRIBUTE_GROUP_DEF: add_attribute_group_op = OperationAddAttributeGroupPersistence.to_data( operation, res_opt, options) operations.append(add_attribute_group_op) else: base_op = OperationBase() base_op.type = OperationTypeConvertor._operation_type_to_string( CdmOperationType.ERROR) operations.append(base_op) obj = Projection() obj.explanation = instance.explanation obj.source = source obj.operations = operations obj.condition = instance.condition obj.runSequentially = instance.run_sequentially return obj