dsp-tools 17.0.0.post26__py3-none-any.whl → 17.0.0.post29__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.

Potentially problematic release.


This version of dsp-tools might be problematic. Click here for more details.

dsp_tools/cli/args.py CHANGED
@@ -25,6 +25,7 @@ class ValidateDataConfig:
25
25
  ignore_duplicate_files_warning: bool
26
26
  is_on_prod_server: bool
27
27
  skip_ontology_validation: bool
28
+ do_not_request_resource_metadata_from_db: bool
28
29
 
29
30
 
30
31
  class ValidationSeverity(Enum):
@@ -211,6 +211,7 @@ def _call_ingest_xmlupload(args: argparse.Namespace) -> bool:
211
211
  skip_validation=args.skip_validation,
212
212
  skip_ontology_validation=args.skip_ontology_validation,
213
213
  id2iri_replacement_file=args.id2iri_replacement_with_file,
214
+ do_not_request_resource_metadata_from_db=args.do_not_request_resource_metadata_from_db,
214
215
  )
215
216
 
216
217
 
@@ -250,6 +251,7 @@ def _call_xmlupload(args: argparse.Namespace) -> bool:
250
251
  ignore_duplicate_files_warning=args.ignore_duplicate_files_warning,
251
252
  validation_severity=severity,
252
253
  skip_ontology_validation=args.skip_ontology_validation,
254
+ do_not_request_resource_metadata_from_db=args.do_not_request_resource_metadata_from_db,
253
255
  id2iri_replacement_file=id_2_iri_file,
254
256
  ),
255
257
  )
@@ -266,6 +268,7 @@ def _call_validate_data(args: argparse.Namespace) -> bool:
266
268
  ignore_duplicate_files_warning=args.ignore_duplicate_files_warning,
267
269
  skip_ontology_validation=args.skip_ontology_validation,
268
270
  id2iri_replacement_file=args.id2iri_replacement_with_file,
271
+ do_not_request_resource_metadata_from_db=args.do_not_request_resource_metadata_from_db,
269
272
  )
270
273
 
271
274
 
@@ -242,6 +242,13 @@ def _add_ingest_xmlupload(
242
242
  "--id2iri-replacement-with-file",
243
243
  help="replaces internal IDs of an XML file by IRIs provided in this mapping file",
244
244
  )
245
+ subparser.add_argument(
246
+ "--do-not-request-resource-metadata-from-db",
247
+ action="store_true",
248
+ help=(
249
+ "Do not request IRIs of existing resources from the db (references to existing resources won't be checked)"
250
+ ),
251
+ )
245
252
 
246
253
 
