oldaplib 0.3.6__tar.gz → 0.3.8__tar.gz

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.
Files changed (163) hide show
  1. {oldaplib-0.3.6 → oldaplib-0.3.8}/PKG-INFO +1 -1
  2. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/model.py +1 -0
  3. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/objectfactory.py +112 -64
  4. oldaplib-0.3.8/oldaplib/src/version.py +1 -0
  5. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_datetimestamp.py +1 -1
  6. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_externalontologies.py +3 -2
  7. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_objectfactory.py +58 -1
  8. {oldaplib-0.3.6 → oldaplib-0.3.8}/pyproject.toml +1 -1
  9. oldaplib-0.3.6/oldaplib/src/version.py +0 -1
  10. {oldaplib-0.3.6 → oldaplib-0.3.8}/README.md +0 -0
  11. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/__init__.py +0 -0
  12. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/apps/load_list.py +0 -0
  13. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/ontologies/admin-testing.trig +0 -0
  14. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/ontologies/admin.trig +0 -0
  15. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/ontologies/example.trig +0 -0
  16. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/ontologies/oldap.trig +0 -0
  17. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/ontologies/oldap.ttl +0 -0
  18. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/ontologies/shared.trig +0 -0
  19. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/ontologies/standard/.gitsave +0 -0
  20. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/__init__.py +0 -0
  21. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/cachesingleton.py +0 -0
  22. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/connection.py +0 -0
  23. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/datamodel.py +0 -0
  24. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/dtypes/__init__.py +0 -0
  25. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/dtypes/bnode.py +0 -0
  26. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/dtypes/languagein.py +0 -0
  27. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/dtypes/namespaceiri.py +0 -0
  28. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/dtypes/rdfset.py +0 -0
  29. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/dtypes/xsdset.py +0 -0
  30. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/__init__.py +0 -0
  31. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/action.py +0 -0
  32. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/adminpermissions.py +0 -0
  33. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/attributeclass.py +0 -0
  34. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/datapermissions.py +0 -0
  35. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/externalontologyattr.py +0 -0
  36. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/haspropertyattr.py +0 -0
  37. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/language.py +0 -0
  38. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/oldaplistattr.py +0 -0
  39. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/oldaplistnodeattr.py +0 -0
  40. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/owlpropertytype.py +0 -0
  41. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/permissionsetattr.py +0 -0
  42. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/projectattr.py +0 -0
  43. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/propertyclassattr.py +0 -0
  44. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/resourceclassattr.py +0 -0
  45. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/sparql_result_format.py +0 -0
  46. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/userattr.py +0 -0
  47. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/enums/xsd_datatypes.py +0 -0
  48. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/externalontology.py +0 -0
  49. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/globalconfig.py +0 -0
  50. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/hasproperty.py +0 -0
  51. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/Notify.py +0 -0
  52. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/__init__.py +0 -0
  53. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/attributechange.py +0 -0
  54. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/context.py +0 -0
  55. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/convert2datatype.py +0 -0
  56. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/irincname.py +0 -0
  57. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/json_encoder.py +0 -0
  58. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/langstring.py +0 -0
  59. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/numeric.py +0 -0
  60. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/observable_dict.py +0 -0
  61. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/observable_set.py +0 -0
  62. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/oldaperror.py +0 -0
  63. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/query_processor.py +0 -0
  64. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/semantic_version.py +0 -0
  65. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/serializeableset.py +0 -0
  66. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/serializer.py +0 -0
  67. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/singletonmeta.py +0 -0
  68. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/helpers/tools.py +0 -0
  69. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/iconnection.py +0 -0
  70. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/in_project.py +0 -0
  71. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/oldaplist.py +0 -0
  72. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/oldaplist_helpers.py +0 -0
  73. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/oldaplistnode.py +0 -0
  74. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/oldaplogging.py +0 -0
  75. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/permissionset.py +0 -0
  76. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/project.py +0 -0
  77. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/propertyclass.py +0 -0
  78. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/resourceclass.py +0 -0
  79. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/user.py +0 -0
  80. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/userdataclass.py +0 -0
  81. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/__init__.py +0 -0
  82. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/floatingpoint.py +0 -0
  83. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/iri.py +0 -0
  84. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd.py +0 -0
  85. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_anyuri.py +0 -0
  86. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_base64binary.py +0 -0
  87. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_boolean.py +0 -0
  88. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_byte.py +0 -0
  89. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_date.py +0 -0
  90. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_datetime.py +0 -0
  91. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_decimal.py +0 -0
  92. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_double.py +0 -0
  93. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_duration.py +0 -0
  94. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_float.py +0 -0
  95. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_gday.py +0 -0
  96. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_gmonth.py +0 -0
  97. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_gmonthday.py +0 -0
  98. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_gyear.py +0 -0
  99. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_gyearmonth.py +0 -0
  100. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_hexbinary.py +0 -0
  101. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_id.py +0 -0
  102. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_idref.py +0 -0
  103. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_int.py +0 -0
  104. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_integer.py +0 -0
  105. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_language.py +0 -0
  106. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_long.py +0 -0
  107. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_name.py +0 -0
  108. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_ncname.py +0 -0
  109. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_negativeinteger.py +0 -0
  110. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_nmtoken.py +0 -0
  111. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_nonnegativeinteger.py +0 -0
  112. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_nonpositiveinteger.py +0 -0
  113. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_normalizedstring.py +0 -0
  114. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_positiveinteger.py +0 -0
  115. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_qname.py +0 -0
  116. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_short.py +0 -0
  117. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_string.py +0 -0
  118. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_time.py +0 -0
  119. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_token.py +0 -0
  120. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_unsignedbyte.py +0 -0
  121. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_unsignedint.py +0 -0
  122. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_unsignedlong.py +0 -0
  123. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_unsignedshort.py +0 -0
  124. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/__init__.py +0 -0
  125. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_cache.py +0 -0
  126. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_connection.py +0 -0
  127. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_context.py +0 -0
  128. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_datamodel.py +0 -0
  129. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_dtypes.py +0 -0
  130. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_hasproperty.py +0 -0
  131. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_in_project.py +0 -0
  132. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_langstring.py +0 -0
  133. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_language_in.py +0 -0
  134. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_observable_dict.py +0 -0
  135. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_observable_set.py +0 -0
  136. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_oldaplist.py +0 -0
  137. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_oldaplist_helpers.py +0 -0
  138. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_oldaplistnode.py +0 -0
  139. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_permissionset.py +0 -0
  140. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_project.py +0 -0
  141. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_propertyclass.py +0 -0
  142. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_resourceclass.py +0 -0
  143. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_semantic_version.py +0 -0
  144. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_user.py +0 -0
  145. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/test/test_xsd_datatypes.py +0 -0
  146. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/Gender.yaml +0 -0
  147. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/collections_type.yaml +0 -0
  148. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/connection_test.trig +0 -0
  149. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/datamodel_test.trig +0 -0
  150. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/event_type.yaml +0 -0
  151. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/hlist_schema.yaml +0 -0
  152. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/institution_or_building_type.yaml +0 -0
  153. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/language.yaml +0 -0
  154. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/location_type.yaml +0 -0
  155. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/means_of_transportation.yaml +0 -0
  156. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/objectfactory_test.trig +0 -0
  157. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/playground_list.yaml +0 -0
  158. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/role.yaml +0 -0
  159. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/source_type-1.yaml +0 -0
  160. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/source_type.yaml +0 -0
  161. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/test_move_left_of_toL.yaml +0 -0
  162. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testdata/testlist.yaml +0 -0
  163. {oldaplib-0.3.6 → oldaplib-0.3.8}/oldaplib/testit.http +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: oldaplib
