interlis2py 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ili2py/__init__.py +3 -0
- ili2py/_version.py +24 -0
- ili2py/cli.py +229 -0
- ili2py/interfaces/__init__.py +0 -0
- ili2py/interfaces/interlis/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_23/__init__.py +36 -0
- ili2py/interfaces/interlis/interlis_23/generator.py +146 -0
- ili2py/interfaces/interlis/interlis_24/__init__.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/README.md +21 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/__init__.py +815 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/actual_argument_type.py +630 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/actual_argument_type_formal_argument.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/actual_argument_type_object_classes.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/allowed_in_basket.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/allowed_in_basket_type.py +33 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/allowed_in_basket_type_class_in_basket.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/allowed_in_basket_type_of_data_unit.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/any_oidtype.py +12 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/any_oidtype_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_of.py +12 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_of_type.py +9 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_restriction.py +12 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_restriction_type.py +32 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_restriction_type_aref.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/aref_restriction_type_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/argument.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/argument_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/argument_type_1.py +62 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/argument_type_function.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/argument_type_type_1.py +9 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_origin.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_origin_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_target.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_target_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_type_assoc_acc.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_acc_type_class.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_role.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/assoc_role_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type_1.py +88 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type_attr_parent.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type_derivates.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type_param_parent.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attr_or_param_type_type_1.py +9 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_const.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_const_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_const_type_attribute.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_ref_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_ref_type_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/attribute_ref_type_type_of.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/axis_spec.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/axis_spec_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/axis_spec_type_axis.py +27 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/axis_spec_type_coord_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_class.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_class_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_class_type_base_class.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_class_type_crt.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_type_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_view_def.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_view_def_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_view_ref.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/base_view_ref_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/blackbox_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/blackbox_type_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/boolean_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/boolean_type_type.py +10 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_attr.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_attr_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_const.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_const_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_const_type_class.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_constraint.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_constraint_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_mod.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_param.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_param_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_ref.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_ref_type.py +23 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_ref_type_ref.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_ref_type_type.py +10 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_related_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_related_type_type.py +10 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_restriction.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_restriction_type.py +31 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_restriction_type_class_restriction.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_restriction_type_crtr.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_type.py +74 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_type_existence_constraint.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_type_multiplicity.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_type_oid.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/class_type_view.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/concrete_for_generic.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/concrete_for_generic_type.py +33 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/concrete_for_generic_type_concrete_domain.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/concrete_for_generic_type_generic_def.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/cond_sign_param_assignment.py +13 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/cond_sign_param_assignment_type.py +31 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/cond_sign_param_assignment_type_assignments.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/cond_sign_param_assignment_type_where.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constant.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constant_type.py +28 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constraint.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constraint_type.py +28 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constraint_type_to_class.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/constraint_type_to_domain.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/context.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/context_type.py +10 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/coord_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/coord_type_type.py +38 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/data_unit.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/data_unit_type.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/data_unit_type_oid.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/dependency.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/dependency_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/dependency_type_dependent.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/dependency_type_using.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/derived_assoc.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/derived_assoc_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/doc_text.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/doc_text_translation.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/doc_text_translation_type.py +17 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/doc_text_type.py +25 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/domain_constraint.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/domain_constraint_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/domain_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/domain_type_type.py +28 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/domain_type_type_context.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/drawing_rule.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/drawing_rule_type.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/drawing_rule_type_class.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/drawing_rule_type_graphic.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/drawing_rule_type_rule.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_assignment_type_max_enum_value.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_assignment_type_min_enum_value.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_mapping_type_enum_value.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_node.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_node_type.py +28 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_node_type_enum_type.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_node_type_parent_node.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_tree_value_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_tree_value_type_type.py +20 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_tree_value_type_type_et.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/enum_type_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/existence_constraint.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/existence_constraint_type.py +20 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/existence_constraint_type_attr.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/existence_def.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/existence_def_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_acc.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_acc_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_access.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_access_type.py +44 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_access_type_assoc_acc_of.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_access_type_origin_role.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/explicit_assoc_access_type_target_role.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/expression.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/expression_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/extendable_me.py +12 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/extendable_metype.py +49 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/extendable_metype_super.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/factor.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/factor_type.py +10 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/formal_argument.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/formal_argument_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/formatted_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/formatted_type_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/formatted_type_type_struct.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/function_call_type_function.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/function_def.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/function_def_type.py +28 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/function_def_type_result_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/generic_def.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/generic_def_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_base.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_base_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_rule.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_rule_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_type.py +28 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_type_base.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/graphic_type_where.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_format.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_format_type.py +96 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_transfer_element.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_transfer_element_type.py +35 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_transfer_element_type_ili1_ref_attr.py +27 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/ili1_transfer_element_type_ili1_transfer_class.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/import_mod.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/import_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/import_type_imported_p.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/import_type_importing_p.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/inheritance.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/inheritance_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_attr.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_attr_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_coord.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_coord_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_form.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_form_structure.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_form_structure_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_form_type.py +20 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_form_type_structure.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_type_type.py +53 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_type_type_coord_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/line_type_type_lastructure.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/lines_form.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/lines_form_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/lines_form_type_line_form.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/lines_form_type_line_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/local_ftype.py +12 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/local_ftype_type.py +9 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/local_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/local_type_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_attribute.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_attribute_type.py +46 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_attribute_type_meta_element.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_attributes.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_attributes_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_basket_def.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_basket_def_type.py +31 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_basket_def_type_meta_data_topic.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_basket_members.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_basket_members_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_data_unit.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_data_unit_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_element.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_element_type.py +48 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_element_type_documentation.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_element_type_element_in_package.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_class.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_class_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_def.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_def_type.py +40 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_def_type_class.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/meta_object_def_type_meta_basket_def.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/metranslation.py +12 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/metranslation_type.py +41 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/metranslation_type_of.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/metranslation_type_translated_doc.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_data.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_data_basket_oid.py +12 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_data_basket_oidtype.py +9 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_data_type.py +455 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_translation.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_translation_type.py +33 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_type.py +101 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/model_type_ili1_format.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/multi_value.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/multi_value_type.py +28 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/multi_value_type_multiplicity.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/multiplicity.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/multiplicity_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_type_type.py +60 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_type_type_ref_sys.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_type_type_unit.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_unit.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/num_unit_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/nums_ref_sys.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/nums_ref_sys_type.py +18 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/object_oid.py +12 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/object_oidtype.py +9 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/object_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/object_type_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/package.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/package_elements.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/package_elements_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/package_type.py +10 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_el.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_el_type.py +44 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_el_type_ref.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_or_insp_factor.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_or_insp_factor_type.py +32 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_or_insp_factor_type_inspection.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/path_or_insp_factor_type_path_els.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/reference_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/reference_type_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/renamed_base_view.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/renamed_base_view_type.py +39 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/renamed_base_view_type_base_view.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/renamed_base_view_type_view.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/result_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/result_type_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/role.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/role_type.py +64 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/role_type_association.py +37 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/role_type_derivates.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/role_type_multiplicity.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/runtime_param_ref.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/runtime_param_ref_type.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/runtime_param_ref_type_runtime_param.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/set_constraint.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/set_constraint_type.py +28 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/set_constraint_type_constraint.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/set_constraint_type_where.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_class.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_class_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_param_assignment.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_param_assignment_type.py +32 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_param_assignment_type_assignment.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sign_param_assignment_type_param.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/simple_constraint.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/simple_constraint_type.py +42 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/simple_constraint_type_logical_expression.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/struct_of_format.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/struct_of_format_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sub_model.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sub_model_type.py +10 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sub_node.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/sub_node_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/text_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/text_type_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/top_node.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/top_node_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/transfer_element.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/transfer_element_type.py +33 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/transfer_element_type_transfer_class.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/transfer_element_type_transfer_element.py +27 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/translation.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/translation_type.py +36 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/translation_type_translations.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/tree_value_type_of.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/tree_value_type_of_type.py +8 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_mod.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_related_type.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_related_type_type.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_related_type_type_base_type.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_restriction.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_restriction_type.py +31 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_restriction_type_trtr.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_restriction_type_type_restriction.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_type.py +28 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_type_lftparent.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/type_type_ltparent.py +29 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unique_constraint.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unique_constraint_type.py +40 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unique_constraint_type_unique_def.py +22 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unique_constraint_type_where.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_function.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_function_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_ref.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_ref_type.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_ref_type_unit.py +19 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_type.py +28 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/unit_type_definition.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/view.py +11 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/view_type.py +46 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/view_type_formation_parameter.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta/ilismeta16_2022_10_10/view_type_where.py +116 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/README.md +6 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/__init__.py +45 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/helper.py +65 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/abstract_element.py +85 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/constraints.py +47 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/extendable_me.py +102 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/domain_type/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/domain_type/class_related_type/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/domain_type/class_related_type/class_related_type.py +26 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/domain_type/class_related_type/role.py +56 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/domain_type/domain_type.py +171 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/expression/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/expression/expression.py +52 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/expression/factor/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/expression/factor/factor.py +46 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/extendable_me/type/type_class.py +77 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/line_form.py +39 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/meta_element.py +47 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/model_data.py +132 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/package/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/package/package.py +99 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/path_elements.py +51 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/references.py +57 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_data/serialization_elements.py +81 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/model_translation/__init__.py +0 -0
- ili2py/interfaces/interlis/interlis_24/ilismeta16/shared.py +5 -0
- ili2py/mappers/__init__.py +0 -0
- ili2py/mappers/helpers.py +1018 -0
- ili2py/mappers/internal/__init__.py +0 -0
- ili2py/mappers/internal/ilismeta16/__init__.py +0 -0
- ili2py/mappers/internal/ilismeta16/domain.py +29 -0
- ili2py/mappers/internal/ilismeta16/model_data/__init__.py +0 -0
- ili2py/mappers/internal/ilismeta16/model_data/definitions.py +401 -0
- ili2py/mappers/internal/ilismeta16/model_data/domain.py +31 -0
- ili2py/mappers/internal/ilismeta16/model_data/types.py +94 -0
- ili2py/mappers/internal/ilismeta16/model_data/units.py +49 -0
- ili2py/py.typed +0 -0
- ili2py/readers/__init__.py +0 -0
- ili2py/readers/interlis_23/__init__.py +0 -0
- ili2py/readers/interlis_23/xtf/__init__.py +0 -0
- ili2py/readers/interlis_23/xtf/xsdata.py +38 -0
- ili2py/readers/interlis_24/__init__.py +0 -0
- ili2py/readers/interlis_24/ilismeta16/__init__.py +0 -0
- ili2py/readers/interlis_24/ilismeta16/xsdata.py +40 -0
- ili2py/readers/interlis_24/xtf/__init__.py +0 -0
- ili2py/scripts/__init__.py +0 -0
- ili2py/scripts/config.py +21 -0
- ili2py/scripts/generate_docs_diagrams.py +177 -0
- ili2py/scripts/generate_mermaid_diagrams.py +118 -0
- ili2py/scripts/generate_plantuml_diagrams.py +156 -0
- ili2py/scripts/generate_test_output.py +632 -0
- ili2py/writers/__init__.py +0 -0
- ili2py/writers/diagram/__init__.py +33 -0
- ili2py/writers/diagram/interlis/__init__.py +115 -0
- ili2py/writers/diagram/interlis/templates/dot/class.jinja2 +34 -0
- ili2py/writers/diagram/interlis/templates/dot/classes.jinja2 +4 -0
- ili2py/writers/diagram/interlis/templates/dot/dot.jinja2 +48 -0
- ili2py/writers/diagram/interlis/templates/mermaid/mermaid.jinja2 +69 -0
- ili2py/writers/diagram/interlis/templates/plantuml/plantuml.jinja2 +62 -0
- ili2py/writers/diagram/interlis/templates/plantuml_role_members/plantuml_role_members.jinja2 +78 -0
- ili2py/writers/diagram/interlis/uml.py +353 -0
- ili2py/writers/helpers.py +36 -0
- ili2py/writers/py/__init__.py +0 -0
- ili2py/writers/py/constraints.py +183 -0
- ili2py/writers/py/interlis23/templates/classes.jinja2 +218 -0
- ili2py/writers/py/interlis23/templates/convertable_types.jinja2 +50 -0
- ili2py/writers/py/interlis23/templates/coord_types.jinja2 +126 -0
- ili2py/writers/py/interlis23/templates/domain_types.jinja2 +26 -0
- ili2py/writers/py/interlis23/templates/enumerations.jinja2 +27 -0
- ili2py/writers/py/interlis23/templates/library_init.jinja2 +5 -0
- ili2py/writers/py/interlis23/templates/line_types.jinja2 +162 -0
- ili2py/writers/py/interlis23/templates/module.jinja2 +89 -0
- ili2py/writers/py/interlis23/templates/package_init.jinja2 +56 -0
- ili2py/writers/py/interlis23/templates/references.jinja2 +26 -0
- ili2py/writers/py/interlis23/templates/xtf_opening.jinja2 +126 -0
- ili2py/writers/py/interlis24/templates/classes.jinja2 +225 -0
- ili2py/writers/py/interlis24/templates/convertable_types.jinja2 +50 -0
- ili2py/writers/py/interlis24/templates/coord_types.jinja2 +120 -0
- ili2py/writers/py/interlis24/templates/domain_types.jinja2 +26 -0
- ili2py/writers/py/interlis24/templates/enumerations.jinja2 +27 -0
- ili2py/writers/py/interlis24/templates/library_init.jinja2 +5 -0
- ili2py/writers/py/interlis24/templates/line_type_polyline.jinja2 +31 -0
- ili2py/writers/py/interlis24/templates/line_type_polyline_multi.jinja2 +49 -0
- ili2py/writers/py/interlis24/templates/line_type_segment.jinja2 +27 -0
- ili2py/writers/py/interlis24/templates/line_type_surface.jinja2 +31 -0
- ili2py/writers/py/interlis24/templates/line_type_surface_boundary.jinja2 +40 -0
- ili2py/writers/py/interlis24/templates/line_type_surface_multi.jinja2 +50 -0
- ili2py/writers/py/interlis24/templates/line_types.jinja2 +41 -0
- ili2py/writers/py/interlis24/templates/module.jinja2 +89 -0
- ili2py/writers/py/interlis24/templates/package_init.jinja2 +56 -0
- ili2py/writers/py/interlis24/templates/references.jinja2 +13 -0
- ili2py/writers/py/interlis24/templates/xtf_opening.jinja2 +120 -0
- ili2py/writers/py/python_structure.py +1829 -0
- ili2py/writers/py/render.py +180 -0
- interlis2py-0.1.0.dist-info/METADATA +91 -0
- interlis2py-0.1.0.dist-info/RECORD +462 -0
- interlis2py-0.1.0.dist-info/WHEEL +5 -0
- interlis2py-0.1.0.dist-info/entry_points.txt +2 -0
- interlis2py-0.1.0.dist-info/licenses/LICENSE +661 -0
- interlis2py-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,1018 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any, Protocol
|
|
4
|
+
|
|
5
|
+
from ili2py.interfaces.interlis.interlis_24.ilismeta.ilismeta16_2022_10_10 import (
|
|
6
|
+
AllowedInBasket,
|
|
7
|
+
AttrOrParam,
|
|
8
|
+
AxisSpec,
|
|
9
|
+
BaseClass,
|
|
10
|
+
Class,
|
|
11
|
+
ClassRefType,
|
|
12
|
+
ClassType,
|
|
13
|
+
ConstraintType,
|
|
14
|
+
CoordType,
|
|
15
|
+
CoordTypeType,
|
|
16
|
+
DataUnit,
|
|
17
|
+
DataUnitType,
|
|
18
|
+
Dependency,
|
|
19
|
+
DomainTypeType,
|
|
20
|
+
ExistenceConstraintType,
|
|
21
|
+
ExplicitAssocAccess,
|
|
22
|
+
ExtendableMetype,
|
|
23
|
+
Ili1TransferElement,
|
|
24
|
+
Import,
|
|
25
|
+
LineForm,
|
|
26
|
+
LinesForm,
|
|
27
|
+
LineType,
|
|
28
|
+
LineTypeType,
|
|
29
|
+
MetaAttribute,
|
|
30
|
+
MetaElementType,
|
|
31
|
+
Model,
|
|
32
|
+
Multiplicity,
|
|
33
|
+
MultiValueType,
|
|
34
|
+
ObjectType,
|
|
35
|
+
Role,
|
|
36
|
+
SetConstraintType,
|
|
37
|
+
SimpleConstraintType,
|
|
38
|
+
SubModel,
|
|
39
|
+
TransferElement,
|
|
40
|
+
UniqueConstraintType,
|
|
41
|
+
View,
|
|
42
|
+
)
|
|
43
|
+
from ili2py.interfaces.interlis.interlis_24.ilismeta16 import DataSection
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class HasOptionalRef(Protocol):
|
|
47
|
+
@property
|
|
48
|
+
def ref(self) -> str | None: ...
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def mandatory[T](value: T | None) -> T:
|
|
52
|
+
"""
|
|
53
|
+
Narrows a value which xsdata generated as optional, but which is MANDATORY in
|
|
54
|
+
IlisMeta16 (tests/data/ilismeta16/IlisMeta16.ili).
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
value: The value read from the IMD.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
The value itself.
|
|
61
|
+
|
|
62
|
+
Raises:
|
|
63
|
+
ValueError: If the value is missing, the IMD does not conform to IlisMeta16.
|
|
64
|
+
"""
|
|
65
|
+
if value is None:
|
|
66
|
+
raise ValueError("MANDATORY value of IlisMeta16 is missing in the IMD")
|
|
67
|
+
return value
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def mandatory_ref(reference: HasOptionalRef | None) -> str:
|
|
71
|
+
"""
|
|
72
|
+
Narrows a reference (and its REF) which is MANDATORY in IlisMeta16, see `mandatory`.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
reference: The reference element read from the IMD.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
The OID the reference points to.
|
|
79
|
+
"""
|
|
80
|
+
return mandatory(mandatory(reference).ref)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
@dataclass
|
|
84
|
+
class Reference:
|
|
85
|
+
model: str
|
|
86
|
+
type: type[Any]
|
|
87
|
+
instance: Any
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class Index:
|
|
91
|
+
"""
|
|
92
|
+
Attributes:
|
|
93
|
+
index: The index of all elements which have a TID. The TID is the key.
|
|
94
|
+
imported_p: Which Package is imported by what packages. The key of the dict is the
|
|
95
|
+
package tid which has a list of tid's of packages which are importing it.
|
|
96
|
+
IMPORTANT: Explicit imports only!
|
|
97
|
+
importing_p: The other direction as imported_p. Key is the package tid which has a list
|
|
98
|
+
of package tid's it is exporting. IMPORTANT: Explicit imports only!
|
|
99
|
+
allowed_in_basket_class_in_basket: Key is the class tid, and it has a list of basket
|
|
100
|
+
tid's which is in.
|
|
101
|
+
allowed_in_basket_of_data_unit: TODO
|
|
102
|
+
transfer_class: A representation of the Class construct out of the imd which is
|
|
103
|
+
specifically for parsing transfer data more easily. The key is the class tid and it
|
|
104
|
+
has a list of tuple containing the order number of the attribute and the tid to the
|
|
105
|
+
linked attribute.
|
|
106
|
+
transfer_element: The other direction as transfer_class. The key is the attribute and
|
|
107
|
+
the value is the element it is referenced to AttrOrParam OR ExplicitAssocAccess OR
|
|
108
|
+
Role
|
|
109
|
+
ili1_transfer_class: TODO
|
|
110
|
+
ili1_ref_attr: TODO
|
|
111
|
+
base_class: TODO
|
|
112
|
+
class_related_type: TODO
|
|
113
|
+
coord_type: Key is the tid of the CoordType, value is a list of tid's to the linked
|
|
114
|
+
coordinates (NumType).
|
|
115
|
+
axis: The opposite direction of coord_type. The key is the tid of the axis related
|
|
116
|
+
NumType and the value is the CoordType the element belongs to.
|
|
117
|
+
line_type: The key is the tid of the LineType value is a list of tid's to the LineForm
|
|
118
|
+
elements.
|
|
119
|
+
line_form: The opposite direction of line_type. Key is the tid of the LineForm and
|
|
120
|
+
value is the list of tid's of LineTypes which are of this LineForm.
|
|
121
|
+
class_class_attribute: The key is the tid of Class of Kind Class and value is a list of
|
|
122
|
+
tid's to the AttrOrParam which has attr_parent defined.
|
|
123
|
+
class_class_parameter: The key is the tid of Class of Kind Class and value is a list of
|
|
124
|
+
tid's to the AttrOrParam which has param_parent defined.
|
|
125
|
+
class_association_attribute: The key is the tid of Class of Kind Association and value
|
|
126
|
+
is a list of tid's to the AttrOrParam which has attr_parent defined.
|
|
127
|
+
class_association_parameter: The key is the tid of Class of Kind Association and value
|
|
128
|
+
is a list of tid's to the AttrOrParam which has param_parent defined.
|
|
129
|
+
association_role: Key is the tid of the Role and value is a list of tid's to the Class
|
|
130
|
+
of kind Association belonging to the Role.
|
|
131
|
+
association_to_class_ref_attributes: Key is the tid of Class of kind Class and value is
|
|
132
|
+
a list of tuple which contain the tid to the Role and the tid to the related Class
|
|
133
|
+
kind Class. This is the the embedded reference, where the actual class might get
|
|
134
|
+
additional attributes by the association definition. It explicitly is only used
|
|
135
|
+
when association is one or zero on the side of the class in question.
|
|
136
|
+
elements_in_package: Key is the tid of the package (Model, Submodel) and value is a
|
|
137
|
+
list of tid's of elements which are in the package.
|
|
138
|
+
topic_basket: Key is the tid of the package (SubModel) and value is the tid of the
|
|
139
|
+
corresponding basket.
|
|
140
|
+
dependency_using: Key is the
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
def __init__(self, data_section: DataSection):
|
|
144
|
+
self.aa_not_touched: list = []
|
|
145
|
+
self.index: dict = {}
|
|
146
|
+
self.imported_p: dict = {}
|
|
147
|
+
self.importing_p: dict = {}
|
|
148
|
+
self.models: list = []
|
|
149
|
+
|
|
150
|
+
self.allowed_in_basket_class_in_basket: dict = {}
|
|
151
|
+
self.allowed_in_basket_of_data_unit: dict = {}
|
|
152
|
+
|
|
153
|
+
self.transfer_class: dict = {}
|
|
154
|
+
self.transfer_element: dict = {}
|
|
155
|
+
|
|
156
|
+
self.ili1_transfer_class: dict = {}
|
|
157
|
+
self.ili1_ref_attr: dict = {}
|
|
158
|
+
|
|
159
|
+
self.base_class: dict = {}
|
|
160
|
+
self.class_related_type: dict = {}
|
|
161
|
+
|
|
162
|
+
self.coord_type: dict = {}
|
|
163
|
+
self.axis: dict = {}
|
|
164
|
+
|
|
165
|
+
self.line_type: dict = {}
|
|
166
|
+
self.line_form: dict = {}
|
|
167
|
+
|
|
168
|
+
self.types_used_by_attributes: dict = {}
|
|
169
|
+
|
|
170
|
+
self.class_class_attribute: dict = {}
|
|
171
|
+
self.class_class_parameter: dict = {}
|
|
172
|
+
self.class_association_attribute: dict = {}
|
|
173
|
+
self.class_association_parameter: dict = {}
|
|
174
|
+
|
|
175
|
+
self.geometric_attributes: list = []
|
|
176
|
+
self.geometric_attributes_multi: list = []
|
|
177
|
+
self.geometric_attributes_line_form: dict = {}
|
|
178
|
+
self.geometric_attributes_point_like: list = []
|
|
179
|
+
self.geometric_attributes_line_like: list = []
|
|
180
|
+
self.geometric_attributes_polygon_like: list = []
|
|
181
|
+
|
|
182
|
+
self.geometric_classes: dict = {}
|
|
183
|
+
|
|
184
|
+
self.association_role: dict = {}
|
|
185
|
+
self.association_to_class_ref_attributes: dict = {}
|
|
186
|
+
self.association_as_class_ref_attributes: dict = {}
|
|
187
|
+
self.association_bucket: dict = {}
|
|
188
|
+
self.associated_classes: dict = {}
|
|
189
|
+
|
|
190
|
+
self.types_bucket: dict[str, list[Any]] = {}
|
|
191
|
+
self.types_kind_bucket: dict[str, list[Any]] = {}
|
|
192
|
+
self.type_super_classes: dict[str, list[str]] = {}
|
|
193
|
+
self.type_sub_classes: dict[str, list[str]] = {}
|
|
194
|
+
|
|
195
|
+
self.metaelement_metaattributes: dict = {}
|
|
196
|
+
|
|
197
|
+
self.class_in_package: dict = {}
|
|
198
|
+
self.submodel_in_package: dict = {}
|
|
199
|
+
self.association_in_package: dict = {}
|
|
200
|
+
self.elements_in_package: dict = {}
|
|
201
|
+
self.elements_in_package_class_class: dict = {}
|
|
202
|
+
self.elements_in_package_class_structure: dict = {}
|
|
203
|
+
self.elements_in_package_class_association: dict = {}
|
|
204
|
+
self.topic_basket: dict = {}
|
|
205
|
+
self.class_subclassed_by: dict = {}
|
|
206
|
+
|
|
207
|
+
self.dependency_depends_on: dict = {}
|
|
208
|
+
self.dependency_used_by: dict = {}
|
|
209
|
+
|
|
210
|
+
self.object_oid_in_submodel: dict = {}
|
|
211
|
+
self.object_oid_in_model: dict = {}
|
|
212
|
+
|
|
213
|
+
self.basket_oid_in_submodel: dict = {}
|
|
214
|
+
self.basket_oid_in_model: dict = {}
|
|
215
|
+
|
|
216
|
+
self.class_with_simple_constraints: dict = {}
|
|
217
|
+
self.class_with_existence_constraints: dict = {}
|
|
218
|
+
self.class_with_unique_constraints: dict = {}
|
|
219
|
+
self.class_with_set_constraints: dict = {}
|
|
220
|
+
self.domain_with_simple_constraints: dict = {}
|
|
221
|
+
self.domain_with_existence_constraints: dict = {}
|
|
222
|
+
self.domain_with_unique_constraints: dict = {}
|
|
223
|
+
self.domain_with_set_constraints: dict = {}
|
|
224
|
+
|
|
225
|
+
self.types_in_domain: dict = {}
|
|
226
|
+
|
|
227
|
+
self.depth_tree: list = []
|
|
228
|
+
|
|
229
|
+
for basket in data_section.ModelData:
|
|
230
|
+
for element in basket.choice:
|
|
231
|
+
self.unwrap_tree(element)
|
|
232
|
+
for basket in data_section.ModelData:
|
|
233
|
+
for element in basket.choice:
|
|
234
|
+
self.prepare_tree(element)
|
|
235
|
+
|
|
236
|
+
if self.types_kind_bucket.get("Class.Association"):
|
|
237
|
+
for association_class in self.types_kind_bucket["Class.Association"]:
|
|
238
|
+
self.prepare_association(association_class)
|
|
239
|
+
|
|
240
|
+
self.root_model: str = self.models[-1]
|
|
241
|
+
self.depth_tree.append([self.root_model])
|
|
242
|
+
self.assemble_depth_tree(self.root_model, [self.root_model])
|
|
243
|
+
# evaluated for its side effect: fills self.aa_not_touched
|
|
244
|
+
_ = self.associations_embedded
|
|
245
|
+
|
|
246
|
+
def assemble_depth_tree(self, model_name: str, visited_models: list):
|
|
247
|
+
selected_models = []
|
|
248
|
+
for importing in self.importing_p[model_name]:
|
|
249
|
+
if importing not in visited_models:
|
|
250
|
+
visited_models.append(importing)
|
|
251
|
+
selected_models.append(importing)
|
|
252
|
+
if len(selected_models) > 0:
|
|
253
|
+
self.depth_tree.append(self.depth_tree[-1] + selected_models)
|
|
254
|
+
for importing in self.importing_p[model_name]:
|
|
255
|
+
self.assemble_depth_tree(importing, visited_models)
|
|
256
|
+
|
|
257
|
+
@staticmethod
|
|
258
|
+
def role_multiplicity(role: Role) -> Multiplicity:
|
|
259
|
+
"""
|
|
260
|
+
Returns the multiplicity of a role. It is optional in IlisMeta16, but ili2c always
|
|
261
|
+
writes it. If it is missing, the INTERLIS default is used: {0..1} for the role of a
|
|
262
|
+
composition, {0..*} otherwise (ili2-refman_2006-04-13_d.pdf, 2.7.3).
|
|
263
|
+
|
|
264
|
+
Args:
|
|
265
|
+
role: The role whose multiplicity is looked up.
|
|
266
|
+
|
|
267
|
+
Returns:
|
|
268
|
+
The multiplicity of the role.
|
|
269
|
+
"""
|
|
270
|
+
if role.multiplicity and role.multiplicity.multiplicity:
|
|
271
|
+
return role.multiplicity.multiplicity
|
|
272
|
+
logging.warning(f"{role.tid} has no multiplicity, the INTERLIS default is used")
|
|
273
|
+
return Multiplicity(min=0, max=1 if role.strongness == "Comp" else None)
|
|
274
|
+
|
|
275
|
+
def prepare_tree(self, element: Any):
|
|
276
|
+
self.resolve_references(element)
|
|
277
|
+
self.handle_types(element)
|
|
278
|
+
|
|
279
|
+
def _follow_super_ref(self, element: ExtendableMetype, super_references_list: list):
|
|
280
|
+
if element.super is not None:
|
|
281
|
+
reference = mandatory(element.super.ref)
|
|
282
|
+
if reference not in self.type_sub_classes:
|
|
283
|
+
self.type_sub_classes[reference] = []
|
|
284
|
+
self.type_sub_classes[reference].append(mandatory(element.tid))
|
|
285
|
+
if reference not in super_references_list:
|
|
286
|
+
super_references_list.append(reference)
|
|
287
|
+
self._follow_super_ref(self.index[reference], super_references_list)
|
|
288
|
+
|
|
289
|
+
def handle_types(self, element: Any):
|
|
290
|
+
if element.__class__.__name__ not in self.types_bucket:
|
|
291
|
+
self.types_bucket[element.__class__.__name__] = []
|
|
292
|
+
self.types_bucket[element.__class__.__name__].append(element)
|
|
293
|
+
if hasattr(element, "kind"):
|
|
294
|
+
key = f"{element.__class__.__name__}.{element.kind}"
|
|
295
|
+
if key not in self.types_kind_bucket:
|
|
296
|
+
self.types_kind_bucket[key] = []
|
|
297
|
+
self.types_kind_bucket[key].append(element)
|
|
298
|
+
if hasattr(element, "super") and element.super is not None:
|
|
299
|
+
super_references_list: list[str] = []
|
|
300
|
+
self._follow_super_ref(element, super_references_list)
|
|
301
|
+
if element.tid not in self.type_super_classes:
|
|
302
|
+
self.type_super_classes[element.tid] = []
|
|
303
|
+
self.type_super_classes[element.tid] += super_references_list
|
|
304
|
+
|
|
305
|
+
def resolve_references(self, element: Any):
|
|
306
|
+
"""
|
|
307
|
+
Helper method to resolve references between elements.
|
|
308
|
+
|
|
309
|
+
IMPORTANT: the order in which the handle_... methods are called is important!!!
|
|
310
|
+
|
|
311
|
+
Args:
|
|
312
|
+
element: the element which is looked up and which references will be deconstructed.
|
|
313
|
+
"""
|
|
314
|
+
if isinstance(element, MetaElementType):
|
|
315
|
+
# we want to track all basic meta elements
|
|
316
|
+
self.handle_element_in_package(element)
|
|
317
|
+
if isinstance(element, Import):
|
|
318
|
+
self.handle_import(element)
|
|
319
|
+
elif isinstance(element, AllowedInBasket):
|
|
320
|
+
self.handle_allowed_in_basket(element)
|
|
321
|
+
elif isinstance(element, TransferElement):
|
|
322
|
+
self.handle_transfer_element(element)
|
|
323
|
+
elif isinstance(element, Ili1TransferElement):
|
|
324
|
+
self.handle_ili1_transfer_element(element)
|
|
325
|
+
elif isinstance(element, BaseClass):
|
|
326
|
+
self.handle_base_class(element)
|
|
327
|
+
elif isinstance(element, AxisSpec):
|
|
328
|
+
self.handle_axis_spec(element)
|
|
329
|
+
elif isinstance(element, LinesForm):
|
|
330
|
+
self.handle_lines_form(element)
|
|
331
|
+
elif isinstance(element, Role):
|
|
332
|
+
self.handle_role(element)
|
|
333
|
+
elif isinstance(element, AttrOrParam):
|
|
334
|
+
self.handle_attr_or_param(element)
|
|
335
|
+
self.handle_geometric(element)
|
|
336
|
+
self.handle_multivalue_type(element)
|
|
337
|
+
elif isinstance(element, MetaAttribute):
|
|
338
|
+
self.handle_metaattribute(element)
|
|
339
|
+
elif isinstance(element, Dependency):
|
|
340
|
+
self.handle_dependency(element)
|
|
341
|
+
elif isinstance(element, Class):
|
|
342
|
+
self.handle_class(element)
|
|
343
|
+
elif isinstance(element, ConstraintType):
|
|
344
|
+
self.handle_constraint(element)
|
|
345
|
+
if isinstance(element, DomainTypeType):
|
|
346
|
+
self.handle_domain_type(element)
|
|
347
|
+
|
|
348
|
+
def handle_import(self, element: Import):
|
|
349
|
+
"""
|
|
350
|
+
Resolves the Import references between Models.
|
|
351
|
+
Args:
|
|
352
|
+
element: The import reference which will be handled.
|
|
353
|
+
"""
|
|
354
|
+
# Null-safety checks to prevent AttributeError
|
|
355
|
+
if element.imported_p is None or element.importing_p is None:
|
|
356
|
+
return
|
|
357
|
+
if not hasattr(element.imported_p, "ref") or element.imported_p.ref is None:
|
|
358
|
+
return
|
|
359
|
+
if not hasattr(element.importing_p, "ref") or element.importing_p.ref is None:
|
|
360
|
+
return
|
|
361
|
+
|
|
362
|
+
imported_p_bucket = self.imported_p[element.imported_p.ref]
|
|
363
|
+
if element.imported_p.ref not in imported_p_bucket:
|
|
364
|
+
imported_p_bucket.append(element.importing_p.ref)
|
|
365
|
+
importing_p_bucket = self.importing_p[element.importing_p.ref]
|
|
366
|
+
if element.importing_p.ref not in importing_p_bucket:
|
|
367
|
+
importing_p_bucket.append(element.imported_p.ref)
|
|
368
|
+
|
|
369
|
+
def handle_allowed_in_basket(self, element: AllowedInBasket):
|
|
370
|
+
"""
|
|
371
|
+
|
|
372
|
+
Args:
|
|
373
|
+
element: The allowed-in-basket reference which will be handled.
|
|
374
|
+
"""
|
|
375
|
+
class_in_basket = mandatory_ref(element.class_in_basket)
|
|
376
|
+
of_data_unit = mandatory_ref(element.of_data_unit)
|
|
377
|
+
of_data_unit_bucket = self.allowed_in_basket_class_in_basket[class_in_basket]
|
|
378
|
+
if of_data_unit not in of_data_unit_bucket:
|
|
379
|
+
of_data_unit_bucket.append(of_data_unit)
|
|
380
|
+
class_in_basket_bucket = self.allowed_in_basket_of_data_unit[of_data_unit]
|
|
381
|
+
if class_in_basket not in class_in_basket_bucket:
|
|
382
|
+
class_in_basket_bucket.append(class_in_basket)
|
|
383
|
+
|
|
384
|
+
def handle_transfer_element(self, element: TransferElement):
|
|
385
|
+
transfer_class = mandatory_ref(element.transfer_class)
|
|
386
|
+
transfer_element = mandatory(element.transfer_element)
|
|
387
|
+
transfer_element_ref = mandatory(transfer_element.ref)
|
|
388
|
+
transfer_class_bucket = self.transfer_class[transfer_class]
|
|
389
|
+
self.transfer_element[transfer_element_ref] = transfer_class
|
|
390
|
+
if transfer_element_ref not in transfer_class_bucket:
|
|
391
|
+
transfer_class_bucket.append((transfer_element.order_pos, transfer_element_ref))
|
|
392
|
+
|
|
393
|
+
def handle_ili1_transfer_element(self, element: Ili1TransferElement):
|
|
394
|
+
ili1_transfer_class = mandatory_ref(element.ili1_transfer_class)
|
|
395
|
+
ili1_ref_attr = mandatory_ref(element.ili1_ref_attr)
|
|
396
|
+
ili1_transfer_class_bucket = self.ili1_transfer_class[ili1_transfer_class]
|
|
397
|
+
ili1_ref_bucket = self.ili1_ref_attr[ili1_ref_attr]
|
|
398
|
+
if ili1_transfer_class not in ili1_ref_bucket:
|
|
399
|
+
ili1_ref_bucket.append(ili1_transfer_class)
|
|
400
|
+
if ili1_ref_attr not in ili1_transfer_class_bucket:
|
|
401
|
+
ili1_transfer_class_bucket.append(ili1_ref_attr)
|
|
402
|
+
|
|
403
|
+
def handle_base_class(self, element: BaseClass):
|
|
404
|
+
base_class_ref = mandatory_ref(element.base_class)
|
|
405
|
+
crt_ref = mandatory_ref(element.crt)
|
|
406
|
+
base_class_bucket = self.base_class[base_class_ref]
|
|
407
|
+
self.class_related_type[crt_ref] = base_class_ref
|
|
408
|
+
if crt_ref not in base_class_bucket:
|
|
409
|
+
base_class_bucket.append(crt_ref)
|
|
410
|
+
|
|
411
|
+
# handle association unwrapping
|
|
412
|
+
base_class = self.index[base_class_ref]
|
|
413
|
+
class_related_type = self.index[crt_ref]
|
|
414
|
+
if isinstance(base_class, Class) and isinstance(class_related_type, Role):
|
|
415
|
+
# this is an association part
|
|
416
|
+
association = self.index[mandatory_ref(class_related_type.association)]
|
|
417
|
+
multiplicity = Index.role_multiplicity(class_related_type)
|
|
418
|
+
if association.tid not in self.association_bucket:
|
|
419
|
+
self.association_bucket[association.tid] = []
|
|
420
|
+
self.association_bucket[association.tid].append(
|
|
421
|
+
(
|
|
422
|
+
class_related_type.tid,
|
|
423
|
+
base_class.tid,
|
|
424
|
+
class_related_type.strongness,
|
|
425
|
+
multiplicity.min,
|
|
426
|
+
multiplicity.max,
|
|
427
|
+
)
|
|
428
|
+
)
|
|
429
|
+
if base_class.tid not in self.associated_classes:
|
|
430
|
+
self.associated_classes[base_class.tid] = []
|
|
431
|
+
self.associated_classes[base_class.tid].append(association.tid)
|
|
432
|
+
|
|
433
|
+
def handle_axis_spec(self, element: AxisSpec):
|
|
434
|
+
coord_type = mandatory_ref(element.coord_type)
|
|
435
|
+
axis = mandatory_ref(element.axis)
|
|
436
|
+
coord_type_bucket = self.coord_type[coord_type]
|
|
437
|
+
self.axis[axis] = coord_type
|
|
438
|
+
if axis not in coord_type_bucket:
|
|
439
|
+
coord_type_bucket.append(axis)
|
|
440
|
+
|
|
441
|
+
def handle_lines_form(self, element: LinesForm):
|
|
442
|
+
line_form = mandatory_ref(element.line_form)
|
|
443
|
+
line_type = mandatory_ref(element.line_type)
|
|
444
|
+
line_form_bucket = self.line_form[line_form]
|
|
445
|
+
line_type_bucket = self.line_type[line_type]
|
|
446
|
+
if line_form not in line_type_bucket:
|
|
447
|
+
line_type_bucket.append(line_form)
|
|
448
|
+
if line_type not in line_form_bucket:
|
|
449
|
+
line_form_bucket.append(line_type)
|
|
450
|
+
|
|
451
|
+
def handle_role(self, element: Role):
|
|
452
|
+
# a Role is always part of an association (AssocRole)
|
|
453
|
+
association = mandatory_ref(element.association)
|
|
454
|
+
if association not in self.association_role:
|
|
455
|
+
self.association_role[association] = []
|
|
456
|
+
self.association_role[association].append(element.tid)
|
|
457
|
+
|
|
458
|
+
def handle_metaattribute(self, element: MetaAttribute):
|
|
459
|
+
meta_element = mandatory_ref(element.meta_element)
|
|
460
|
+
if meta_element not in self.metaelement_metaattributes:
|
|
461
|
+
self.metaelement_metaattributes[meta_element] = []
|
|
462
|
+
self.metaelement_metaattributes[meta_element].append(element.tid)
|
|
463
|
+
|
|
464
|
+
def handle_element_in_package(self, element: MetaElementType):
|
|
465
|
+
if (
|
|
466
|
+
element.element_in_package
|
|
467
|
+
and hasattr(element.element_in_package, "ref")
|
|
468
|
+
and element.element_in_package.ref
|
|
469
|
+
):
|
|
470
|
+
if element.element_in_package.ref not in self.elements_in_package:
|
|
471
|
+
self.elements_in_package[element.element_in_package.ref] = []
|
|
472
|
+
self.elements_in_package[element.element_in_package.ref].append(element.tid)
|
|
473
|
+
if isinstance(element, DataUnitType) and (
|
|
474
|
+
element.element_in_package
|
|
475
|
+
and hasattr(element.element_in_package, "ref")
|
|
476
|
+
and element.element_in_package.ref
|
|
477
|
+
):
|
|
478
|
+
self.topic_basket[element.element_in_package.ref] = element.tid
|
|
479
|
+
if element.oid:
|
|
480
|
+
package = self.index[element.element_in_package.ref]
|
|
481
|
+
if isinstance(package, SubModel):
|
|
482
|
+
self.basket_oid_in_submodel[package.tid] = element.tid
|
|
483
|
+
package = self.index[mandatory_ref(package.element_in_package)]
|
|
484
|
+
self.basket_oid_in_model[package.tid] = element.tid
|
|
485
|
+
if isinstance(element, ClassType):
|
|
486
|
+
if element.kind == "Class":
|
|
487
|
+
if (
|
|
488
|
+
element.element_in_package
|
|
489
|
+
and hasattr(element.element_in_package, "ref")
|
|
490
|
+
and element.element_in_package.ref
|
|
491
|
+
not in self.elements_in_package_class_class
|
|
492
|
+
):
|
|
493
|
+
self.elements_in_package_class_class[element.element_in_package.ref] = []
|
|
494
|
+
if element.element_in_package and hasattr(element.element_in_package, "ref"):
|
|
495
|
+
self.elements_in_package_class_class[
|
|
496
|
+
element.element_in_package.ref
|
|
497
|
+
].append(element.tid)
|
|
498
|
+
elif element.kind == "Structure":
|
|
499
|
+
if (
|
|
500
|
+
element.element_in_package
|
|
501
|
+
and hasattr(element.element_in_package, "ref")
|
|
502
|
+
and element.element_in_package.ref
|
|
503
|
+
not in self.elements_in_package_class_structure
|
|
504
|
+
):
|
|
505
|
+
self.elements_in_package_class_structure[
|
|
506
|
+
element.element_in_package.ref
|
|
507
|
+
] = []
|
|
508
|
+
if element.element_in_package and hasattr(element.element_in_package, "ref"):
|
|
509
|
+
self.elements_in_package_class_structure[
|
|
510
|
+
element.element_in_package.ref
|
|
511
|
+
].append(element.tid)
|
|
512
|
+
elif element.kind == "Association":
|
|
513
|
+
if (
|
|
514
|
+
element.element_in_package
|
|
515
|
+
and hasattr(element.element_in_package, "ref")
|
|
516
|
+
and element.element_in_package.ref
|
|
517
|
+
not in self.elements_in_package_class_association
|
|
518
|
+
):
|
|
519
|
+
self.elements_in_package_class_association[
|
|
520
|
+
element.element_in_package.ref
|
|
521
|
+
] = []
|
|
522
|
+
if element.element_in_package and hasattr(element.element_in_package, "ref"):
|
|
523
|
+
self.elements_in_package_class_association[
|
|
524
|
+
element.element_in_package.ref
|
|
525
|
+
].append(element.tid)
|
|
526
|
+
else:
|
|
527
|
+
logging.debug(
|
|
528
|
+
f"Element kind of Class type was not handled correctly: {element}"
|
|
529
|
+
)
|
|
530
|
+
|
|
531
|
+
def handle_dependency(self, element: Dependency):
|
|
532
|
+
if element.using and hasattr(element.using, "ref") and element.using.ref:
|
|
533
|
+
if element.using.ref not in self.dependency_used_by:
|
|
534
|
+
self.dependency_used_by[element.using.ref] = []
|
|
535
|
+
if (
|
|
536
|
+
element.dependent
|
|
537
|
+
and hasattr(element.dependent, "ref")
|
|
538
|
+
and element.dependent.ref
|
|
539
|
+
):
|
|
540
|
+
self.dependency_used_by[element.using.ref].append(element.dependent.ref)
|
|
541
|
+
if element.dependent and hasattr(element.dependent, "ref") and element.dependent.ref:
|
|
542
|
+
if element.dependent.ref not in self.dependency_depends_on:
|
|
543
|
+
self.dependency_depends_on[element.dependent.ref] = []
|
|
544
|
+
if element.using and hasattr(element.using, "ref") and element.using.ref:
|
|
545
|
+
self.dependency_depends_on[element.dependent.ref].append(element.using.ref)
|
|
546
|
+
|
|
547
|
+
def unwrap_tree(self, element: Any):
|
|
548
|
+
"""
|
|
549
|
+
Helper method to assemble a one dimensional index with the elements unique
|
|
550
|
+
identifiers *tid* as the key.
|
|
551
|
+
|
|
552
|
+
Args:
|
|
553
|
+
element: The object to inspect for flattening.
|
|
554
|
+
"""
|
|
555
|
+
if hasattr(element, "tid"):
|
|
556
|
+
if element.tid is None:
|
|
557
|
+
# element had no tid
|
|
558
|
+
logging.debug(f"Element {element} had no tid and is not added to the index.")
|
|
559
|
+
else:
|
|
560
|
+
# tid is not None
|
|
561
|
+
# the element has already a unique identifier. we can use this in the index
|
|
562
|
+
if element.tid in self.index:
|
|
563
|
+
raise LookupError(
|
|
564
|
+
f"Element {element.tid} was already in tree. "
|
|
565
|
+
f"Thats not allowed! {element} {self.index[element.tid]}"
|
|
566
|
+
)
|
|
567
|
+
else:
|
|
568
|
+
self.index[element.tid] = element
|
|
569
|
+
if isinstance(element, Model):
|
|
570
|
+
if element.tid not in self.imported_p:
|
|
571
|
+
self.imported_p[element.tid] = []
|
|
572
|
+
if element.tid not in self.importing_p:
|
|
573
|
+
self.importing_p[element.tid] = []
|
|
574
|
+
self.models.append(element.tid)
|
|
575
|
+
elif isinstance(element, SubModel):
|
|
576
|
+
if (
|
|
577
|
+
element.element_in_package
|
|
578
|
+
and element.element_in_package.ref not in self.submodel_in_package
|
|
579
|
+
):
|
|
580
|
+
self.submodel_in_package[element.element_in_package.ref] = []
|
|
581
|
+
if element.element_in_package:
|
|
582
|
+
self.submodel_in_package[element.element_in_package.ref].append(
|
|
583
|
+
element.tid
|
|
584
|
+
)
|
|
585
|
+
|
|
586
|
+
elif isinstance(element, DataUnit):
|
|
587
|
+
if element.tid not in self.allowed_in_basket_of_data_unit:
|
|
588
|
+
self.allowed_in_basket_of_data_unit[element.tid] = []
|
|
589
|
+
|
|
590
|
+
elif isinstance(element, Class):
|
|
591
|
+
if element.tid not in self.allowed_in_basket_class_in_basket:
|
|
592
|
+
self.allowed_in_basket_class_in_basket[element.tid] = []
|
|
593
|
+
if element.tid not in self.transfer_class:
|
|
594
|
+
self.transfer_class[element.tid] = []
|
|
595
|
+
if element.tid not in self.ili1_transfer_class:
|
|
596
|
+
self.ili1_transfer_class[element.tid] = []
|
|
597
|
+
if element.tid not in self.base_class:
|
|
598
|
+
self.base_class[element.tid] = []
|
|
599
|
+
if element.kind == "Class":
|
|
600
|
+
if (
|
|
601
|
+
element.element_in_package
|
|
602
|
+
and element.element_in_package.ref not in self.class_in_package
|
|
603
|
+
):
|
|
604
|
+
self.class_in_package[element.element_in_package.ref] = []
|
|
605
|
+
if element.element_in_package:
|
|
606
|
+
self.class_in_package[element.element_in_package.ref].append(
|
|
607
|
+
element.tid
|
|
608
|
+
)
|
|
609
|
+
if element.kind == "Association":
|
|
610
|
+
if (
|
|
611
|
+
element.element_in_package
|
|
612
|
+
and element.element_in_package.ref
|
|
613
|
+
not in self.association_in_package
|
|
614
|
+
):
|
|
615
|
+
self.association_in_package[element.element_in_package.ref] = []
|
|
616
|
+
if element.element_in_package:
|
|
617
|
+
self.association_in_package[element.element_in_package.ref].append(
|
|
618
|
+
element.tid
|
|
619
|
+
)
|
|
620
|
+
|
|
621
|
+
elif isinstance(element, View):
|
|
622
|
+
if element.tid not in self.allowed_in_basket_class_in_basket:
|
|
623
|
+
self.allowed_in_basket_class_in_basket[element.tid] = []
|
|
624
|
+
if element.tid not in self.transfer_class:
|
|
625
|
+
self.transfer_class[element.tid] = []
|
|
626
|
+
|
|
627
|
+
elif isinstance(element, AttrOrParam):
|
|
628
|
+
if (
|
|
629
|
+
element.type_value
|
|
630
|
+
and hasattr(element.type_value, "ref")
|
|
631
|
+
and element.type_value.ref
|
|
632
|
+
):
|
|
633
|
+
type_definition = self.index[element.type_value.ref]
|
|
634
|
+
type_ref = type_definition.tid
|
|
635
|
+
if (
|
|
636
|
+
isinstance(type_definition, MultiValueType)
|
|
637
|
+
and type_definition.name == "TYPE"
|
|
638
|
+
):
|
|
639
|
+
type_ref = mandatory_ref(type_definition.base_type)
|
|
640
|
+
if type_ref not in self.types_used_by_attributes:
|
|
641
|
+
self.types_used_by_attributes[type_ref] = []
|
|
642
|
+
self.types_used_by_attributes[type_ref].append(element.tid)
|
|
643
|
+
if element.tid not in self.transfer_element:
|
|
644
|
+
self.transfer_element[element.tid] = None
|
|
645
|
+
if element.tid not in self.ili1_ref_attr:
|
|
646
|
+
self.ili1_ref_attr[element.tid] = []
|
|
647
|
+
|
|
648
|
+
elif isinstance(element, ExplicitAssocAccess):
|
|
649
|
+
if element.tid not in self.transfer_element:
|
|
650
|
+
self.transfer_element[element.tid] = None
|
|
651
|
+
|
|
652
|
+
elif isinstance(element, Role):
|
|
653
|
+
if element.tid not in self.transfer_element:
|
|
654
|
+
self.transfer_element[element.tid] = None
|
|
655
|
+
if element.tid not in self.ili1_ref_attr:
|
|
656
|
+
self.ili1_ref_attr[element.tid] = []
|
|
657
|
+
if element.tid not in self.class_related_type:
|
|
658
|
+
self.class_related_type[element.tid] = None
|
|
659
|
+
|
|
660
|
+
elif isinstance(element, (ClassRefType, ObjectType)):
|
|
661
|
+
if element.tid not in self.class_related_type:
|
|
662
|
+
self.class_related_type[element.tid] = None
|
|
663
|
+
|
|
664
|
+
elif isinstance(element, CoordType):
|
|
665
|
+
if element.tid not in self.coord_type:
|
|
666
|
+
self.coord_type[element.tid] = []
|
|
667
|
+
|
|
668
|
+
elif isinstance(element, LineType):
|
|
669
|
+
if element.tid not in self.line_type:
|
|
670
|
+
self.line_type[element.tid] = []
|
|
671
|
+
|
|
672
|
+
elif isinstance(element, LineForm):
|
|
673
|
+
if element.tid not in self.line_form:
|
|
674
|
+
self.line_form[element.tid] = []
|
|
675
|
+
|
|
676
|
+
def prepare_association(self, association_class: Class):
|
|
677
|
+
"""
|
|
678
|
+
The following preassumptions were made:
|
|
679
|
+
- 1:n is installed as class attribute to the referenced class with the 1 side, a
|
|
680
|
+
backref attribute is installed at the referenced class as a list, if the
|
|
681
|
+
association itself has no attributes itself
|
|
682
|
+
- m:n is created as extra class with the attributes and references to the tid's of
|
|
683
|
+
the corresponding objects, same approach is implemented for any associaton which
|
|
684
|
+
has additional attributes itself
|
|
685
|
+
- QUESTION: what happens, if association has super class?
|
|
686
|
+
Args:
|
|
687
|
+
association_class ():
|
|
688
|
+
|
|
689
|
+
Returns:
|
|
690
|
+
|
|
691
|
+
"""
|
|
692
|
+
|
|
693
|
+
if self.association_role.get(association_class.tid):
|
|
694
|
+
# we have associated classes in this association
|
|
695
|
+
association_members = self.association_role[association_class.tid]
|
|
696
|
+
else:
|
|
697
|
+
# association does not have associated classes
|
|
698
|
+
# this is the case when association is just a subclass of another one
|
|
699
|
+
# TODO: currently we step only one level deep here, this has to be recursively
|
|
700
|
+
# deep!
|
|
701
|
+
if association_class.super:
|
|
702
|
+
association_members = self.association_role[association_class.super.ref]
|
|
703
|
+
else:
|
|
704
|
+
association_members = []
|
|
705
|
+
from_class = None
|
|
706
|
+
attributes = []
|
|
707
|
+
for member_ref in association_members:
|
|
708
|
+
# handling of embedded associations
|
|
709
|
+
role: Role = self.index[member_ref]
|
|
710
|
+
multiplicity = Index.role_multiplicity(role)
|
|
711
|
+
linked = self.class_related_type[member_ref]
|
|
712
|
+
if not isinstance(linked, list):
|
|
713
|
+
linked = [linked]
|
|
714
|
+
for linked_class in linked:
|
|
715
|
+
# multiple classes can be linked with additional logical operator
|
|
716
|
+
# (currently OR is what is implemented according to ref manual)
|
|
717
|
+
if multiplicity.min in [0, 1] and multiplicity.max == 1:
|
|
718
|
+
# regarding ref manual direct embedded class attributes are only existing
|
|
719
|
+
# on exactly 1 or 0 related association targets - all others are modeled as
|
|
720
|
+
# own class like entities in the transfer data
|
|
721
|
+
attributes.append((role.tid, linked_class))
|
|
722
|
+
else:
|
|
723
|
+
from_class = linked_class
|
|
724
|
+
if from_class not in self.association_to_class_ref_attributes:
|
|
725
|
+
self.association_to_class_ref_attributes[from_class] = attributes
|
|
726
|
+
else:
|
|
727
|
+
self.association_to_class_ref_attributes[from_class] = (
|
|
728
|
+
self.association_to_class_ref_attributes[from_class] + attributes
|
|
729
|
+
)
|
|
730
|
+
|
|
731
|
+
def handle_attr_or_param(self, element: AttrOrParam):
|
|
732
|
+
if element.attr_parent:
|
|
733
|
+
referenced_class = self.index[element.attr_parent.ref]
|
|
734
|
+
if referenced_class.kind in ["Class", "Structure"]:
|
|
735
|
+
if element.attr_parent.ref not in self.class_class_attribute:
|
|
736
|
+
self.class_class_attribute[element.attr_parent.ref] = []
|
|
737
|
+
self.class_class_attribute[element.attr_parent.ref].append(element.tid)
|
|
738
|
+
elif referenced_class.kind == "Association":
|
|
739
|
+
if element.attr_parent.ref not in self.class_association_attribute:
|
|
740
|
+
self.class_association_attribute[element.attr_parent.ref] = []
|
|
741
|
+
self.class_association_attribute[element.attr_parent.ref].append(element.tid)
|
|
742
|
+
elif element.param_parent:
|
|
743
|
+
referenced_class = self.index[element.param_parent.ref]
|
|
744
|
+
if referenced_class.kind in ["Class", "Structure"]:
|
|
745
|
+
if element.param_parent.ref not in self.class_class_attribute:
|
|
746
|
+
self.class_class_attribute[element.param_parent.ref] = []
|
|
747
|
+
self.class_class_attribute[element.param_parent.ref].append(element.tid)
|
|
748
|
+
elif referenced_class.kind == "Association":
|
|
749
|
+
if element.param_parent.ref not in self.class_association_attribute:
|
|
750
|
+
self.class_association_attribute[element.param_parent.ref] = []
|
|
751
|
+
self.class_association_attribute[element.param_parent.ref].append(element.tid)
|
|
752
|
+
|
|
753
|
+
def handle_class(self, element: Class):
|
|
754
|
+
if element.oid and element.element_in_package:
|
|
755
|
+
package = self.index[element.element_in_package.ref]
|
|
756
|
+
if isinstance(package, SubModel):
|
|
757
|
+
self.object_oid_in_submodel[package.tid] = element.oid.ref
|
|
758
|
+
package = self.index[mandatory_ref(package.element_in_package)]
|
|
759
|
+
self.object_oid_in_model[package.tid] = element.oid.ref
|
|
760
|
+
if element.super:
|
|
761
|
+
if element.super.ref not in self.class_subclassed_by:
|
|
762
|
+
self.class_subclassed_by[element.super.ref] = []
|
|
763
|
+
self.class_subclassed_by[element.super.ref].append(element.tid)
|
|
764
|
+
|
|
765
|
+
def handle_constraint(self, element: ConstraintType):
|
|
766
|
+
if isinstance(element, SimpleConstraintType):
|
|
767
|
+
if element.to_class:
|
|
768
|
+
if element.to_class.ref not in self.class_with_simple_constraints:
|
|
769
|
+
self.class_with_simple_constraints[element.to_class.ref] = []
|
|
770
|
+
self.class_with_simple_constraints[element.to_class.ref].append(element.tid)
|
|
771
|
+
if element.to_domain:
|
|
772
|
+
if element.to_domain.ref not in self.domain_with_simple_constraints:
|
|
773
|
+
self.domain_with_simple_constraints[element.to_domain.ref] = []
|
|
774
|
+
self.domain_with_simple_constraints[element.to_domain.ref].append(element.tid)
|
|
775
|
+
elif isinstance(element, ExistenceConstraintType):
|
|
776
|
+
if element.to_class:
|
|
777
|
+
if element.to_class.ref not in self.class_with_existence_constraints:
|
|
778
|
+
self.class_with_existence_constraints[element.to_class.ref] = []
|
|
779
|
+
self.class_with_existence_constraints[element.to_class.ref].append(element.tid)
|
|
780
|
+
if element.to_domain:
|
|
781
|
+
if element.to_domain.ref not in self.domain_with_existence_constraints:
|
|
782
|
+
self.domain_with_existence_constraints[element.to_domain.ref] = []
|
|
783
|
+
self.domain_with_existence_constraints[element.to_domain.ref].append(
|
|
784
|
+
element.tid
|
|
785
|
+
)
|
|
786
|
+
elif isinstance(element, UniqueConstraintType):
|
|
787
|
+
if element.to_class:
|
|
788
|
+
if element.to_class.ref not in self.class_with_unique_constraints:
|
|
789
|
+
self.class_with_unique_constraints[element.to_class.ref] = []
|
|
790
|
+
self.class_with_unique_constraints[element.to_class.ref].append(element.tid)
|
|
791
|
+
if element.to_domain:
|
|
792
|
+
if element.to_domain.ref not in self.domain_with_unique_constraints:
|
|
793
|
+
self.domain_with_unique_constraints[element.to_domain.ref] = []
|
|
794
|
+
self.domain_with_unique_constraints[element.to_domain.ref].append(element.tid)
|
|
795
|
+
elif isinstance(element, SetConstraintType):
|
|
796
|
+
if element.to_class:
|
|
797
|
+
if element.to_class.ref not in self.class_with_set_constraints:
|
|
798
|
+
self.class_with_set_constraints[element.to_class.ref] = []
|
|
799
|
+
self.class_with_set_constraints[element.to_class.ref].append(element.tid)
|
|
800
|
+
if element.to_domain:
|
|
801
|
+
if element.to_domain.ref not in self.domain_with_set_constraints:
|
|
802
|
+
self.domain_with_set_constraints[element.to_domain.ref] = []
|
|
803
|
+
self.domain_with_set_constraints[element.to_domain.ref].append(element.tid)
|
|
804
|
+
else:
|
|
805
|
+
logging.warning(f"Constraint was not handled as expected: {element}")
|
|
806
|
+
|
|
807
|
+
def handle_domain_type(self, element: DomainTypeType):
|
|
808
|
+
if element.name not in ["TYPE", "C1", "C2", "C3"] and element.element_in_package:
|
|
809
|
+
if element.element_in_package.ref not in self.types_in_domain:
|
|
810
|
+
self.types_in_domain[element.element_in_package.ref] = []
|
|
811
|
+
self.types_in_domain[element.element_in_package.ref].append(element)
|
|
812
|
+
|
|
813
|
+
def handle_geometric(
|
|
814
|
+
self,
|
|
815
|
+
element: AttrOrParam,
|
|
816
|
+
origin_type: CoordType | LineType | None = None,
|
|
817
|
+
multi: bool = False,
|
|
818
|
+
):
|
|
819
|
+
type_definition = origin_type or self.index[mandatory_ref(element.type_value)]
|
|
820
|
+
if isinstance(type_definition, (CoordType, LineType)):
|
|
821
|
+
inner_multi = multi if origin_type else bool(type_definition.multi)
|
|
822
|
+
if element.tid not in self.geometric_attributes:
|
|
823
|
+
self.geometric_attributes.append(element.tid)
|
|
824
|
+
if inner_multi and element.tid not in self.geometric_attributes_multi:
|
|
825
|
+
self.geometric_attributes_multi.append(element.tid)
|
|
826
|
+
if isinstance(type_definition, CoordTypeType):
|
|
827
|
+
if element.tid not in self.geometric_attributes_point_like:
|
|
828
|
+
self.geometric_attributes_point_like.append(element.tid)
|
|
829
|
+
elif isinstance(type_definition, LineTypeType) and type_definition.kind in [
|
|
830
|
+
"Polyline",
|
|
831
|
+
"DirectedPolyline",
|
|
832
|
+
]:
|
|
833
|
+
if element.tid not in self.geometric_attributes_line_like:
|
|
834
|
+
self.geometric_attributes_line_like.append(element.tid)
|
|
835
|
+
elif isinstance(type_definition, LineTypeType) and type_definition.kind in [
|
|
836
|
+
"Surface",
|
|
837
|
+
"Area",
|
|
838
|
+
]:
|
|
839
|
+
if element.tid not in self.geometric_attributes_polygon_like:
|
|
840
|
+
self.geometric_attributes_polygon_like.append(element.tid)
|
|
841
|
+
else:
|
|
842
|
+
logging.debug(f"Unexpected geometric type {type_definition}")
|
|
843
|
+
if (
|
|
844
|
+
element.attr_parent
|
|
845
|
+
and hasattr(element.attr_parent, "ref")
|
|
846
|
+
and element.attr_parent.ref
|
|
847
|
+
):
|
|
848
|
+
class_definition: Class = self.index[element.attr_parent.ref]
|
|
849
|
+
if class_definition.tid not in self.geometric_classes:
|
|
850
|
+
self.geometric_classes[class_definition.tid] = []
|
|
851
|
+
self.geometric_classes[class_definition.tid].append(element.tid)
|
|
852
|
+
# adding attribute info level to index
|
|
853
|
+
if (
|
|
854
|
+
isinstance(type_definition, LineType)
|
|
855
|
+
and element.tid not in self.geometric_attributes_line_form
|
|
856
|
+
):
|
|
857
|
+
self.geometric_attributes_line_form[element.tid] = self.line_type[
|
|
858
|
+
type_definition.tid
|
|
859
|
+
]
|
|
860
|
+
for attribute_oid in self.types_used_by_attributes.get(
|
|
861
|
+
class_definition.tid, []
|
|
862
|
+
):
|
|
863
|
+
# the geometric class was used as a type for another class attribute
|
|
864
|
+
structure_attribute = self.index[attribute_oid]
|
|
865
|
+
if structure_attribute.type_value and hasattr(
|
|
866
|
+
structure_attribute.type_value, "ref"
|
|
867
|
+
):
|
|
868
|
+
structure_attribute_type = self.index[
|
|
869
|
+
structure_attribute.type_value.ref
|
|
870
|
+
]
|
|
871
|
+
multi = inner_multi
|
|
872
|
+
if structure_attribute_type.multiplicity and (
|
|
873
|
+
structure_attribute_type.multiplicity.multiplicity.max is None
|
|
874
|
+
or structure_attribute_type.multiplicity.multiplicity.max > 1
|
|
875
|
+
):
|
|
876
|
+
multi = True
|
|
877
|
+
self.handle_geometric(structure_attribute, type_definition, multi)
|
|
878
|
+
else:
|
|
879
|
+
logging.debug(
|
|
880
|
+
f"Element {element.tid} has no attr_parent or attr_parent.ref is None"
|
|
881
|
+
)
|
|
882
|
+
|
|
883
|
+
def handle_multivalue_type(self, element: AttrOrParam):
|
|
884
|
+
pass
|
|
885
|
+
|
|
886
|
+
@property
|
|
887
|
+
def association_classes(self) -> dict:
|
|
888
|
+
"""
|
|
889
|
+
Delivers all associations which represent own classes as defined in the reference
|
|
890
|
+
manual of INTERLIS.
|
|
891
|
+
|
|
892
|
+
Returns:
|
|
893
|
+
A dictionary where the key is the association oid and the value is a list of tuples
|
|
894
|
+
defining the attributes of the association and its roles.
|
|
895
|
+
"""
|
|
896
|
+
association_classes: dict = {}
|
|
897
|
+
for association_oid in self.association_bucket:
|
|
898
|
+
association_object = self.index[association_oid]
|
|
899
|
+
role_definitions = self.association_bucket[association_oid]
|
|
900
|
+
maxes = []
|
|
901
|
+
logging.debug(f"Deciding if association is own class {association_object}")
|
|
902
|
+
for _role_oid, referenced_class_oid, _strongness, _min, max in role_definitions:
|
|
903
|
+
if max is None or max > 1:
|
|
904
|
+
maxes.append(referenced_class_oid)
|
|
905
|
+
if len(role_definitions) > 2:
|
|
906
|
+
association_classes[association_oid] = role_definitions
|
|
907
|
+
logging.debug(" Association has > 2 roles => own class")
|
|
908
|
+
elif len(maxes) == len(role_definitions):
|
|
909
|
+
association_classes[association_oid] = role_definitions
|
|
910
|
+
logging.debug(" Multiplicities are > 1 for all roles => own class")
|
|
911
|
+
elif len(maxes) == 1:
|
|
912
|
+
class_object = self.index[maxes[0]]
|
|
913
|
+
if (
|
|
914
|
+
class_object.element_in_package.ref
|
|
915
|
+
!= association_object.element_in_package.ref
|
|
916
|
+
):
|
|
917
|
+
association_classes[association_oid] = role_definitions
|
|
918
|
+
logging.debug(
|
|
919
|
+
" One roles multiplicity is > 1 but cant be embedded because "
|
|
920
|
+
f"target class {class_object} is in an other topic than the base "
|
|
921
|
+
f"association {association_object} => own class"
|
|
922
|
+
)
|
|
923
|
+
elif len(maxes) == 0:
|
|
924
|
+
logging.debug(" Multiplicities are <= 1 for all roles")
|
|
925
|
+
class_object2 = self.index[role_definitions[1][1]]
|
|
926
|
+
class_object1 = self.index[role_definitions[0][1]]
|
|
927
|
+
if (
|
|
928
|
+
class_object2.element_in_package.ref
|
|
929
|
+
!= association_object.element_in_package.ref
|
|
930
|
+
!= class_object1.element_in_package.ref
|
|
931
|
+
):
|
|
932
|
+
logging.debug(
|
|
933
|
+
f" Both target classes {class_object2} {class_object1} are in "
|
|
934
|
+
f"different topic than base association {association_object} => own "
|
|
935
|
+
"class"
|
|
936
|
+
)
|
|
937
|
+
elif hasattr(association_object, "oid") and association_object.oid is not None:
|
|
938
|
+
association_classes[association_oid] = role_definitions
|
|
939
|
+
logging.debug(" Association has OID => own class")
|
|
940
|
+
elif len(self.class_subclassed_by.get(association_object.tid, [])) > 0:
|
|
941
|
+
association_classes[association_oid] = role_definitions
|
|
942
|
+
logging.debug(
|
|
943
|
+
" Associaction has Subclasses, we construct a class for validity "
|
|
944
|
+
"reason "
|
|
945
|
+
f"(Dataclasses) {association_object} => own class"
|
|
946
|
+
)
|
|
947
|
+
return association_classes
|
|
948
|
+
|
|
949
|
+
@property
|
|
950
|
+
def associations_embedded(self):
|
|
951
|
+
associations_embedded: dict = {}
|
|
952
|
+
association_classes = self.association_classes
|
|
953
|
+
for association_oid in self.association_bucket:
|
|
954
|
+
association_object = self.index[association_oid]
|
|
955
|
+
logging.debug(f"Deciding if association gets embedded {association_object}")
|
|
956
|
+
role_definitions = self.association_bucket[association_oid]
|
|
957
|
+
if association_oid not in association_classes:
|
|
958
|
+
if len(role_definitions) == 2:
|
|
959
|
+
# we check only the associations which are not already clearly own classes
|
|
960
|
+
# and regarding reference manual only associations with 2 members are
|
|
961
|
+
# candidates to be embedded.
|
|
962
|
+
logging.debug(
|
|
963
|
+
" Association has 2 Role definitions, checking how to embedd..."
|
|
964
|
+
)
|
|
965
|
+
maxes = []
|
|
966
|
+
roles = {}
|
|
967
|
+
for role_definition in role_definitions:
|
|
968
|
+
multiplicity_max = role_definition[-1]
|
|
969
|
+
if multiplicity_max is None or multiplicity_max > 1:
|
|
970
|
+
maxes.append(role_definition)
|
|
971
|
+
roles[role_definition[0]] = role_definition
|
|
972
|
+
if len(maxes) == 1:
|
|
973
|
+
if maxes[0][1] not in associations_embedded:
|
|
974
|
+
associations_embedded[maxes[0][1]] = []
|
|
975
|
+
associations_embedded[maxes[0][1]].append(
|
|
976
|
+
self.switch(roles, maxes[0][0])
|
|
977
|
+
)
|
|
978
|
+
logging.debug(
|
|
979
|
+
" Embedding at target class vice versa the multiplicity > 1"
|
|
980
|
+
)
|
|
981
|
+
elif len(maxes) == 0:
|
|
982
|
+
class_object2 = self.index[role_definitions[1][1]]
|
|
983
|
+
class_object1 = self.index[role_definitions[0][1]]
|
|
984
|
+
if (
|
|
985
|
+
class_object2.element_in_package.ref
|
|
986
|
+
== association_object.element_in_package.ref
|
|
987
|
+
):
|
|
988
|
+
if class_object2.tid not in associations_embedded:
|
|
989
|
+
associations_embedded[class_object2.tid] = []
|
|
990
|
+
associations_embedded[class_object2.tid].append(
|
|
991
|
+
role_definitions[0]
|
|
992
|
+
)
|
|
993
|
+
logging.debug(
|
|
994
|
+
" Embedding at target class 2 vice versa the multiplicity "
|
|
995
|
+
"<= 1"
|
|
996
|
+
)
|
|
997
|
+
elif (
|
|
998
|
+
class_object1.element_in_package.ref
|
|
999
|
+
== association_object.element_in_package.ref
|
|
1000
|
+
):
|
|
1001
|
+
if class_object1.tid not in associations_embedded:
|
|
1002
|
+
associations_embedded[class_object1.tid] = []
|
|
1003
|
+
associations_embedded[class_object1.tid].append(
|
|
1004
|
+
role_definitions[1]
|
|
1005
|
+
)
|
|
1006
|
+
logging.debug(
|
|
1007
|
+
" Embedding at target class 1 vice versa the multiplicity "
|
|
1008
|
+
"<= 1"
|
|
1009
|
+
)
|
|
1010
|
+
else:
|
|
1011
|
+
self.aa_not_touched.append(association_oid)
|
|
1012
|
+
|
|
1013
|
+
return associations_embedded
|
|
1014
|
+
|
|
1015
|
+
def switch(self, d, key):
|
|
1016
|
+
# Dict hat genau 2 Keys
|
|
1017
|
+
k1, k2 = d.keys()
|
|
1018
|
+
return d[k2] if key == k1 else d[k1]
|