247
254
  def _add_xmlupload(
@@ -279,6 +286,13 @@ def _add_xmlupload(
279
286
  help="Which severity level of validation message should be printed out",
280
287
  default="info",
281
288
  )
289
+ subparser.add_argument(
290
+ "--do-not-request-resource-metadata-from-db",
291
+ action="store_true",
292
+ help=(
293
+ "Do not request IRIs of existing resources from the db (references to existing resources won't be checked)"
294
+ ),
295
+ )
282
296
  subparser.add_argument(
283
297
  "--id2iri-replacement-with-file",
284
298
  help="replaces internal IDs of an XML file by IRIs provided in this mapping file",
@@ -309,6 +323,13 @@ def _add_validate_data(
309
323
  "--id2iri-replacement-with-file",
310
324
  help="replaces internal IDs of an XML file by IRIs provided in this mapping file",
311
325
  )
326
+ subparser.add_argument(
327
+ "--do-not-request-resource-metadata-from-db",
328
+ action="store_true",
329
+ help=(
330
+ "Do not request IRIs of existing resources from the db (references to existing resources won't be checked)"
331
+ ),
332
+ )
312
333
  subparser.add_argument(
313
334
  "--save-graphs", action="store_true", help="Save the data, onto and shacl graph as ttl files."
314
335
  )
@@ -6,9 +6,9 @@ from typing import Protocol
6
6
  from dsp_tools.clients.authentication_client import AuthenticationClient
7
7
 
8
8
 
9
- class MetadataRetrieval(Enum):
10
- SUCCESS = auto()
11
- FAILURE = auto()
9
+ class ExistingResourcesRetrieved(Enum):
10
+ TRUE = auto()
11
+ FALSE = auto()
12
12
 
13
13
 
14
14
  @dataclass
@@ -20,5 +20,5 @@ class MetadataClient(Protocol):
20
20
  server: str
21
21
  authentication_client: AuthenticationClient
22
22
 
23
- def get_resource_metadata(self, shortcode: str) -> tuple[MetadataRetrieval, list[dict[str, str]]]:
23
+ def get_resource_metadata(self, shortcode: str) -> tuple[ExistingResourcesRetrieved, list[dict[str, str]]]:
24
24
  """Get all resource metadata from one project."""
@@ -4,8 +4,8 @@ import requests
4
4
  from loguru import logger
5
5
 
6
6
  from dsp_tools.clients.authentication_client import AuthenticationClient
7
+ from dsp_tools.clients.metadata_client import ExistingResourcesRetrieved
7
8
  from dsp_tools.clients.metadata_client import MetadataClient
8
- from dsp_tools.clients.metadata_client import MetadataRetrieval
9
9
  from dsp_tools.utils.request_utils import RequestParameters
10
10
  from dsp_tools.utils.request_utils import log_request
11
11
  from dsp_tools.utils.request_utils import log_response
@@ -18,7 +18,7 @@ class MetadataClientLive(MetadataClient):
18
18
  server: str
19
19
  authentication_client: AuthenticationClient
20
20
 
21
- def get_resource_metadata(self, shortcode: str) -> tuple[MetadataRetrieval, list[dict[str, str]]]:
21
+ def get_resource_metadata(self, shortcode: str) -> tuple[ExistingResourcesRetrieved, list[dict[str, str]]]:
22
22
  url = f"{self.server}/v2/metadata/projects/{shortcode}/resources?format=JSON"
23
23
  header = {"Authorization": f"Bearer {self.authentication_client.get_token()}"}
24
24
  params = RequestParameters(method="GET", url=url, timeout=TIMEOUT, headers=header)
@@ -33,10 +33,11 @@ class MetadataClientLive(MetadataClient):
33
33
  if response.ok:
34
34
  # we log the response separately because if it was successful it will be too big
35
35
  log_response(response, include_response_content=False)
36
- return MetadataRetrieval.SUCCESS, response.json()
36
+ logger.debug(f"{len(response.json())} NUMBER OF RESOURCES RETRIEVED")
37
+ return ExistingResourcesRetrieved.TRUE, response.json()
37
38
  # here the response text is important
38
39
  log_response(response)
39
- return MetadataRetrieval.FAILURE, []
40
+ return ExistingResourcesRetrieved.FALSE, []
40
41
  except Exception as err: # noqa: BLE001 (blind exception)
41
42
  logger.error(err)
42
- return MetadataRetrieval.FAILURE, []
43
+ return ExistingResourcesRetrieved.FALSE, []
@@ -43,6 +43,7 @@ def ingest_xmlupload(
43
43
  skip_validation: bool = False,
44
44
  skip_ontology_validation: bool = False,
45
45
  id2iri_replacement_file: str | None = None,
46
+ do_not_request_resource_metadata_from_db: bool = False,
46
47
  ) -> bool:
47
48
  """
48
49
  This function reads an XML file
@@ -59,6 +60,8 @@ def ingest_xmlupload(
59
60
  skip_validation: skip the SHACL validation
60
61
  skip_ontology_validation: skip the ontology validation
61
62
  id2iri_replacement_file: to replace internal IDs of an XML file by IRIs provided in this mapping file
63
+ do_not_request_resource_metadata_from_db: if true do not request metadata information from the api
64
+ for existing resources
62
65
 
63
66
  Returns:
64
67
  True if all resources could be uploaded without errors; False if one of the resources could not be
@@ -115,6 +118,7 @@ def ingest_xmlupload(
115
118
  ignore_duplicate_files_warning=True,
116
119
  is_on_prod_server=is_on_prod_like_server,
117
120
  skip_ontology_validation=skip_ontology_validation,
121
+ do_not_request_resource_metadata_from_db=do_not_request_resource_metadata_from_db,
118
122
  ),
119
123
  auth=auth,
120
124
  )
@@ -114,5 +114,6 @@ class ProblemType(StrEnum):
114
114
  LINK_TARGET_TYPE_MISMATCH = "Linked Resource Type Mismatch"
115
115
  LINK_TARGET_OF_ANOTHER_PROJECT = "Linked Resource is from another project"
116
116
  LINK_TARGET_IS_IRI_OF_PROJECT = "Linked resource is an IRI of the project"
117
+ LINK_TARGET_NOT_FOUND_IN_DB = "Linked resource is an IRI and could not be found in the database."
117
118
  INEXISTENT_LINKED_RESOURCE = "Linked Resource does not exist"
118
119
  DUPLICATE_VALUE = "Your input is duplicated"
@@ -8,7 +8,7 @@ from rdflib import URIRef
8
8
 
9
9
  from dsp_tools.clients.authentication_client import AuthenticationClient
10
10
  from dsp_tools.clients.legal_info_client_live import LegalInfoClientLive
11
- from dsp_tools.clients.metadata_client import MetadataRetrieval
11
+ from dsp_tools.clients.metadata_client import ExistingResourcesRetrieved
12
12
  from dsp_tools.clients.metadata_client_live import MetadataClientLive
13
13
  from dsp_tools.commands.validate_data.api_clients import ListClient
14
14
  from dsp_tools.commands.validate_data.api_clients import OntologyClient
@@ -47,13 +47,16 @@ def prepare_data_for_validation_from_parsed_resource(
47
47
  permission_ids: list[str],
48
48
  auth: AuthenticationClient,
49
49
  shortcode: str,
50
- ) -> tuple[RDFGraphs, set[str], MetadataRetrieval]:
50
+ do_not_request_resource_metadata_from_db: bool,
51
+ ) -> tuple[RDFGraphs, set[str], ExistingResourcesRetrieved]:
51
52
  used_iris = {x.res_type for x in parsed_resources}
52
- proj_info, metadata_retrieval_success = _get_project_specific_information_from_api(auth, shortcode)
53
+ proj_info, existing_resources_retrieved = _get_project_specific_information_from_api(
54
+ auth, shortcode, do_not_request_resource_metadata_from_db
55
+ )
53
56
  list_lookup = _make_list_lookup(proj_info.all_lists)
54
57
  data_rdf = _make_data_graph_from_parsed_resources(parsed_resources, authorship_lookup, list_lookup)
55
58
  rdf_graphs = _create_graphs(data_rdf, shortcode, auth, proj_info, permission_ids)
56
- return rdf_graphs, used_iris, metadata_retrieval_success
59
+ return rdf_graphs, used_iris, existing_resources_retrieved
57
60
 
58
61
 
59
62
  def _make_list_lookup(project_lists: list[OneList]) -> ListLookup:
@@ -66,18 +69,22 @@ def _make_list_lookup(project_lists: list[OneList]) -> ListLookup:
66
69
 
67
70
 
68
71
  def _get_project_specific_information_from_api(
69
- auth: AuthenticationClient, shortcode: str
70
- ) -> tuple[ProjectDataFromApi, MetadataRetrieval]:
72
+ auth: AuthenticationClient, shortcode: str, do_not_request_resource_metadata_from_db: bool
73
+ ) -> tuple[ProjectDataFromApi, ExistingResourcesRetrieved]:
71
74
  list_client = ListClient(auth.server, shortcode)
72
75
  all_lists = list_client.get_lists()
73
76
  enabled_licenses = _get_license_iris(shortcode, auth)
74
- retrieval_status, formatted_metadata = _get_metadata_info(auth, shortcode)
75
- return ProjectDataFromApi(all_lists, enabled_licenses, formatted_metadata), retrieval_status
77
+ if do_not_request_resource_metadata_from_db:
78
+ existing_resources_retrieved = ExistingResourcesRetrieved.FALSE
79
+ formatted_metadata: list[InfoForResourceInDB] = []
80
+ else:
81
+ existing_resources_retrieved, formatted_metadata = _get_metadata_info(auth, shortcode)
82
+ return ProjectDataFromApi(all_lists, enabled_licenses, formatted_metadata), existing_resources_retrieved
76
83
 
77
84
 
78
85
  def _get_metadata_info(
79
86
  auth: AuthenticationClient, shortcode: str
80
- ) -> tuple[MetadataRetrieval, list[InfoForResourceInDB]]:
87
+ ) -> tuple[ExistingResourcesRetrieved, list[InfoForResourceInDB]]:
81
88
  metadata_client = MetadataClientLive(auth.server, auth)
82
89
  retrieval_status, metadata = metadata_client.get_resource_metadata(shortcode)
83
90
  formatted_metadata = [InfoForResourceInDB(x["resourceIri"], x["resourceClassIri"]) for x in metadata]
@@ -3,6 +3,7 @@ from collections import defaultdict
3
3
  import pandas as pd
4
4
 
5
5
  from dsp_tools.cli.args import ValidationSeverity
6
+ from dsp_tools.clients.metadata_client import ExistingResourcesRetrieved
6
7
  from dsp_tools.commands.validate_data.models.input_problems import AllProblems
7
8
  from dsp_tools.commands.validate_data.models.input_problems import DuplicateFileWarning
8
9
  from dsp_tools.commands.validate_data.models.input_problems import InputProblem
@@ -20,9 +21,14 @@ PROBLEM_TYPES_IGNORE_STR_ENUM_INFO = {ProblemType.GENERIC, ProblemType.FILE_VALU
20
21
 
21
22
 
22
23
  def sort_user_problems(
23
- all_problems: AllProblems, duplicate_file_warnings: DuplicateFileWarning | None, shortcode: str
24
+ all_problems: AllProblems,
25
+ duplicate_file_warnings: DuplicateFileWarning | None,
26
+ shortcode: str,
27
+ existing_resources_retrieved: ExistingResourcesRetrieved,
24
28
  ) -> SortedProblems:
25
- iris_removed, links_level_info = _separate_resource_links_to_iris_of_own_project(all_problems.problems, shortcode)
29
+ iris_removed, links_level_info = _separate_resource_links_to_iris_of_own_project(
30
+ all_problems.problems, shortcode, existing_resources_retrieved
31
+ )
26
32
  filtered_problems = _filter_out_duplicate_problems(iris_removed)
27
33
  violations, warnings, info = _separate_according_to_severity(filtered_problems)
28
34
  if duplicate_file_warnings:
@@ -47,37 +53,61 @@ def _separate_according_to_severity(
47
53
 
48
54
 
49
55
  def _separate_resource_links_to_iris_of_own_project(
50
- problems: list[InputProblem], shortcode: str
56
+ problems: list[InputProblem], shortcode: str, existing_resources_retrieved: ExistingResourcesRetrieved
51
57
  ) -> tuple[list[InputProblem], list[InputProblem]]:
52
58
  link_level_info = []
53
59
  all_others = []
54
- resource_iri_start = "http://rdfh.ch/"
55
- project_resource_iri = f"{resource_iri_start}{shortcode}/"
56
60
  for prblm in problems:
57
61
  if prblm.problem_type != ProblemType.INEXISTENT_LINKED_RESOURCE:
58
62
  all_others.append(prblm)
59
- continue
60
- if not prblm.input_value:
61
- all_others.append(prblm)
62
- elif prblm.input_value.startswith(project_resource_iri):
63
- prblm.message = (
64
- "You used an absolute IRI to reference an existing resource in the DB. "
65
- "If this resource does not exist or is not of the correct type, an xmlupload will fail."
66
- )
67
- prblm.problem_type = ProblemType.LINK_TARGET_IS_IRI_OF_PROJECT
68
- link_level_info.append(prblm)
69
- elif prblm.input_value.startswith(resource_iri_start):
70
- prblm.message = (
71
- "You used an absolute IRI to reference an existing resource of another project in the DB. "
72
- "Cross-Project resource links are not permitted."
73
- )
74
- prblm.problem_type = ProblemType.LINK_TARGET_OF_ANOTHER_PROJECT
75
- all_others.append(prblm)
76
63
  else:
77
- all_others.append(prblm)
64
+ is_violation, triaged_problem = _determined_link_value_message_and_level(
65
+ prblm, shortcode, existing_resources_retrieved
66
+ )
67
+ if is_violation:
68
+ all_others.append(triaged_problem)
69
+ else:
70
+ link_level_info.append(triaged_problem)
78
71
  return all_others, link_level_info
79
72
 
80
73
 
74
+ def _determined_link_value_message_and_level(
75
+ problem: InputProblem, shortcode: str, existing_resources_retrieved: ExistingResourcesRetrieved
76
+ ) -> tuple[bool, InputProblem]:
77
+ is_violation = True
78
+ resource_iri_start = "http://rdfh.ch/"
79
+ project_resource_iri = f"{resource_iri_start}{shortcode}/"
80
+ if not problem.input_value:
81
+ return is_violation, problem
82
+ if problem.input_value.startswith(project_resource_iri):
83
+ # case IRI and matches those of the projects itself
84
+ if existing_resources_retrieved == ExistingResourcesRetrieved.TRUE:
85
+ # if metadata was sucessfully retrieved, then the IRI is wrong
86
+ problem.problem_type = ProblemType.LINK_TARGET_NOT_FOUND_IN_DB
87
+ problem.message = (
88
+ "You used an absolute IRI to reference an existing resource in the DB. "
89
+ "We could not find a reference to this resource in the database."
90
+ )
91
+ return is_violation, problem
92
+ # if we could not retrieve the metadata, then we cannot verify if it exists or not, so it is only an info
93
+ problem.problem_type = ProblemType.LINK_TARGET_IS_IRI_OF_PROJECT
94
+ problem.message = (
95
+ "You used an absolute IRI to reference an existing resource in the DB. "
96
+ "If this resource does not exist or is not of the correct type, an xmlupload will fail."
97
+ )
98
+ return not is_violation, problem
99
+ if problem.input_value.startswith(resource_iri_start):
100
+ # case IRI, but does not contain the shortcode of the project
101
+ problem.message = (
102
+ "You used an absolute IRI to reference an existing resource of another project in the DB. "
103
+ "Cross-Project resource links are not permitted."
104
+ )
105
+ problem.problem_type = ProblemType.LINK_TARGET_OF_ANOTHER_PROJECT
106
+ return is_violation, problem
107
+ # all other cases, it is not an IRI and must be an internal ID that does not exist in the XML
108
+ return is_violation, problem
109
+
110
+
81
111
  def _filter_out_duplicate_problems(problems: list[InputProblem]) -> list[InputProblem]:
82
112
  grouped, without_res_id = _group_problems_by_resource(problems)
83
113
  filtered = without_res_id
@@ -10,6 +10,7 @@ from dsp_tools.cli.args import ValidateDataConfig
10
10
  from dsp_tools.cli.args import ValidationSeverity
11
11
  from dsp_tools.clients.authentication_client import AuthenticationClient
12
12
  from dsp_tools.clients.authentication_client_live import AuthenticationClientLive
13
+ from dsp_tools.clients.metadata_client import ExistingResourcesRetrieved
13
14
  from dsp_tools.commands.validate_data.models.input_problems import OntologyValidationProblem
14
15
  from dsp_tools.commands.validate_data.models.input_problems import SortedProblems
15
16
  from dsp_tools.commands.validate_data.models.input_problems import UnknownClassesInData
@@ -51,6 +52,7 @@ def validate_data(
51
52
  save_graphs: bool,
52
53
  skip_ontology_validation: bool,
53
54
  id2iri_replacement_file: str | None,
55
+ do_not_request_resource_metadata_from_db: bool,
54
56
  ) -> bool:
55
57
  """
56
58
  Takes a file and project information and validates it against the ontologies on the server.
@@ -62,6 +64,7 @@ def validate_data(
62
64
  save_graphs: if this flag is set, all the graphs will be saved in a folder
63
65
  skip_ontology_validation: skip the ontology validation
64
66
  id2iri_replacement_file: to replace internal IDs of an XML file by IRIs provided in this mapping file
67
+ do_not_request_resource_metadata_from_db: true if no metadata for existing resources should be requested
65
68
 
66
69
  Returns:
67
70
  True if no errors that impede an xmlupload were found.
@@ -78,6 +81,7 @@ def validate_data(
78
81
  ignore_duplicate_files_warning=ignore_duplicate_files_warning,
79
82
  is_on_prod_server=is_prod_like_server(creds.server),
80
83
  skip_ontology_validation=skip_ontology_validation,
84
+ do_not_request_resource_metadata_from_db=do_not_request_resource_metadata_from_db,
81
85
  )
82
86
  auth = AuthenticationClientLive(server=creds.server, email=creds.user, password=creds.password)
83
87
 
@@ -104,14 +108,17 @@ def validate_parsed_resources(
104
108
  config: ValidateDataConfig,
105
109
  auth: AuthenticationClient,
106
110
  ) -> bool:
107
- rdf_graphs, used_iris, _ = prepare_data_for_validation_from_parsed_resource(
111
+ rdf_graphs, used_iris, existing_resources_retrieved = prepare_data_for_validation_from_parsed_resource(
108
112
  parsed_resources=parsed_resources,
109
113
  authorship_lookup=authorship_lookup,
110
114
  permission_ids=permission_ids,
111
115
  auth=auth,
112
116
  shortcode=shortcode,
117
+ do_not_request_resource_metadata_from_db=config.do_not_request_resource_metadata_from_db,
118
+ )
119
+ validation_result = _validate_data(
120
+ rdf_graphs, used_iris, parsed_resources, config, shortcode, existing_resources_retrieved
113
121
  )
114
- validation_result = _validate_data(rdf_graphs, used_iris, parsed_resources, config, shortcode)
115
122
  if validation_result.no_problems:
116
123
  logger.debug("No validation errors found.")
117
124
  print(NO_VALIDATION_ERRORS_FOUND_MSG)
@@ -143,6 +150,7 @@ def _validate_data(
143
150
  parsed_resources: list[ParsedResource],
144
151
  config: ValidateDataConfig,
145
152
  shortcode: str,
153
+ existing_resources_retrieved: ExistingResourcesRetrieved,
146
154
  ) -> ValidateDataResult:
147
155
  logger.debug(f"Validate-data called with the following config: {vars(config)}")
148
156
  # Check if unknown classes are used
@@ -171,7 +179,7 @@ def _validate_data(
171
179
  )
172
180
  return ValidateDataResult(False, sorted_problems, report)
173
181
  reformatted = reformat_validation_graph(report)
174
- sorted_problems = sort_user_problems(reformatted, duplicate_file_warnings, shortcode)
182
+ sorted_problems = sort_user_problems(reformatted, duplicate_file_warnings, shortcode, existing_resources_retrieved)
175
183
  return ValidateDataResult(False, sorted_problems, report)
176
184
 
177
185
 
@@ -56,6 +56,7 @@ class UploadConfig:
56
56
  ignore_duplicate_files_warning: bool = False
57
57
  validation_severity: ValidationSeverity = field(default_factory=lambda: ValidationSeverity.INFO)
58
58
  id2iri_replacement_file: str | None = None
59
+ do_not_request_resource_metadata_from_db: bool = False
59
60
 
60
61
  def with_server_info(
61
62
  self,
@@ -177,6 +177,7 @@ def _handle_validation(
177
177
  ignore_duplicate_files_warning=ignore_duplicates,
178
178
  is_on_prod_server=is_on_prod_like_server,
179
179
  skip_ontology_validation=config.skip_ontology_validation,
180
+ do_not_request_resource_metadata_from_db=config.do_not_request_resource_metadata_from_db,
180
181
  ),
181
182
  auth=auth,
182
183
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dsp-tools
3
- Version: 17.0.0.post26
3
+ Version: 17.0.0.post29
4
4
  Summary: DSP-TOOLS is a Python package with a command line interface that helps you interact with a DaSCH service platform (DSP) server.
5
5
  Author: DaSCH - Swiss National Data and Service Center for the Humanities
6
6
  Author-email: DaSCH - Swiss National Data and Service Center for the Humanities <info@dasch.swiss>
@@ -1,8 +1,8 @@
1
1
  dsp_tools/__init__.py,sha256=XdzLhY_8FUFmPtUEawAvEA8apQ_jlgspb2HpmNjlDV8,158
2
2
  dsp_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- dsp_tools/cli/args.py,sha256=tS16NvgIMdQuaDWb0cNC8TIK7wY-i4pQe7NFYrzt5Bo,694
4
- dsp_tools/cli/call_action.py,sha256=2yBnZqNPWy0swC-YTA_CvhPOMh0cKBUHgQXPFGfDpvU,13826
5
- dsp_tools/cli/create_parsers.py,sha256=zi0E7AHV25B_wXt_8Jcan0Tc6y7aG0vipS5rya5gP9s,17764
3
+ dsp_tools/cli/args.py,sha256=LhDmsQFBclEKBTarFJx-NB2K4fhzYSV9OjMLMxU3pNk,745
4
+ dsp_tools/cli/call_action.py,sha256=7Hobk9PDABFn7f2vLq-7M6hU1-KnG115UGMVmJmBLKA,14122
5
+ dsp_tools/cli/create_parsers.py,sha256=q3l4o6ApdOp6uQd63370EfKXwtwxnFKZ5PwHApc0Jzw,18553
6
6
  dsp_tools/cli/entry_point.py,sha256=gdexHqVDAy8_Atf0oUxvPVQyDGWUSUhio396U5Oc0RI,10331
7
7
  dsp_tools/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  dsp_tools/clients/authentication_client.py,sha256=A9nTlOdUE4Ez0psWX6qXwuypNBAA2eSVfHIEPzRmoCs,267
@@ -12,8 +12,8 @@ dsp_tools/clients/connection_live.py,sha256=Y0T-F93FFGnY2Z7qHhG56v3Ajg7U7ATq4QHI
12
12
  dsp_tools/clients/fuseki_metrics.py,sha256=Vy_aWOusnzlD0EnbyHZcTtPIpMEfRA_ihtYbysTq7sQ,2059
13
13
  dsp_tools/clients/legal_info_client.py,sha256=itDvGQf1VV1WiH2oHVcH1epSUSdJPRDwdRUvmCw8P4s,742
14
14
  dsp_tools/clients/legal_info_client_live.py,sha256=9nOe8Y-oQRHh4TkD2-tjdxLNNTonQ0i-P6UjCGgIBGA,5987
15
- dsp_tools/clients/metadata_client.py,sha256=Ozlnz8-_lgPHHKPXsRyLDx1ccvBPoIYLbAJcfYnKvXY,610
16
- dsp_tools/clients/metadata_client_live.py,sha256=LKaGCBZTAyJg0JHxrDOkcrb_Z3csNKXHEhKiWlVylis,1739
15
+ dsp_tools/clients/metadata_client.py,sha256=GD4uYXP3kEym59JAqSub61xXDZSmZaQ2lKRF1_MgYS0,623
16
+ dsp_tools/clients/metadata_client_live.py,sha256=SLq2Ssob3TQaTx6PUblD-DeTimSLA4Y6woo6246Fca8,1863
17
17
  dsp_tools/clients/ontology_client.py,sha256=bATGyI8YFFCl0yis9beJjGB1ZlJuO_GqYnlB-2ulv94,638
18
18
  dsp_tools/clients/ontology_client_live.py,sha256=8uWoRxwlCvUHQZYQsQ5XojAlpEAqzIhFNYROQfsNWf4,5367
19
19
  dsp_tools/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -65,7 +65,7 @@ dsp_tools/commands/ingest_xmlupload/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
65
65
  dsp_tools/commands/ingest_xmlupload/bulk_ingest_client.py,sha256=i53VPo5bRf6FkGzEuQuZJIzHKO4_aJKkmz3jmIA5q3Y,7617
66
66
  dsp_tools/commands/ingest_xmlupload/create_resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
67
  dsp_tools/commands/ingest_xmlupload/create_resources/apply_ingest_id.py,sha256=AM6nSDKQc0Oqrv2Z0Uyaz8ztcPJrUGnwN5tlpvBzaBg,2579
68
- dsp_tools/commands/ingest_xmlupload/create_resources/upload_xml.py,sha256=jCdie1HYomdzgUVpBryhsj_u0-appvANeoZ4w_0--78,7457
68
+ dsp_tools/commands/ingest_xmlupload/create_resources/upload_xml.py,sha256=atfMF_8yaZ7qJ-ZzWLdLFlFEWvN3uiT3iqkINLUXxSQ,7796
69
69
  dsp_tools/commands/ingest_xmlupload/create_resources/user_information.py,sha256=wR6PGR2DQvPS0YXELzCJ70fvzQnFvIzek3VFWVPoZk0,4883
70
70
  dsp_tools/commands/ingest_xmlupload/ingest_files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
71
  dsp_tools/commands/ingest_xmlupload/ingest_files/ingest_files.py,sha256=ML_k_KyuNOYBcwy6nrqJ077vj72b_a04MbJRy95KPcA,2306
@@ -111,15 +111,15 @@ dsp_tools/commands/validate_data/constants.py,sha256=Xr9iPYG4kpcgzUSy3ARjKv7dgSu
111
111
  dsp_tools/commands/validate_data/mappers.py,sha256=lA4Zdt2PHb4nvcOTv63oIPTI5Xs-5J2GSr3S1cDlZkM,7749
112
112
  dsp_tools/commands/validate_data/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
113
  dsp_tools/commands/validate_data/models/api_responses.py,sha256=RrHwxyx1o2j9sVCwZktTTSnRXHeathNmQxk2RBxJ93E,920
114
- dsp_tools/commands/validate_data/models/input_problems.py,sha256=WZwM4LitbAuacCQIbwuo3hxaRvbC_iTZYH9lpozMc9I,3221
114
+ dsp_tools/commands/validate_data/models/input_problems.py,sha256=QwUHcqONqveQbXaedKqbpqjpYNHSJbn0zDag0iQrCJg,3323
115
115
  dsp_tools/commands/validate_data/models/rdf_like_data.py,sha256=1TccR7UwC5idgrny6CQoFd-lPGzx7BdI8sorqWxgCv0,3313
116
116
  dsp_tools/commands/validate_data/models/validation.py,sha256=okYFrLhaSQCGfa8A7gR6Wz-nv0xsmyN5LlNgSqfVfG4,2296
117
117
  dsp_tools/commands/validate_data/prepare_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
118
  dsp_tools/commands/validate_data/prepare_data/get_rdf_like_data.py,sha256=sU_VmMAvvNsjKkld6Coc_HJLt32nzXOimvKRxIbte-o,11620
119
119
  dsp_tools/commands/validate_data/prepare_data/make_data_graph.py,sha256=TANm9WA_z-oPGkoMIR2BGZrHtAkizDlnK_5WDVxQRoQ,4098
120
- dsp_tools/commands/validate_data/prepare_data/prepare_data.py,sha256=2YLNbk4on0Qf6XE89guf168rsiqvSIibPiSG3laQR6A,7832
120
+ dsp_tools/commands/validate_data/prepare_data/prepare_data.py,sha256=u47rlKkxI1wF2_r-0NeGjimI-frG-laF3u4FiJ-v1Lk,8246
121
121
  dsp_tools/commands/validate_data/process_validation_report/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
- dsp_tools/commands/validate_data/process_validation_report/get_user_validation_message.py,sha256=fKYeJa2kVbWbynU56shkz3_HoT7cwsLPQhbmVIcTS28,14623
122
+ dsp_tools/commands/validate_data/process_validation_report/get_user_validation_message.py,sha256=W5VYJPs8J3VvJAaFDBGBuCQ3Xtonhn1iRUOxwgO7xV0,16148
123
123
  dsp_tools/commands/validate_data/process_validation_report/query_validation_result.py,sha256=ln7zOq0LgkaVIoTNv2O72Z0tK6WX0UrbwAph-n0tD3E,22299
124
124
  dsp_tools/commands/validate_data/process_validation_report/reformat_validation_results.py,sha256=YGJnYLHhmc_X4I6RqKDgnLClMo_bNVtzRZBER3uLWp8,6556
125
125
  dsp_tools/commands/validate_data/shacl_cli_validator.py,sha256=3PMFLwPgei76GI07lcboPrLYvjmYaHv7pg_dNvF2KlQ,2958
@@ -129,7 +129,7 @@ dsp_tools/commands/validate_data/sparql/construct_shacl.py,sha256=pB8sHn8FiAEiwe
129
129
  dsp_tools/commands/validate_data/sparql/legal_info_shacl.py,sha256=2yhn5HfCJFJpOTB-3XNWfxP1KwW3zKxDfqPdhN_Sazg,1522
130
130
  dsp_tools/commands/validate_data/sparql/value_shacl.py,sha256=iEpBm4X-jARhGQU21VDK2KvOtMCHTXJzpm08Dda7x1w,13068
131
131
  dsp_tools/commands/validate_data/utils.py,sha256=L3kpuhn46x-OHap9RnN9QwUQjFYpkQFlFXzFKQfy5ZE,1990
132
- dsp_tools/commands/validate_data/validate_data.py,sha256=M7jAzju7NLuCjZikCZk2uvZI00ZRJNvci5Vqfwo2wg0,12908
132
+ dsp_tools/commands/validate_data/validate_data.py,sha256=GKQv0G2pDnB_5wbUghk12wcCWBsc5hoNySsxuQ81C5U,13498
133
133
  dsp_tools/commands/validate_data/validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
134
  dsp_tools/commands/validate_data/validation/check_duplicate_files.py,sha256=8HU7GZkTMXj68WrVTXadtQujjEP_MvkOnQb4iVtEHt4,2228
135
135
  dsp_tools/commands/validate_data/validation/check_for_unknown_classes.py,sha256=Vhr1-nJzd3vzlwSoDJTljY-eFMpFLpTEy_zIEZb5MJs,2966
@@ -178,9 +178,9 @@ dsp_tools/commands/xmlupload/stash/stash_circular_references.py,sha256=EFcROk78B
178
178
  dsp_tools/commands/xmlupload/stash/stash_models.py,sha256=zIYKUyRIGY6SMiQRgA2AozyOKJwEwiq8nyXV06bEMiI,3300
179
179
  dsp_tools/commands/xmlupload/stash/upload_stashed_resptr_props.py,sha256=PTk-d9ZlSxMdrlE2gbd1k5WuHvROFn-e2pYhJJCi5sM,4212
180
180
  dsp_tools/commands/xmlupload/stash/upload_stashed_xml_texts.py,sha256=zMKUa2lx7zZ26bbL6uF-8vVypi8KKLgwBXqF-DADVV4,7460
181
- dsp_tools/commands/xmlupload/upload_config.py,sha256=7OraegsGMSUji_ySjrjp1LOF5NIY2Wt0HIqRGw6gWWI,2539
181
+ dsp_tools/commands/xmlupload/upload_config.py,sha256=4PBjzGIly0yh9k9I8IDYRWo81U1Bfuh5h8XitdzsGQE,2598
182
182
  dsp_tools/commands/xmlupload/write_diagnostic_info.py,sha256=ODjCAdKZyxHYDUhpIVpdEwIzjP-2HFySrzWN6Tddb1A,1281
183
- dsp_tools/commands/xmlupload/xmlupload.py,sha256=8wO6Dg5DO8fM1CL_dw3VL1C2PrymSNxcDUMqxIYc0FE,22267
183
+ dsp_tools/commands/xmlupload/xmlupload.py,sha256=q_xC9CEDSFb4lMmJoECKZrzTGfIWnAgBx0dnGuz33Oo,22373
184
184
  dsp_tools/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
185
185
  dsp_tools/config/logger_config.py,sha256=Bw2Gu5F2d8un_KNk0hvNtV7fvN2TlThqo6gSwqeccOU,2067
186
186
  dsp_tools/config/warnings_config.py,sha256=15_Lt227HLqhdn6v-zJbi1KG9Fo6Zi1_4fp_a-iY72w,1142
@@ -260,7 +260,7 @@ dsp_tools/xmllib/models/res.py,sha256=c3edvilYZVDmv2O6Z36sSkHXcuKPAJLfWVpStDTMuJ
260
260
  dsp_tools/xmllib/models/root.py,sha256=x8_vrDSJ1pZUJUL8LR460dZe4Cg57G_Hy-Zfr2S29dw,13562
261
261
  dsp_tools/xmllib/value_checkers.py,sha256=Yx3r6_WoZ5Lev8Orp8yDzd03JvP2GBmFNSFT2dzrycM,10712
262
262
  dsp_tools/xmllib/value_converters.py,sha256=WMYS5hd1VlrLLBXnf6pv9yYoPBsv_2MxOO6xv-QsRW4,29218
263
- dsp_tools-17.0.0.post26.dist-info/WHEEL,sha256=M6du7VZflc4UPsGphmOXHANdgk8zessdJG0DBUuoA-U,78
264
- dsp_tools-17.0.0.post26.dist-info/entry_points.txt,sha256=qjRfEbkeAwLU_AE2Q-l4Y9irPNmu4Wna-3bfRp1bqV4,62
265
- dsp_tools-17.0.0.post26.dist-info/METADATA,sha256=MVoGCBmqa_mR3gpWNETKJMEoBPX8YmBK0wOG_hr-UQs,4285
266
- dsp_tools-17.0.0.post26.dist-info/RECORD,,
263
+ dsp_tools-17.0.0.post29.dist-info/WHEEL,sha256=M6du7VZflc4UPsGphmOXHANdgk8zessdJG0DBUuoA-U,78
264
+ dsp_tools-17.0.0.post29.dist-info/entry_points.txt,sha256=qjRfEbkeAwLU_AE2Q-l4Y9irPNmu4Wna-3bfRp1bqV4,62
265
+ dsp_tools-17.0.0.post29.dist-info/METADATA,sha256=FF_D8B5lb2KYa5zUpFZsJBWtXM6h3N1KYK1mwB0uDgU,4285
266
+ dsp_tools-17.0.0.post29.dist-info/RECORD,,