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,479 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import datetime
|
|
4
|
+
from argparse import ArgumentParser
|
|
5
|
+
from argparse import _SubParsersAction
|
|
6
|
+
from importlib.metadata import version
|
|
7
|
+
|
|
8
|
+
# help texts
|
|
9
|
+
username_text = "username (e-mail) used for authentication with the DSP-API"
|
|
10
|
+
password_text = "password used for authentication with the DSP-API"
|
|
11
|
+
dsp_server_text = "URL of the DSP server"
|
|
12
|
+
verbose_text = "print more information about the progress to the console"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def make_parser(
|
|
16
|
+
default_dsp_api_url: str,
|
|
17
|
+
root_user_email: str,
|
|
18
|
+
root_user_pw: str,
|
|
19
|
+
) -> ArgumentParser:
|
|
20
|
+
"""
|
|
21
|
+
Create a parser for the command line arguments.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
default_dsp_api_url: URL of the DSP server (default value for localhost)
|
|
25
|
+
root_user_email: username (e-mail) used for authentication with the DSP-API (default value for localhost)
|
|
26
|
+
root_user_pw: password used for authentication with the DSP-API (default value for localhost)
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
parser
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
parser = ArgumentParser(
|
|
33
|
+
description=f"DSP-TOOLS (version {version('dsp-tools')}, © {datetime.datetime.now().year} by DaSCH)"
|
|
34
|
+
)
|
|
35
|
+
parser.add_argument("--version", action="store_true", help="print the installed and latest verison of dsp-tools")
|
|
36
|
+
subparsers = parser.add_subparsers(
|
|
37
|
+
title="Subcommands", description="Valid subcommands are", help="sub-command help"
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
_add_start_stack(subparsers)
|
|
41
|
+
|
|
42
|
+
_add_stop_stack(subparsers)
|
|
43
|
+
|
|
44
|
+
_add_create(subparsers, default_dsp_api_url, root_user_email, root_user_pw)
|
|
45
|
+
|
|
46
|
+
_add_get(subparsers, default_dsp_api_url, root_user_email, root_user_pw)
|
|
47
|
+
|
|
48
|
+
_add_xmlupload(subparsers, default_dsp_api_url, root_user_email, root_user_pw)
|
|
49
|
+
|
|
50
|
+
_add_validate_data(subparsers, default_dsp_api_url, root_user_email, root_user_pw)
|
|
51
|
+
|
|
52
|
+
_add_resume_xmlupload(subparsers, default_dsp_api_url, root_user_email, root_user_pw)
|
|
53
|
+
|
|
54
|
+
_add_upload_files(subparsers, default_dsp_api_url, root_user_email, root_user_pw)
|
|
55
|
+
_add_ingest_files(subparsers, default_dsp_api_url, root_user_email, root_user_pw)
|
|
56
|
+
_add_ingest_xmlupload(subparsers, default_dsp_api_url, root_user_email, root_user_pw)
|
|
57
|
+
|
|
58
|
+
_add_excel2json(subparsers)
|
|
59
|
+
_add_old_excel2json(subparsers)
|
|
60
|
+
|
|
61
|
+
_add_excel2lists(subparsers)
|
|
62
|
+
_add_old_excel2lists(subparsers)
|
|
63
|
+
|
|
64
|
+
_add_excel2resources(subparsers)
|
|
65
|
+
|
|
66
|
+
_add_excel2properties(subparsers)
|
|
67
|
+
|
|
68
|
+
_add_id2iri(subparsers)
|
|
69
|
+
|
|
70
|
+
_add_update_legal(subparsers)
|
|
71
|
+
|
|
72
|
+
_add_suppress_update_prompt(subparsers)
|
|
73
|
+
|
|
74
|
+
return parser
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _add_suppress_update_prompt(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
78
|
+
outdated_help_text = (
|
|
79
|
+
"don't prompt when using an outdated version of DSP-TOOLS "
|
|
80
|
+
"(useful for contexts without interactive shell, e.g. when the Terminal output is piped into a file)"
|
|
81
|
+
)
|
|
82
|
+
for sp in subparsers.choices.values():
|
|
83
|
+
sp.add_argument("--suppress-update-prompt", action="store_true", help=outdated_help_text)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _add_stop_stack(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
87
|
+
subparser = subparsers.add_parser(
|
|
88
|
+
name="stop-stack", help="Shut down the local instance of DSP-API and DSP-APP, and delete all data in it"
|
|
89
|
+
)
|
|
90
|
+
subparser.set_defaults(action="stop-stack")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _add_start_stack(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
94
|
+
latest_text = (
|
|
95
|
+
"instead of the latest deployed version, "
|
|
96
|
+
"use the latest development version (from the `main` branch) "
|
|
97
|
+
"of the backend components (api, sipi, fuseki, ingest)"
|
|
98
|
+
)
|
|
99
|
+
max_file_size_text = "max. multimedia file size allowed for ingest, in MB (default: 2000, max: 100'000)"
|
|
100
|
+
no_prune_text = "don't execute 'docker system prune' (and don't ask)"
|
|
101
|
+
with_test_data_text = "initialise the database with built-in test data"
|
|
102
|
+
custom_host = "set a host to an IP or a domain to run the instance on a server"
|
|
103
|
+
subparser = subparsers.add_parser(name="start-stack", help="Run a local instance of DSP-API and DSP-APP")
|
|
104
|
+
subparser.set_defaults(action="start-stack")
|
|
105
|
+
subparser.add_argument("--max_file_size", type=int, help=max_file_size_text)
|
|
106
|
+
subparser.add_argument("--prune", action="store_true", help="execute 'docker system prune' without asking")
|
|
107
|
+
subparser.add_argument("--no-prune", action="store_true", help=no_prune_text)
|
|
108
|
+
subparser.add_argument("--latest", action="store_true", help=latest_text)
|
|
109
|
+
subparser.add_argument("--with-test-data", action="store_true", help=with_test_data_text)
|
|
110
|
+
subparser.add_argument("--custom-host", default=None, type=str, help=custom_host)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _add_id2iri(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
114
|
+
subparser = subparsers.add_parser(
|
|
115
|
+
name="id2iri",
|
|
116
|
+
help="Replace internal IDs of an XML file (resptr tags or salsah-links) by IRIs provided in a mapping file.",
|
|
117
|
+
)
|
|
118
|
+
subparser.set_defaults(action="id2iri")
|
|
119
|
+
subparser.add_argument(
|
|
120
|
+
"-r", "--remove-resources", action="store_true", help="remove resources if their ID is in the mapping"
|
|
121
|
+
)
|
|
122
|
+
subparser.add_argument("xmlfile", help="path to the XML file containing the data to be replaced")
|
|
123
|
+
subparser.add_argument("mapping", help="path to the JSON file containing the mapping of IDs to IRIs")
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def _add_excel2properties(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
127
|
+
subparser = subparsers.add_parser(
|
|
128
|
+
name="excel2properties",
|
|
129
|
+
help="Create the 'properties' section of a JSON project file from one or multiple Excel files",
|
|
130
|
+
)
|
|
131
|
+
subparser.set_defaults(action="excel2properties")
|
|
132
|
+
subparser.add_argument("excelfile", help="path to the Excel file containing the properties")
|
|
133
|
+
subparser.add_argument(
|
|
134
|
+
"properties_section", help="path to the output JSON file containing the 'properties' section"
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _add_excel2resources(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
139
|
+
subparser = subparsers.add_parser(
|
|
140
|
+
name="excel2resources",
|
|
141
|
+
help="Create the 'resources' section of a JSON project file from one or multiple Excel files",
|
|
142
|
+
)
|
|
143
|
+
subparser.set_defaults(action="excel2resources")
|
|
144
|
+
subparser.add_argument("excelfile", help="path to the Excel file containing the resources")
|
|
145
|
+
subparser.add_argument("resources_section", help="path to the output JSON file containing the 'resources' section")
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def _add_excel2lists(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
149
|
+
subparser = subparsers.add_parser(
|
|
150
|
+
name="excel2lists",
|
|
151
|
+
help="Create the 'lists' section of a JSON project file from one or multiple Excel files",
|
|
152
|
+
)
|
|
153
|
+
subparser.set_defaults(action="excel2lists")
|
|
154
|
+
subparser.add_argument("excelfolder", help="path to the folder containing the Excel file(s)")
|
|
155
|
+
subparser.add_argument("lists_section", help="path to the output JSON file containing the 'lists' section")
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _add_old_excel2lists(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
159
|
+
subparser = subparsers.add_parser(
|
|
160
|
+
name="old-excel2lists",
|
|
161
|
+
help="DEPRECATED: Create the 'lists' section of a JSON project file from one or multiple Excel files",
|
|
162
|
+
)
|
|
163
|
+
subparser.set_defaults(action="old-excel2lists")
|
|
164
|
+
subparser.add_argument("-v", "--verbose", action="store_true", help=verbose_text)
|
|
165
|
+
subparser.add_argument("excelfolder", help="path to the folder containing the Excel file(s)")
|
|
166
|
+
subparser.add_argument("lists_section", help="path to the output JSON file containing the 'lists' section")
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def _add_old_excel2json(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
170
|
+
subparser = subparsers.add_parser(
|
|
171
|
+
name="old-excel2json",
|
|
172
|
+
help="DEPRECATED: Create an entire JSON project file from a folder containing the required Excel files",
|
|
173
|
+
)
|
|
174
|
+
subparser.set_defaults(action="old-excel2json")
|
|
175
|
+
subparser.add_argument("excelfolder", help="path to the folder containing the Excel files")
|
|
176
|
+
subparser.add_argument("project_definition", help="path to the output JSON file")
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def _add_excel2json(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
180
|
+
subparser = subparsers.add_parser(
|
|
181
|
+
name="excel2json",
|
|
182
|
+
help="Create an entire JSON project file from a folder containing the required Excel files",
|
|
183
|
+
)
|
|
184
|
+
subparser.set_defaults(action="excel2json")
|
|
185
|
+
subparser.add_argument("excelfolder", help="path to the folder containing the Excel files")
|
|
186
|
+
subparser.add_argument("project_definition", help="path to the output JSON file")
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _add_upload_files(
|
|
190
|
+
subparsers: _SubParsersAction[ArgumentParser],
|
|
191
|
+
default_dsp_api_url: str,
|
|
192
|
+
root_user_email: str,
|
|
193
|
+
root_user_pw: str,
|
|
194
|
+
) -> None:
|
|
195
|
+
subparser = subparsers.add_parser(
|
|
196
|
+
name="upload-files",
|
|
197
|
+
help="Experimental: upload all files referenced in an XML file to a DSP server",
|
|
198
|
+
)
|
|
199
|
+
subparser.set_defaults(action="upload-files")
|
|
200
|
+
subparser.add_argument("-s", "--server", default=default_dsp_api_url, help=dsp_server_text)
|
|
201
|
+
subparser.add_argument("-u", "--user", default=root_user_email, help=username_text)
|
|
202
|
+
subparser.add_argument("-p", "--password", default=root_user_pw, help=password_text)
|
|
203
|
+
subparser.add_argument(
|
|
204
|
+
"-i", "--imgdir", default=".", help="folder from where the paths in the <bitstream> tags are evaluated"
|
|
205
|
+
)
|
|
206
|
+
subparser.add_argument("xml_file", help="path to XML file containing the data")
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def _add_ingest_files(
|
|
210
|
+
subparsers: _SubParsersAction[ArgumentParser],
|
|
211
|
+
default_dsp_api_url: str,
|
|
212
|
+
root_user_email: str,
|
|
213
|
+
root_user_pw: str,
|
|
214
|
+
) -> None:
|
|
215
|
+
subparser = subparsers.add_parser(
|
|
216
|
+
name="ingest-files",
|
|
217
|
+
help="Experimental: ingest uploaded files on a DSP server and retrieve the mapping CSV file",
|
|
218
|
+
)
|
|
219
|
+
subparser.set_defaults(action="ingest-files")
|
|
220
|
+
subparser.add_argument("-s", "--server", default=default_dsp_api_url, help=dsp_server_text)
|
|
221
|
+
subparser.add_argument("-u", "--user", default=root_user_email, help=username_text)
|
|
222
|
+
subparser.add_argument("-p", "--password", default=root_user_pw, help=password_text)
|
|
223
|
+
subparser.add_argument("shortcode", help="shortcode of the project that the files belong to")
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def _add_ingest_xmlupload(
|
|
227
|
+
subparsers: _SubParsersAction[ArgumentParser],
|
|
228
|
+
default_dsp_api_url: str,
|
|
229
|
+
root_user_email: str,
|
|
230
|
+
root_user_pw: str,
|
|
231
|
+
) -> None:
|
|
232
|
+
subparser = subparsers.add_parser(
|
|
233
|
+
name="ingest-xmlupload",
|
|
234
|
+
help="For internal use only: create resources with files already uploaded through dsp-ingest",
|
|
235
|
+
)
|
|
236
|
+
subparser.set_defaults(action="ingest-xmlupload")
|
|
237
|
+
subparser.add_argument("-s", "--server", default=default_dsp_api_url, help=dsp_server_text)
|
|
238
|
+
subparser.add_argument("-u", "--user", default=root_user_email, help=username_text)
|
|
239
|
+
subparser.add_argument("-p", "--password", default=root_user_pw, help=password_text)
|
|
240
|
+
subparser.add_argument("--interrupt-after", type=int, default=-1, help="interrupt after this number of resources")
|
|
241
|
+
subparser.add_argument("xml_file", help="path to XML file containing the data")
|
|
242
|
+
subparser.add_argument("--skip-validation", action="store_true", help="Skip the SHACL schema validation")
|
|
243
|
+
subparser.add_argument(
|
|
244
|
+
"--skip-ontology-validation",
|
|
245
|
+
action="store_true",
|
|
246
|
+
help=(
|
|
247
|
+
"don't validate the data model itself, only the data. "
|
|
248
|
+
"This is intended for projects that are already on the production server"
|
|
249
|
+
),
|
|
250
|
+
)
|
|
251
|
+
subparser.add_argument(
|
|
252
|
+
"--id2iri-file",
|
|
253
|
+
help=(
|
|
254
|
+
"replaces internal IDs of an XML file (links and stand-off links inside richtext) "
|
|
255
|
+
"by IRIs provided in this mapping file"
|
|
256
|
+
),
|
|
257
|
+
)
|
|
258
|
+
subparser.add_argument(
|
|
259
|
+
"--do-not-request-resource-metadata-from-db",
|
|
260
|
+
action="store_true",
|
|
261
|
+
help=(
|
|
262
|
+
"Do not request IRIs of existing resources from the db (references to existing resources won't be checked)"
|
|
263
|
+
),
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
def _add_xmlupload(
|
|
268
|
+
subparsers: _SubParsersAction[ArgumentParser],
|
|
269
|
+
default_dsp_api_url: str,
|
|
270
|
+
root_user_email: str,
|
|
271
|
+
root_user_pw: str,
|
|
272
|
+
) -> None:
|
|
273
|
+
subparser = subparsers.add_parser(name="xmlupload", help="Upload data defined in an XML file to a DSP server")
|
|
274
|
+
subparser.set_defaults(action="xmlupload")
|
|
275
|
+
subparser.add_argument(
|
|
276
|
+
"-s", "--server", default=default_dsp_api_url, help="URL of the DSP server where DSP-TOOLS sends the data to"
|
|
277
|
+
)
|
|
278
|
+
subparser.add_argument("-u", "--user", default=root_user_email, help=username_text)
|
|
279
|
+
subparser.add_argument("-p", "--password", default=root_user_pw, help=password_text)
|
|
280
|
+
subparser.add_argument(
|
|
281
|
+
"-i", "--imgdir", default=".", help="folder from where the paths in the <bitstream> tags are evaluated"
|
|
282
|
+
)
|
|
283
|
+
subparser.add_argument(
|
|
284
|
+
"-V", "--validate-only", action="store_true", help="run the XML Schema validation without uploading the XML"
|
|
285
|
+
)
|
|
286
|
+
subparser.add_argument("--skip-validation", action="store_true", help="Skip the SHACL schema validation")
|
|
287
|
+
subparser.add_argument(
|
|
288
|
+
"--skip-ontology-validation",
|
|
289
|
+
action="store_true",
|
|
290
|
+
help=(
|
|
291
|
+
"don't validate the data model itself, only the data. "
|
|
292
|
+
"This is intended for projects that are already on the production server"
|
|
293
|
+
),
|
|
294
|
+
)
|
|
295
|
+
subparser.add_argument("--interrupt-after", type=int, default=-1, help="interrupt after this number of resources")
|
|
296
|
+
subparser.add_argument("xmlfile", help="path to the XML file containing the data")
|
|
297
|
+
subparser.add_argument(
|
|
298
|
+
"--no-iiif-uri-validation",
|
|
299
|
+
action="store_true",
|
|
300
|
+
help="don't check if the IIIF links are valid URLs that can be reached online",
|
|
301
|
+
)
|
|
302
|
+
subparser.add_argument(
|
|
303
|
+
"--ignore-duplicate-files-warning",
|
|
304
|
+
action="store_true",
|
|
305
|
+
help="don't check if multimedia files are referenced more than once",
|
|
306
|
+
)
|
|
307
|
+
subparser.add_argument(
|
|
308
|
+
"--validation-severity",
|
|
309
|
+
choices=["error", "warning", "info"],
|
|
310
|
+
help=(
|
|
311
|
+
"Which severity level of validation message should be printed out. "
|
|
312
|
+
"Each level of severity includes the higher levels."
|
|
313
|
+
),
|
|
314
|
+
default="info",
|
|
315
|
+
)
|
|
316
|
+
subparser.add_argument(
|
|
317
|
+
"--do-not-request-resource-metadata-from-db",
|
|
318
|
+
action="store_true",
|
|
319
|
+
help=(
|
|
320
|
+
"Do not request IRIs of existing resources from the db (references to existing resources won't be checked)"
|
|
321
|
+
),
|
|
322
|
+
)
|
|
323
|
+
subparser.add_argument(
|
|
324
|
+
"--id2iri-file",
|
|
325
|
+
help=(
|
|
326
|
+
"replaces internal IDs of an XML file (links and stand-off links inside richtext) "
|
|
327
|
+
"by IRIs provided in this mapping file"
|
|
328
|
+
),
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
def _add_validate_data(
|
|
333
|
+
subparsers: _SubParsersAction[ArgumentParser],
|
|
334
|
+
default_dsp_api_url: str,
|
|
335
|
+
root_user_email: str,
|
|
336
|
+
root_user_pw: str,
|
|
337
|
+
) -> None:
|
|
338
|
+
subparser = subparsers.add_parser(
|
|
339
|
+
name="validate-data", help="Validate the data against the data model previously uploaded on the server."
|
|
340
|
+
)
|
|
341
|
+
subparser.set_defaults(action="validate-data")
|
|
342
|
+
subparser.add_argument("xmlfile", help="path to the XML file containing the data")
|
|
343
|
+
subparser.add_argument("-u", "--user", default=root_user_email, help=username_text)
|
|
344
|
+
subparser.add_argument("-p", "--password", default=root_user_pw, help=password_text)
|
|
345
|
+
subparser.add_argument(
|
|
346
|
+
"--ignore-duplicate-files-warning",
|
|
347
|
+
action="store_true",
|
|
348
|
+
help="don't check if multimedia files are referenced more than once",
|
|
349
|
+
)
|
|
350
|
+
subparser.add_argument(
|
|
351
|
+
"--skip-ontology-validation",
|
|
352
|
+
action="store_true",
|
|
353
|
+
help=(
|
|
354
|
+
"don't validate the data model itself, only the data. "
|
|
355
|
+
"This is intended for projects that are already on the production server"
|
|
356
|
+
),
|
|
357
|
+
)
|
|
358
|
+
subparser.add_argument(
|
|
359
|
+
"-s",
|
|
360
|
+
"--server",
|
|
361
|
+
default=default_dsp_api_url,
|
|
362
|
+
help="URL of the DSP server where DSP-TOOLS gets the data model from",
|
|
363
|
+
)
|
|
364
|
+
subparser.add_argument(
|
|
365
|
+
"--id2iri-file",
|
|
366
|
+
help=(
|
|
367
|
+
"replaces internal IDs of an XML file (links and stand-off links inside richtext) "
|
|
368
|
+
"by IRIs provided in this mapping file"
|
|
369
|
+
),
|
|
370
|
+
)
|
|
371
|
+
subparser.add_argument(
|
|
372
|
+
"--do-not-request-resource-metadata-from-db",
|
|
373
|
+
action="store_true",
|
|
374
|
+
help=(
|
|
375
|
+
"Do not request IRIs of existing resources from the db (references to existing resources won't be checked)"
|
|
376
|
+
),
|
|
377
|
+
)
|
|
378
|
+
subparser.add_argument(
|
|
379
|
+
"--save-graphs",
|
|
380
|
+
action="store_true",
|
|
381
|
+
help="Save the data, onto and shacl graph as ttl files. This is primarily intended for development use.",
|
|
382
|
+
)
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
def _add_resume_xmlupload(
|
|
386
|
+
subparsers: _SubParsersAction[ArgumentParser],
|
|
387
|
+
default_dsp_api_url: str,
|
|
388
|
+
root_user_email: str,
|
|
389
|
+
root_user_pw: str,
|
|
390
|
+
) -> None:
|
|
391
|
+
subparser = subparsers.add_parser(name="resume-xmlupload", help="Resume an interrupted xmlupload")
|
|
392
|
+
subparser.set_defaults(action="resume-xmlupload")
|
|
393
|
+
subparser.add_argument(
|
|
394
|
+
"-s", "--server", default=default_dsp_api_url, help="URL of the DSP server where DSP-TOOLS sends the data to"
|
|
395
|
+
)
|
|
396
|
+
subparser.add_argument("-u", "--user", default=root_user_email, help=username_text)
|
|
397
|
+
subparser.add_argument("-p", "--password", default=root_user_pw, help=password_text)
|
|
398
|
+
skip_text = (
|
|
399
|
+
"In case the last resource was successfully uploaded to the DSP-API, "
|
|
400
|
+
"but DSP-TOOLS did not get a confirmation from the DSP-API, "
|
|
401
|
+
"the resource will remain in the pending upload list.\n"
|
|
402
|
+
"If this flag is set, the first resource in the list is skipped."
|
|
403
|
+
)
|
|
404
|
+
subparser.add_argument("--skip-first-resource", action="store_true", help=skip_text)
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
def _add_get(
|
|
408
|
+
subparsers: _SubParsersAction[ArgumentParser],
|
|
409
|
+
default_dsp_api_url: str,
|
|
410
|
+
root_user_email: str,
|
|
411
|
+
root_user_pw: str,
|
|
412
|
+
) -> None:
|
|
413
|
+
subparser = subparsers.add_parser(
|
|
414
|
+
name="get",
|
|
415
|
+
help="Retrieve a project with its data model(s) from a DSP server and write it into a JSON file",
|
|
416
|
+
)
|
|
417
|
+
subparser.set_defaults(action="get")
|
|
418
|
+
subparser.add_argument("-s", "--server", default=default_dsp_api_url, help=dsp_server_text)
|
|
419
|
+
subparser.add_argument("-u", "--user", default=root_user_email, help=username_text)
|
|
420
|
+
subparser.add_argument("-p", "--password", default=root_user_pw, help=password_text)
|
|
421
|
+
subparser.add_argument("-P", "--project", help="shortcode, shortname or IRI of the project", required=True)
|
|
422
|
+
subparser.add_argument("-v", "--verbose", action="store_true", help=verbose_text)
|
|
423
|
+
subparser.add_argument("project_definition", help="path to the file the project should be written to")
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
def _add_create(
|
|
427
|
+
subparsers: _SubParsersAction[ArgumentParser],
|
|
428
|
+
default_dsp_api_url: str,
|
|
429
|
+
root_user_email: str,
|
|
430
|
+
root_user_pw: str,
|
|
431
|
+
) -> None:
|
|
432
|
+
subparser = subparsers.add_parser(
|
|
433
|
+
name="create",
|
|
434
|
+
help="Create a project defined in a JSON project file on a DSP server. "
|
|
435
|
+
"A project can consist of lists, groups, users, and ontologies (data models).",
|
|
436
|
+
)
|
|
437
|
+
subparser.set_defaults(action="create")
|
|
438
|
+
subparser.add_argument("-s", "--server", default=default_dsp_api_url, help=dsp_server_text)
|
|
439
|
+
subparser.add_argument("-u", "--user", default=root_user_email, help=username_text)
|
|
440
|
+
subparser.add_argument("-p", "--password", default=root_user_pw, help=password_text)
|
|
441
|
+
subparser.add_argument(
|
|
442
|
+
"--exit-if-exists",
|
|
443
|
+
action="store_true",
|
|
444
|
+
help="exit gracefully without further uploads if the project already exists",
|
|
445
|
+
)
|
|
446
|
+
subparser.add_argument(
|
|
447
|
+
"-V",
|
|
448
|
+
"--validate-only",
|
|
449
|
+
action="store_true",
|
|
450
|
+
help="validate the JSON file without creating it on the DSP server",
|
|
451
|
+
)
|
|
452
|
+
subparser.add_argument(
|
|
453
|
+
"-l",
|
|
454
|
+
"--lists-only",
|
|
455
|
+
action="store_true",
|
|
456
|
+
help="create only the lists (prerequisite: the project exists on the server)",
|
|
457
|
+
)
|
|
458
|
+
subparser.add_argument("project_definition", help="path to the JSON project file")
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
def _add_update_legal(subparsers: _SubParsersAction[ArgumentParser]) -> None:
|
|
462
|
+
subparser = subparsers.add_parser(
|
|
463
|
+
name="update-legal",
|
|
464
|
+
help="Convert the legal metadata of an XML file from text properties to bitstream attributes",
|
|
465
|
+
)
|
|
466
|
+
subparser.set_defaults(action="update-legal")
|
|
467
|
+
subparser.add_argument("--authorship_prop", type=str, help="Property used for the authorship, e.g. ':hasAuthor'")
|
|
468
|
+
subparser.add_argument("--copyright_prop", type=str, help="Property used for the copyright, e.g. ':hasCopyright'")
|
|
469
|
+
subparser.add_argument("--license_prop", type=str, help="Property used for the license, e.g. ':hasLicense'")
|
|
470
|
+
subparser.add_argument("--authorship_default", type=str, help="Default authorship value when property is missing")
|
|
471
|
+
subparser.add_argument("--copyright_default", type=str, help="Default copyright value when property is missing")
|
|
472
|
+
subparser.add_argument("--license_default", type=str, help="Default license value when property is missing")
|
|
473
|
+
subparser.add_argument("--fixed_errors", type=str, help="Path to the CSV file with corrected legal metadata values")
|
|
474
|
+
subparser.add_argument(
|
|
475
|
+
"--treat-invalid-licenses-as-unknown",
|
|
476
|
+
action="store_true",
|
|
477
|
+
help="Treat invalid licenses as 'unknown' instead of creating FIXME entries",
|
|
478
|
+
)
|
|
479
|
+
subparser.add_argument("xmlfile", help="path to the XML file containing the data")
|