3
- Version: 0.3.6
3
+ Version: 0.3.8
4
4
  Summary: Open Media Access Server Library (Linked Open Data middleware/RESTApi)
5
5
  License: GNU Affero General Public License version 3
6
6
  Author: Lukas Rosenthaler
@@ -8,6 +8,7 @@ from typing import Set, Dict, Any, Self
8
8
  from oldaplib.src.connection import Connection
9
9
  from oldaplib.src.enums.action import Action
10
10
  from oldaplib.src.enums.attributeclass import AttributeClass
11
+ from oldaplib.src.enums.language import Language
11
12
  from oldaplib.src.helpers.attributechange import AttributeChange
12
13
  from oldaplib.src.helpers.context import Context
13
14
  from oldaplib.src.helpers.numeric import Numeric
@@ -99,7 +99,7 @@ class ResourceInstance:
99
99
  if iri and isinstance(iri, str):
100
100
  iri = Iri(Xsd_QName(self.project.projectShortName, iri))
101
101
  self._iri = Iri(iri, validate=True) if iri else Iri()
102
- self._values = {}
102
+ self._values: dict[Xsd_QName, ValueType] = {}
103
103
  self._graph = self.project.projectShortName
104
104
  self._superclass_objs = {}
105
105
  self._changeset = {}
