oldaplib 0.3.7__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.7 → oldaplib-0.3.8}/PKG-INFO +1 -1
  2. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/model.py +1 -0
  3. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/objectfactory.py +71 -54
  4. oldaplib-0.3.8/oldaplib/src/version.py +1 -0
  5. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_datetimestamp.py +1 -1
  6. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_externalontologies.py +3 -2
  7. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_objectfactory.py +45 -2
  8. {oldaplib-0.3.7 → oldaplib-0.3.8}/pyproject.toml +1 -1
  9. oldaplib-0.3.7/oldaplib/src/version.py +0 -1
  10. {oldaplib-0.3.7 → oldaplib-0.3.8}/README.md +0 -0
  11. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/__init__.py +0 -0
  12. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/apps/load_list.py +0 -0
  13. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/ontologies/admin-testing.trig +0 -0
  14. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/ontologies/admin.trig +0 -0
  15. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/ontologies/example.trig +0 -0
  16. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/ontologies/oldap.trig +0 -0
  17. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/ontologies/oldap.ttl +0 -0
  18. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/ontologies/shared.trig +0 -0
  19. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/ontologies/standard/.gitsave +0 -0
  20. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/__init__.py +0 -0
  21. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/cachesingleton.py +0 -0
  22. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/connection.py +0 -0
  23. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/datamodel.py +0 -0
  24. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/dtypes/__init__.py +0 -0
  25. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/dtypes/bnode.py +0 -0
  26. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/dtypes/languagein.py +0 -0
  27. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/dtypes/namespaceiri.py +0 -0
  28. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/dtypes/rdfset.py +0 -0
  29. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/dtypes/xsdset.py +0 -0
  30. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/__init__.py +0 -0
  31. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/action.py +0 -0
  32. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/adminpermissions.py +0 -0
  33. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/attributeclass.py +0 -0
  34. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/datapermissions.py +0 -0
  35. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/externalontologyattr.py +0 -0
  36. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/haspropertyattr.py +0 -0
  37. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/language.py +0 -0
  38. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/oldaplistattr.py +0 -0
  39. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/oldaplistnodeattr.py +0 -0
  40. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/owlpropertytype.py +0 -0
  41. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/permissionsetattr.py +0 -0
  42. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/projectattr.py +0 -0
  43. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/propertyclassattr.py +0 -0
  44. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/resourceclassattr.py +0 -0
  45. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/sparql_result_format.py +0 -0
  46. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/userattr.py +0 -0
  47. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/enums/xsd_datatypes.py +0 -0
  48. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/externalontology.py +0 -0
  49. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/globalconfig.py +0 -0
  50. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/hasproperty.py +0 -0
  51. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/Notify.py +0 -0
  52. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/__init__.py +0 -0
  53. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/attributechange.py +0 -0
  54. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/context.py +0 -0
  55. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/convert2datatype.py +0 -0
  56. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/irincname.py +0 -0
  57. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/json_encoder.py +0 -0
  58. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/langstring.py +0 -0
  59. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/numeric.py +0 -0
  60. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/observable_dict.py +0 -0
  61. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/observable_set.py +0 -0
  62. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/oldaperror.py +0 -0
  63. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/query_processor.py +0 -0
  64. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/semantic_version.py +0 -0
  65. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/serializeableset.py +0 -0
  66. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/serializer.py +0 -0
  67. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/singletonmeta.py +0 -0
  68. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/helpers/tools.py +0 -0
  69. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/iconnection.py +0 -0
  70. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/in_project.py +0 -0
  71. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/oldaplist.py +0 -0
  72. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/oldaplist_helpers.py +0 -0
  73. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/oldaplistnode.py +0 -0
  74. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/oldaplogging.py +0 -0
  75. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/permissionset.py +0 -0
  76. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/project.py +0 -0
  77. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/propertyclass.py +0 -0
  78. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/resourceclass.py +0 -0
  79. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/user.py +0 -0
  80. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/userdataclass.py +0 -0
  81. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/__init__.py +0 -0
  82. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/floatingpoint.py +0 -0
  83. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/iri.py +0 -0
  84. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd.py +0 -0
  85. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_anyuri.py +0 -0
  86. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_base64binary.py +0 -0
  87. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_boolean.py +0 -0
  88. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_byte.py +0 -0
  89. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_date.py +0 -0
  90. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_datetime.py +0 -0
  91. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_decimal.py +0 -0
  92. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_double.py +0 -0
  93. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_duration.py +0 -0
  94. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_float.py +0 -0
  95. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_gday.py +0 -0
  96. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_gmonth.py +0 -0
  97. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_gmonthday.py +0 -0
  98. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_gyear.py +0 -0
  99. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_gyearmonth.py +0 -0
  100. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_hexbinary.py +0 -0
  101. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_id.py +0 -0
  102. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_idref.py +0 -0
  103. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_int.py +0 -0
  104. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_integer.py +0 -0
  105. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_language.py +0 -0
  106. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_long.py +0 -0
  107. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_name.py +0 -0
  108. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_ncname.py +0 -0
  109. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_negativeinteger.py +0 -0
  110. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_nmtoken.py +0 -0
  111. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_nonnegativeinteger.py +0 -0
  112. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_nonpositiveinteger.py +0 -0
  113. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_normalizedstring.py +0 -0
  114. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_positiveinteger.py +0 -0
  115. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_qname.py +0 -0
  116. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_short.py +0 -0
  117. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_string.py +0 -0
  118. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_time.py +0 -0
  119. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_token.py +0 -0
  120. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_unsignedbyte.py +0 -0
  121. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_unsignedint.py +0 -0
  122. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_unsignedlong.py +0 -0
  123. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/src/xsd/xsd_unsignedshort.py +0 -0
  124. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/__init__.py +0 -0
  125. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_cache.py +0 -0
  126. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_connection.py +0 -0
  127. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_context.py +0 -0
  128. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_datamodel.py +0 -0
  129. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_dtypes.py +0 -0
  130. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_hasproperty.py +0 -0
  131. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_in_project.py +0 -0
  132. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_langstring.py +0 -0
  133. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_language_in.py +0 -0
  134. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_observable_dict.py +0 -0
  135. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_observable_set.py +0 -0
  136. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_oldaplist.py +0 -0
  137. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_oldaplist_helpers.py +0 -0
  138. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_oldaplistnode.py +0 -0
  139. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_permissionset.py +0 -0
  140. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_project.py +0 -0
  141. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_propertyclass.py +0 -0
  142. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_resourceclass.py +0 -0
  143. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_semantic_version.py +0 -0
  144. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_user.py +0 -0
  145. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/test/test_xsd_datatypes.py +0 -0
  146. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/Gender.yaml +0 -0
  147. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/collections_type.yaml +0 -0
  148. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/connection_test.trig +0 -0
  149. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/datamodel_test.trig +0 -0
  150. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/event_type.yaml +0 -0
  151. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/hlist_schema.yaml +0 -0
  152. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/institution_or_building_type.yaml +0 -0
  153. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/language.yaml +0 -0
  154. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/location_type.yaml +0 -0
  155. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/means_of_transportation.yaml +0 -0
  156. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/objectfactory_test.trig +0 -0
  157. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/playground_list.yaml +0 -0
  158. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/role.yaml +0 -0
  159. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/source_type-1.yaml +0 -0
  160. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/source_type.yaml +0 -0
  161. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/test_move_left_of_toL.yaml +0 -0
  162. {oldaplib-0.3.7 → oldaplib-0.3.8}/oldaplib/testdata/testlist.yaml +0 -0
  163. {oldaplib-0.3.7 → 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.7
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,21 +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
- WHERE {{
512
- BIND({iri.toRdf} as ?iri)
513
- GRAPH {graph}:data {{
514
- ?iri ?predicate ?value .
515
- ?iri oldap:grantsPermission ?permset .
516
- }}
517
- BIND({con.userIri.toRdf} as ?user)
518
- GRAPH oldap:admin {{
519
- ?user oldap:hasPermissions ?permset .
520
- ?permset oldap:givesPermission ?DataPermission .
521
- ?DataPermission oldap:permissionValue ?permval .
522
- }}
523
- FILTER(?permval >= {DataPermission.DATA_VIEW.numeric.toRdf})
524
- }}'''
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
+ }}'''
525
548
  jsonres = con.query(sparql)
526
549
  res = QueryProcessor(context, jsonres)
527
550
  objtype = None
@@ -887,11 +910,6 @@ class ResourceInstanceFactory:
887
910
  else:
888
911
  sparql += "SELECT DISTINCT ?s ?t ?p ?o"
889
912
  sparql += f'''
890
- FROM oldap:onto
891
- FROM shared:onto
892
- FROM {graph}:onto
893
- FROM NAMED oldap:admin
894
- FROM NAMED {graph}:data
895
913
  WHERE {{
896
914
  GRAPH {graph}:data {{
897
915
  ?s ?p ?o .
@@ -901,9 +919,8 @@ class ResourceInstanceFactory:
901
919
  FILTER(isLiteral(?o) &&
902
920
  (datatype(?o) = xsd:string || datatype(?o) = rdf:langString || lang(?o) != ""))
903
921
  FILTER(CONTAINS(LCASE(STR(?o)), "{s}")) # case-insensitive substring match
904
- BIND({self._con.userIri.toRdf} as ?user)
905
922
  GRAPH oldap:admin {{
906
- ?user oldap:hasPermissions ?permset .
923
+ {self._con.userIri.toRdf} oldap:hasPermissions ?permset .
907
924
  ?permset oldap:givesPermission ?DataPermission .
908
925
  ?DataPermission oldap:permissionValue ?permval .
909
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/"))
@@ -357,7 +357,7 @@ class TestObjectFactory(unittest.TestCase):
357
357
  pubDate="2001-01-01",
358
358
  grantsPermission=Iri('oldap:GenericView'))
359
359
  b.create()
360
- data = factory.read_data(con=self._connection, iri=b.iri, projectShortName='test')
360
+ data = ResourceInstanceFactory.read_data(con=self._connection, iri=b.iri, projectShortName='test')
361
361
  self.assertEqual(data['rdf:type'], ['test:Book'])
362
362
  self.assertEqual(data['test:title'], ['The Life and Times of Scrooge'])
363
363
  self.assertEqual(data['test:author'], ['test:TuomasHolopainen'])
@@ -379,6 +379,23 @@ class TestObjectFactory(unittest.TestCase):
379
379
  self.assertEqual(jsonobj['test:pubDate'], ['2001-01-01'])
380
380
  self.assertEqual(jsonobj['test:title'], ['The Life and Times of Scrooge'])
381
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
+
382
399
 
383
400
  def test_value_setter(self):
384
401
  factory = ResourceInstanceFactory(con=self._connection, project='test')
@@ -433,7 +450,7 @@ class TestObjectFactory(unittest.TestCase):
433
450
  self.assertEqual(obj2.decimalSetter, {Xsd_decimal(3.14159), Xsd_decimal(2.71828), Xsd_decimal(1.61803)})
434
451
  self.assertFalse(obj2.integerSetter)
435
452
 
436
- def test_value_modifier(self):
453
+ def test_value_modifier_A(self):
437
454
  factory = ResourceInstanceFactory(con=self._connection, project='test')
438
455
  SetterTester = factory.createObjectInstance('SetterTester')
439
456
  obj1 = SetterTester(stringSetter="This is a test string",
@@ -459,6 +476,32 @@ class TestObjectFactory(unittest.TestCase):
459
476
  self.assertEqual(obj1.integerSetter, {Xsd_int(20), Xsd_int(42)})
460
477
  self.assertFalse(obj1.booleanSetter)
461
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
+
462
505
  def test_value_maxcount_mincount(self):
463
506
  factory = ResourceInstanceFactory(con=self._connection, project='test')
464
507
  Person = factory.createObjectInstance('Person')
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "oldaplib"
3
- version = "0.3.7"
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.7"
File without changes
File without changes
File without changes
File without changes