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

Files changed (33) hide show
  1. dsp_tools/cli/call_action.py +68 -25
  2. dsp_tools/clients/metadata_client.py +24 -0
  3. dsp_tools/clients/metadata_client_live.py +42 -0
  4. dsp_tools/clients/ontology_client.py +21 -0
  5. dsp_tools/clients/ontology_client_live.py +139 -0
  6. dsp_tools/commands/create/__init__.py +0 -0
  7. dsp_tools/commands/create/communicate_problems.py +19 -0
  8. dsp_tools/commands/create/constants.py +7 -0
  9. dsp_tools/commands/create/create_on_server/__init__.py +0 -0
  10. dsp_tools/commands/create/create_on_server/cardinalities.py +121 -0
  11. dsp_tools/commands/create/create_on_server/mappers.py +12 -0
  12. dsp_tools/commands/create/models/__init__.py +0 -0
  13. dsp_tools/commands/create/models/input_problems.py +32 -0
  14. dsp_tools/commands/create/models/parsed_ontology.py +48 -0
  15. dsp_tools/commands/create/models/parsed_project.py +49 -0
  16. dsp_tools/commands/create/models/rdf_ontology.py +19 -0
  17. dsp_tools/commands/create/models/server_project_info.py +25 -0
  18. dsp_tools/commands/create/parsing/__init__.py +0 -0
  19. dsp_tools/commands/create/parsing/parse_ontology.py +108 -0
  20. dsp_tools/commands/create/parsing/parse_project.py +99 -0
  21. dsp_tools/commands/create/parsing/parsing_utils.py +43 -0
  22. dsp_tools/commands/create/serialisation/__init__.py +0 -0
  23. dsp_tools/commands/create/serialisation/ontology.py +41 -0
  24. dsp_tools/commands/project/create/project_create_all.py +35 -25
  25. dsp_tools/commands/project/create/project_create_ontologies.py +39 -89
  26. dsp_tools/commands/project/legacy_models/resourceclass.py +0 -33
  27. dsp_tools/error/exceptions.py +16 -0
  28. dsp_tools/utils/data_formats/iri_util.py +7 -0
  29. dsp_tools/utils/rdflib_utils.py +10 -0
  30. {dsp_tools-17.0.0.post10.dist-info → dsp_tools-17.0.0.post21.dist-info}/METADATA +1 -1
  31. {dsp_tools-17.0.0.post10.dist-info → dsp_tools-17.0.0.post21.dist-info}/RECORD +33 -10
  32. {dsp_tools-17.0.0.post10.dist-info → dsp_tools-17.0.0.post21.dist-info}/WHEEL +1 -1
  33. {dsp_tools-17.0.0.post10.dist-info → dsp_tools-17.0.0.post21.dist-info}/entry_points.txt +0 -0
@@ -1,12 +1,19 @@
1
1
  from typing import Any
2
2
  from typing import Optional
3
+ from typing import cast
3
4
 
4
5
  import regex
5
6
  from loguru import logger
6
7
 
8
+ from dsp_tools.clients.authentication_client import AuthenticationClient
7
9
  from dsp_tools.clients.connection import Connection
10
+ from dsp_tools.clients.ontology_client_live import OntologyClientLive
11
+ from dsp_tools.commands.create.communicate_problems import print_problem_collection
12
+ from dsp_tools.commands.create.create_on_server.cardinalities import add_all_cardinalities
13
+ from dsp_tools.commands.create.models.parsed_ontology import ParsedOntology
14
+ from dsp_tools.commands.create.models.server_project_info import CreatedIriCollection
15
+ from dsp_tools.commands.create.models.server_project_info import ProjectIriLookup
8
16
  from dsp_tools.commands.project.legacy_models.context import Context
9
- from dsp_tools.commands.project.legacy_models.helpers import Cardinality
10
17
  from dsp_tools.commands.project.legacy_models.ontology import Ontology
11
18
  from dsp_tools.commands.project.legacy_models.project import Project
12
19
  from dsp_tools.commands.project.legacy_models.propertyclass import PropertyClass