@@ -170,11 +170,33 @@ class ResourceInstance:
170
170
 
171
171
  for propname in self.properties.keys():
172
172
  setattr(ResourceInstance, propname.fragment, property(
173
- partial(ResourceInstance.__get_value, prefix=propname.prefix, fragment=propname.fragment),
174
- partial(ResourceInstance.__set_value, prefix=propname.prefix, fragment=propname.fragment),
175
- partial(ResourceInstance.__del_value, prefix=propname.prefix, fragment=propname.fragment)))
173
+ partial(ResourceInstance.__get_value, attr=propname),
174
+ partial(ResourceInstance.__set_value, attr=propname),
175
+ partial(ResourceInstance.__del_value, attr=propname)))
176
176
  self.clear_changeset()
177
177
 
178
+ def __setitem__(self, key: Xsd_QName, value: ValueType | Xsd | None):
179
+ if self._values.get(key):
180
+ self.__set_value(value, key)
181
+ else:
182
+ raise OldapErrorValue(f'{self.name}: Property {key} does not exist.')
183
+
184
+ def __getitem__(self, key: Xsd_QName) -> ValueType | Xsd | None:
185
+ if self._values.get(key):
186
+ return self.__get_value(key)
187
+ else:
188
+ raise OldapErrorValue(f'{self.name}: Property {key} does not exist.')
189
+
190
+ def __delitem__(self, key: Xsd_QName):
191
+ if self._values.get(key):
192
+ self.__del_value(key)
193
+
194
+ def get(self, key: Xsd_QName) -> ValueType | Xsd | None:
195
+ if self._values.get(key):
196
+ return self._values[key]
197
+ else:
198
+ return None
199
+
178
200
  def validate_value(self, values: ValueType, property: PropertyClass):
