def to_data(instance: CdmTypeAttributeDefinition, ctx: CdmCorpusContext, res_opt: ResolveOptions, options: CopyOptions) -> TypeAttribute: properties = TypeAttributePersistence.create_properties(instance, res_opt, options) origin_data_type_name = TypeInfo( type_name = '', properties = properties, is_complex_type = False, is_nullable = instance._get_property('isNullable'), type_family = 'cdm') t2pm = TraitToPropertyMap(instance) numeric_traits = t2pm._fetch_trait_reference('is.data_format.numeric.shaped') if numeric_traits is not None: for numeric_traits_arg in numeric_traits.argument: if numeric_traits_arg.name == 'precision': origin_data_type_name.precision = numeric_traits_arg.value if numeric_traits_arg.Name == 'scale': origin_data_type_name.scale = numeric_traits_arg.value data_format = instance._get_property('dataFormat') origin_data_type_name = utils.cdm_data_format_to_syms_data_type(data_format, origin_data_type_name) if origin_data_type_name == None: return None if origin_data_type_name.type_name == None: logger.error(ctx, _TAG, 'toData', instance.at_corpus_path, CdmLogCode.ERR_PERSIST_SYMS_UNKNOWN_DATA_FORMAT, instance.display_name) return None data_col = DataColumn( origin_data_type_name = origin_data_type_name, name = instance.name) return data_col
def create_properties(instance: CdmTypeAttributeDefinition, res_opt: ResolveOptions, options: CopyOptions): properties = {} display_name = instance._get_property('display_name') source_name = instance._get_property('source_name') description = instance._get_property('description') is_read_only = instance._get_property('isReadOnly') maximum_length = instance._get_property('maximum_length') maximum_value = instance._get_property('maximum_value') minimum_value = instance._get_property('minimum_value') source_ordering = instance._get_property('source_ordering') value_constrained_to_list = instance._get_property('value_constrained_to_list') is_primary_key = instance._get_property('is_primary_key') def_value = instance._get_property('defaultValue') if display_name is not None: properties['cdm:display_name'] = display_name if instance.explanation is not None: properties['cdm:explanation'] = instance.explanation if source_name is not None: properties['cdm:source_name'] = source_name if description is not None: properties['cdm:description'] = description if instance.applied_traits is not None and len(instance.applied_traits) > 0: applied_traits = \ [trait for trait in instance.applied_traits if isinstance(trait, CdmTraitGroupReference) or not trait.is_from_property] \ if instance.applied_traits else None properties['cdm:traits'] = copy_data_utils._array_copy_data(res_opt, applied_traits, options) if is_read_only is not None: properties['cdm:isReadOnly'] = is_read_only if maximum_length is not None: properties['cdm:maximumLength'] = maximum_length if maximum_value is not None: properties['cdm:maximumValue'] = maximum_value if minimum_value is not None: properties['cdm:minimumValue'] = minimum_value if source_ordering is not None and source_ordering != 0: properties['cdm:sourceOrdering'] = source_ordering if value_constrained_to_list is not None: properties['cdm:valueConstrainedToList'] = value_constrained_to_list if is_primary_key is not None: properties['cdm:isPrimaryKey'] = is_primary_key if def_value is not None: properties['cdm:defaultValue'] = def_value return properties
def to_data(instance: CdmTypeAttributeDefinition, res_opt: ResolveOptions, options: CopyOptions) -> TypeAttribute: if instance is None: return None applied_traits = \ [trait for trait in instance.applied_traits if not trait.is_from_property] \ if instance.applied_traits else None data = TypeAttribute() data.explanation = instance.explanation data.purpose = PurposeReferencePersistence.to_data( instance.purpose, res_opt, options) if instance.purpose else None data.dataType = DataTypeReferencePersistence.to_data( instance.data_type, res_opt, options) if instance.data_type else None data.name = instance.name data.appliedTraits = copy_data_utils._array_copy_data( res_opt, applied_traits, options) data.resolutionGuidance = AttributeResolutionGuidancePersistence.to_data( instance.resolution_guidance, res_opt, options) if instance.resolution_guidance else None data.projection = ProjectionPersistence.to_data( instance.projection, res_opt, options) data.attributeContext = AttributeContextReferencePersistence.to_data( instance.attribute_context, res_opt, options) if instance.attribute_context else None is_read_only = instance._get_property('isReadOnly') if is_read_only: data.isReadOnly = is_read_only is_nullable = instance._get_property('isNullable') if is_nullable: data.isNullable = is_nullable data.sourceName = instance._get_property('sourceName') source_ordering = instance._get_property('sourceOrdering') if source_ordering: data.sourceOrdering = source_ordering data.displayName = instance._get_property('displayName') data.description = instance._get_property('description') value_constrained_to_list = instance._get_property( 'valueConstrainedToList') if value_constrained_to_list: data.valueConstrainedToList = value_constrained_to_list is_primary_key = instance._get_property('isPrimaryKey') if is_primary_key: data.isPrimaryKey = is_primary_key data.maximumLength = instance._get_property('maximumLength') data.maximumValue = instance._get_property('maximumValue') data.minimumValue = instance._get_property('minimumValue') data_format = instance._get_property('dataFormat') if data_format != CdmDataFormat.UNKNOWN: data.dataFormat = data_format.value default_value = instance._get_property('defaultValue') if default_value: data.defaultValue = default_value return data