@@ -25,6 +32,9 @@ def create_ontologies(
25
32
  ontology_definitions: list[dict[str, Any]],
26
33
  project_remote: Project,
27
34
  verbose: bool,
35
+ parsed_ontologies: list[ParsedOntology],
36
+ project_iri_lookup: ProjectIriLookup,
37
+ auth: AuthenticationClient,
28
38
  ) -> bool:
29
39
  """
30
40
  Iterates over the ontologies in a JSON project file and creates the ontologies that don't exist on the DSP server
@@ -39,6 +49,9 @@ def create_ontologies(
39
49
  ontology_definitions: the "ontologies" section of the parsed JSON project file
40
50
  project_remote: representation of the project on the DSP server
41
51
  verbose: verbose switch
52
+ parsed_ontologies: parsed ontologies
53
+ project_iri_lookup: lookup for IRIs
54
+ auth: Authentication Client
42
55
 
43
56
  Raises:
44
57
  InputError: if an error occurs during the creation of an ontology.
@@ -47,6 +60,8 @@ def create_ontologies(
47
60
  Returns:
48
61
  True if everything went smoothly, False otherwise
49
62
  """
63
+ success_collection = CreatedIriCollection()
64
+ onto_client = OntologyClientLive(auth.server, auth)
50
65
 
51
66
  overall_success = True
52
67
 
