dsp-tools 0.9.13__py3-none-any.whl → 18.3.0.post13__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.
- dsp_tools/__init__.py +5 -0
- dsp_tools/cli/args.py +47 -0
- dsp_tools/cli/call_action.py +85 -0
- dsp_tools/cli/call_action_files_only.py +101 -0
- dsp_tools/cli/call_action_with_network.py +207 -0
- dsp_tools/cli/create_parsers.py +479 -0
- dsp_tools/cli/entry_point.py +322 -0
- dsp_tools/cli/utils.py +87 -0
- dsp_tools/clients/CLAUDE.md +420 -0
- dsp_tools/clients/authentication_client.py +14 -0
- dsp_tools/clients/authentication_client_live.py +66 -0
- dsp_tools/clients/connection.py +35 -0
- dsp_tools/clients/connection_live.py +233 -0
- dsp_tools/clients/fuseki_metrics.py +60 -0
- dsp_tools/clients/group_user_clients.py +35 -0
- dsp_tools/clients/group_user_clients_live.py +181 -0
- dsp_tools/clients/legal_info_client.py +23 -0
- dsp_tools/clients/legal_info_client_live.py +132 -0
- dsp_tools/clients/list_client.py +49 -0
- dsp_tools/clients/list_client_live.py +166 -0
- dsp_tools/clients/metadata_client.py +24 -0
- dsp_tools/clients/metadata_client_live.py +47 -0
- dsp_tools/clients/ontology_clients.py +49 -0
- dsp_tools/clients/ontology_create_client_live.py +166 -0
- dsp_tools/clients/ontology_get_client_live.py +80 -0
- dsp_tools/clients/permissions_client.py +68 -0
- dsp_tools/clients/project_client.py +16 -0
- dsp_tools/clients/project_client_live.py +66 -0
- dsp_tools/commands/create/communicate_problems.py +24 -0
- dsp_tools/commands/create/create.py +134 -0
- dsp_tools/commands/create/create_on_server/cardinalities.py +111 -0
- dsp_tools/commands/create/create_on_server/classes.py +99 -0
- dsp_tools/commands/create/create_on_server/complete_ontologies.py +116 -0
- dsp_tools/commands/create/create_on_server/default_permissions.py +134 -0
- dsp_tools/commands/create/create_on_server/group_users.py +165 -0
- dsp_tools/commands/create/create_on_server/lists.py +163 -0
- dsp_tools/commands/create/create_on_server/mappers.py +12 -0
- dsp_tools/commands/create/create_on_server/onto_utils.py +74 -0
- dsp_tools/commands/create/create_on_server/ontology.py +52 -0
- dsp_tools/commands/create/create_on_server/project.py +68 -0
- dsp_tools/commands/create/create_on_server/properties.py +119 -0
- dsp_tools/commands/create/exceptions.py +29 -0
- dsp_tools/commands/create/lists_only.py +66 -0
- dsp_tools/commands/create/models/create_problems.py +87 -0
- dsp_tools/commands/create/models/parsed_ontology.py +88 -0
- dsp_tools/commands/create/models/parsed_project.py +81 -0
- dsp_tools/commands/create/models/rdf_ontology.py +12 -0
- dsp_tools/commands/create/models/server_project_info.py +100 -0
- dsp_tools/commands/create/parsing/parse_lists.py +45 -0
- dsp_tools/commands/create/parsing/parse_ontology.py +243 -0
- dsp_tools/commands/create/parsing/parse_project.py +149 -0
- dsp_tools/commands/create/parsing/parsing_utils.py +40 -0
- dsp_tools/commands/create/project_validate.py +595 -0
- dsp_tools/commands/create/serialisation/ontology.py +119 -0
- dsp_tools/commands/create/serialisation/project.py +44 -0
- dsp_tools/commands/excel2json/CLAUDE.md +101 -0
- dsp_tools/commands/excel2json/json_header.py +321 -0
- dsp_tools/commands/excel2json/lists/__init__.py +0 -0
- dsp_tools/commands/excel2json/lists/compliance_checks.py +292 -0
- dsp_tools/commands/excel2json/lists/make_lists.py +247 -0
- dsp_tools/commands/excel2json/lists/models/__init__.py +0 -0
- dsp_tools/commands/excel2json/lists/models/deserialise.py +30 -0
- dsp_tools/commands/excel2json/lists/models/input_error.py +216 -0
- dsp_tools/commands/excel2json/lists/models/serialise.py +57 -0
- dsp_tools/commands/excel2json/lists/utils.py +81 -0
- dsp_tools/commands/excel2json/models/__init__.py +0 -0
- dsp_tools/commands/excel2json/models/input_error.py +416 -0
- dsp_tools/commands/excel2json/models/json_header.py +175 -0
- dsp_tools/commands/excel2json/models/list_node_name.py +16 -0
- dsp_tools/commands/excel2json/models/ontology.py +76 -0
- dsp_tools/commands/excel2json/old_lists.py +328 -0
- dsp_tools/commands/excel2json/project.py +280 -0
- dsp_tools/commands/excel2json/properties.py +370 -0
- dsp_tools/commands/excel2json/resources.py +336 -0
- dsp_tools/commands/excel2json/utils.py +352 -0
- dsp_tools/commands/excel2xml/__init__.py +7 -0
- dsp_tools/commands/excel2xml/excel2xml_cli.py +523 -0
- dsp_tools/commands/excel2xml/excel2xml_lib.py +1953 -0
- dsp_tools/commands/excel2xml/propertyelement.py +47 -0
- dsp_tools/commands/get/__init__.py +0 -0
- dsp_tools/commands/get/get.py +166 -0
- dsp_tools/commands/get/get_permissions.py +257 -0
- dsp_tools/commands/get/get_permissions_legacy.py +89 -0
- dsp_tools/commands/get/legacy_models/__init__.py +0 -0
- dsp_tools/commands/get/legacy_models/context.py +318 -0
- dsp_tools/commands/get/legacy_models/group.py +241 -0
- dsp_tools/commands/get/legacy_models/helpers.py +47 -0
- dsp_tools/commands/get/legacy_models/listnode.py +390 -0
- dsp_tools/commands/get/legacy_models/model.py +12 -0
- dsp_tools/commands/get/legacy_models/ontology.py +324 -0
- dsp_tools/commands/get/legacy_models/project.py +366 -0
- dsp_tools/commands/get/legacy_models/propertyclass.py +417 -0
- dsp_tools/commands/get/legacy_models/resourceclass.py +676 -0
- dsp_tools/commands/get/legacy_models/user.py +438 -0
- dsp_tools/commands/get/models/__init__.py +0 -0
- dsp_tools/commands/get/models/permissions_models.py +10 -0
- dsp_tools/commands/id2iri.py +258 -0
- dsp_tools/commands/ingest_xmlupload/__init__.py +0 -0
- dsp_tools/commands/ingest_xmlupload/bulk_ingest_client.py +178 -0
- dsp_tools/commands/ingest_xmlupload/create_resources/__init__.py +0 -0
- dsp_tools/commands/ingest_xmlupload/create_resources/apply_ingest_id.py +69 -0
- dsp_tools/commands/ingest_xmlupload/create_resources/upload_xml.py +166 -0
- dsp_tools/commands/ingest_xmlupload/create_resources/user_information.py +121 -0
- dsp_tools/commands/ingest_xmlupload/ingest_files/__init__.py +0 -0
- dsp_tools/commands/ingest_xmlupload/ingest_files/ingest_files.py +64 -0
- dsp_tools/commands/ingest_xmlupload/upload_files/__init__.py +0 -0
- dsp_tools/commands/ingest_xmlupload/upload_files/filechecker.py +20 -0
- dsp_tools/commands/ingest_xmlupload/upload_files/input_error.py +57 -0
- dsp_tools/commands/ingest_xmlupload/upload_files/upload_failures.py +66 -0
- dsp_tools/commands/ingest_xmlupload/upload_files/upload_files.py +67 -0
- dsp_tools/commands/resume_xmlupload/__init__.py +0 -0
- dsp_tools/commands/resume_xmlupload/resume_xmlupload.py +96 -0
- dsp_tools/commands/start_stack.py +428 -0
- dsp_tools/commands/update_legal/CLAUDE.md +344 -0
- dsp_tools/commands/update_legal/__init__.py +0 -0
- dsp_tools/commands/update_legal/core.py +182 -0
- dsp_tools/commands/update_legal/csv_operations.py +135 -0
- dsp_tools/commands/update_legal/models.py +87 -0
- dsp_tools/commands/update_legal/xml_operations.py +247 -0
- dsp_tools/commands/validate_data/CLAUDE.md +159 -0
- dsp_tools/commands/validate_data/__init__.py +0 -0
- dsp_tools/commands/validate_data/constants.py +59 -0
- dsp_tools/commands/validate_data/mappers.py +143 -0
- dsp_tools/commands/validate_data/models/__init__.py +0 -0
- dsp_tools/commands/validate_data/models/api_responses.py +45 -0
- dsp_tools/commands/validate_data/models/input_problems.py +119 -0
- dsp_tools/commands/validate_data/models/rdf_like_data.py +117 -0
- dsp_tools/commands/validate_data/models/validation.py +106 -0
- dsp_tools/commands/validate_data/prepare_data/__init__.py +0 -0
- dsp_tools/commands/validate_data/prepare_data/get_rdf_like_data.py +296 -0
- dsp_tools/commands/validate_data/prepare_data/make_data_graph.py +91 -0
- dsp_tools/commands/validate_data/prepare_data/prepare_data.py +184 -0
- dsp_tools/commands/validate_data/process_validation_report/__init__.py +0 -0
- dsp_tools/commands/validate_data/process_validation_report/get_user_validation_message.py +358 -0
- dsp_tools/commands/validate_data/process_validation_report/query_validation_result.py +507 -0
- dsp_tools/commands/validate_data/process_validation_report/reformat_validation_results.py +150 -0
- dsp_tools/commands/validate_data/shacl_cli_validator.py +70 -0
- dsp_tools/commands/validate_data/sparql/__init__.py +0 -0
- dsp_tools/commands/validate_data/sparql/cardinality_shacl.py +209 -0
- dsp_tools/commands/validate_data/sparql/construct_shacl.py +92 -0
- dsp_tools/commands/validate_data/sparql/legal_info_shacl.py +36 -0
- dsp_tools/commands/validate_data/sparql/value_shacl.py +357 -0
- dsp_tools/commands/validate_data/utils.py +59 -0
- dsp_tools/commands/validate_data/validate_data.py +283 -0
- dsp_tools/commands/validate_data/validation/__init__.py +0 -0
- dsp_tools/commands/validate_data/validation/check_duplicate_files.py +55 -0
- dsp_tools/commands/validate_data/validation/check_for_unknown_classes.py +67 -0
- dsp_tools/commands/validate_data/validation/get_validation_report.py +94 -0
- dsp_tools/commands/validate_data/validation/validate_ontology.py +107 -0
- dsp_tools/commands/xmlupload/CLAUDE.md +292 -0
- dsp_tools/commands/xmlupload/__init__.py +0 -0
- dsp_tools/commands/xmlupload/iri_resolver.py +21 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/__init__.py +0 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/constants.py +63 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/jsonld_utils.py +44 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/make_file_value.py +77 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/make_resource_and_values.py +114 -0
- dsp_tools/commands/xmlupload/make_rdf_graph/make_values.py +262 -0
- dsp_tools/commands/xmlupload/models/__init__.py +0 -0
- dsp_tools/commands/xmlupload/models/bitstream_info.py +18 -0
- dsp_tools/commands/xmlupload/models/formatted_text_value.py +10 -0
- dsp_tools/commands/xmlupload/models/ingest.py +143 -0
- dsp_tools/commands/xmlupload/models/input_problems.py +58 -0
- dsp_tools/commands/xmlupload/models/lookup_models.py +21 -0
- dsp_tools/commands/xmlupload/models/permission.py +45 -0
- dsp_tools/commands/xmlupload/models/permissions_parsed.py +93 -0
- dsp_tools/commands/xmlupload/models/processed/__init__.py +0 -0
- dsp_tools/commands/xmlupload/models/processed/file_values.py +29 -0
- dsp_tools/commands/xmlupload/models/processed/res.py +27 -0
- dsp_tools/commands/xmlupload/models/processed/values.py +101 -0
- dsp_tools/commands/xmlupload/models/rdf_models.py +26 -0
- dsp_tools/commands/xmlupload/models/upload_clients.py +14 -0
- dsp_tools/commands/xmlupload/models/upload_state.py +20 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/__init__.py +0 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/ark2iri.py +55 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/get_processed_resources.py +252 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/iiif_uri_validator.py +50 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/list_client.py +120 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/prepare_xml_input.py +67 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/read_validate_xml_file.py +58 -0
- dsp_tools/commands/xmlupload/prepare_xml_input/transform_input_values.py +118 -0
- dsp_tools/commands/xmlupload/resource_create_client.py +25 -0
- dsp_tools/commands/xmlupload/richtext_id2iri.py +37 -0
- dsp_tools/commands/xmlupload/stash/__init__.py +0 -0
- dsp_tools/commands/xmlupload/stash/analyse_circular_reference_graph.py +236 -0
- dsp_tools/commands/xmlupload/stash/create_info_for_graph.py +53 -0
- dsp_tools/commands/xmlupload/stash/graph_models.py +87 -0
- dsp_tools/commands/xmlupload/stash/stash_circular_references.py +68 -0
- dsp_tools/commands/xmlupload/stash/stash_models.py +109 -0
- dsp_tools/commands/xmlupload/stash/upload_stashed_resptr_props.py +106 -0
- dsp_tools/commands/xmlupload/stash/upload_stashed_xml_texts.py +196 -0
- dsp_tools/commands/xmlupload/upload_config.py +76 -0
- dsp_tools/commands/xmlupload/write_diagnostic_info.py +27 -0
- dsp_tools/commands/xmlupload/xmlupload.py +516 -0
- dsp_tools/config/__init__.py +0 -0
- dsp_tools/config/logger_config.py +69 -0
- dsp_tools/config/warnings_config.py +32 -0
- dsp_tools/error/__init__.py +0 -0
- dsp_tools/error/custom_warnings.py +39 -0
- dsp_tools/error/exceptions.py +204 -0
- dsp_tools/error/problems.py +10 -0
- dsp_tools/error/xmllib_errors.py +20 -0
- dsp_tools/error/xmllib_warnings.py +54 -0
- dsp_tools/error/xmllib_warnings_util.py +159 -0
- dsp_tools/error/xsd_validation_error_msg.py +19 -0
- dsp_tools/legacy_models/__init__.py +0 -0
- dsp_tools/legacy_models/datetimestamp.py +81 -0
- dsp_tools/legacy_models/langstring.py +253 -0
- dsp_tools/legacy_models/projectContext.py +49 -0
- dsp_tools/py.typed +0 -0
- dsp_tools/resources/schema/data.xsd +648 -0
- dsp_tools/resources/schema/lists-only.json +72 -0
- dsp_tools/resources/schema/project.json +1258 -0
- dsp_tools/resources/schema/properties-only.json +874 -0
- dsp_tools/resources/schema/resources-only.json +140 -0
- dsp_tools/resources/start-stack/docker-compose.override-host.j2 +11 -0
- dsp_tools/resources/start-stack/docker-compose.override.yml +11 -0
- dsp_tools/resources/start-stack/docker-compose.yml +88 -0
- dsp_tools/resources/start-stack/dsp-app-config.json +45 -0
- dsp_tools/resources/start-stack/dsp-app-config.override-host.j2 +26 -0
- dsp_tools/resources/validate_data/api-shapes-resource-cardinalities.ttl +191 -0
- dsp_tools/resources/validate_data/api-shapes.ttl +804 -0
- dsp_tools/resources/validate_data/shacl-cli-image.yml +4 -0
- dsp_tools/resources/validate_data/validate-ontology.ttl +99 -0
- dsp_tools/utils/__init__.py +0 -0
- dsp_tools/utils/ansi_colors.py +32 -0
- dsp_tools/utils/data_formats/__init__.py +0 -0
- dsp_tools/utils/data_formats/date_util.py +166 -0
- dsp_tools/utils/data_formats/iri_util.py +30 -0
- dsp_tools/utils/data_formats/shared.py +81 -0
- dsp_tools/utils/data_formats/uri_util.py +76 -0
- dsp_tools/utils/fuseki_bloating.py +63 -0
- dsp_tools/utils/json_parsing.py +22 -0
- dsp_tools/utils/rdf_constants.py +42 -0
- dsp_tools/utils/rdflib_utils.py +10 -0
- dsp_tools/utils/replace_id_with_iri.py +66 -0
- dsp_tools/utils/request_utils.py +238 -0
- dsp_tools/utils/xml_parsing/__init__.py +0 -0
- dsp_tools/utils/xml_parsing/get_lookups.py +32 -0
- dsp_tools/utils/xml_parsing/get_parsed_resources.py +325 -0
- dsp_tools/utils/xml_parsing/models/__init__.py +0 -0
- dsp_tools/utils/xml_parsing/models/parsed_resource.py +76 -0
- dsp_tools/utils/xml_parsing/parse_clean_validate_xml.py +137 -0
- dsp_tools/xmllib/CLAUDE.md +302 -0
- dsp_tools/xmllib/__init__.py +49 -0
- dsp_tools/xmllib/general_functions.py +877 -0
- dsp_tools/xmllib/internal/__init__.py +0 -0
- dsp_tools/xmllib/internal/checkers.py +162 -0
- dsp_tools/xmllib/internal/circumvent_circular_imports.py +36 -0
- dsp_tools/xmllib/internal/constants.py +46 -0
- dsp_tools/xmllib/internal/input_converters.py +155 -0
- dsp_tools/xmllib/internal/serialise_file_value.py +57 -0
- dsp_tools/xmllib/internal/serialise_resource.py +177 -0
- dsp_tools/xmllib/internal/serialise_values.py +152 -0
- dsp_tools/xmllib/internal/type_aliases.py +11 -0
- dsp_tools/xmllib/models/__init__.py +0 -0
- dsp_tools/xmllib/models/config_options.py +28 -0
- dsp_tools/xmllib/models/date_formats.py +48 -0
- dsp_tools/xmllib/models/dsp_base_resources.py +1542 -0
- dsp_tools/xmllib/models/internal/__init__.py +0 -0
- dsp_tools/xmllib/models/internal/file_values.py +172 -0
- dsp_tools/xmllib/models/internal/geometry.py +162 -0
- dsp_tools/xmllib/models/internal/migration_metadata.py +55 -0
- dsp_tools/xmllib/models/internal/serialise_permissions.py +66 -0
- dsp_tools/xmllib/models/internal/values.py +342 -0
- dsp_tools/xmllib/models/licenses/__init__.py +0 -0
- dsp_tools/xmllib/models/licenses/other.py +59 -0
- dsp_tools/xmllib/models/licenses/recommended.py +107 -0
- dsp_tools/xmllib/models/permissions.py +41 -0
- dsp_tools/xmllib/models/res.py +1782 -0
- dsp_tools/xmllib/models/root.py +348 -0
- dsp_tools/xmllib/value_checkers.py +434 -0
- dsp_tools/xmllib/value_converters.py +777 -0
- dsp_tools-18.3.0.post13.dist-info/METADATA +90 -0
- dsp_tools-18.3.0.post13.dist-info/RECORD +286 -0
- dsp_tools-18.3.0.post13.dist-info/WHEEL +4 -0
- dsp_tools-18.3.0.post13.dist-info/entry_points.txt +3 -0
- dsp_tools-0.9.13.dist-info/LICENSE +0 -674
- dsp_tools-0.9.13.dist-info/METADATA +0 -144
- dsp_tools-0.9.13.dist-info/RECORD +0 -71
- dsp_tools-0.9.13.dist-info/WHEEL +0 -5
- dsp_tools-0.9.13.dist-info/entry_points.txt +0 -3
- dsp_tools-0.9.13.dist-info/top_level.txt +0 -1
- dsplib/models/connection.py +0 -272
- dsplib/models/group.py +0 -296
- dsplib/models/helpers.py +0 -505
- dsplib/models/langstring.py +0 -277
- dsplib/models/listnode.py +0 -578
- dsplib/models/model.py +0 -20
- dsplib/models/ontology.py +0 -448
- dsplib/models/permission.py +0 -112
- dsplib/models/project.py +0 -547
- dsplib/models/propertyclass.py +0 -505
- dsplib/models/resource.py +0 -366
- dsplib/models/resourceclass.py +0 -810
- dsplib/models/sipi.py +0 -30
- dsplib/models/user.py +0 -731
- dsplib/models/value.py +0 -1000
- dsplib/utils/knora-data-schema.xsd +0 -454
- dsplib/utils/knora-schema-lists.json +0 -83
- dsplib/utils/knora-schema.json +0 -434
- dsplib/utils/onto_commons.py +0 -24
- dsplib/utils/onto_create_lists.py +0 -73
- dsplib/utils/onto_create_ontology.py +0 -442
- dsplib/utils/onto_get.py +0 -58
- dsplib/utils/onto_validate.py +0 -33
- dsplib/utils/xml_upload.py +0 -539
- dsplib/widgets/doublepassword.py +0 -80
- knora/MLS-import-libraries.py +0 -84
- knora/dsp_tools.py +0 -96
- knora/dsplib/models/connection.py +0 -272
- knora/dsplib/models/group.py +0 -296
- knora/dsplib/models/helpers.py +0 -506
- knora/dsplib/models/langstring.py +0 -277
- knora/dsplib/models/listnode.py +0 -578
- knora/dsplib/models/model.py +0 -20
- knora/dsplib/models/ontology.py +0 -448
- knora/dsplib/models/permission.py +0 -112
- knora/dsplib/models/project.py +0 -583
- knora/dsplib/models/propertyclass.py +0 -505
- knora/dsplib/models/resource.py +0 -416
- knora/dsplib/models/resourceclass.py +0 -811
- knora/dsplib/models/sipi.py +0 -35
- knora/dsplib/models/user.py +0 -731
- knora/dsplib/models/value.py +0 -1000
- knora/dsplib/utils/knora-data-schema.xsd +0 -464
- knora/dsplib/utils/knora-schema-lists.json +0 -83
- knora/dsplib/utils/knora-schema.json +0 -444
- knora/dsplib/utils/onto_commons.py +0 -24
- knora/dsplib/utils/onto_create_lists.py +0 -73
- knora/dsplib/utils/onto_create_ontology.py +0 -451
- knora/dsplib/utils/onto_get.py +0 -58
- knora/dsplib/utils/onto_validate.py +0 -33
- knora/dsplib/utils/xml_upload.py +0 -540
- knora/dsplib/widgets/doublepassword.py +0 -80
- knora/knora.py +0 -2108
- knora/test.py +0 -99
- knora/testit.py +0 -76
- knora/xml2knora.py +0 -633
- {dsplib → dsp_tools/cli}/__init__.py +0 -0
- {dsplib/models → dsp_tools/clients}/__init__.py +0 -0
- {dsplib/utils → dsp_tools/commands}/__init__.py +0 -0
- {dsplib/widgets → dsp_tools/commands/create}/__init__.py +0 -0
- {knora → dsp_tools/commands/create/create_on_server}/__init__.py +0 -0
- {knora/dsplib → dsp_tools/commands/create/models}/__init__.py +0 -0
- {knora/dsplib/models → dsp_tools/commands/create/parsing}/__init__.py +0 -0
- {knora/dsplib/utils → dsp_tools/commands/create/serialisation}/__init__.py +0 -0
- {knora/dsplib/widgets → dsp_tools/commands/excel2json}/__init__.py +0 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from collections import defaultdict
|
|
3
|
+
from copy import deepcopy
|
|
4
|
+
from typing import cast
|
|
5
|
+
|
|
6
|
+
from dotenv import find_dotenv
|
|
7
|
+
from dotenv import load_dotenv
|
|
8
|
+
from lxml import etree
|
|
9
|
+
|
|
10
|
+
from dsp_tools.error.xmllib_errors import XmllibInternalError
|
|
11
|
+
from dsp_tools.xmllib.internal.circumvent_circular_imports import parse_richtext_as_xml
|
|
12
|
+
from dsp_tools.xmllib.internal.constants import DASCH_SCHEMA
|
|
13
|
+
from dsp_tools.xmllib.internal.constants import XML_NAMESPACE_MAP
|
|
14
|
+
from dsp_tools.xmllib.models.internal.values import BooleanValue
|
|
15
|
+
from dsp_tools.xmllib.models.internal.values import ColorValue
|
|
16
|
+
from dsp_tools.xmllib.models.internal.values import DateValue
|
|
17
|
+
from dsp_tools.xmllib.models.internal.values import DecimalValue
|
|
18
|
+
from dsp_tools.xmllib.models.internal.values import GeonameValue
|
|
19
|
+
from dsp_tools.xmllib.models.internal.values import IntValue
|
|
20
|
+
from dsp_tools.xmllib.models.internal.values import LinkValue
|
|
21
|
+
from dsp_tools.xmllib.models.internal.values import ListValue
|
|
22
|
+
from dsp_tools.xmllib.models.internal.values import Richtext
|
|
23
|
+
from dsp_tools.xmllib.models.internal.values import SimpleText
|
|
24
|
+
from dsp_tools.xmllib.models.internal.values import TimeValue
|
|
25
|
+
from dsp_tools.xmllib.models.internal.values import UriValue
|
|
26
|
+
from dsp_tools.xmllib.models.internal.values import Value
|
|
27
|
+
from dsp_tools.xmllib.models.permissions import Permissions
|
|
28
|
+
|
|
29
|
+
load_dotenv(dotenv_path=find_dotenv(usecwd=True))
|
|
30
|
+
|
|
31
|
+
PROP_TYPE_LOOKUP = {
|
|
32
|
+
BooleanValue: "boolean",
|
|
33
|
+
ColorValue: "color",
|
|
34
|
+
DateValue: "date",
|
|
35
|
+
DecimalValue: "decimal",
|
|
36
|
+
GeonameValue: "geoname",
|
|
37
|
+
IntValue: "integer",
|
|
38
|
+
LinkValue: "resptr",
|
|
39
|
+
ListValue: "list",
|
|
40
|
+
TimeValue: "time",
|
|
41
|
+
UriValue: "uri",
|
|
42
|
+
Richtext: "richtext",
|
|
43
|
+
SimpleText: "simpletext",
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def serialise_values(all_values: list[Value]) -> list[etree._Element]:
|
|
48
|
+
"""
|
|
49
|
+
Serialise a list of values for a resource.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
all_values: List of Values
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
list of serialised values
|
|
56
|
+
"""
|
|
57
|
+
prop_tuples, type_lookup = _sort_and_group_values(all_values)
|
|
58
|
+
serialised = []
|
|
59
|
+
for prop_name, prop_values in prop_tuples:
|
|
60
|
+
prop_type = type_lookup[prop_name]
|
|
61
|
+
match prop_type:
|
|
62
|
+
case "list":
|
|
63
|
+
serialised.append(_serialise_complete_list_prop(cast(list[ListValue], prop_values), prop_name))
|
|
64
|
+
case "simpletext":
|
|
65
|
+
serialised.append(_serialise_complete_simple_text_prop(cast(list[SimpleText], prop_values), prop_name))
|
|
66
|
+
case "richtext":
|
|
67
|
+
serialised.append(_serialise_complete_richtext_prop(cast(list[Richtext], prop_values), prop_name))
|
|
68
|
+
case _:
|
|
69
|
+
serialised.append(_serialise_complete_generic_prop(prop_values, prop_name, prop_type))
|
|
70
|
+
return serialised
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _sort_and_group_values(all_values: list[Value]) -> tuple[list[tuple[str, list[Value]]], dict[str, str]]:
|
|
74
|
+
prop_groups, type_lookup = _group_properties(all_values)
|
|
75
|
+
prop_tuples = [(prop_name, values) for prop_name, values in prop_groups.items()]
|
|
76
|
+
env_var = str(os.getenv("XMLLIB_SORT_PROPERTIES")).lower()
|
|
77
|
+
if env_var == "true":
|
|
78
|
+
prop_tuples = [
|
|
79
|
+
(prop_name, sorted(prop_values, key=lambda x: x.value)) for (prop_name, prop_values) in prop_tuples
|
|
80
|
+
]
|
|
81
|
+
prop_tuples = sorted(prop_tuples, key=lambda x: x[0])
|
|
82
|
+
return prop_tuples, type_lookup
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _group_properties(values: list[Value]) -> tuple[dict[str, list[Value]], dict[str, str]]:
|
|
86
|
+
grouped = defaultdict(list)
|
|
87
|
+
name_type_lookup = {}
|
|
88
|
+
for val in values:
|
|
89
|
+
grouped[val.prop_name].append(val)
|
|
90
|
+
name_type_lookup[val.prop_name] = PROP_TYPE_LOOKUP[type(val)]
|
|
91
|
+
return grouped, name_type_lookup
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _serialise_complete_generic_prop(values: list[Value], prop_name: str, prop_type: str) -> etree._Element:
|
|
95
|
+
prop = _serialise_generic_prop(prop_name, prop_type)
|
|
96
|
+
for val in values:
|
|
97
|
+
val_ele = _serialise_generic_element(val, prop_type)
|
|
98
|
+
prop.append(val_ele)
|
|
99
|
+
return prop
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _serialise_generic_prop(prop_name: str, prop_type: str) -> etree._Element:
|
|
103
|
+
return etree.Element(f"{DASCH_SCHEMA}{prop_type}-prop", name=prop_name, nsmap=XML_NAMESPACE_MAP)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def _serialise_generic_element(value: Value, prop_type: str) -> etree._Element:
|
|
107
|
+
attribs = {}
|
|
108
|
+
if value.permissions != Permissions.PROJECT_SPECIFIC_PERMISSIONS:
|
|
109
|
+
attribs["permissions"] = value.permissions.value
|
|
110
|
+
if value.comment is not None:
|
|
111
|
+
attribs["comment"] = str(value.comment)
|
|
112
|
+
ele = etree.Element(f"{DASCH_SCHEMA}{prop_type}", attrib=attribs, nsmap=XML_NAMESPACE_MAP)
|
|
113
|
+
ele.text = str(value.value)
|
|
114
|
+
return ele
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _serialise_complete_list_prop(values: list[ListValue], prop_name: str) -> etree._Element:
|
|
118
|
+
list_name = next(iter(values)).list_name
|
|
119
|
+
prop = etree.Element(f"{DASCH_SCHEMA}list-prop", name=prop_name, list=list_name, nsmap=XML_NAMESPACE_MAP)
|
|
120
|
+
for val in values:
|
|
121
|
+
prop.append(_serialise_generic_element(val, "list"))
|
|
122
|
+
return prop
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def _serialise_complete_simple_text_prop(values: list[SimpleText], prop_name: str) -> etree._Element:
|
|
126
|
+
prop = _serialise_generic_prop(prop_name, "text")
|
|
127
|
+
for val in values:
|
|
128
|
+
val_ele = _serialise_generic_element(val, "text")
|
|
129
|
+
val_ele.attrib["encoding"] = "utf8"
|
|
130
|
+
prop.append(val_ele)
|
|
131
|
+
return prop
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def _serialise_complete_richtext_prop(values: list[Richtext], prop_name: str) -> etree._Element:
|
|
135
|
+
prop = _serialise_generic_prop(prop_name, "text")
|
|
136
|
+
for val in values:
|
|
137
|
+
val_ele = _serialise_generic_element(val, "text") # produces wrong text content
|
|
138
|
+
val_ele.attrib["encoding"] = "xml"
|
|
139
|
+
prop.append(_create_richtext_elements_from_string(val, val_ele)) # overwrite the wrong text content
|
|
140
|
+
return prop
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def _create_richtext_elements_from_string(value: Richtext, text_element: etree._Element) -> etree._Element:
|
|
144
|
+
new_element = deepcopy(text_element)
|
|
145
|
+
parsed_xml = parse_richtext_as_xml(value.value)
|
|
146
|
+
if not isinstance(parsed_xml, etree._Element):
|
|
147
|
+
raise XmllibInternalError(
|
|
148
|
+
"Richtexts should be validated for correct XML syntax when they are created. Apparently this didn't happen."
|
|
149
|
+
)
|
|
150
|
+
new_element.text = parsed_xml.text # everything before the first child tag
|
|
151
|
+
new_element.extend(list(parsed_xml)) # all (nested) children of the pseudo-xml
|
|
152
|
+
return new_element
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Union
|
|
4
|
+
|
|
5
|
+
from dsp_tools.xmllib.models.dsp_base_resources import AudioSegmentResource
|
|
6
|
+
from dsp_tools.xmllib.models.dsp_base_resources import LinkResource
|
|
7
|
+
from dsp_tools.xmllib.models.dsp_base_resources import RegionResource
|
|
8
|
+
from dsp_tools.xmllib.models.dsp_base_resources import VideoSegmentResource
|
|
9
|
+
from dsp_tools.xmllib.models.res import Resource
|
|
10
|
+
|
|
11
|
+
type AnyResource = Union[Resource, RegionResource, LinkResource, VideoSegmentResource, AudioSegmentResource]
|
|
File without changes
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
from enum import auto
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class NewlineReplacement(Enum):
|
|
8
|
+
"""
|
|
9
|
+
Options how to deal with `\\n` inside rich text values.
|
|
10
|
+
|
|
11
|
+
- `NONE`: don't modify the rich text (`\\n` will be lost, because it is meaningless in an XML file)
|
|
12
|
+
- `PARAGRAPH`: replace `Start\\nEnd` with `<p>Start</p><p>End</p>`
|
|
13
|
+
- `LINEBREAK`: replace `Start\\nEnd` with `Start<br/>End`
|
|
14
|
+
|
|
15
|
+
Examples:
|
|
16
|
+
```python
|
|
17
|
+
# setting the replacement options for newlines
|
|
18
|
+
resource = resource.add_richtext(
|
|
19
|
+
prop_name=":propName",
|
|
20
|
+
value="Start\\n\\nEnd",
|
|
21
|
+
newline_replacement=xmllib.NewlineReplacement.PARAGRAPH
|
|
22
|
+
)
|
|
23
|
+
```
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
NONE = auto()
|
|
27
|
+
PARAGRAPH = auto()
|
|
28
|
+
LINEBREAK = auto()
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
from enum import auto
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class DateFormat(Enum):
|
|
8
|
+
"""
|
|
9
|
+
Date format options for the [`reformat_date`](https://docs.dasch.swiss/latest/DSP-TOOLS/xmllib-docs/general-functions/#xmllib.general_functions.reformat_date) function.
|
|
10
|
+
|
|
11
|
+
- `YYYY_MM_DD`
|
|
12
|
+
- `DD_MM_YYYY`
|
|
13
|
+
- `MM_DD_YYYY`
|
|
14
|
+
""" # noqa: E501
|
|
15
|
+
|
|
16
|
+
YYYY_MM_DD = auto()
|
|
17
|
+
DD_MM_YYYY = auto()
|
|
18
|
+
MM_DD_YYYY = auto()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Calendar(Enum):
|
|
22
|
+
"""
|
|
23
|
+
Calendar options for the [`reformat_date`](https://docs.dasch.swiss/latest/DSP-TOOLS/xmllib-docs/general-functions/#xmllib.general_functions.reformat_date) function.
|
|
24
|
+
|
|
25
|
+
- `GREGORIAN`
|
|
26
|
+
- `JULIAN`
|
|
27
|
+
- `ISLAMIC`
|
|
28
|
+
""" # noqa: E501
|
|
29
|
+
|
|
30
|
+
GREGORIAN = "GREGORIAN"
|
|
31
|
+
JULIAN = "JULIAN"
|
|
32
|
+
ISLAMIC = "ISLAMIC"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Era(Enum):
|
|
36
|
+
"""
|
|
37
|
+
Era options for the [`reformat_date`](https://docs.dasch.swiss/latest/DSP-TOOLS/xmllib-docs/general-functions/#xmllib.general_functions.reformat_date) function.
|
|
38
|
+
|
|
39
|
+
- `CE`
|
|
40
|
+
- `BCE`
|
|
41
|
+
- `AD`
|
|
42
|
+
- `BC`
|
|
43
|
+
""" # noqa: E501
|
|
44
|
+
|
|
45
|
+
CE = "CE"
|
|
46
|
+
BCE = "BCE"
|
|
47
|
+
AD = "AD"
|
|
48
|
+
BC = "BC"
|