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
knora/dsp_tools.py
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import sys
|
|
3
|
-
import os
|
|
4
|
-
|
|
5
|
-
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
|
|
6
|
-
|
|
7
|
-
from dsplib.utils.onto_validate import validate_list, validate_ontology
|
|
8
|
-
from dsplib.utils.onto_create_lists import create_lists
|
|
9
|
-
from dsplib.utils.onto_create_ontology import create_ontology
|
|
10
|
-
from dsplib.utils.onto_get import get_ontology
|
|
11
|
-
from dsplib.utils.xml_upload import xml_upload
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def program(args):
|
|
15
|
-
#
|
|
16
|
-
# parse the arguments of the command line
|
|
17
|
-
#
|
|
18
|
-
parser = argparse.ArgumentParser(
|
|
19
|
-
description="A program to create and manipulate ontologies based on the DaSCH Service Platform"
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
subparsers = parser.add_subparsers(title="Subcommands",
|
|
23
|
-
description='Valid subcommands are',
|
|
24
|
-
help='sub-command help')
|
|
25
|
-
|
|
26
|
-
parser_create = subparsers.add_parser('create', help='Create ontologies, lists etc.')
|
|
27
|
-
parser_create.set_defaults(action="create")
|
|
28
|
-
parser_create.add_argument("-s", "--server", type=str, default="http://0.0.0.0:3333", help="URL of the DSP server")
|
|
29
|
-
parser_create.add_argument("-u", "--user", default="root@example.com", help="Username for DSP server")
|
|
30
|
-
parser_create.add_argument("-p", "--password", default="test", help="The password for login")
|
|
31
|
-
parser_create.add_argument("-V", "--validate", action='store_true', help="Do only validation of JSON, no upload of the ontology")
|
|
32
|
-
parser_create.add_argument("datamodelfile", help="path to data model file")
|
|
33
|
-
parser_create.add_argument("-L", "--listfile", type=str, default="lists.json", help="Name of list node informationfile")
|
|
34
|
-
parser_create.add_argument("-l", "--lists", action='store_true', help="Only create the lists")
|
|
35
|
-
parser_create.add_argument("-v", "--verbose", action="store_true", help="Verbose feedback")
|
|
36
|
-
parser_create.add_argument("-d", "--dump", action="store_true", help="dump test files for DSP-API requests")
|
|
37
|
-
|
|
38
|
-
parser_get = subparsers.add_parser('get', help='Get project/ontology information from server')
|
|
39
|
-
parser_get.set_defaults(action="get")
|
|
40
|
-
parser_get.add_argument("-u", "--user", default="root@example.com", help="Username for DSP server")
|
|
41
|
-
parser_get.add_argument("-p", "--password", default="test", help="The password for login")
|
|
42
|
-
parser_get.add_argument("-s", "--server", type=str, default="http://0.0.0.0:3333", help="URL of the DSP server")
|
|
43
|
-
parser_get.add_argument("-P", "--project", type=str, help="Shortcode, shortname or iri of project", required=True)
|
|
44
|
-
parser_get.add_argument("outfile", help="path to data model file", default="onto.json")
|
|
45
|
-
parser_get.add_argument("-v", "--verbose", action="store_true", help="Verbose feedback")
|
|
46
|
-
|
|
47
|
-
parser_upload = subparsers.add_parser('xmlupload', help='Upload data from XML file to server')
|
|
48
|
-
parser_upload.set_defaults(action="xmlupload")
|
|
49
|
-
parser_upload.add_argument("-s", "--server", type=str, default="http://0.0.0.0:3333", help="URL of the DSP server")
|
|
50
|
-
parser_upload.add_argument("-u", "--user", type=str, default="root@example.com", help="Username for DSP server")
|
|
51
|
-
parser_upload.add_argument("-p", "--password", type=str, default="test", help="The password for login")
|
|
52
|
-
parser_upload.add_argument("-V", "--validate", action='store_true', help="Do only validation of JSON, no upload of the ontology")
|
|
53
|
-
parser_upload.add_argument("-i", "--imgdir", type=str, default=".", help="Path to folder containing the images")
|
|
54
|
-
parser_upload.add_argument("-S", "--sipi", type=str, default="http://0.0.0.0:1024", help="URL of SIPI server")
|
|
55
|
-
parser_upload.add_argument("xmlfile", help="path to xml file containing the data", default="data.xml")
|
|
56
|
-
parser_upload.add_argument("-v", "--verbose", action="store_true", help="Verbose feedback")
|
|
57
|
-
|
|
58
|
-
args = parser.parse_args(args)
|
|
59
|
-
|
|
60
|
-
if not hasattr(args, 'action'):
|
|
61
|
-
parser.print_help(sys.stderr)
|
|
62
|
-
exit(0)
|
|
63
|
-
|
|
64
|
-
if args.action == "create":
|
|
65
|
-
if args.lists:
|
|
66
|
-
if args.validate:
|
|
67
|
-
validate_list(args.datamodelfile)
|
|
68
|
-
else:
|
|
69
|
-
create_lists(args.datamodelfile, args.dump)
|
|
70
|
-
else:
|
|
71
|
-
if args.validate:
|
|
72
|
-
validate_ontology(args.datamodelfile)
|
|
73
|
-
else:
|
|
74
|
-
create_ontology(args.datamodelfile, args.listfile, args.server, args.user, args.password, args.verbose,
|
|
75
|
-
args.dump if args.dump else False)
|
|
76
|
-
elif args.action == "get":
|
|
77
|
-
get_ontology(args.project, args.outfile, args.server, args.user, args.password, args.verbose)
|
|
78
|
-
elif args.action == "xmlupload":
|
|
79
|
-
xml_upload(input_file=args.xmlfile,
|
|
80
|
-
server=args.server,
|
|
81
|
-
user=args.user,
|
|
82
|
-
password=args.password,
|
|
83
|
-
imgdir=args.imgdir,
|
|
84
|
-
sipi=args.sipi,
|
|
85
|
-
verbose=args.verbose,
|
|
86
|
-
validate=args.validate)
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def main():
|
|
91
|
-
program(sys.argv[1:])
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if __name__ == '__main__':
|
|
95
|
-
program(sys.argv[1:])
|
|
96
|
-
|
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
import requests
|
|
2
|
-
import json
|
|
3
|
-
from pystrict import strict
|
|
4
|
-
from typing import List, Set, Dict, Tuple, Optional, Any, Union
|
|
5
|
-
|
|
6
|
-
from .helpers import Actions, BaseError
|
|
7
|
-
|
|
8
|
-
@strict
|
|
9
|
-
class Connection:
|
|
10
|
-
"""
|
|
11
|
-
An Connection instance represents a connection to a Knora server.
|
|
12
|
-
|
|
13
|
-
Attributes
|
|
14
|
-
----------
|
|
15
|
-
|
|
16
|
-
none (internal use attributes should not be modified/set directly)
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
_server: str
|
|
20
|
-
_prefixes: Union[Dict[str, str], None]
|
|
21
|
-
_token: Union[str, None]
|
|
22
|
-
_log: bool
|
|
23
|
-
|
|
24
|
-
def __init__(self, server: str, prefixes: Dict[str, str] = None):
|
|
25
|
-
"""
|
|
26
|
-
Constructor requiring the server address, the user and password of KNORA
|
|
27
|
-
:param server: Address of the server, e.g https://api.dasch.swiss
|
|
28
|
-
:param prefixes: Ontology prefixes used
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
self._server = server
|
|
32
|
-
self._prefixes = prefixes
|
|
33
|
-
self._token = None
|
|
34
|
-
self._log = False
|
|
35
|
-
|
|
36
|
-
def login(self, email: str, password: str) -> None:
|
|
37
|
-
"""
|
|
38
|
-
Method to login into KNORA which creates a session token.
|
|
39
|
-
:param email: Email of user, e.g., root@example.com
|
|
40
|
-
:param password: Password of the user, e.g. test
|
|
41
|
-
"""
|
|
42
|
-
|
|
43
|
-
credentials = {
|
|
44
|
-
"email": email,
|
|
45
|
-
"password": password
|
|
46
|
-
}
|
|
47
|
-
jsondata = json.dumps(credentials)
|
|
48
|
-
|
|
49
|
-
req = requests.post(
|
|
50
|
-
self._server + '/v2/authentication',
|
|
51
|
-
headers={'Content-Type': 'application/json; charset=UTF-8'},
|
|
52
|
-
data=jsondata
|
|
53
|
-
)
|
|
54
|
-
self.on_api_error(req)
|
|
55
|
-
result = req.json()
|
|
56
|
-
self._token = result["token"]
|
|
57
|
-
|
|
58
|
-
def get_token(self) -> str:
|
|
59
|
-
"""
|
|
60
|
-
Returns the token
|
|
61
|
-
:return: token string
|
|
62
|
-
"""
|
|
63
|
-
|
|
64
|
-
return self._token
|
|
65
|
-
|
|
66
|
-
def start_logging(self):
|
|
67
|
-
self._log = True
|
|
68
|
-
|
|
69
|
-
def stop_logging(self):
|
|
70
|
-
self._log = False
|
|
71
|
-
|
|
72
|
-
def logout(self) -> None:
|
|
73
|
-
"""
|
|
74
|
-
Performs a logout
|
|
75
|
-
:return: None
|
|
76
|
-
"""
|
|
77
|
-
|
|
78
|
-
if self._token is not None:
|
|
79
|
-
req = requests.delete(
|
|
80
|
-
self._server + '/v2/authentication',
|
|
81
|
-
headers={'Authorization': 'Bearer ' + self._token}
|
|
82
|
-
)
|
|
83
|
-
self.on_api_error(req)
|
|
84
|
-
self._token = None
|
|
85
|
-
|
|
86
|
-
def __del__(self):
|
|
87
|
-
pass
|
|
88
|
-
#self.logout()
|
|
89
|
-
|
|
90
|
-
def on_api_error(self, res) -> None:
|
|
91
|
-
"""
|
|
92
|
-
Method to check for any API errors
|
|
93
|
-
:param res: The input to check, usually JSON format
|
|
94
|
-
:return: Possible Error that is being raised
|
|
95
|
-
"""
|
|
96
|
-
|
|
97
|
-
if res.status_code != 200:
|
|
98
|
-
raise BaseError("KNORA-ERROR: status code=" + str(res.status_code) + "\nMessage:" + res.text)
|
|
99
|
-
|
|
100
|
-
if 'error' in res:
|
|
101
|
-
raise BaseError("KNORA-ERROR: API error: " + res.error)
|
|
102
|
-
|
|
103
|
-
def post(self, path: str, jsondata: Optional[str] = None):
|
|
104
|
-
"""
|
|
105
|
-
Post Json data to a given server using a HTTP POST request
|
|
106
|
-
:param path: Path of RESTful route
|
|
107
|
-
:param jsondata: Valid JSON as string
|
|
108
|
-
:return: Response from server
|
|
109
|
-
"""
|
|
110
|
-
|
|
111
|
-
if path[0] != '/':
|
|
112
|
-
path = '/' + path
|
|
113
|
-
headers = None
|
|
114
|
-
if jsondata is None:
|
|
115
|
-
if self._token is not None:
|
|
116
|
-
headers = {'Authorization': 'Bearer ' + self._token}
|
|
117
|
-
req = requests.post(self._server + path,
|
|
118
|
-
headers=headers)
|
|
119
|
-
else:
|
|
120
|
-
req = requests.post(self._server + path)
|
|
121
|
-
else:
|
|
122
|
-
if self._token is not None:
|
|
123
|
-
headers = {'Content-Type': 'application/json; charset=UTF-8',
|
|
124
|
-
'Authorization': 'Bearer ' + self._token}
|
|
125
|
-
req = requests.post(self._server + path,
|
|
126
|
-
headers=headers,
|
|
127
|
-
data=jsondata)
|
|
128
|
-
else:
|
|
129
|
-
headers = {'Content-Type': 'application/json; charset=UTF-8'}
|
|
130
|
-
req = requests.post(self._server + path,
|
|
131
|
-
headers=headers,
|
|
132
|
-
data=jsondata)
|
|
133
|
-
if self._log:
|
|
134
|
-
if jsondata:
|
|
135
|
-
jsonobj = json.loads(jsondata)
|
|
136
|
-
else:
|
|
137
|
-
jsonobj = None
|
|
138
|
-
logobj = {
|
|
139
|
-
"method": "POST",
|
|
140
|
-
"headers": headers,
|
|
141
|
-
"route": path,
|
|
142
|
-
"body": jsonobj,
|
|
143
|
-
"return-headers": dict(req.headers),
|
|
144
|
-
"return": req.json() if req.status_code == 200 else {"status": str(req.status_code),
|
|
145
|
-
"message": req.text}
|
|
146
|
-
}
|
|
147
|
-
tmp = path.split('/')
|
|
148
|
-
filename = "POST" + "_".join(tmp) + ".json"
|
|
149
|
-
with open(filename, 'w') as f:
|
|
150
|
-
json.dump(logobj, f, indent=3)
|
|
151
|
-
self.on_api_error(req)
|
|
152
|
-
result = req.json()
|
|
153
|
-
return result
|
|
154
|
-
|
|
155
|
-
def get(self, path: str, headers: Optional[Dict[str, str]] = None):
|
|
156
|
-
"""
|
|
157
|
-
Get data from a server using a HTTP GET request
|
|
158
|
-
:param path: Path of RESTful route
|
|
159
|
-
:param headers: ...
|
|
160
|
-
:return: Response from server
|
|
161
|
-
"""
|
|
162
|
-
|
|
163
|
-
if path[0] != '/':
|
|
164
|
-
path = '/' + path
|
|
165
|
-
if self._token is None:
|
|
166
|
-
if headers is None:
|
|
167
|
-
req = requests.get(self._server + path)
|
|
168
|
-
else:
|
|
169
|
-
req = requests.get(self._server + path, headers)
|
|
170
|
-
else:
|
|
171
|
-
if headers is None:
|
|
172
|
-
req = requests.get(self._server + path,
|
|
173
|
-
headers={'Authorization': 'Bearer ' + self._token})
|
|
174
|
-
else:
|
|
175
|
-
headers['Authorization'] = 'Bearer ' + self._token
|
|
176
|
-
req = requests.get(self._server + path, headers)
|
|
177
|
-
|
|
178
|
-
self.on_api_error(req)
|
|
179
|
-
result = req.json()
|
|
180
|
-
return result
|
|
181
|
-
|
|
182
|
-
def put(self, path: str, jsondata: Optional[str] = None, content_type: str = 'application/json'):
|
|
183
|
-
"""
|
|
184
|
-
Send data to a RESTful server using a HTTP PUT request
|
|
185
|
-
:param path: Path of RESTful route
|
|
186
|
-
:param jsondata: Valid JSON as string
|
|
187
|
-
:param content_type: HTTP Content-Type [default: 'application/json']
|
|
188
|
-
:return:
|
|
189
|
-
"""
|
|
190
|
-
|
|
191
|
-
if path[0] != '/':
|
|
192
|
-
path = '/' + path
|
|
193
|
-
if jsondata is None:
|
|
194
|
-
req = requests.put(self._server + path,
|
|
195
|
-
headers={'Authorization': 'Bearer ' + self._token})
|
|
196
|
-
else:
|
|
197
|
-
req = requests.put(self._server + path,
|
|
198
|
-
headers={'Content-Type': content_type + '; charset=UTF-8',
|
|
199
|
-
'Authorization': 'Bearer ' + self._token},
|
|
200
|
-
data=jsondata)
|
|
201
|
-
self.on_api_error(req)
|
|
202
|
-
result = req.json()
|
|
203
|
-
return result
|
|
204
|
-
|
|
205
|
-
def delete(self, path: str, params: Optional[any] = None):
|
|
206
|
-
"""
|
|
207
|
-
Send a delete request using the HTTP DELETE request
|
|
208
|
-
:param path: Path of RESTful route
|
|
209
|
-
:return: Response from server
|
|
210
|
-
"""
|
|
211
|
-
|
|
212
|
-
if path[0] != '/':
|
|
213
|
-
path = '/' + path
|
|
214
|
-
if params is not None:
|
|
215
|
-
req = requests.delete(self._server + path,
|
|
216
|
-
headers={'Authorization': 'Bearer ' + self._token},
|
|
217
|
-
params=params)
|
|
218
|
-
|
|
219
|
-
else:
|
|
220
|
-
req = requests.delete(self._server + path,
|
|
221
|
-
headers={'Authorization': 'Bearer ' + self._token})
|
|
222
|
-
self.on_api_error(req)
|
|
223
|
-
result = req.json()
|
|
224
|
-
return result
|
|
225
|
-
|
|
226
|
-
def reset_triplestore_content(self):
|
|
227
|
-
rdfdata = [
|
|
228
|
-
{
|
|
229
|
-
"path": "./knora-ontologies/knora-admin.ttl",
|
|
230
|
-
"name": "http://www.knora.org/ontology/knora-admin"
|
|
231
|
-
},
|
|
232
|
-
{
|
|
233
|
-
"path": "./knora-ontologies/knora-base.ttl",
|
|
234
|
-
"name": "http://www.knora.org/ontology/knora-base"
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
"path": "./knora-ontologies/standoff-onto.ttl",
|
|
238
|
-
"name": "http://www.knora.org/ontology/standoff"
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
"path": "./knora-ontologies/standoff-data.ttl",
|
|
242
|
-
"name": "http://www.knora.org/data/standoff"
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
"path": "./knora-ontologies/salsah-gui.ttl",
|
|
246
|
-
"name": "http://www.knora.org/ontology/salsah-gui"
|
|
247
|
-
},
|
|
248
|
-
{
|
|
249
|
-
"path": "./_test_data/all_data/admin-data.ttl",
|
|
250
|
-
"name": "http://www.knora.org/data/admin"
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
"path": "./_test_data/all_data/permissions-data.ttl",
|
|
254
|
-
"name": "http://www.knora.org/data/permissions"
|
|
255
|
-
},
|
|
256
|
-
{
|
|
257
|
-
"path": "./_test_data/all_data/system-data.ttl",
|
|
258
|
-
"name": "http://www.knora.org/data/0000/SystemProject"
|
|
259
|
-
}
|
|
260
|
-
]
|
|
261
|
-
jsondata = json.dumps(rdfdata)
|
|
262
|
-
url = self._server + '/admin/store/ResetTriplestoreContent?prependdefaults=false'
|
|
263
|
-
|
|
264
|
-
req = requests.post(url,
|
|
265
|
-
headers={'Content-Type': 'application/json; charset=UTF-8'},
|
|
266
|
-
data=jsondata)
|
|
267
|
-
self.on_api_error(req)
|
|
268
|
-
res = req.json()
|
|
269
|
-
# pprint(res)
|
|
270
|
-
return res
|
|
271
|
-
|
|
272
|
-
|
knora/dsplib/models/group.py
DELETED
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from pystrict import strict
|
|
3
|
-
from typing import List, Set, Dict, Tuple, Optional, Any, Union
|
|
4
|
-
from urllib.parse import quote_plus
|
|
5
|
-
|
|
6
|
-
from .helpers import Actions, BaseError
|
|
7
|
-
from .connection import Connection
|
|
8
|
-
from .model import Model
|
|
9
|
-
from .project import Project
|
|
10
|
-
|
|
11
|
-
"""
|
|
12
|
-
This module implements the handling (CRUD) of Knora groups.
|
|
13
|
-
|
|
14
|
-
CREATE:
|
|
15
|
-
* Instantiate a new object of the class Group with all required parameters
|
|
16
|
-
* Call the ``create``-method on the instance
|
|
17
|
-
|
|
18
|
-
READ:
|
|
19
|
-
* Instantiate a new object with ``id``(IRI of group) given
|
|
20
|
-
* Call the ``read``-method on the instance
|
|
21
|
-
* Access the information that has been provided to the instance
|
|
22
|
-
|
|
23
|
-
UPDATE:
|
|
24
|
-
* You need an instance of an existing Project by reading an instance
|
|
25
|
-
* Change the attributes by assigning the new values
|
|
26
|
-
* Call the ``update```method on the instance
|
|
27
|
-
|
|
28
|
-
DELETE
|
|
29
|
-
* Instantiate a new objects with ``id``(IRI of group) given, or use any instance that has the id set
|
|
30
|
-
* Call the ``delete``-method on the instance
|
|
31
|
-
|
|
32
|
-
"""
|
|
33
|
-
@strict
|
|
34
|
-
class Group(Model):
|
|
35
|
-
"""
|
|
36
|
-
This class represents a Knora group
|
|
37
|
-
|
|
38
|
-
Attributes
|
|
39
|
-
----------
|
|
40
|
-
|
|
41
|
-
con : Connection
|
|
42
|
-
A connection instance to a Knora server
|
|
43
|
-
|
|
44
|
-
id : str
|
|
45
|
-
IRI of the group [get only, cannot be modified after creation of instance]
|
|
46
|
-
|
|
47
|
-
name : str
|
|
48
|
-
Name of the group
|
|
49
|
-
|
|
50
|
-
description : str
|
|
51
|
-
A description of the group
|
|
52
|
-
|
|
53
|
-
project : str | project
|
|
54
|
-
either the IRI of a project [get only, cannot be modified after creation of instance]
|
|
55
|
-
or an valid Project instance
|
|
56
|
-
|
|
57
|
-
selfjoin : boolean
|
|
58
|
-
A flag indicating if selfjoin is allowed in this group
|
|
59
|
-
|
|
60
|
-
status : boolean
|
|
61
|
-
A flag indicating if the group is active (True) or inactive/makred deleted (False)
|
|
62
|
-
|
|
63
|
-
"""
|
|
64
|
-
|
|
65
|
-
PROJECT_MEMBER_GROUP: str = "http://www.knora.org/ontology/knora-admin#ProjectMember"
|
|
66
|
-
PROJECT_ADMIN_GROUP: str = "http://www.knora.org/ontology/knora-admin#ProjectAdmin"
|
|
67
|
-
PROJECT_SYSTEMADMIN_GROUP: str = "http://www.knora.org/ontology/knora-admin#SystemAdmin"
|
|
68
|
-
|
|
69
|
-
_id: str
|
|
70
|
-
_name: str
|
|
71
|
-
_description: str
|
|
72
|
-
_project: str
|
|
73
|
-
_selfjoin: bool
|
|
74
|
-
_status: bool
|
|
75
|
-
|
|
76
|
-
def __init__(self,
|
|
77
|
-
con: Connection,
|
|
78
|
-
id: Optional[str] = None,
|
|
79
|
-
name: Optional[str] = None,
|
|
80
|
-
description: Optional[str] = None,
|
|
81
|
-
project: Optional[Union[str, Project]] = None,
|
|
82
|
-
selfjoin: Optional[bool] = None,
|
|
83
|
-
status: Optional[bool] = None):
|
|
84
|
-
super().__init__(con)
|
|
85
|
-
self._id = str(id) if id is not None else None
|
|
86
|
-
self._name = str(name) if name is not None else None
|
|
87
|
-
self._description = description
|
|
88
|
-
if project is not None and isinstance(project, Project):
|
|
89
|
-
self._project = project.id
|
|
90
|
-
else:
|
|
91
|
-
self._project = str(project) if project is not None else None
|
|
92
|
-
self._selfjoin = bool(selfjoin) if selfjoin is not None else None
|
|
93
|
-
self._status = bool(status) if status is not None else None
|
|
94
|
-
|
|
95
|
-
@property
|
|
96
|
-
def id(self) -> Optional[str]:
|
|
97
|
-
return self._id
|
|
98
|
-
|
|
99
|
-
@id.setter
|
|
100
|
-
def id(self, value: str) -> None:
|
|
101
|
-
raise BaseError('Group id cannot be modified!')
|
|
102
|
-
|
|
103
|
-
@property
|
|
104
|
-
def name(self) -> Optional[str]:
|
|
105
|
-
return self._name
|
|
106
|
-
|
|
107
|
-
@name.setter
|
|
108
|
-
def name(self, value: str):
|
|
109
|
-
self._name = value
|
|
110
|
-
self._changed.add('name')
|
|
111
|
-
|
|
112
|
-
@property
|
|
113
|
-
def description(self):
|
|
114
|
-
return self._description
|
|
115
|
-
|
|
116
|
-
@description.setter
|
|
117
|
-
def description(self, value: Optional[str]):
|
|
118
|
-
self._description = value
|
|
119
|
-
self._changed.add('description')
|
|
120
|
-
|
|
121
|
-
@property
|
|
122
|
-
def project(self):
|
|
123
|
-
return self._project
|
|
124
|
-
|
|
125
|
-
@project.setter
|
|
126
|
-
def project(self, value: str):
|
|
127
|
-
raise BaseError('project id cannot be modified!')
|
|
128
|
-
|
|
129
|
-
@property
|
|
130
|
-
def selfjoin(self) -> bool:
|
|
131
|
-
return self._selfjoin
|
|
132
|
-
|
|
133
|
-
@selfjoin.setter
|
|
134
|
-
def selfjoin(self, value: bool) -> None:
|
|
135
|
-
self._selfjoin = value
|
|
136
|
-
self._changed.add('selfjoin')
|
|
137
|
-
|
|
138
|
-
@property
|
|
139
|
-
def status(self) -> bool:
|
|
140
|
-
return self._status
|
|
141
|
-
|
|
142
|
-
@status.setter
|
|
143
|
-
def status(self, value: bool) -> None:
|
|
144
|
-
self._status = value
|
|
145
|
-
self._changed.add('status')
|
|
146
|
-
|
|
147
|
-
def has_changed(self) -> bool:
|
|
148
|
-
if self._changed:
|
|
149
|
-
return True
|
|
150
|
-
else:
|
|
151
|
-
return False
|
|
152
|
-
|
|
153
|
-
@classmethod
|
|
154
|
-
def fromJsonObj(cls, con: Connection, json_obj: Any):
|
|
155
|
-
id = json_obj.get('id')
|
|
156
|
-
if id is None:
|
|
157
|
-
raise BaseError('Group "id" is missing in JSON from knora')
|
|
158
|
-
name = json_obj.get('name')
|
|
159
|
-
if name is None:
|
|
160
|
-
raise BaseError('Group "name" is missing in JSON from knora')
|
|
161
|
-
description = json_obj.get('description')
|
|
162
|
-
tmp = json_obj.get('project')
|
|
163
|
-
if tmp is None:
|
|
164
|
-
raise BaseError('Group "project" is missing in JSON from knora')
|
|
165
|
-
project = tmp.get('id')
|
|
166
|
-
if project is None:
|
|
167
|
-
raise BaseError('Group "project" has no "id" in JSON from knora')
|
|
168
|
-
selfjoin = json_obj.get('selfjoin')
|
|
169
|
-
if selfjoin is None:
|
|
170
|
-
raise BaseError("selfjoin is missing in JSON from knora")
|
|
171
|
-
status = json_obj.get('status')
|
|
172
|
-
if status is None:
|
|
173
|
-
raise BaseError("Status is missing in JSON from knora")
|
|
174
|
-
return cls(con=con,
|
|
175
|
-
name=name,
|
|
176
|
-
id=id,
|
|
177
|
-
description=description,
|
|
178
|
-
project=project,
|
|
179
|
-
selfjoin=selfjoin,
|
|
180
|
-
status=status)
|
|
181
|
-
|
|
182
|
-
def toJsonObj(self, action: Actions):
|
|
183
|
-
tmp = {}
|
|
184
|
-
if action == Actions.Create:
|
|
185
|
-
if self._name is None:
|
|
186
|
-
raise BaseError("There must be a valid name!")
|
|
187
|
-
tmp['name'] = self._name
|
|
188
|
-
if self._description is not None:
|
|
189
|
-
tmp['description'] = self._description
|
|
190
|
-
if self._project is None:
|
|
191
|
-
raise BaseError("There must be a valid project!")
|
|
192
|
-
tmp['project'] = self._project
|
|
193
|
-
if self._selfjoin is None:
|
|
194
|
-
raise BaseError("There must be a valid value for selfjoin!")
|
|
195
|
-
tmp['selfjoin'] = self._selfjoin
|
|
196
|
-
if self._status is None:
|
|
197
|
-
raise BaseError("There must be a valid value for status!")
|
|
198
|
-
tmp['status'] = self._status
|
|
199
|
-
else:
|
|
200
|
-
if self._name is not None and 'name' in self._changed:
|
|
201
|
-
tmp['name'] = self._name
|
|
202
|
-
if self._description is not None and 'description' in self._changed:
|
|
203
|
-
tmp['description'] = self._description
|
|
204
|
-
if self._selfjoin is not None and 'selfjoin' in self._changed:
|
|
205
|
-
tmp['selfjoin'] = self._selfjoin
|
|
206
|
-
return tmp
|
|
207
|
-
|
|
208
|
-
def create(self):
|
|
209
|
-
jsonobj = self.toJsonObj(Actions.Create)
|
|
210
|
-
jsondata = json.dumps(jsonobj)
|
|
211
|
-
result = self._con.post('/admin/groups', jsondata)
|
|
212
|
-
return Group.fromJsonObj(self._con, result['group'])
|
|
213
|
-
|
|
214
|
-
def read(self):
|
|
215
|
-
result = self._con.get('/admin/groups/' + quote_plus(self._id))
|
|
216
|
-
return Group.fromJsonObj(self._con, result['group'])
|
|
217
|
-
|
|
218
|
-
def update(self):
|
|
219
|
-
jsonobj = self.toJsonObj(Actions.Update)
|
|
220
|
-
if jsonobj:
|
|
221
|
-
jsondata = json.dumps(jsonobj)
|
|
222
|
-
result = self._con.put('/admin/groups/' + quote_plus(self._id), jsondata)
|
|
223
|
-
updated_group = Group.fromJsonObj(self._con, result['group'])
|
|
224
|
-
if self._status is not None and 'status' in self._changed:
|
|
225
|
-
jsondata = json.dumps({'status': self._status})
|
|
226
|
-
result = self._con.put('/admin/groups/' + quote_plus(self._id) + '/status', jsondata)
|
|
227
|
-
updated_group = Group.fromJsonObj(self._con, result['group'])
|
|
228
|
-
return updated_group
|
|
229
|
-
|
|
230
|
-
def delete(self):
|
|
231
|
-
result = self._con.delete('/admin/groups/' + quote_plus(self._id))
|
|
232
|
-
return Group.fromJsonObj(self._con, result['group'])
|
|
233
|
-
|
|
234
|
-
@staticmethod
|
|
235
|
-
def getAllGroups(con: Connection) -> List['Group']:
|
|
236
|
-
result = con.get('/admin/groups')
|
|
237
|
-
if 'groups' not in result:
|
|
238
|
-
raise BaseError("Request got no groups!")
|
|
239
|
-
return list(map(lambda a: Group.fromJsonObj(con, a), result['groups']))
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
def print(self):
|
|
243
|
-
print('Group Info:')
|
|
244
|
-
print(' Id: {}'.format(self._id))
|
|
245
|
-
print(' Name: {}'.format(self._name))
|
|
246
|
-
print(' Description: {}'.format(self._description))
|
|
247
|
-
print(' Project: {}'.format(self._project))
|
|
248
|
-
print(' Selfjoin: {}'.format(self._selfjoin))
|
|
249
|
-
print(' Status: {}'.format(self._status))
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
if __name__ == '__main__':
|
|
254
|
-
con = Connection('http://0.0.0.0:3333')
|
|
255
|
-
con.login('root@example.com', 'test')
|
|
256
|
-
|
|
257
|
-
groups = Group.getAllGroups(con)
|
|
258
|
-
for group in groups:
|
|
259
|
-
group.print()
|
|
260
|
-
|
|
261
|
-
new_group = Group(con=con,
|
|
262
|
-
name="KNORA-PY TEST",
|
|
263
|
-
description="Test project for knora-py",
|
|
264
|
-
project="http://rdfh.ch/projects/00FF",
|
|
265
|
-
status=True,
|
|
266
|
-
selfjoin=False).create()
|
|
267
|
-
new_group.print()
|
|
268
|
-
|
|
269
|
-
new_group.name="KNORA-PY TEST - modified"
|
|
270
|
-
new_group = new_group.update();
|
|
271
|
-
new_group.print()
|
|
272
|
-
|
|
273
|
-
new_group.description="gaga gaga gaga gaga gaga gaga gaga"
|
|
274
|
-
new_group = new_group.update();
|
|
275
|
-
new_group.print()
|
|
276
|
-
|
|
277
|
-
new_group.selfjoin = True
|
|
278
|
-
new_group = new_group.update();
|
|
279
|
-
new_group.print()
|
|
280
|
-
|
|
281
|
-
new_group.status = False
|
|
282
|
-
new_group = new_group.update();
|
|
283
|
-
new_group.print()
|
|
284
|
-
|
|
285
|
-
new_group.name = '-- KNORA-PY TEST --'
|
|
286
|
-
new_group.description = 'Final Test'
|
|
287
|
-
new_group.status = True
|
|
288
|
-
new_group = new_group.update()
|
|
289
|
-
new_group.print()
|
|
290
|
-
|
|
291
|
-
new_group.delete()
|
|
292
|
-
|
|
293
|
-
print('=========================')
|
|
294
|
-
groups = Group.getAllGroups(con)
|
|
295
|
-
for group in groups:
|
|
296
|
-
group.print()
|