@@ -60,6 +75,9 @@ def create_ontologies(
60
75
  logger.exception(err_msg)
61
76
  project_ontologies = []
62
77
 
78
+ for existing_onto in project_ontologies:
79
+ project_iri_lookup.add_onto(existing_onto.name, existing_onto.iri)
80
+
63
81
  created_ontos: list[tuple[dict[str, Any], Ontology, dict[str, ResourceClass]]] = []
64
82
  for ontology_definition in ontology_definitions:
65
83
  ontology_remote = _create_ontology(
@@ -75,6 +93,8 @@ def create_ontologies(
75
93
  if not ontology_remote:
76
94
  overall_success = False
77
95
  continue
96
+ else:
97
+ project_iri_lookup.add_onto(ontology_remote.name, ontology_remote.iri)
78
98
 
79
99
  # add the empty resource classes to the remote ontology
80
100
  last_modification_date, remote_res_classes, success = _add_resource_classes_to_remote_ontology(
@@ -85,11 +105,12 @@ def create_ontologies(
85
105
  last_modification_date=ontology_remote.lastModificationDate,
86
106
  verbose=verbose,
87
107
  )
108
+ success_collection.classes.update(set(remote_res_classes.keys()))
88
109
  if not success:
89
110
  overall_success = False
90
111
 
91
112
  # add the property classes to the remote ontology
92
- last_modification_date, success = _add_property_classes_to_remote_ontology(
113
+ last_modification_date, success, property_successes = _add_property_classes_to_remote_ontology(
93
114
  onto_name=ontology_definition["name"],
94
115
  property_definitions=ontology_definition.get("properties", []),
95
116
  ontology_remote=ontology_remote,
@@ -99,22 +120,21 @@ def create_ontologies(
99
120
  knora_api_prefix=knora_api_prefix,
100
121
  verbose=verbose,
101
122
  )
123
+ success_collection.properties.update(property_successes)
102
124
  created_ontos.append((ontology_definition, ontology_remote, remote_res_classes))
103
125
  if not success:
104
126
  overall_success = False
105
127
 
106
128
  print("Add cardinalities to resource classes...")
107
- for ontology_definition, ontology_remote, remote_res_classes in created_ontos:
108
- success = _add_cardinalities_to_resource_classes(
109
- resclass_definitions=ontology_definition.get("resources", []),
110
- ontology_remote=ontology_remote,
111
- remote_res_classes=remote_res_classes,
112
- knora_api_prefix=knora_api_prefix,
113
- context=context,
114
- verbose=verbose,
115
- )
116
- if not success:
117
- overall_success = False
129
+ problems = add_all_cardinalities(
130
+ ontologies=parsed_ontologies,
131
+ project_iri_lookup=project_iri_lookup,
132
+ created_iris=success_collection,
133
+ onto_client=onto_client,
134
+ )
135
+ if problems:
136
+ overall_success = False
137
+ print_problem_collection(problems)
118
138
 
119
139
  return overall_success
120
140
 
@@ -297,7 +317,7 @@ def _add_property_classes_to_remote_ontology(
297
317
  last_modification_date: DateTimeStamp,
298
318
  knora_api_prefix: str,
299
319
  verbose: bool,
300
- ) -> tuple[DateTimeStamp, bool]:
320
+ ) -> tuple[DateTimeStamp, bool, set[str]]:
301
321
  """
302
322
  Creates the property classes defined in the "properties" section of an ontology. The
303
323
  containing project and the containing ontology must already be existing on the DSP server.
@@ -317,6 +337,7 @@ def _add_property_classes_to_remote_ontology(
317
337
  Returns:
318
338
  a tuple consisting of the last modification date of the ontology, and the success status
319
339
  """
340
+ property_successes = set()
320
341
  overall_success = True
321
342
  print(" Create property classes...")
322
343
  logger.info("Create property classes...")
@@ -370,11 +391,13 @@ def _add_property_classes_to_remote_ontology(
370
391
  comment=LangString(prop_class["comments"]) if prop_class.get("comments") else None,
371
392
  )
372
393
  try:
373
- last_modification_date, _ = prop_class_local.create(last_modification_date)
394
+ last_modification_date, prop_class_created = prop_class_local.create(last_modification_date)
374
395
  ontology_remote.lastModificationDate = last_modification_date
375
396
  if verbose:
376
397
  print(f" Created property class '{prop_class['name']}'")
377
398
  logger.info(f"Created property class '{prop_class['name']}'")
399
+ prop_iri = cast(str, prop_class_created.iri)
400
+ property_successes.add(prop_iri)
378
401
  except BaseError as err:
379
402
  err_msg = f"Unable to create property class '{prop_class['name']}'"
380
403
  if found := regex.search(
@@ -386,7 +409,7 @@ def _add_property_classes_to_remote_ontology(
386
409
  logger.exception(err_msg)
387
410
  overall_success = False
388
411
 
389
- return last_modification_date, overall_success
412
+ return last_modification_date, overall_success, property_successes
390
413
 
391
414
 
392
415
  def _sort_prop_classes(
@@ -423,76 +446,3 @@ def _sort_prop_classes(
423
446
  ok_propclass_names.append(prop_name)
424
447
  prop_classes_to_sort.remove(prop)
425
448
  return sorted_prop_classes
426
-
427
-
428
- def _add_cardinalities_to_resource_classes(
429
- resclass_definitions: list[dict[str, Any]],
430
- ontology_remote: Ontology,
431
- remote_res_classes: dict[str, ResourceClass],
432
- knora_api_prefix: str,
433
- context: Context,
434
- verbose: bool,
435
- ) -> bool:
436
- """
437
- Iterates over the resource classes of an ontology of a JSON project definition, and adds the cardinalities to each
438
- resource class. The resource classes and the properties must already be existing on the DSP server.
439
- If an error occurs during creation of a cardinality, it is printed out, the process continues, but the success
440
- status will be false.
441
-
442
- Args:
443
- resclass_definitions: the part of the parsed JSON project file that contains the resources of the current onto
444
- ontology_remote: representation of the current ontology on the DSP server
445
- remote_res_classes: representations of the resource classes on the DSP server
446
- knora_api_prefix: the prefix that stands for the knora-api ontology
447
- context: the context of the current project
448
- verbose: verbose switch
449
-
450
- Returns:
451
- success status
452
- """
453
- overall_success = True
454
- print(f" Add cardinalities to resource classes of ontology '{ontology_remote.iri}'...")
455
- logger.info(f"Add cardinalities to resource classes of ontology '{ontology_remote.iri}'...")
456
- switcher = {
457
- "1": Cardinality.C_1,
458
- "0-1": Cardinality.C_0_1,
459
- "0-n": Cardinality.C_0_n,
460
- "1-n": Cardinality.C_1_n,
461
- }
462
- for res_class in resclass_definitions:
463
- res_class_remote = remote_res_classes.get(f"{ontology_remote.iri}#{res_class['name']}")
464
- if not res_class_remote:
465
- msg = (
466
- f"Unable to add cardinalities to resource class '{res_class['name']}': "
467
- f"This class doesn't exist on the DSP server."
468
- )
469
- print(f"WARNINIG: {msg}")
470
- logger.exception(msg)
471
- overall_success = False
472
- continue
473
- for card_info in res_class.get("cardinalities", []):
474
- if ":" in card_info["propname"]:
475
- prefix, prop = card_info["propname"].split(":")
476
- qualified_propname = card_info["propname"] if prefix else f"{ontology_remote.name}:{prop}"
477
- else:
478
- qualified_propname = knora_api_prefix + card_info["propname"]
479
-
480
- try:
481
- last_modification_date = res_class_remote.addProperty(
482
- property_id=qualified_propname,
483
- cardinality=switcher[card_info["cardinality"]],
484
- gui_order=card_info.get("gui_order"),
485
- last_modification_date=ontology_remote.lastModificationDate,
486
- context=context,
487
- )
488
- ontology_remote.lastModificationDate = last_modification_date
489
- if verbose:
490
- print(f" Added cardinality '{card_info['propname']}' to resource class '{res_class['name']}'")
491
- logger.info(f"Added cardinality '{card_info['propname']}' to resource class '{res_class['name']}'")
492
- except BaseError:
493
- err_msg = f"Unable to add cardinality '{qualified_propname}' to resource class {res_class['name']}."
494
- print(f"WARNING: {err_msg}")
495
- logger.exception(err_msg)
496
- overall_success = False
497
-
498
- return overall_success
@@ -477,39 +477,6 @@ class ResourceClass(Model):
477
477
  def has_properties(self) -> dict[str, HasProperty]:
478
478
  return self._has_properties
479
479
 
480
- def getProperty(self, property_id: str) -> Optional[HasProperty]:
481
- if self._has_properties is None:
482
- return None
483
- else:
484
- return self._has_properties.get(self._context.get_prefixed_iri(property_id))
485
-
486
- def addProperty(
487
- self,
488
- last_modification_date: DateTimeStamp,
489
- property_id: str,
490
- cardinality: Cardinality,
491
- context: Context,
492
- gui_order: Optional[int] = None,
493
- ) -> DateTimeStamp:
494
- self._context.context.update(context.context)
495
- if self._has_properties.get(property_id) is None:
496
- latest_modification_date, resclass = HasProperty(
497
- con=self._con,
498
- context=self._context,
499
- ontology_id=self._ontology_id,
500
- property_id=property_id,
501
- resclass_id=self.iri,
502
- cardinality=cardinality,
503
- gui_order=gui_order,
504
- ).create(last_modification_date)
505
- hp = resclass.getProperty(property_id)
506
- hp.ontology_id = self._context.iri_from_prefix(self._ontology_id)
507
- hp.resclass_id = self._iri
508
- self._has_properties[hp.property_id] = hp
509
- return latest_modification_date
510
- else:
511
- raise BaseError("Property already has cardinality in this class! " + property_id)
512
-
513
480
  @classmethod
514
481
  def fromJsonObj(cls, con: Connection, context: Context, json_obj: Any) -> ResourceClass:
515
482
  if isinstance(json_obj, list):
@@ -45,6 +45,18 @@ class InternalError(BaseError):
45
45
  super().__init__(default_msg)
46
46
 
47
47
 
48
+ class DockerNotReachableError(BaseError):
49
+ """This error is raised when docker is not running."""
50
+
51
+ def __init__(self) -> None:
52
+ msg = "Docker is not running properly. Please start Docker and try again."
53
+ super().__init__(msg)
54
+
55
+
56
+ class DspApiNotReachableError(BaseError):
57
+ """This error is raised when the DSP-API could not be reached on localhost."""
58
+
59
+
48
60
  class InputError(BaseError):
49
61
  """This error is raised when the user input is invalid. The message should be as user-friendly as possible."""
50
62
 
@@ -53,6 +65,10 @@ class InvalidGuiAttributeError(BaseError):
53
65
  """This error is raised when a invalid gui-attribute is used."""
54
66
 
55
67
 
68
+ class UnexpectedApiResponseError(BaseError):
69
+ """This error is raised when the API gives an unexpected response, that we cannot anticipate and handle cleanly."""
70
+
71
+
56
72
  class UserFilepathNotFoundError(InputError):
57
73
  """This error is raised if a filepath from the user does not exist."""
58
74
 
@@ -12,3 +12,10 @@ def is_iri(s: str) -> bool:
12
12
  def is_resource_iri(s: str) -> bool:
13
13
  """Checks whether a string is a valid resource IRI."""
14
14
  return regex.fullmatch(_resource_iri_pattern, s) is not None
15
+
16
+
17
+ def from_dsp_iri_to_prefixed_iri(iri: str) -> str:
18
+ dsp_iri_re = r".+\/(.+?)\/v2#(.+)$"
19
+ if not (found := regex.search(dsp_iri_re, iri)):
20
+ return iri
21
+ return f"{found.group(1)}:{found.group(2)}"
@@ -0,0 +1,10 @@
1
+ import json
2
+ from typing import Any
3
+
4
+ from rdflib import Graph
5
+
6
+
7
+ def serialise_json(rdf_graph: Graph) -> list[dict[str, Any]]:
8
+ graph_bytes = rdf_graph.serialize(format="json-ld", encoding="utf-8")
9
+ json_graph: list[dict[str, Any]] = json.loads(graph_bytes)
10
+ return json_graph
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dsp-tools
3
- Version: 17.0.0.post10
3
+ Version: 17.0.0.post21
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,7 +1,7 @@
1
1
  dsp_tools/__init__.py,sha256=XdzLhY_8FUFmPtUEawAvEA8apQ_jlgspb2HpmNjlDV8,158
2
2
  dsp_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  dsp_tools/cli/args.py,sha256=tS16NvgIMdQuaDWb0cNC8TIK7wY-i4pQe7NFYrzt5Bo,694
4
- dsp_tools/cli/call_action.py,sha256=eyeTr7IoXGcLTgvFDBdMvTdnJ-l-IJwiekKlYKzoWjA,10878
4
+ dsp_tools/cli/call_action.py,sha256=i0VS1qkokvxtcxKj_4V0QWe49sLMZxa8eEqMnl2yr9E,12556
5
5
  dsp_tools/cli/create_parsers.py,sha256=zi0E7AHV25B_wXt_8Jcan0Tc6y7aG0vipS5rya5gP9s,17764
6
6
  dsp_tools/cli/entry_point.py,sha256=gdexHqVDAy8_Atf0oUxvPVQyDGWUSUhio396U5Oc0RI,10331
7
7
  dsp_tools/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -12,7 +12,29 @@ 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
17
+ dsp_tools/clients/ontology_client.py,sha256=bATGyI8YFFCl0yis9beJjGB1ZlJuO_GqYnlB-2ulv94,638
18
+ dsp_tools/clients/ontology_client_live.py,sha256=8uWoRxwlCvUHQZYQsQ5XojAlpEAqzIhFNYROQfsNWf4,5367
15
19
  dsp_tools/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ dsp_tools/commands/create/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ dsp_tools/commands/create/communicate_problems.py,sha256=GdAOiUZevrYFhRINyDMhcbXdUqtGDKb2nEelhdfSFR0,885
22
+ dsp_tools/commands/create/constants.py,sha256=ZzWNn_zh-0Oy0SJmGivQbcAnQTmwT0akNchZUppXgh0,276
23
+ dsp_tools/commands/create/create_on_server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ dsp_tools/commands/create/create_on_server/cardinalities.py,sha256=QW0i6TSNmP-dGS2WSad1np9QHz41-A51ArspuAQZGJg,5260
25
+ dsp_tools/commands/create/create_on_server/mappers.py,sha256=Lu2DJAICOZu7WP_1UDvyvRAi0T9ZGO88kvx0UfI6v5I,564
26
+ dsp_tools/commands/create/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
+ dsp_tools/commands/create/models/input_problems.py,sha256=Oa8-fQy2FTtmfXzMVdhBE9Cs3PlOgTWga4XmK5QkM7s,665
28
+ dsp_tools/commands/create/models/parsed_ontology.py,sha256=EUuD47SmWXyB74vGdxGwuvRzq1f4_YdciwYmqcEwqWc,815
29
+ dsp_tools/commands/create/models/parsed_project.py,sha256=Gnl9gJEm5sNbccYG24cwT4doS-oqh_cywjbqk1V4wZQ,928
30
+ dsp_tools/commands/create/models/rdf_ontology.py,sha256=TyXHmblr9j5XZFVqjLT516MrVYPgzjXWvTX4TckEPPk,361
31
+ dsp_tools/commands/create/models/server_project_info.py,sha256=k5EVYo8ZJhMMB5XKja9Xl6CFQ_oLRFdRZPjMyj4XmO4,699
32
+ dsp_tools/commands/create/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ dsp_tools/commands/create/parsing/parse_ontology.py,sha256=4cqo2wa9wcLBszWXgPrixQgaHYPHfENQbF6dkeBVNiU,4268
34
+ dsp_tools/commands/create/parsing/parse_project.py,sha256=CghB-pJ6RcllOP0jn8Hs50kRcxS2Q0iS8A_QNGbjzZU,4005
35
+ dsp_tools/commands/create/parsing/parsing_utils.py,sha256=-kr9ulha4T6reaQsQ2lImuqKEp2w4tQi66tjm2lDa9w,1636
36
+ dsp_tools/commands/create/serialisation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ dsp_tools/commands/create/serialisation/ontology.py,sha256=NK4kjriHs7dt5fXNiIBc1z_mE9szI4YemJ--hkYYeCk,1581
16
38
  dsp_tools/commands/excel2json/CLAUDE.md,sha256=y7ZcmrHbewN48sV0wyZhNfXDXdERG4PRvdz02Mqh0gg,3399
17
39
  dsp_tools/commands/excel2json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
40
  dsp_tools/commands/excel2json/json_header.py,sha256=3PkhYHloGhuK9_zl7XrqboRksquWzGsdNNNo7-LC2c8,13543
@@ -55,10 +77,10 @@ dsp_tools/commands/ingest_xmlupload/upload_files/upload_files.py,sha256=QXj58UiT
55
77
  dsp_tools/commands/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
78
  dsp_tools/commands/project/create/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
79
  dsp_tools/commands/project/create/parse_project.py,sha256=xYcFaUtKLZigxDZpD7O2JNueHmy_-Ar1iE2LJe97gos,4081
58
- dsp_tools/commands/project/create/project_create_all.py,sha256=aOPk_Bwg6-0VXTDaG3VnhbBRtqZtzcGS87uGcEdqjMg,24201
80
+ dsp_tools/commands/project/create/project_create_all.py,sha256=GM1XjpRvGoT79wGO9VF27c8CBdV42dIOhcT3AdKSwzg,24888
59
81
  dsp_tools/commands/project/create/project_create_default_permissions.py,sha256=CygzQ4rFF6SYUCkSvrO6gkjpINWZh4wjq_2V0PExwso,5990
60
82
  dsp_tools/commands/project/create/project_create_lists.py,sha256=A9kKe4gVP1Ug869102bRXK5RraZUtGzv5cWyFfK_DEA,7963
61
- dsp_tools/commands/project/create/project_create_ontologies.py,sha256=Iz38-3ubInEPpvCHpQDiJ9qR7bF4ZFwXJ121E5xEdC8,21647
83
+ dsp_tools/commands/project/create/project_create_ontologies.py,sha256=Ie5WHTKg5S1bRCg3SmmbB1tjem3NwRrX3N32TeAWzyI,19465
62
84
  dsp_tools/commands/project/create/project_validate.py,sha256=H5TVvqO5V63roGEde1J0n21twkajy4AkVSDGmZb4Jp8,27443
63
85
  dsp_tools/commands/project/get/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
86
  dsp_tools/commands/project/get/get.py,sha256=_5LxbSP5Fi0PyXODjvND3ZC9E_x91yk6Xb6tcldG5j0,6447
@@ -73,7 +95,7 @@ dsp_tools/commands/project/legacy_models/model.py,sha256=AzxebBc5Y19kPFvsr4cPLWr
73
95
  dsp_tools/commands/project/legacy_models/ontology.py,sha256=uXX0U4FVzx53GIjTyZhCN96oxdSc1Jaq-O818XrsSEc,12557
74
96
  dsp_tools/commands/project/legacy_models/project.py,sha256=TlC-DPvaIxCdhnO82s_92lcC8--JzO840cLzrmrG4Fo,12012
75
97
  dsp_tools/commands/project/legacy_models/propertyclass.py,sha256=tDr23zwcZptZzBIAQSW27aRtRuSbM6PI_hk2ZXnuLm8,16954
76
- dsp_tools/commands/project/legacy_models/resourceclass.py,sha256=zE02MvJ6kGI5GA5n71oTFnKJaWHtX94yrsBsTQlS71s,27939
98
+ dsp_tools/commands/project/legacy_models/resourceclass.py,sha256=eMorLi4x3zaeq-zBgf3lniKRpcJnQNpGLkJUPPTPsYY,26599
77
99
  dsp_tools/commands/project/legacy_models/user.py,sha256=qJ1vxK_yQbLb7z1i7KmJA3j5wYZKAUHPBGIhIXHhfq4,16057
78
100
  dsp_tools/commands/project/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
101
  dsp_tools/commands/project/models/permissions_client.py,sha256=v_Y02kTWFi7l9JE18lUxkyjc-vyt8KK7h8MN8MtsgXw,2494
@@ -164,7 +186,7 @@ dsp_tools/config/logger_config.py,sha256=Bw2Gu5F2d8un_KNk0hvNtV7fvN2TlThqo6gSwqe
164
186
  dsp_tools/config/warnings_config.py,sha256=15_Lt227HLqhdn6v-zJbi1KG9Fo6Zi1_4fp_a-iY72w,1142
165
187
  dsp_tools/error/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
188
  dsp_tools/error/custom_warnings.py,sha256=7C2DscIz9k7IfM8uebIsKWPcWcSjwpDqbIRDaPw7bI8,1053
167
- dsp_tools/error/exceptions.py,sha256=0V_ADoKzM_uCKdLWXWsXHMaoV8VAhR6zii-6SBnKmuc,4310
189
+ dsp_tools/error/exceptions.py,sha256=giLM6Hx17lMdCjNdlwMr4zqdGcqUHypAxESSAtkvvnU,4853
168
190
  dsp_tools/error/problems.py,sha256=DotzVg3MYvMJmernd9tTBmDHoT1MOkHdiWVv8iMoFSk,265
169
191
  dsp_tools/error/xmllib_errors.py,sha256=DpYCsBIx_GmsBAUlfk2VMqtzD5IGMRbd2yXTcrJFHR4,549
170
192
  dsp_tools/error/xmllib_warnings.py,sha256=sS9jJXGJtQqCiJ9P2zCM5gpIhTpChbujQz_fPvxLm8g,1557
@@ -193,12 +215,13 @@ dsp_tools/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
193
215
  dsp_tools/utils/ansi_colors.py,sha256=p2vq-wzfmE-wdDddvC26UcOA6Z1qhFTdzP0dPoW4sy0,1691
194
216
  dsp_tools/utils/data_formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
217
  dsp_tools/utils/data_formats/date_util.py,sha256=VLNQnSsUX6NB1IY3Ry5KCxCLgHHYN0TSSBRn8hyXN-4,4714
196
- dsp_tools/utils/data_formats/iri_util.py,sha256=_PXOdfwIDDe2fT1f8k1FBoKdaw1RNnL2Sw8UJrfO-wE,457
218
+ dsp_tools/utils/data_formats/iri_util.py,sha256=O_TQb104ukjVsaqgkstz54QvjgqFPLSxVvqH6HVNjQc,670
197
219
  dsp_tools/utils/data_formats/shared.py,sha256=9AybXCAboojvRULZPud5e6B7UkjQOuN6f5fiVxwuZe8,2618
198
220
  dsp_tools/utils/data_formats/uri_util.py,sha256=9UGrbtxHVI0Ka0ttxd39KDhGeeP0xOdVLjt6HyV-Ic8,3257
199
221
  dsp_tools/utils/fuseki_bloating.py,sha256=yUCSijVf_Ne9iWUK_IzbPAkOMkN8Xt9ttPcWWRSIgMI,2381
200
222
  dsp_tools/utils/json_parsing.py,sha256=KlNvwnZoq-gJqnOVH7tiZMzgdld_3IunuOVvlEVXGXc,1684
201
223
  dsp_tools/utils/rdflib_constants.py,sha256=D5HO7oILBRiQI-bJj14pbCx6zhKY4RGqjIjq6S_IawU,652
224
+ dsp_tools/utils/rdflib_utils.py,sha256=M9UCXMe8W3SDQ0DYh4i6lRwYkyWozrWLl19NP5A-RlY,284
202
225
  dsp_tools/utils/replace_id_with_iri.py,sha256=5M5vXWJIQ0oO4ELwIt_5QeYBvyGESBc2smuNThHiQUY,2928
203
226
  dsp_tools/utils/request_utils.py,sha256=KxiFpQ_IH1ZCIF-SknPjRMP5-ZtLP3wWzwSrEZDB2fk,6902
204
227
  dsp_tools/utils/xml_parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -237,7 +260,7 @@ dsp_tools/xmllib/models/res.py,sha256=c3edvilYZVDmv2O6Z36sSkHXcuKPAJLfWVpStDTMuJ
237
260
  dsp_tools/xmllib/models/root.py,sha256=x8_vrDSJ1pZUJUL8LR460dZe4Cg57G_Hy-Zfr2S29dw,13562
238
261
  dsp_tools/xmllib/value_checkers.py,sha256=Yx3r6_WoZ5Lev8Orp8yDzd03JvP2GBmFNSFT2dzrycM,10712
239
262
  dsp_tools/xmllib/value_converters.py,sha256=WMYS5hd1VlrLLBXnf6pv9yYoPBsv_2MxOO6xv-QsRW4,29218
240
- dsp_tools-17.0.0.post10.dist-info/WHEEL,sha256=X16MKk8bp2DRsAuyteHJ-9qOjzmnY0x1aj0P1ftqqWA,78
241
- dsp_tools-17.0.0.post10.dist-info/entry_points.txt,sha256=qjRfEbkeAwLU_AE2Q-l4Y9irPNmu4Wna-3bfRp1bqV4,62
242
- dsp_tools-17.0.0.post10.dist-info/METADATA,sha256=LFYsbGJh1mOpcEzeCEFD7t9PUGooAF9WWbqBY0zaxI0,4285
243
- dsp_tools-17.0.0.post10.dist-info/RECORD,,
263
+ dsp_tools-17.0.0.post21.dist-info/WHEEL,sha256=M6du7VZflc4UPsGphmOXHANdgk8zessdJG0DBUuoA-U,78
264
+ dsp_tools-17.0.0.post21.dist-info/entry_points.txt,sha256=qjRfEbkeAwLU_AE2Q-l4Y9irPNmu4Wna-3bfRp1bqV4,62
265
+ dsp_tools-17.0.0.post21.dist-info/METADATA,sha256=c-CiHkhfevQLuSoAyhtEYoAA1CF4nWN8HoR5o7H6e_8,4285
266
+ dsp_tools-17.0.0.post21.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.9.2
2
+ Generator: uv 0.9.5
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any