179
201
  """
180
202
  Validates a set of values against a given property and its constraints. This function ensures
@@ -330,16 +352,19 @@ class ResourceInstance:
330
352
  else:
331
353
  return False, f'Actor does not have {permission} in project "{self.project.projectShortName}".'
332
354
 
333
- def __get_value(self: Self, prefix: str, fragment: str) -> Xsd | ValueType | None:
334
- attr = Xsd_QName(prefix, fragment, validate=False)
355
+ def __get_value(self: Self, attr: Xsd_QName | str) -> Xsd | ValueType | None:
356
+ #attr = Xsd_QName(prefix, fragment, validate=False)
357
+ if not isinstance(attr, Xsd_QName):
358
+ attr = Xsd_QName(attr)
335
359
  tmp = self._values.get(attr, None)
336
360
  if tmp is not None and str(attr) in {'oldap:createdBy', 'oldap:creationDate', 'oldap:lastModifiedBy', 'oldap:lastModificationDate'}:
337
361
  return next(iter(tmp))
338
362
  return tmp
339
363
 
340
- def __set_value(self: Self, value: ValueType | Xsd | None, prefix: str, fragment: str) -> None:
341
- prop_iri = Xsd_QName(prefix, fragment, validate=False)
342
- hasprop = self.properties.get(prop_iri)
364
+ def __set_value(self: Self, value: ValueType | Xsd | None, attr: Xsd_QName | str) -> None:
365
+ if not isinstance(attr, Xsd_QName):
366
+ attr = Xsd_QName(attr)
367
+ hasprop = self.properties.get(attr)
343
368
 
344
369
  #
345
370
  # Validate
@@ -347,58 +372,58 @@ class ResourceInstance:
347
372
  if hasprop.get(HasPropertyAttr.MIN_COUNT): # testing for MIN_COUNT conformance
348
373
  if hasprop[HasPropertyAttr.MIN_COUNT] > 0 and not value:
349
374
  raise OldapErrorValue(
350
- f'{self.name}: Property {prop_iri} with MIN_COUNT={hasprop[HasPropertyAttr.MIN_COUNT]} is missing')
375
+ f'{self.name}: Property {attr} with MIN_COUNT={hasprop[HasPropertyAttr.MIN_COUNT]} is missing')
351
376
  elif isinstance(value, (list, tuple, set, ObservableSet)) and len(value) < hasprop[HasPropertyAttr.MIN_COUNT]:
352
377
  raise OldapErrorValue(
353
- f'{self.name}: Property {prop_iri} with MIN_COUNT={hasprop[HasPropertyAttr.MIN_COUNT]} has not enough values')
378
+ f'{self.name}: Property {attr} with MIN_COUNT={hasprop[HasPropertyAttr.MIN_COUNT]} has not enough values')
354
379
  if hasprop.get(HasPropertyAttr.MAX_COUNT): # testing for MAX_COUNT conformance
355
380
  if isinstance(value, (list, tuple, set, ObservableSet)) and len(value) > hasprop[HasPropertyAttr.MAX_COUNT]:
356
381
  raise OldapErrorValue(
357
- f'{self.name}: Property {prop_iri} with MAX_COUNT={hasprop[HasPropertyAttr.MIN_COUNT]} has to many values (n={len(value)})')
382
+ f'{self.name}: Property {attr} with MAX_COUNT={hasprop[HasPropertyAttr.MIN_COUNT]} has to many values (n={len(value)})')
358
383
  if value:
359
384
  if isinstance(value, LangString):
360
385
  self.validate_value(value, hasprop.prop)
361
386
  else:
362
387
  if isinstance(value, (list, tuple, set, ObservableSet)):
363
- for val in self._values[prop_iri]:
388
+ for val in self._values[attr]:
364
389
  self.validate_value(val, hasprop.prop)
365
390
  else:
366
391
  self.validate_value(value, hasprop.prop)
367
392
 
368
393
  if not value:
369
- self._changeset[prop_iri] = AttributeChange(self._values.get(prop_iri), Action.DELETE)
370
- del self._values[prop_iri]
394
+ self._changeset[attr] = AttributeChange(self._values.get(attr), Action.DELETE)
395
+ del self._values[attr]
371
396
  elif isinstance(value, (list, tuple, set, LangString)): # we may have multiple values...
372
- if self._values.get(prop_iri):
373
- self._changeset[prop_iri] = AttributeChange(self._values.get(prop_iri), Action.REPLACE)
397
+ if self._values.get(attr):
398
+ self._changeset[attr] = AttributeChange(self._values.get(attr), Action.REPLACE)
374
399
  else:
375
- self._changeset[prop_iri] = AttributeChange(None, Action.CREATE)
400
+ self._changeset[attr] = AttributeChange(None, Action.CREATE)
376
401
  if hasprop.prop.datatype == XsdDatatypes.langString:
377
- self._values[prop_iri] = LangString(value, notifier=self.notifier, notify_data=prop_iri)
402
+ self._values[attr] = LangString(value, notifier=self.notifier, notify_data=attr)
378
403
  else:
379
- self._values[prop_iri] = ObservableSet({
404
+ self._values[attr] = ObservableSet({
380
405
  convert2datatype(x, hasprop.prop.datatype) for x in value
381
- }, notifier=self.notifier, notify_data=prop_iri)
406
+ }, notifier=self.notifier, notify_data=attr)
382
407
  else:
383
- if self._values.get(prop_iri):
384
- self._changeset[prop_iri] = AttributeChange(self._values.get(prop_iri), Action.REPLACE)
408
+ if self._values.get(attr):
409
+ self._changeset[attr] = AttributeChange(self._values.get(attr), Action.REPLACE)
385
410
  else:
386
- self._changeset[prop_iri] = AttributeChange(None, Action.CREATE)
411
+ self._changeset[attr] = AttributeChange(None, Action.CREATE)
387
412
  try:
388
- self._values[prop_iri] = ObservableSet({convert2datatype(value, hasprop.prop.datatype)})
413
+ self._values[attr] = ObservableSet({convert2datatype(value, hasprop.prop.datatype)})
389
414
  except TypeError:
390
- self._values[prop_iri] = convert2datatype(value, hasprop.prop.datatype)
415
+ self._values[attr] = convert2datatype(value, hasprop.prop.datatype)
391
416
 
392
- def __del_value(self: Self, prefix: str, fragment: str) -> None:
393
- prop_iri = Xsd_QName(prefix, fragment, validate=False)
394
- hasprop = self.properties.get(prop_iri)
417
+ def __del_value(self: Self, attr: Xsd_QName | str) -> None:
418
+ if not isinstance(attr, Xsd_QName):
419
+ attr = Xsd_QName(attr)
420
+ hasprop = self.properties.get(attr)
395
421
 
396
422
  if hasprop.get(HasPropertyAttr.MIN_COUNT): # testing for MIN_COUNT conformance
397
423
  if hasprop[HasPropertyAttr.MIN_COUNT] > 0:
398
- raise OldapErrorValue(f'{self.name}: Property {prop_iri} with MIN_COUNT={hasprop[HasPropertyAttr.MIN_COUNT]} cannot be deleted.')
424
+ raise OldapErrorValue(f'{self.name}: Property {attr} with MIN_COUNT={hasprop[HasPropertyAttr.MIN_COUNT]} cannot be deleted.')
399
425
 
400
- self._changeset[prop_iri] = AttributeChange(self._values.get(prop_iri), Action.DELETE)
401
- attr = Xsd_QName(prefix, fragment, validate=False)
426
+ self._changeset[attr] = AttributeChange(self._values.get(attr), Action.DELETE)
402
427
  del self._values[attr]
403
428
 
404
429
  @property
@@ -507,26 +532,19 @@ class ResourceInstance:
507
532
  context = Context(name=con.context_name)
508
533
  sparql = context.sparql_context
509
534
  sparql += f'''
510
- SELECT ?predicate ?value
511
- FROM oldap:onto
512
- FROM shared:onto
513
- FROM {graph}:onto
514
- FROM NAMED oldap:admin
515
- FROM NAMED {graph}:data
516
- WHERE {{
517
- BIND({iri.toRdf} as ?iri)
518
- GRAPH {graph}:data {{
519
- ?iri ?predicate ?value .
520
- ?iri oldap:grantsPermission ?permset .
521
- }}
522
- BIND({con.userIri.toRdf} as ?user)
523
- GRAPH oldap:admin {{
524
- ?user oldap:hasPermissions ?permset .
525
- ?permset oldap:givesPermission ?DataPermission .
526
- ?DataPermission oldap:permissionValue ?permval .
527
- }}
528
- FILTER(?permval >= {DataPermission.DATA_VIEW.numeric.toRdf})
529
- }}'''
535
+ SELECT ?predicate ?value
536
+ WHERE {{
537
+ GRAPH {graph}:data {{
538
+ {iri.toRdf} ?predicate ?value .
539
+ {iri.toRdf} oldap:grantsPermission ?permset .
540
+ }}
541
+ GRAPH oldap:admin {{
542
+ {con.userIri.toRdf} oldap:hasPermissions ?permset .
543
+ ?permset oldap:givesPermission ?DataPermission .
544
+ ?DataPermission oldap:permissionValue ?permval .
545
+ }}
546
+ FILTER(?permval >= {DataPermission.DATA_VIEW.numeric.toRdf})
547
+ }}'''
530
548
  jsonres = con.query(sparql)
531
549
  res = QueryProcessor(context, jsonres)
532
550
  objtype = None
@@ -791,6 +809,47 @@ class ResourceInstanceFactory:
791
809
  'properties': resclass.properties,
792
810
  'superclass': resclass.superclass})
793
811
 
812
+ @staticmethod
813
+ def read_data(con: IConnection, projectShortName: Xsd_NCName | str, iri: Iri | str) -> dict[Xsd_QName, Any]:
814
+ if not isinstance(iri, Iri):
815
+ iri = Iri(iri, validate=True)
816
+ if not isinstance(projectShortName, Xsd_NCName):
817
+ graph = Xsd_NCName(projectShortName)
818
+ else:
819
+ graph = projectShortName
820
+
821
+ context = Context(name=con.context_name)
822
+ sparql = context.sparql_context
823
+ sparql += f'''
824
+ SELECT ?predicate ?value
825
+ WHERE {{
826
+ GRAPH {graph}:data {{
827
+ {iri.toRdf} ?predicate ?value .
828
+ {iri.toRdf} oldap:grantsPermission ?permset .
829
+ }}
830
+ GRAPH oldap:admin {{
831
+ {con.userIri.toRdf} oldap:hasPermissions ?permset .
832
+ ?permset oldap:givesPermission ?DataPermission .
833
+ ?DataPermission oldap:permissionValue ?permval .
834
+ }}
835
+ FILTER(?permval >= {DataPermission.DATA_VIEW.numeric.toRdf})
836
+ }}
837
+ '''
838
+ jsonres = con.query(sparql)
839
+ res = QueryProcessor(context, jsonres)
840
+ data = {}
841
+ for r in res:
842
+ if r['predicate'].is_qname:
843
+ if not data.get(r['predicate'].as_qname):
844
+ data[r['predicate'].as_qname] = []
845
+ data[str(r['predicate'].as_qname)].append(str(r['value']))
846
+ else:
847
+ raise OldapErrorInconsistency(f"Expected QName as predicate, got {r['predicate']}")
848
+ if not data.get('rdf:type'):
849
+ raise OldapErrorNotFound(f'Resource with iri <{iri}> not found.')
850
+ return data
851
+
852
+
794
853
  def read(self, iri: Iri | str) -> ResourceInstance:
795
854
  if not isinstance(iri, Iri):
796
855
  iri = Iri(iri, validate=True)
@@ -799,11 +858,6 @@ class ResourceInstanceFactory:
799
858
  sparql = context.sparql_context
800
859
  sparql += f'''
801
860
  SELECT ?predicate ?value
802
- FROM oldap:onto
803
- FROM shared:onto
804
- FROM {graph}:onto
805
- FROM NAMED oldap:admin
806
- FROM NAMED {graph}:data
807
861
  WHERE {{
808
862
  BIND({iri.toRdf} as ?iri)
809
863
  GRAPH {graph}:data {{
@@ -856,11 +910,6 @@ class ResourceInstanceFactory:
856
910
  else:
857
911
  sparql += "SELECT DISTINCT ?s ?t ?p ?o"
858
912
  sparql += f'''
859
- FROM oldap:onto
860
- FROM shared:onto
861
- FROM {graph}:onto
862
- FROM NAMED oldap:admin
863
- FROM NAMED {graph}:data
864
913
  WHERE {{
865
914
  GRAPH {graph}:data {{
866
915
  ?s ?p ?o .
@@ -870,9 +919,8 @@ class ResourceInstanceFactory:
870
919
  FILTER(isLiteral(?o) &&
871
920
  (datatype(?o) = xsd:string || datatype(?o) = rdf:langString || lang(?o) != ""))
872
921
  FILTER(CONTAINS(LCASE(STR(?o)), "{s}")) # case-insensitive substring match
873
- BIND({self._con.userIri.toRdf} as ?user)
874
922
  GRAPH oldap:admin {{
875
- ?user oldap:hasPermissions ?permset .
923
+ {self._con.userIri.toRdf} oldap:hasPermissions ?permset .
876
924
  ?permset oldap:givesPermission ?DataPermission .
877
925
  ?DataPermission oldap:permissionValue ?permval .
878
926
  }}
@@ -0,0 +1 @@
1
+ __version__ = "0.3.8"
@@ -54,7 +54,7 @@ class Xsd_dateTimeStamp(Xsd):
54
54
  Constructor string representation of the Xsd_dateTimeStamp instance as ISO datetimestamp
55
55
  :return: Constructor string
56
56
  """
