dsp-tools 9.1.0.post11__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 +4 -0
- dsp_tools/cli/args.py +36 -0
- dsp_tools/cli/call_action.py +51 -231
- 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 +156 -58
- dsp_tools/cli/entry_point.py +56 -26
- 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/{utils → clients}/connection.py +2 -18
- 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 +57 -23
- dsp_tools/commands/excel2json/{new_lists → lists}/compliance_checks.py +26 -26
- dsp_tools/commands/excel2json/{new_lists/make_new_lists.py → lists/make_lists.py} +19 -18
- dsp_tools/commands/excel2json/{new_lists → lists}/models/input_error.py +1 -12
- dsp_tools/commands/excel2json/{new_lists → lists}/models/serialise.py +9 -5
- dsp_tools/commands/excel2json/{new_lists → lists}/utils.py +4 -4
- dsp_tools/commands/excel2json/models/input_error.py +31 -11
- dsp_tools/commands/excel2json/models/json_header.py +53 -15
- dsp_tools/commands/excel2json/models/ontology.py +4 -3
- dsp_tools/commands/excel2json/{lists.py → old_lists.py} +26 -112
- dsp_tools/commands/excel2json/project.py +78 -34
- dsp_tools/commands/excel2json/properties.py +57 -36
- dsp_tools/commands/excel2json/resources.py +32 -12
- dsp_tools/commands/excel2json/utils.py +20 -1
- dsp_tools/commands/excel2xml/__init__.py +2 -2
- dsp_tools/commands/excel2xml/excel2xml_cli.py +7 -15
- dsp_tools/commands/excel2xml/excel2xml_lib.py +138 -493
- dsp_tools/commands/excel2xml/propertyelement.py +5 -5
- dsp_tools/commands/{project → get}/get.py +29 -13
- dsp_tools/commands/get/get_permissions.py +257 -0
- dsp_tools/commands/get/get_permissions_legacy.py +89 -0
- dsp_tools/commands/{project/models → get/legacy_models}/context.py +6 -6
- dsp_tools/commands/{project/models → get/legacy_models}/group.py +5 -10
- dsp_tools/commands/{project/models → get/legacy_models}/listnode.py +5 -35
- dsp_tools/commands/{project/models → get/legacy_models}/model.py +1 -1
- dsp_tools/commands/{project/models → get/legacy_models}/ontology.py +9 -14
- dsp_tools/commands/{project/models → get/legacy_models}/project.py +13 -6
- dsp_tools/commands/{project/models → get/legacy_models}/propertyclass.py +9 -16
- dsp_tools/commands/{project/models → get/legacy_models}/resourceclass.py +8 -46
- dsp_tools/commands/{project/models → get/legacy_models}/user.py +19 -60
- dsp_tools/commands/get/models/permissions_models.py +10 -0
- dsp_tools/commands/id2iri.py +20 -10
- dsp_tools/commands/ingest_xmlupload/bulk_ingest_client.py +81 -56
- dsp_tools/commands/ingest_xmlupload/create_resources/apply_ingest_id.py +4 -10
- dsp_tools/commands/ingest_xmlupload/create_resources/upload_xml.py +97 -37
- dsp_tools/commands/ingest_xmlupload/create_resources/user_information.py +2 -2
- dsp_tools/commands/ingest_xmlupload/ingest_files/ingest_files.py +9 -10
- dsp_tools/commands/ingest_xmlupload/upload_files/filechecker.py +3 -3
- dsp_tools/commands/ingest_xmlupload/upload_files/input_error.py +2 -10
- dsp_tools/commands/ingest_xmlupload/upload_files/upload_failures.py +12 -2
- dsp_tools/commands/ingest_xmlupload/upload_files/upload_files.py +8 -9
- dsp_tools/commands/resume_xmlupload/resume_xmlupload.py +18 -18
- dsp_tools/commands/start_stack.py +126 -77
- 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/{xml_validate/sparql/resource_shacl.py → validate_data/sparql/cardinality_shacl.py} +45 -47
- 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/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/bitstream_info.py +18 -0
- dsp_tools/commands/xmlupload/models/formatted_text_value.py +0 -25
- dsp_tools/commands/xmlupload/models/ingest.py +56 -70
- dsp_tools/commands/xmlupload/models/input_problems.py +6 -14
- dsp_tools/commands/xmlupload/models/lookup_models.py +21 -0
- dsp_tools/commands/xmlupload/models/permission.py +0 -39
- dsp_tools/commands/xmlupload/models/{deserialise/xmlpermission.py → permissions_parsed.py} +2 -2
- 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 +3 -3
- dsp_tools/commands/xmlupload/models/upload_state.py +2 -4
- dsp_tools/commands/xmlupload/prepare_xml_input/__init__.py +0 -0
- dsp_tools/commands/xmlupload/{ark2iri.py → prepare_xml_input/ark2iri.py} +1 -1
- dsp_tools/commands/xmlupload/prepare_xml_input/get_processed_resources.py +252 -0
- dsp_tools/commands/xmlupload/{iiif_uri_validator.py → prepare_xml_input/iiif_uri_validator.py} +2 -14
- dsp_tools/commands/xmlupload/{list_client.py → prepare_xml_input/list_client.py} +15 -10
- 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 +7 -468
- dsp_tools/commands/xmlupload/richtext_id2iri.py +37 -0
- dsp_tools/commands/xmlupload/stash/{construct_and_analyze_graph.py → analyse_circular_reference_graph.py} +64 -157
- dsp_tools/commands/xmlupload/stash/create_info_for_graph.py +53 -0
- dsp_tools/commands/xmlupload/stash/graph_models.py +13 -8
- dsp_tools/commands/xmlupload/stash/stash_circular_references.py +48 -115
- dsp_tools/commands/xmlupload/stash/stash_models.py +4 -9
- dsp_tools/commands/xmlupload/stash/upload_stashed_resptr_props.py +34 -40
- dsp_tools/commands/xmlupload/stash/upload_stashed_xml_texts.py +98 -108
- dsp_tools/commands/xmlupload/upload_config.py +8 -0
- dsp_tools/commands/xmlupload/write_diagnostic_info.py +14 -9
- dsp_tools/commands/xmlupload/xmlupload.py +214 -192
- dsp_tools/config/__init__.py +0 -0
- dsp_tools/config/logger_config.py +69 -0
- dsp_tools/{utils → config}/warnings_config.py +4 -1
- 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/{models → legacy_models}/datetimestamp.py +7 -7
- dsp_tools/{models → legacy_models}/langstring.py +1 -1
- dsp_tools/{models → legacy_models}/projectContext.py +4 -4
- dsp_tools/resources/schema/data.xsd +108 -83
- dsp_tools/resources/schema/lists-only.json +4 -23
- dsp_tools/resources/schema/project.json +80 -35
- dsp_tools/resources/schema/properties-only.json +1 -4
- dsp_tools/resources/start-stack/docker-compose.override-host.j2 +11 -0
- dsp_tools/resources/start-stack/docker-compose.yml +34 -30
- 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/ansi_colors.py +32 -0
- dsp_tools/utils/data_formats/__init__.py +0 -0
- dsp_tools/utils/{date_util.py → data_formats/date_util.py} +13 -1
- dsp_tools/utils/data_formats/iri_util.py +30 -0
- dsp_tools/utils/{shared.py → data_formats/shared.py} +1 -35
- dsp_tools/utils/{uri_util.py → data_formats/uri_util.py} +12 -2
- 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/config_options.py +28 -0
- dsp_tools/xmllib/models/date_formats.py +48 -0
- dsp_tools/xmllib/models/dsp_base_resources.py +1380 -400
- 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/{migration_metadata.py → internal/migration_metadata.py} +14 -10
- 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 +313 -26
- dsp_tools/xmllib/value_checkers.py +310 -47
- dsp_tools/xmllib/value_converters.py +765 -8
- 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-9.1.0.post11.dist-info → dsp_tools-18.3.0.post13.dist-info}/entry_points.txt +1 -0
- dsp_tools/commands/project/create/project_create.py +0 -1107
- dsp_tools/commands/project/create/project_create_lists.py +0 -204
- dsp_tools/commands/project/create/project_validate.py +0 -453
- dsp_tools/commands/project/models/project_definition.py +0 -12
- dsp_tools/commands/rosetta.py +0 -124
- dsp_tools/commands/template.py +0 -30
- dsp_tools/commands/xml_validate/api_connection.py +0 -122
- dsp_tools/commands/xml_validate/deserialise_input.py +0 -135
- dsp_tools/commands/xml_validate/make_data_rdf.py +0 -193
- dsp_tools/commands/xml_validate/models/data_deserialised.py +0 -108
- dsp_tools/commands/xml_validate/models/data_rdf.py +0 -214
- dsp_tools/commands/xml_validate/models/input_problems.py +0 -191
- dsp_tools/commands/xml_validate/models/validation.py +0 -29
- dsp_tools/commands/xml_validate/reformat_validaton_result.py +0 -89
- dsp_tools/commands/xml_validate/sparql/construct_shapes.py +0 -16
- dsp_tools/commands/xml_validate/xml_validate.py +0 -151
- dsp_tools/commands/xmlupload/check_consistency_with_ontology.py +0 -253
- dsp_tools/commands/xmlupload/models/deserialise/deserialise_value.py +0 -236
- dsp_tools/commands/xmlupload/models/deserialise/xmlresource.py +0 -171
- dsp_tools/commands/xmlupload/models/namespace_context.py +0 -39
- dsp_tools/commands/xmlupload/models/ontology_lookup_models.py +0 -161
- dsp_tools/commands/xmlupload/models/ontology_problem_models.py +0 -178
- dsp_tools/commands/xmlupload/models/serialise/jsonld_serialiser.py +0 -40
- dsp_tools/commands/xmlupload/models/serialise/serialise_value.py +0 -51
- dsp_tools/commands/xmlupload/ontology_client.py +0 -92
- dsp_tools/commands/xmlupload/project_client.py +0 -91
- dsp_tools/commands/xmlupload/read_validate_xml_file.py +0 -99
- dsp_tools/models/custom_warnings.py +0 -31
- dsp_tools/models/exceptions.py +0 -90
- dsp_tools/resources/0100-template-repo/template.json +0 -45
- dsp_tools/resources/0100-template-repo/template.xml +0 -27
- dsp_tools/resources/start-stack/docker-compose-validation.yml +0 -5
- dsp_tools/resources/start-stack/start-stack-config.yml +0 -4
- dsp_tools/resources/xml_validate/api-shapes.ttl +0 -411
- dsp_tools/resources/xml_validate/replace_namespace.xslt +0 -61
- dsp_tools/utils/connection_live.py +0 -383
- dsp_tools/utils/iri_util.py +0 -14
- dsp_tools/utils/logger_config.py +0 -41
- dsp_tools/utils/set_encoder.py +0 -20
- dsp_tools/utils/xml_utils.py +0 -145
- dsp_tools/utils/xml_validation.py +0 -197
- dsp_tools/utils/xml_validation_models.py +0 -68
- dsp_tools/xmllib/models/file_values.py +0 -78
- dsp_tools/xmllib/models/resource.py +0 -415
- dsp_tools/xmllib/models/values.py +0 -428
- dsp_tools-9.1.0.post11.dist-info/METADATA +0 -130
- dsp_tools-9.1.0.post11.dist-info/RECORD +0 -167
- dsp_tools-9.1.0.post11.dist-info/WHEEL +0 -4
- dsp_tools-9.1.0.post11.dist-info/licenses/LICENSE +0 -674
- /dsp_tools/{commands/excel2json/new_lists → clients}/__init__.py +0 -0
- /dsp_tools/commands/{excel2json/new_lists/models → create}/__init__.py +0 -0
- /dsp_tools/commands/{project → create/create_on_server}/__init__.py +0 -0
- /dsp_tools/commands/{project/create → create/models}/__init__.py +0 -0
- /dsp_tools/commands/{project/models → create/parsing}/__init__.py +0 -0
- /dsp_tools/commands/{xml_validate → create/serialisation}/__init__.py +0 -0
- /dsp_tools/commands/{xml_validate/models → excel2json/lists}/__init__.py +0 -0
- /dsp_tools/commands/{xml_validate/sparql → excel2json/lists/models}/__init__.py +0 -0
- /dsp_tools/commands/excel2json/{new_lists → lists}/models/deserialise.py +0 -0
- /dsp_tools/commands/{xmlupload/models/deserialise → get}/__init__.py +0 -0
- /dsp_tools/commands/{xmlupload/models/serialise → get/legacy_models}/__init__.py +0 -0
- /dsp_tools/commands/{project/models → get/legacy_models}/helpers.py +0 -0
- /dsp_tools/{models → commands/get/models}/__init__.py +0 -0
|
@@ -19,10 +19,10 @@ from typing import Optional
|
|
|
19
19
|
from typing import Union
|
|
20
20
|
from urllib.parse import quote_plus
|
|
21
21
|
|
|
22
|
-
from dsp_tools.
|
|
23
|
-
from dsp_tools.
|
|
24
|
-
from dsp_tools.
|
|
25
|
-
from dsp_tools.
|
|
22
|
+
from dsp_tools.clients.connection import Connection
|
|
23
|
+
from dsp_tools.commands.get.legacy_models.model import Model
|
|
24
|
+
from dsp_tools.error.exceptions import BaseError
|
|
25
|
+
from dsp_tools.legacy_models.langstring import LangString
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
class Project(Model):
|
|
@@ -87,12 +87,11 @@ class Project(Model):
|
|
|
87
87
|
_description: LangString
|
|
88
88
|
_keywords: set[str]
|
|
89
89
|
_ontologies: set[str]
|
|
90
|
+
_enabled_licenses: set[str]
|
|
90
91
|
_selfjoin: bool
|
|
91
92
|
_status: bool
|
|
92
93
|
_logo: Optional[str]
|
|
93
94
|
|
|
94
|
-
SYSTEM_PROJECT: str = "http://www.knora.org/ontology/knora-admin#SystemProject"
|
|
95
|
-
|
|
96
95
|
def __init__(
|
|
97
96
|
self,
|
|
98
97
|
con: Connection,
|
|
@@ -103,6 +102,7 @@ class Project(Model):
|
|
|
103
102
|
description: LangString = None,
|
|
104
103
|
keywords: Optional[set[str]] = None,
|
|
105
104
|
ontologies: Optional[set[str]] = None,
|
|
105
|
+
enabled_licenses: Optional[set[str]] = None,
|
|
106
106
|
selfjoin: Optional[bool] = None,
|
|
107
107
|
status: Optional[bool] = None,
|
|
108
108
|
logo: Optional[str] = None,
|
|
@@ -118,6 +118,7 @@ class Project(Model):
|
|
|
118
118
|
:param description: LangString instance containing the description [required for CREATE]
|
|
119
119
|
:param keywords: Set of keywords [required for CREATE]
|
|
120
120
|
:param ontologies: Set of ontologies that belong to this project [optional]
|
|
121
|
+
:param enabled_licenses: Set of enabled licenses [optional]
|
|
121
122
|
:param selfjoin: Allow selfjoin [required for CREATE]
|
|
122
123
|
:param status: Status of project (active if True) [required for CREATE]
|
|
123
124
|
:param logo: Path to logo image file [optional] NOT YET USED
|
|
@@ -132,6 +133,7 @@ class Project(Model):
|
|
|
132
133
|
if not isinstance(ontologies, set) and ontologies is not None:
|
|
133
134
|
raise BaseError("Ontologies must be a set of strings or None!")
|
|
134
135
|
self._ontologies = ontologies
|
|
136
|
+
self._enabled_licenses = enabled_licenses or set()
|
|
135
137
|
self._selfjoin = selfjoin
|
|
136
138
|
self._status = status
|
|
137
139
|
self._logo = logo
|
|
@@ -259,6 +261,7 @@ class Project(Model):
|
|
|
259
261
|
ontologies = set(json_obj.get("ontologies"))
|
|
260
262
|
if ontologies is None:
|
|
261
263
|
raise BaseError("ontologies are missing")
|
|
264
|
+
enabled_licenses = json_obj.get("enabledLicenses", set())
|
|
262
265
|
selfjoin = json_obj.get("selfjoin")
|
|
263
266
|
if selfjoin is None:
|
|
264
267
|
raise BaseError("Selfjoin is missing")
|
|
@@ -275,6 +278,7 @@ class Project(Model):
|
|
|
275
278
|
description=description,
|
|
276
279
|
keywords=keywords,
|
|
277
280
|
ontologies=ontologies,
|
|
281
|
+
enabled_licenses=enabled_licenses,
|
|
278
282
|
selfjoin=selfjoin,
|
|
279
283
|
status=status,
|
|
280
284
|
logo=logo,
|
|
@@ -287,6 +291,7 @@ class Project(Model):
|
|
|
287
291
|
"longname": self._longname,
|
|
288
292
|
"descriptions": self._description.createDefinitionFileObj(),
|
|
289
293
|
"keywords": list(self._keywords),
|
|
294
|
+
"enabled_licenses": list(self._enabled_licenses),
|
|
290
295
|
}
|
|
291
296
|
|
|
292
297
|
def create(self) -> Project:
|
|
@@ -315,6 +320,8 @@ class Project(Model):
|
|
|
315
320
|
tmp["description"] = self._description.toJsonObj()
|
|
316
321
|
if self._keywords is not None and len(self._keywords) > 0:
|
|
317
322
|
tmp["keywords"] = self._keywords
|
|
323
|
+
if self._enabled_licenses:
|
|
324
|
+
tmp["enabledLicenses"] = list(self._enabled_licenses)
|
|
318
325
|
if self._selfjoin is None:
|
|
319
326
|
raise BaseError("selfjoin must be defined (True or False!")
|
|
320
327
|
tmp["selfjoin"] = self._selfjoin
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from collections.abc import Sequence
|
|
3
4
|
from typing import Any
|
|
4
5
|
from typing import Optional
|
|
5
|
-
from typing import Sequence
|
|
6
6
|
from typing import Union
|
|
7
|
-
from urllib.parse import quote_plus
|
|
8
7
|
|
|
9
8
|
import regex
|
|
10
9
|
|
|
11
|
-
from dsp_tools.
|
|
12
|
-
from dsp_tools.commands.
|
|
13
|
-
from dsp_tools.commands.
|
|
14
|
-
from dsp_tools.commands.
|
|
15
|
-
from dsp_tools.
|
|
16
|
-
from dsp_tools.
|
|
17
|
-
from dsp_tools.
|
|
18
|
-
from dsp_tools.
|
|
10
|
+
from dsp_tools.clients.connection import Connection
|
|
11
|
+
from dsp_tools.commands.get.legacy_models.context import Context
|
|
12
|
+
from dsp_tools.commands.get.legacy_models.helpers import WithId
|
|
13
|
+
from dsp_tools.commands.get.legacy_models.listnode import ListNode
|
|
14
|
+
from dsp_tools.commands.get.legacy_models.model import Model
|
|
15
|
+
from dsp_tools.error.exceptions import BaseError
|
|
16
|
+
from dsp_tools.legacy_models.datetimestamp import DateTimeStamp
|
|
17
|
+
from dsp_tools.legacy_models.langstring import LangString
|
|
19
18
|
|
|
20
19
|
|
|
21
20
|
class PropertyClass(Model):
|
|
@@ -352,12 +351,6 @@ class PropertyClass(Model):
|
|
|
352
351
|
tmp["@graph"][0]["rdfs:comment"] = self._comment.toJsonLdObj()
|
|
353
352
|
return tmp
|
|
354
353
|
|
|
355
|
-
def delete(self, last_modification_date: DateTimeStamp) -> DateTimeStamp:
|
|
356
|
-
result = self._con.delete(
|
|
357
|
-
PropertyClass.ROUTE + "/" + quote_plus(self._iri) + "?lastModificationDate=" + str(last_modification_date)
|
|
358
|
-
)
|
|
359
|
-
return DateTimeStamp(result["knora-api:lastModificationDate"])
|
|
360
|
-
|
|
361
354
|
def createDefinitionFileObj(self, context: Context, shortname: str) -> dict[str, Any]:
|
|
362
355
|
"""
|
|
363
356
|
Create an object that can be used as input for `create_onto()` to create an ontology on a DSP server
|
|
@@ -7,22 +7,21 @@ This model implements the handling of resource classes. It contains two classes
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
+
from collections.abc import Sequence
|
|
10
11
|
from enum import Enum
|
|
11
12
|
from typing import Any
|
|
12
13
|
from typing import Optional
|
|
13
|
-
from typing import Sequence
|
|
14
14
|
from typing import Union
|
|
15
|
-
from urllib.parse import quote_plus
|
|
16
15
|
|
|
17
16
|
import regex
|
|
18
17
|
|
|
19
|
-
from dsp_tools.
|
|
20
|
-
from dsp_tools.commands.
|
|
21
|
-
from dsp_tools.commands.
|
|
22
|
-
from dsp_tools.
|
|
23
|
-
from dsp_tools.
|
|
24
|
-
from dsp_tools.
|
|
25
|
-
from dsp_tools.
|
|
18
|
+
from dsp_tools.clients.connection import Connection
|
|
19
|
+
from dsp_tools.commands.get.legacy_models.context import Context
|
|
20
|
+
from dsp_tools.commands.get.legacy_models.helpers import Cardinality
|
|
21
|
+
from dsp_tools.commands.get.legacy_models.model import Model
|
|
22
|
+
from dsp_tools.error.exceptions import BaseError
|
|
23
|
+
from dsp_tools.legacy_models.datetimestamp import DateTimeStamp
|
|
24
|
+
from dsp_tools.legacy_models.langstring import LangString
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
class HasProperty(Model):
|
|
@@ -478,37 +477,6 @@ class ResourceClass(Model):
|
|
|
478
477
|
def has_properties(self) -> dict[str, HasProperty]:
|
|
479
478
|
return self._has_properties
|
|
480
479
|
|
|
481
|
-
def getProperty(self, property_id: str) -> Optional[HasProperty]:
|
|
482
|
-
if self._has_properties is None:
|
|
483
|
-
return None
|
|
484
|
-
else:
|
|
485
|
-
return self._has_properties.get(self._context.get_prefixed_iri(property_id))
|
|
486
|
-
|
|
487
|
-
def addProperty(
|
|
488
|
-
self,
|
|
489
|
-
last_modification_date: DateTimeStamp,
|
|
490
|
-
property_id: str,
|
|
491
|
-
cardinality: Cardinality,
|
|
492
|
-
gui_order: Optional[int] = None,
|
|
493
|
-
) -> DateTimeStamp:
|
|
494
|
-
if self._has_properties.get(property_id) is None:
|
|
495
|
-
latest_modification_date, resclass = HasProperty(
|
|
496
|
-
con=self._con,
|
|
497
|
-
context=self._context,
|
|
498
|
-
ontology_id=self._ontology_id,
|
|
499
|
-
property_id=property_id,
|
|
500
|
-
resclass_id=self.iri,
|
|
501
|
-
cardinality=cardinality,
|
|
502
|
-
gui_order=gui_order,
|
|
503
|
-
).create(last_modification_date)
|
|
504
|
-
hp = resclass.getProperty(property_id)
|
|
505
|
-
hp.ontology_id = self._context.iri_from_prefix(self._ontology_id)
|
|
506
|
-
hp.resclass_id = self._iri
|
|
507
|
-
self._has_properties[hp.property_id] = hp
|
|
508
|
-
return latest_modification_date
|
|
509
|
-
else:
|
|
510
|
-
raise BaseError("Property already has cardinality in this class! " + property_id)
|
|
511
|
-
|
|
512
480
|
@classmethod
|
|
513
481
|
def fromJsonObj(cls, con: Connection, context: Context, json_obj: Any) -> ResourceClass:
|
|
514
482
|
if isinstance(json_obj, list):
|
|
@@ -671,12 +639,6 @@ class ResourceClass(Model):
|
|
|
671
639
|
else:
|
|
672
640
|
return {"@id": "knora-api:" + resref} # no ":", must be from knora-api!
|
|
673
641
|
|
|
674
|
-
def delete(self, last_modification_date: DateTimeStamp) -> DateTimeStamp:
|
|
675
|
-
result = self._con.delete(
|
|
676
|
-
ResourceClass.ROUTE + "/" + quote_plus(self._iri) + "?lastModificationDate=" + str(last_modification_date)
|
|
677
|
-
)
|
|
678
|
-
return DateTimeStamp(result["knora-api:lastModificationDate"])
|
|
679
|
-
|
|
680
642
|
def createDefinitionFileObj(self, context: Context, shortname: str, skiplist: list[str]) -> dict[str, Any]:
|
|
681
643
|
resource = {"name": self._name}
|
|
682
644
|
if self._superclasses:
|
|
@@ -21,12 +21,11 @@ from typing import Optional
|
|
|
21
21
|
from typing import Union
|
|
22
22
|
from urllib.parse import quote_plus
|
|
23
23
|
|
|
24
|
-
from dsp_tools.
|
|
25
|
-
from dsp_tools.commands.
|
|
26
|
-
from dsp_tools.commands.
|
|
27
|
-
from dsp_tools.
|
|
28
|
-
from dsp_tools.
|
|
29
|
-
from dsp_tools.utils.connection import Connection
|
|
24
|
+
from dsp_tools.clients.connection import Connection
|
|
25
|
+
from dsp_tools.commands.get.legacy_models.group import Group
|
|
26
|
+
from dsp_tools.commands.get.legacy_models.model import Model
|
|
27
|
+
from dsp_tools.error.exceptions import BaseError
|
|
28
|
+
from dsp_tools.legacy_models.langstring import Languages
|
|
30
29
|
|
|
31
30
|
|
|
32
31
|
class User(Model):
|
|
@@ -60,9 +59,6 @@ class User(Model):
|
|
|
60
59
|
status : bool
|
|
61
60
|
Status of the user, If active, is set to True, otherwise false [read/write]
|
|
62
61
|
|
|
63
|
-
sysadmin : bool
|
|
64
|
-
True, if user is system administrator [read/write]
|
|
65
|
-
|
|
66
62
|
in_groups : set[str]
|
|
67
63
|
Set of group IRI's the user is member of [readonly].
|
|
68
64
|
|
|
@@ -103,7 +99,6 @@ class User(Model):
|
|
|
103
99
|
_password: str
|
|
104
100
|
_lang: Languages
|
|
105
101
|
_status: bool
|
|
106
|
-
_sysadmin: bool
|
|
107
102
|
_in_groups: set[str]
|
|
108
103
|
_in_projects: dict[str, bool]
|
|
109
104
|
_add_to_project: dict[str, bool]
|
|
@@ -123,7 +118,6 @@ class User(Model):
|
|
|
123
118
|
password: Optional[str] = None,
|
|
124
119
|
lang: Optional[Union[str, Languages]] = None,
|
|
125
120
|
status: Optional[bool] = None,
|
|
126
|
-
sysadmin: Optional[bool] = None,
|
|
127
121
|
in_projects: Optional[dict[str, bool]] = None,
|
|
128
122
|
in_groups: Optional[set[str]] = None,
|
|
129
123
|
):
|
|
@@ -141,7 +135,6 @@ class User(Model):
|
|
|
141
135
|
:param password: Password [required for CREATE]
|
|
142
136
|
:param lang: Preferred language of the user [optional]
|
|
143
137
|
:param status: Status (active = True, inactive/deleted = False) [optional]
|
|
144
|
-
:param sysadmin: User has system administration privileges [optional]
|
|
145
138
|
:param in_projects: Dict with project-IRI as key, boolean(True=project admin) as value [optional]
|
|
146
139
|
:param in_groups: Set with group-IRI's the user should belong to [optional]
|
|
147
140
|
"""
|
|
@@ -174,8 +167,6 @@ class User(Model):
|
|
|
174
167
|
else:
|
|
175
168
|
raise BaseError("In_groups must be a set of strings or None!")
|
|
176
169
|
|
|
177
|
-
self._sysadmin = None if sysadmin is None else bool(sysadmin)
|
|
178
|
-
|
|
179
170
|
@property
|
|
180
171
|
def iri(self) -> Optional[str]:
|
|
181
172
|
"""IRI of this user"""
|
|
@@ -271,17 +262,6 @@ class User(Model):
|
|
|
271
262
|
if value is not None:
|
|
272
263
|
self._changed.add("status")
|
|
273
264
|
|
|
274
|
-
@property
|
|
275
|
-
def sysadmin(self) -> bool:
|
|
276
|
-
"""True if the user is sysadmin"""
|
|
277
|
-
return self._sysadmin
|
|
278
|
-
|
|
279
|
-
@sysadmin.setter
|
|
280
|
-
def sysadmin(self, value: bool) -> None:
|
|
281
|
-
self._sysadmin = None if value is None else bool(value)
|
|
282
|
-
if value is not None:
|
|
283
|
-
self._changed.add("sysadmin")
|
|
284
|
-
|
|
285
265
|
@property
|
|
286
266
|
def in_groups(self) -> set[str]:
|
|
287
267
|
"""Set of group IRI's the user is member of"""
|
|
@@ -296,7 +276,7 @@ class User(Model):
|
|
|
296
276
|
def _make_fromJsonObj(cls, con: Connection, json_obj: dict[str, Any]) -> User:
|
|
297
277
|
User._check_if_jsonObj_has_required_info(json_obj)
|
|
298
278
|
|
|
299
|
-
|
|
279
|
+
in_groups, in_projects = cls._update_permissions_and_groups(json_obj)
|
|
300
280
|
|
|
301
281
|
return cls(
|
|
302
282
|
con=con,
|
|
@@ -307,7 +287,6 @@ class User(Model):
|
|
|
307
287
|
familyName=json_obj.get("familyName"),
|
|
308
288
|
lang=json_obj.get("lang"),
|
|
309
289
|
status=json_obj["status"],
|
|
310
|
-
sysadmin=sysadmin,
|
|
311
290
|
in_projects=in_projects,
|
|
312
291
|
in_groups=in_groups,
|
|
313
292
|
)
|
|
@@ -331,26 +310,21 @@ class User(Model):
|
|
|
331
310
|
raise BaseError("\n".join(problems))
|
|
332
311
|
|
|
333
312
|
@classmethod
|
|
334
|
-
def _update_permissions_and_groups(cls, json_obj: dict[str, Any]) -> tuple[
|
|
313
|
+
def _update_permissions_and_groups(cls, json_obj: dict[str, Any]) -> tuple[set[str], dict[str, bool]]:
|
|
335
314
|
in_projects: dict[str, bool] = {}
|
|
336
315
|
in_groups: set[str] = set()
|
|
337
316
|
if json_obj.get("permissions") is not None and json_obj["permissions"].get("groupsPerProject") is not None:
|
|
338
|
-
sysadmin = False
|
|
339
317
|
for project_iri, group_memberships in json_obj["permissions"]["groupsPerProject"].items():
|
|
340
|
-
|
|
341
|
-
if Group.
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
else:
|
|
351
|
-
in_groups.add(group)
|
|
352
|
-
return sysadmin, in_groups, in_projects
|
|
353
|
-
return None, in_groups, in_projects
|
|
318
|
+
for group in group_memberships:
|
|
319
|
+
if group == Group.PROJECT_MEMBER_GROUP:
|
|
320
|
+
if in_projects.get(project_iri) is None:
|
|
321
|
+
in_projects[project_iri] = False
|
|
322
|
+
elif group == Group.PROJECT_ADMIN_GROUP:
|
|
323
|
+
in_projects[project_iri] = True
|
|
324
|
+
else:
|
|
325
|
+
in_groups.add(group)
|
|
326
|
+
return in_groups, in_projects
|
|
327
|
+
return in_groups, in_projects
|
|
354
328
|
|
|
355
329
|
def create(self) -> User:
|
|
356
330
|
"""
|
|
@@ -394,7 +368,8 @@ class User(Model):
|
|
|
394
368
|
raise BaseError("'language' is mandatory!")
|
|
395
369
|
tmp["lang"] = self._lang.value
|
|
396
370
|
tmp["status"] = True if self._status is None else self._status
|
|
397
|
-
|
|
371
|
+
# the API expects the key "systemAdmin" to be present. DSP-TOOLS doesn't support creating SystemAdmins any more.
|
|
372
|
+
tmp["systemAdmin"] = False
|
|
398
373
|
return tmp
|
|
399
374
|
|
|
400
375
|
def read(self) -> User:
|
|
@@ -413,20 +388,6 @@ class User(Model):
|
|
|
413
388
|
raise BaseError("Either user-iri or email is required!")
|
|
414
389
|
return User._make_fromJsonObj(self._con, result["user"])
|
|
415
390
|
|
|
416
|
-
@staticmethod
|
|
417
|
-
def getAllUsers(con: Connection) -> list[Any]:
|
|
418
|
-
"""
|
|
419
|
-
Get a list of all users (static method)
|
|
420
|
-
|
|
421
|
-
:param con: Connection instance
|
|
422
|
-
:return: List of users
|
|
423
|
-
"""
|
|
424
|
-
|
|
425
|
-
result = con.get(User.ROUTE)
|
|
426
|
-
if "users" not in result:
|
|
427
|
-
raise BaseError("Request got no users!")
|
|
428
|
-
return [User._make_fromJsonObj(con, a) for a in result["users"]]
|
|
429
|
-
|
|
430
391
|
@staticmethod
|
|
431
392
|
def getAllUsersForProject(con: Connection, proj_shortcode: str) -> Optional[list[User]]:
|
|
432
393
|
"""
|
|
@@ -465,8 +426,6 @@ class User(Model):
|
|
|
465
426
|
if "group" in group_info and "name" in group_info["group"]:
|
|
466
427
|
groupname = group_info["group"]["name"]
|
|
467
428
|
groups.append(f"{proj_shortname}:{groupname}")
|
|
468
|
-
if self._sysadmin:
|
|
469
|
-
groups.append("SystemAdmin")
|
|
470
429
|
user["groups"] = groups
|
|
471
430
|
user["projects"] = list()
|
|
472
431
|
for proj, is_admin in self._in_projects.items():
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
@dataclass
|
|
6
|
+
class DoapCategories:
|
|
7
|
+
class_doaps: list[dict[str, Any]]
|
|
8
|
+
prop_doaps: list[dict[str, Any]]
|
|
9
|
+
has_img_all_classes_doaps: list[dict[str, Any]]
|
|
10
|
+
has_img_specific_class_doaps: list[dict[str, Any]]
|
dsp_tools/commands/id2iri.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import copy
|
|
2
2
|
import json
|
|
3
|
+
import warnings
|
|
3
4
|
from collections.abc import Mapping
|
|
4
5
|
from datetime import datetime
|
|
5
6
|
from pathlib import Path
|
|
@@ -8,8 +9,9 @@ import regex
|
|
|
8
9
|
from loguru import logger
|
|
9
10
|
from lxml import etree
|
|
10
11
|
|
|
11
|
-
from dsp_tools.
|
|
12
|
-
from dsp_tools.
|
|
12
|
+
from dsp_tools.error.custom_warnings import DspToolsUserWarning
|
|
13
|
+
from dsp_tools.error.exceptions import InputError
|
|
14
|
+
from dsp_tools.utils.xml_parsing.parse_clean_validate_xml import parse_and_clean_xml_file
|
|
13
15
|
|
|
14
16
|
|
|
15
17
|
def _check_input_parameters(
|
|
@@ -25,7 +27,7 @@ def _check_input_parameters(
|
|
|
25
27
|
json_file: the JSON file with the mapping (dict) of internal IDs to IRIs
|
|
26
28
|
|
|
27
29
|
Raises:
|
|
28
|
-
|
|
30
|
+
InputError: if one of the files could not be found
|
|
29
31
|
|
|
30
32
|
Returns:
|
|
31
33
|
path objects of the input parameters
|
|
@@ -33,12 +35,12 @@ def _check_input_parameters(
|
|
|
33
35
|
xml_file_as_path = Path(xml_file)
|
|
34
36
|
if not xml_file_as_path.is_file():
|
|
35
37
|
logger.error(f"File {xml_file} could not be found.")
|
|
36
|
-
raise
|
|
38
|
+
raise InputError(f"File {xml_file} could not be found.")
|
|
37
39
|
|
|
38
40
|
json_file_as_path = Path(json_file)
|
|
39
41
|
if not json_file_as_path.is_file():
|
|
40
42
|
logger.error(f"File {json_file} could not be found.")
|
|
41
|
-
raise
|
|
43
|
+
raise InputError(f"File {json_file} could not be found.")
|
|
42
44
|
|
|
43
45
|
return xml_file_as_path, json_file_as_path
|
|
44
46
|
|
|
@@ -75,7 +77,10 @@ def _replace_resptrs(
|
|
|
75
77
|
a tuple of the modified copy of the XML tree, and the set of the IDs that have been replaced
|
|
76
78
|
"""
|
|
77
79
|
modified_tree = copy.deepcopy(tree)
|
|
78
|
-
|
|
80
|
+
xpaths = [f"/knora/{x}/resptr-prop/resptr" for x in ["resource", "link", "region"]]
|
|
81
|
+
xpaths.extend([f"/knora/{x}-segment/isSegmentOf" for x in ["video", "audio"]])
|
|
82
|
+
xpaths.extend([f"/knora/{x}-segment/relatesTo" for x in ["video", "audio"]])
|
|
83
|
+
resptr_xpath = "|".join(xpaths)
|
|
79
84
|
resptr_elems = modified_tree.xpath(resptr_xpath)
|
|
80
85
|
resptr_elems_replaced = 0
|
|
81
86
|
for resptr_elem in resptr_elems:
|
|
@@ -108,7 +113,10 @@ def _replace_salsah_links(
|
|
|
108
113
|
a tuple of the modified copy of the XML tree, and the set of the IDs that have been replaced
|
|
109
114
|
"""
|
|
110
115
|
modified_tree = copy.deepcopy(tree)
|
|
111
|
-
|
|
116
|
+
xpaths = [f"/knora/{x}/text-prop/text//a" for x in ["resource", "link", "region"]]
|
|
117
|
+
xpaths.extend([f"/knora/{x}-segment/hasComment//a" for x in ["video", "audio"]])
|
|
118
|
+
xpaths.extend([f"/knora/{x}-segment/hasDescription//a" for x in ["video", "audio"]])
|
|
119
|
+
salsah_xpath = "|".join(xpaths)
|
|
112
120
|
salsah_links = [x for x in modified_tree.xpath(salsah_xpath) if x.attrib.get("class") == "salsah-link"]
|
|
113
121
|
salsah_links_replaced = 0
|
|
114
122
|
for salsah_link in salsah_links:
|
|
@@ -175,7 +183,9 @@ def _remove_resources_if_id_in_mapping(
|
|
|
175
183
|
a modified copy of the XML tree
|
|
176
184
|
"""
|
|
177
185
|
modified_tree = copy.deepcopy(tree)
|
|
178
|
-
resources = modified_tree.xpath(
|
|
186
|
+
resources = modified_tree.xpath(
|
|
187
|
+
"|".join([f"/knora/{x}" for x in ["resource", "link", "region", "video-segment", "audio-segment"]])
|
|
188
|
+
)
|
|
179
189
|
resources_to_remove = [x for x in resources if x.attrib.get("id") in mapping]
|
|
180
190
|
for resource in resources_to_remove:
|
|
181
191
|
resource.getparent().remove(resource)
|
|
@@ -184,8 +194,8 @@ def _remove_resources_if_id_in_mapping(
|
|
|
184
194
|
f"Removed {len(resources_to_remove)}/{len(resources)} resources from the XML file, "
|
|
185
195
|
"because their ID was in the mapping"
|
|
186
196
|
)
|
|
187
|
-
logger.
|
|
188
|
-
|
|
197
|
+
logger.warning(msg)
|
|
198
|
+
warnings.warn(DspToolsUserWarning(msg))
|
|
189
199
|
|
|
190
200
|
return modified_tree
|
|
191
201
|
|