57
- return f'Xsd_dateTimeSTamp("{self.__value.isoformat()}")'
57
+ return f'Xsd_dateTimeStamp("{self.__value.isoformat()}")'
58
58
 
59
59
  def __eq__(self, other: Self | datetime | str | None) -> bool:
60
60
  """
@@ -105,7 +105,8 @@ class TestexternalOntologies(unittest.TestCase):
105
105
 
106
106
  del eo1
107
107
  eo1 = ExternalOntology.read(con=self._connection, projectShortName="testext", prefix="gagaB", ignore_cache=True)
108
- eo1.prefix = "gugus"
108
+ with self.assertRaises(OldapErrorImmutable):
109
+ eo1.prefix = "gugus"
109
110
  eo1.comment = LangString("Gugus comment@en", "Gugus Kommentar@de")
110
111
  del eo1.label[Language.DE]
111
112
  eo1.label[Language.FR] = "GAGA B ontologie"
@@ -113,7 +114,7 @@ class TestexternalOntologies(unittest.TestCase):
113
114
 
114
115
  del eo1
115
116
  eo1 = ExternalOntology.read(con=self._connection, projectShortName="testext", prefix="gagaB", ignore_cache=True)
116
- self.assertEqual(eo1.prefix, "gugus")
117
+ self.assertEqual(eo1.prefix, "gagaB")
117
118
  self.assertEqual(eo1.label, LangString("GAGA B ontology@en", "GAGA B ontologie@fr"))
118
119
  self.assertEqual(eo1.comment, LangString("Gugus comment@en", "Gugus Kommentar@de"))
119
120
  self.assertEqual(eo1.namespaceIri, NamespaceIRI("http://gaga.org/ns/gagaB/"))
@@ -350,6 +350,19 @@ class TestObjectFactory(unittest.TestCase):
350
350
  mycat.create()
351
351
 
352
352
  def test_read_A(self):
353
+ factory = ResourceInstanceFactory(con=self._connection, project='test')
354
+ Book = factory.createObjectInstance('Book')
355
+ b = Book(title="The Life and Times of Scrooge",
356
+ author="test:TuomasHolopainen",
357
+ pubDate="2001-01-01",
358
+ grantsPermission=Iri('oldap:GenericView'))
359
+ b.create()
360
+ data = ResourceInstanceFactory.read_data(con=self._connection, iri=b.iri, projectShortName='test')
361
+ self.assertEqual(data['rdf:type'], ['test:Book'])
362
+ self.assertEqual(data['test:title'], ['The Life and Times of Scrooge'])
363
+ self.assertEqual(data['test:author'], ['test:TuomasHolopainen'])
364
+
365
+ def test_read_B(self):
353
366
  factory = ResourceInstanceFactory(con=self._connection, project='test')
354
367
  Book = factory.createObjectInstance('Book')
355
368
  b = Book(title="The Life and Times of Scrooge",
@@ -366,6 +379,24 @@ class TestObjectFactory(unittest.TestCase):
366
379
  self.assertEqual(jsonobj['test:pubDate'], ['2001-01-01'])
367
380
  self.assertEqual(jsonobj['test:title'], ['The Life and Times of Scrooge'])
368
381
 
382
+ def test_read_C(self):
383
+ factory = ResourceInstanceFactory(con=self._connection, project='test')
384
+ Book = factory.createObjectInstance('Book')
385
+ b = Book(title="The Life and Times of Scrooge",
386
+ author="test:TuomasHolopainen",
387
+ pubDate="2001-01-01",
388
+ grantsPermission=Iri('oldap:GenericView'))
389
+ b.create()
390
+ bb = Book.read(con=self._connection, iri=b.iri)
391
+ self.assertEqual(bb.name, "Book")
392
+ self.assertEqual(bb.title, {Xsd_string("The Life and Times of Scrooge")})
393
+ self.assertEqual(bb.author, {Iri("test:TuomasHolopainen")})
394
+ jsonobj = bb.toJsonObject()
395
+ self.assertEqual(jsonobj['test:author'], ['test:TuomasHolopainen'])
396
+ self.assertEqual(jsonobj['test:pubDate'], ['2001-01-01'])
397
+ self.assertEqual(jsonobj['test:title'], ['The Life and Times of Scrooge'])
398
+
399
+
369
400
  def test_value_setter(self):
370
401
  factory = ResourceInstanceFactory(con=self._connection, project='test')
371
402
  SetterTester = factory.createObjectInstance('SetterTester')
@@ -419,7 +450,7 @@ class TestObjectFactory(unittest.TestCase):
419
450
  self.assertEqual(obj2.decimalSetter, {Xsd_decimal(3.14159), Xsd_decimal(2.71828), Xsd_decimal(1.61803)})
420
451
  self.assertFalse(obj2.integerSetter)
421
452
 
422
- def test_value_modifier(self):
453
+ def test_value_modifier_A(self):
423
454
  factory = ResourceInstanceFactory(con=self._connection, project='test')
424
455
  SetterTester = factory.createObjectInstance('SetterTester')
425
456
  obj1 = SetterTester(stringSetter="This is a test string",
@@ -445,6 +476,32 @@ class TestObjectFactory(unittest.TestCase):
445
476
  self.assertEqual(obj1.integerSetter, {Xsd_int(20), Xsd_int(42)})
446
477
  self.assertFalse(obj1.booleanSetter)
447
478
 
479
+ def test_value_modifier_B(self):
480
+ factory = ResourceInstanceFactory(con=self._connection, project='test')
481
+ SetterTester = factory.createObjectInstance('SetterTester')
482
+ obj1 = SetterTester(stringSetter="This is a test string",
483
+ langStringSetter=LangString("C'est un teste@fr", "Dies ist eine Test-Zeichenkette@de"),
484
+ decimalSetter=Xsd_decimal(3.14),
485
+ integerSetter={-10, 20},
486
+ booleanSetter=True,
487
+ grantsPermission={Iri('oldap:GenericView'), Iri('oldap:GenericUpdate')})
488
+ obj1.create()
489
+ obj1 = SetterTester.read(con=self._connection, iri=obj1.iri)
490
+ obj1[Xsd_QName('test:langStringSetter')][Language.FR] = "Qu'est-ce que c'est?"
491
+ obj1[Xsd_QName('test:integerSetter')].add(42)
492
+ obj1[Xsd_QName('test:integerSetter')].discard(-10)
493
+ obj1[Xsd_QName('test:booleanSetter')] = False
494
+ with self.assertRaises(OldapErrorValue):
495
+ obj1[Xsd_QName('test:stringSetter')].pop()
496
+ with self.assertRaises(OldapErrorValue):
497
+ del obj1[Xsd_QName('test:stringSetter')]
498
+ obj1.update()
499
+ obj1 = SetterTester.read(con=self._connection, iri=obj1.iri)
500
+ self.assertEqual(obj1.stringSetter, {"This is a test string"})
501
+ self.assertEqual(obj1.langStringSetter, LangString("Dies ist eine Test-Zeichenkette@de", "Qu'est-ce que c'est?@fr"))
502
+ self.assertEqual(obj1.integerSetter, {Xsd_int(20), Xsd_int(42)})
503
+ self.assertFalse(obj1.booleanSetter)
504
+
448
505
  def test_value_maxcount_mincount(self):
449
506
  factory = ResourceInstanceFactory(con=self._connection, project='test')
450
507
  Person = factory.createObjectInstance('Person')
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "oldaplib"
3
- version = "0.3.6"
3
+ version = "0.3.8"
4
4
  description = "Open Media Access Server Library (Linked Open Data middleware/RESTApi)"
5
5
  authors = ["Lukas Rosenthaler <lukas.rosenthaler@unibas.ch>"]
6
6
  license = "GNU Affero General Public License version 3"
@@ -1 +0,0 @@
1
- __version__ = "0.3.6"
File without changes
File without changes
File without changes
File without changes