oldaplib 0.3.15__tar.gz → 0.3.17__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 (164) hide show
  1. {oldaplib-0.3.15 → oldaplib-0.3.17}/PKG-INFO +1 -1
  2. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/observable_set.py +2 -2
  3. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/propertyclass.py +71 -29
  4. oldaplib-0.3.17/oldaplib/src/version.py +1 -0
  5. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_propertyclass.py +116 -13
  6. {oldaplib-0.3.15 → oldaplib-0.3.17}/pyproject.toml +1 -1
  7. oldaplib-0.3.15/oldaplib/src/version.py +0 -1
  8. {oldaplib-0.3.15 → oldaplib-0.3.17}/README.md +0 -0
  9. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/__init__.py +0 -0
  10. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/apps/load_list.py +0 -0
  11. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/ontologies/admin-testing.trig +0 -0
  12. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/ontologies/admin.trig +0 -0
  13. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/ontologies/example.trig +0 -0
  14. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/ontologies/oldap.trig +0 -0
  15. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/ontologies/oldap.ttl +0 -0
  16. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/ontologies/shared.trig +0 -0
  17. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/ontologies/standard/.gitsave +0 -0
  18. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/__init__.py +0 -0
  19. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/cachesingleton.py +0 -0
  20. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/connection.py +0 -0
  21. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/datamodel.py +0 -0
  22. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/dtypes/__init__.py +0 -0
  23. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/dtypes/bnode.py +0 -0
  24. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/dtypes/languagein.py +0 -0
  25. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/dtypes/namespaceiri.py +0 -0
  26. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/dtypes/rdfset.py +0 -0
  27. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/dtypes/xsdset.py +0 -0
  28. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/__init__.py +0 -0
  29. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/action.py +0 -0
  30. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/adminpermissions.py +0 -0
  31. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/attributeclass.py +0 -0
  32. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/datapermissions.py +0 -0
  33. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/externalontologyattr.py +0 -0
  34. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/haspropertyattr.py +0 -0
  35. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/language.py +0 -0
  36. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/oldaplistattr.py +0 -0
  37. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/oldaplistnodeattr.py +0 -0
  38. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/owlpropertytype.py +0 -0
  39. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/permissionsetattr.py +0 -0
  40. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/projectattr.py +0 -0
  41. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/propertyclassattr.py +0 -0
  42. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/resourceclassattr.py +0 -0
  43. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/sparql_result_format.py +0 -0
  44. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/userattr.py +0 -0
  45. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/enums/xsd_datatypes.py +0 -0
  46. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/externalontology.py +0 -0
  47. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/globalconfig.py +0 -0
  48. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/hasproperty.py +0 -0
  49. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/Notify.py +0 -0
  50. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/__init__.py +0 -0
  51. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/attributechange.py +0 -0
  52. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/context.py +0 -0
  53. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/convert2datatype.py +0 -0
  54. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/irincname.py +0 -0
  55. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/json_encoder.py +0 -0
  56. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/langstring.py +0 -0
  57. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/numeric.py +0 -0
  58. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/observable_dict.py +0 -0
  59. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/oldaperror.py +0 -0
  60. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/query_processor.py +0 -0
  61. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/semantic_version.py +0 -0
  62. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/serializeableset.py +0 -0
  63. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/serializer.py +0 -0
  64. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/singletonmeta.py +0 -0
  65. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/helpers/tools.py +0 -0
  66. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/iconnection.py +0 -0
  67. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/in_project.py +0 -0
  68. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/model.py +0 -0
  69. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/objectfactory.py +0 -0
  70. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/oldaplist.py +0 -0
  71. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/oldaplist_helpers.py +0 -0
  72. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/oldaplistnode.py +0 -0
  73. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/oldaplogging.py +0 -0
  74. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/permissionset.py +0 -0
  75. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/project.py +0 -0
  76. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/resourceclass.py +0 -0
  77. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/user.py +0 -0
  78. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/userdataclass.py +0 -0
  79. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/__init__.py +0 -0
  80. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/floatingpoint.py +0 -0
  81. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/iri.py +0 -0
  82. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd.py +0 -0
  83. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_anyuri.py +0 -0
  84. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_base64binary.py +0 -0
  85. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_boolean.py +0 -0
  86. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_byte.py +0 -0
  87. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_date.py +0 -0
  88. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_datetime.py +0 -0
  89. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_datetimestamp.py +0 -0
  90. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_decimal.py +0 -0
  91. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_double.py +0 -0
  92. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_duration.py +0 -0
  93. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_float.py +0 -0
  94. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_gday.py +0 -0
  95. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_gmonth.py +0 -0
  96. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_gmonthday.py +0 -0
  97. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_gyear.py +0 -0
  98. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_gyearmonth.py +0 -0
  99. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_hexbinary.py +0 -0
  100. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_id.py +0 -0
  101. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_idref.py +0 -0
  102. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_int.py +0 -0
  103. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_integer.py +0 -0
  104. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_language.py +0 -0
  105. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_long.py +0 -0
  106. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_name.py +0 -0
  107. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_ncname.py +0 -0
  108. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_negativeinteger.py +0 -0
  109. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_nmtoken.py +0 -0
  110. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_nonnegativeinteger.py +0 -0
  111. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_nonpositiveinteger.py +0 -0
  112. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_normalizedstring.py +0 -0
  113. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_positiveinteger.py +0 -0
  114. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_qname.py +0 -0
  115. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_short.py +0 -0
  116. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_string.py +0 -0
  117. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_time.py +0 -0
  118. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_token.py +0 -0
  119. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_unsignedbyte.py +0 -0
  120. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_unsignedint.py +0 -0
  121. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_unsignedlong.py +0 -0
  122. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/src/xsd/xsd_unsignedshort.py +0 -0
  123. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/__init__.py +0 -0
  124. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_cache.py +0 -0
  125. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_connection.py +0 -0
  126. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_context.py +0 -0
  127. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_datamodel.py +0 -0
  128. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_dtypes.py +0 -0
  129. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_externalontologies.py +0 -0
  130. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_hasproperty.py +0 -0
  131. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_in_project.py +0 -0
  132. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_langstring.py +0 -0
  133. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_language_in.py +0 -0
  134. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_objectfactory.py +0 -0
  135. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_observable_dict.py +0 -0
  136. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_observable_set.py +0 -0
  137. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_oldaplist.py +0 -0
  138. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_oldaplist_helpers.py +0 -0
  139. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_oldaplistnode.py +0 -0
  140. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_permissionset.py +0 -0
  141. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_project.py +0 -0
  142. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_resourceclass.py +0 -0
  143. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_semantic_version.py +0 -0
  144. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_user.py +0 -0
  145. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/test/test_xsd_datatypes.py +0 -0
  146. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/Gender.yaml +0 -0
  147. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/collections_type.yaml +0 -0
  148. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/connection_test.trig +0 -0
  149. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/datamodel_test.trig +0 -0
  150. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/event_type.yaml +0 -0
  151. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/hlist_schema.yaml +0 -0
  152. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/instances_test.trig +0 -0
  153. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/institution_or_building_type.yaml +0 -0
  154. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/language.yaml +0 -0
  155. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/location_type.yaml +0 -0
  156. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/means_of_transportation.yaml +0 -0
  157. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/objectfactory_test.trig +0 -0
  158. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/playground_list.yaml +0 -0
  159. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/role.yaml +0 -0
  160. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/source_type-1.yaml +0 -0
  161. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/source_type.yaml +0 -0
  162. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/test_move_left_of_toL.yaml +0 -0
  163. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testdata/testlist.yaml +0 -0
  164. {oldaplib-0.3.15 → oldaplib-0.3.17}/oldaplib/testit.http +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: oldaplib
3
- Version: 0.3.15
3
+ Version: 0.3.17
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
@@ -290,10 +290,10 @@ class ObservableSet(Notify):
290
290
  field: Iri,
291
291
  ignoreitems: Set[Any] | None = None,
292
292
  indent: int = 0, indent_inc: int = 4) -> list[str]:
293
- items_to_add = self._setdata - self._old_value.to_set()
293
+ items_to_add = self._setdata - self._old_value.to_set() if self._old_value else self._setdata
294
294
  if ignoreitems:
295
295
  items_to_add = items_to_add - ignoreitems
296
- items_to_delete = self._old_value.to_set() - self._setdata
296
+ items_to_delete = self._old_value.to_set() - self._setdata if self._old_value else set()
297
297
  if ignoreitems:
298
298
  items_to_delete = items_to_delete - ignoreitems
299
299
  blank = ''
@@ -166,7 +166,7 @@ class PropertyClass(Model, Notify):
166
166
  _projectShortName: Xsd_NCName
167
167
  _projectIri: Iri
168
168
  _property_class_iri: Xsd_QName | None
169
- _statementProperty: Xsd_boolean
169
+ __statementProperty: Xsd_boolean
170
170
  _externalOntology: Xsd_boolean
171
171
  _internal: Xsd_QName | None
172
172
  _force_external: bool
@@ -197,7 +197,6 @@ class PropertyClass(Model, Notify):
197
197
  property_class_iri: Xsd_QName | str | None = None,
198
198
  notifier: Callable[[PropClassAttr], None] | None = None,
199
199
  notify_data: PropClassAttr | None = None,
200
- _statementProperty: bool | Xsd_boolean= False,
201
200
  _externalOntology: bool | Xsd_boolean = False,
202
201
  _internal: Xsd_QName | None = None, # DO NOT USE!! Only for serialization!
203
202
  _force_external: bool | None = None, # DO NOT USE!! Only for serialization!
@@ -256,7 +255,7 @@ class PropertyClass(Model, Notify):
256
255
  validate=validate)
257
256
  Notify.__init__(self, notifier, notify_data)
258
257
 
259
- self._statementProperty = _statementProperty if isinstance(_statementProperty, Xsd_boolean) else Xsd_boolean(_statementProperty, validate=True)
258
+ #self.__statementProperty = _statementProperty if isinstance(_statementProperty, Xsd_boolean) else Xsd_boolean(_statementProperty, validate=True)
260
259
  self._externalOntology = _externalOntology if isinstance(_externalOntology, Xsd_boolean) else Xsd_boolean(_externalOntology, validate=True)
261
260
  if self._externalOntology:
262
261
  self._force_external = True
@@ -315,11 +314,20 @@ class PropertyClass(Model, Notify):
315
314
  if self._attributes.get(PropClassAttr.DATATYPE) is not None and self._attributes.get(PropClassAttr.CLASS) is not None:
316
315
  raise OldapErrorInconsistency(f'It\'s not possible to use both DATATYPE="{self._attributes[PropClassAttr.DATATYPE]}" and CLASS={self._attributes[PropClassAttr.CLASS]} restrictions.')
317
316
 
318
- # setting property type for OWL which distinguished between Data- and Object-properties
319
317
  if not self._attributes.get(PropClassAttr.TYPE):
320
318
  self._attributes[PropClassAttr.TYPE] = ObservableSet(notifier=self.notifier, notify_data=PropClassAttr.TYPE)
321
- if self._statementProperty:
322
- self._attributes[PropClassAttr.TYPE].add(OwlPropertyType.StatementProperty)
319
+
320
+ #
321
+ # process the statement property stuff
322
+ #
323
+ if OwlPropertyType.StatementProperty in self._attributes[PropClassAttr.TYPE]:
324
+ self.__statementProperty = Xsd_boolean(True)
325
+ else:
326
+ self.__statementProperty = Xsd_boolean(False)
327
+
328
+ #
329
+ # setting property type for OWL which distinguished between Data- and Object-properties
330
+ #
323
331
  if self._attributes.get(PropClassAttr.CLASS) is not None:
324
332
  if OwlPropertyType.OwlDataProperty in self._attributes[PropClassAttr.TYPE]:
325
333
  raise OldapErrorInconsistency(f'Property {self._property_class_iri} cannot be both a link property and a data property.')
@@ -374,7 +382,7 @@ class PropertyClass(Model, Notify):
374
382
  **({'_internal': self._internal} if self._internal else {}),
375
383
  **({'_force_external': self._force_external} if self._force_external else {}),
376
384
  **({'_externalOntology': self._externalOntology} if self._externalOntology else {}),
377
- **({'_statementProperty': self._statementProperty} if self._statementProperty else {}),
385
+ **({'__statementProperty': self.__statementProperty} if self.__statementProperty else {}),
378
386
  '_from_triplestore': self.__from_triplestore,
379
387
  }
380
388
 
@@ -469,6 +477,15 @@ class PropertyClass(Model, Notify):
469
477
  self._changeset[PropClassAttr.DATATYPE] = AttributeChange(None, Action.CREATE)
470
478
  self._attributes[PropClassAttr.DATATYPE] = value
471
479
 
480
+ def _del_value(self, attr: PropClassAttr) -> None:
481
+ if attr == PropClassAttr.TYPE:
482
+ remaining = self._attributes.get(attr) & {OwlPropertyType.OwlObjectProperty, OwlPropertyType.OwlDataProperty}
483
+ to_delete = self._attributes.get(attr) - remaining
484
+ for x in to_delete:
485
+ self._attributes[attr].discard(x)
486
+ return
487
+ super()._del_value(attr)
488
+
472
489
  def _change_setter(self: Self, attr: PropClassAttr, value: PropTypes) -> None:
473
490
  """
474
491
  INTERNAL USE ONLY! Overrides the method _change_setter from the Model class.
@@ -481,6 +498,12 @@ class PropertyClass(Model, Notify):
481
498
  """
482
499
  if not isinstance(attr, PropClassAttr):
483
500
  raise OldapError(f'Unsupported prop {attr}')
501
+ if attr == PropClassAttr.TYPE and value is None:
502
+ remaining = self._attributes.get(attr) & {OwlPropertyType.OwlObjectProperty, OwlPropertyType.OwlDataProperty}
503
+ to_delete = self._attributes.get(attr) - remaining
504
+ for x in to_delete:
505
+ self._attributes[attr].discard(x)
506
+ return
484
507
  if self._attributes.get(attr) == value:
485
508
  return
486
509
  super()._change_setter(attr, value)
@@ -510,7 +533,7 @@ class PropertyClass(Model, Notify):
510
533
  notifier=self._notifier,
511
534
  data=deepcopy(self._notify_data, memo))
512
535
  # Copy internals of Model:
513
- instance._statementProperty = deepcopy(self._statementProperty, memo)
536
+ instance.__statementProperty = deepcopy(self.__statementProperty, memo)
514
537
  instance._externalOntology = deepcopy(self._externalOntology, memo)
515
538
  instance._attributes = deepcopy(self._attributes, memo)
516
539
  instance._changset = deepcopy(self._changeset, memo)
@@ -572,14 +595,14 @@ class PropertyClass(Model, Notify):
572
595
  """
573
596
  return self._internal
574
597
 
575
- @property
576
- def statementProperty(self) -> Xsd_boolean:
577
- """
578
- Return the statementProperty
579
- :return: statementProperty
580
- :rtype: bool
581
- """
582
- return self._statementProperty
598
+ # @property
599
+ # def statementProperty(self) -> Xsd_boolean:
600
+ # """
601
+ # Return the statementProperty
602
+ # :return: statementProperty
603
+ # :rtype: bool
604
+ # """
605
+ # return self.__statementProperty
583
606
 
584
607
  @property
585
608
  def externalOntology(self) -> Xsd_boolean:
@@ -807,7 +830,7 @@ class PropertyClass(Model, Notify):
807
830
  raise OldapError(f'Inconsistency in SHACL "dcterms:modified (type={type(val)})"')
808
831
  elif key == 'oldap:statementProperty':
809
832
  if isinstance(val, Xsd_boolean):
810
- self._statementProperty = val
833
+ self.__statementProperty = val
811
834
  else:
812
835
  raise OldapError(f'Inconsistency in SHACL "oldap:statementProperty (type={type(val)})"')
813
836
  elif key == 'oldap:externalOntology':
@@ -925,12 +948,12 @@ class PropertyClass(Model, Notify):
925
948
  #
926
949
  # Consistency checks
927
950
  #
928
- if self._statementProperty:
951
+ if self.__statementProperty:
929
952
  if OwlPropertyType.StatementProperty not in self._attributes.get(PropClassAttr.TYPE):
930
- raise OldapErrorInconsistency(f'Property "{self._property_class_iri}" is a statementProperty, but not an StatementProperty.')
953
+ raise OldapErrorInconsistency(f'Property "{self._property_class_iri}" has SHACL oldap:statementProperty, but missing rdf:type rdf:Property.')
931
954
  else:
932
955
  if OwlPropertyType.StatementProperty in self._attributes.get(PropClassAttr.TYPE):
933
- raise OldapErrorInconsistency(f'Property "{self._property_class_iri}" is not a statementProperty, but an StatementProperty.')
956
+ raise OldapErrorInconsistency(f'Property "{self._property_class_iri}" has no SHACL oldap:statementProperty, but a rdf:type rdf:Property.')
934
957
  if OwlPropertyType.OwlDataProperty in self._attributes[PropClassAttr.TYPE]:
935
958
  if not datatype:
936
959
  raise OldapError(f'OwlDataProperty "{self._property_class_iri}" has no rdfs:range datatype defined!')
@@ -1052,7 +1075,7 @@ class PropertyClass(Model, Notify):
1052
1075
  sparql += f' ;\n{blank:{(indent + 1) * indent_inc}}dcterms:created {timestamp.toRdf}'
1053
1076
  sparql += f' ;\n{blank:{(indent + 1) * indent_inc}}dcterms:contributor {self._con.userIri.toRdf}'
1054
1077
  sparql += f' ;\n{blank:{(indent + 1) * indent_inc}}dcterms:modified {timestamp.toRdf}'
1055
- sparql += f' ;\n{blank:{(indent + 1) * indent_inc}}oldap:statementProperty {self._statementProperty.toRdf}'
1078
+ sparql += f' ;\n{blank:{(indent + 1) * indent_inc}}oldap:statementProperty {self.__statementProperty.toRdf}'
1056
1079
  sparql += f' ;\n{blank:{(indent + 1) * indent_inc}}oldap:externalOntology {self._externalOntology.toRdf}'
1057
1080
  for prop, value in self._attributes.items():
1058
1081
  if not prop.in_shacl:
@@ -1324,14 +1347,32 @@ class PropertyClass(Model, Notify):
1324
1347
  indent=indent, indent_inc=indent_inc)
1325
1348
  elif prop.datatype == ObservableSet:
1326
1349
  if prop == PropClassAttr.TYPE:
1327
- continue
1328
- # sparql += self._attributes[prop].update_shacl(graph=self._graph,
1329
- # owlclass_iri=owlclass_iri,
1330
- # prop_iri=self._property_class_iri,
1331
- # attr=prop,
1332
- # modified=self._modified,
1333
- # indent=indent, indent_inc=indent_inc)
1334
- # print(gaga)
1350
+ if self._attributes[prop].old_value:
1351
+ added = set(self._attributes[PropClassAttr.TYPE]) - set(self._attributes[prop].old_value)
1352
+ else:
1353
+ added = set(self._attributes[PropClassAttr.TYPE])
1354
+ if OwlPropertyType.StatementProperty in added:
1355
+ self.__statementProperty = Xsd_boolean(True)
1356
+ ele = RdfModifyItem(Xsd_QName('oldap:statementProperty'), Xsd_boolean(False), Xsd_boolean(True))
1357
+ sparql += RdfModifyProp.shacl(action=change.action,
1358
+ graph=self._graph,
1359
+ owlclass_iri=owlclass_iri,
1360
+ pclass_iri=self._property_class_iri,
1361
+ ele=ele,
1362
+ last_modified=self._modified)
1363
+ if self._attributes[prop].old_value:
1364
+ removed = set(self._attributes[prop].old_value) - set(self._attributes[PropClassAttr.TYPE])
1365
+ else:
1366
+ removed = set()
1367
+ if OwlPropertyType.StatementProperty in removed:
1368
+ self.__statementProperty = Xsd_boolean(False)
1369
+ ele = RdfModifyItem(Xsd_QName('oldap:statementProperty'), Xsd_boolean(True), Xsd_boolean(False))
1370
+ sparql += RdfModifyProp.shacl(action=change.action,
1371
+ graph=self._graph,
1372
+ owlclass_iri=owlclass_iri,
1373
+ pclass_iri=self._property_class_iri,
1374
+ ele=ele,
1375
+ last_modified=self._modified)
1335
1376
  else:
1336
1377
  raise OldapError(f'SHACL property {prop.value} should not have update action "MODIFY" ({prop.datatype}).')
1337
1378
  sparql_list.append(sparql)
@@ -1623,6 +1664,7 @@ class PropertyClass(Model, Notify):
1623
1664
  try:
1624
1665
  self._con.transaction_update(sparql)
1625
1666
  except OldapError as e:
1667
+ print(sparql)
1626
1668
  self._con.transaction_abort()
1627
1669
  raise
1628
1670
 
@@ -0,0 +1 @@
1
+ __version__ = "0.3.17"
@@ -100,12 +100,12 @@ class TestPropertyClass(unittest.TestCase):
100
100
  p = PropertyClass(con=self._connection,
101
101
  project=self._project,
102
102
  property_class_iri=Xsd_QName('test:testpropstar'),
103
- _statementProperty=True,
103
+ type={OwlPropertyType.StatementProperty},
104
104
  datatype=XsdDatatypes.string,
105
105
  name=LangString(["Test property@en", "Testprädikat@de"]),
106
106
  description={"A property for testing...@en", "Property für Tests@de"})
107
107
  self.assertEqual(p.property_class_iri, Xsd_QName('test:testpropstar'))
108
- self.assertTrue(p.statementProperty)
108
+ self.assertTrue(OwlPropertyType.StatementProperty in p.type)
109
109
  self.assertEqual(p.get(PropClassAttr.DATATYPE), XsdDatatypes.string)
110
110
  self.assertEqual(p.get(PropClassAttr.NAME), LangString(["Test property@en", "Testprädikat@de"]))
111
111
  self.assertEqual(p.get(PropClassAttr.DESCRIPTION), LangString("A property for testing...@en", "Property für Tests@de"))
@@ -457,7 +457,7 @@ class TestPropertyClass(unittest.TestCase):
457
457
  con=self._connection,
458
458
  project=self._project,
459
459
  property_class_iri=Xsd_QName('test:testWriteStar'),
460
- _statementProperty=True,
460
+ type={OwlPropertyType.StatementProperty},
461
461
  datatype=XsdDatatypes.string,
462
462
  )
463
463
  p.create()
@@ -465,7 +465,7 @@ class TestPropertyClass(unittest.TestCase):
465
465
  project=self._project,
466
466
  property_class_iri=Xsd_QName('test:testWriteStar'),
467
467
  ignore_cache=True)
468
- self.assertTrue(p.statementProperty)
468
+ self.assertTrue(OwlPropertyType.StatementProperty in p.type)
469
469
  self.assertEqual(p.get(PropClassAttr.DATATYPE), XsdDatatypes.string)
470
470
 
471
471
  def test_propertyclass_create_F(self):
@@ -654,7 +654,7 @@ class TestPropertyClass(unittest.TestCase):
654
654
 
655
655
 
656
656
  # @unittest.skip('Work in progress')
657
- def test_propertyclass_update(self):
657
+ def test_propertyclass_update_01(self):
658
658
  p1 = PropertyClass(
659
659
  con=self._connection,
660
660
  project=self._project,
@@ -698,7 +698,7 @@ class TestPropertyClass(unittest.TestCase):
698
698
  self.assertFalse(p2[PropClassAttr.UNIQUE_LANG])
699
699
 
700
700
  # @unittest.skip('Work in progress')
701
- def test_propertyclass_update2(self):
701
+ def test_propertyclass_update_02(self):
702
702
  p1 = PropertyClass(
703
703
  con=self._connection,
704
704
  project=self._project,
@@ -739,7 +739,7 @@ class TestPropertyClass(unittest.TestCase):
739
739
  self.assertEqual(p2.inSet, RdfSet(Xsd_string("gaga"), Xsd_string("is was")))
740
740
  self.assertFalse(p2.uniqueLang)
741
741
 
742
- def test_propertyclass_update3(self):
742
+ def test_propertyclass_update_03(self):
743
743
  p1 = PropertyClass(
744
744
  con=self._connection,
745
745
  project=self._project,
@@ -784,7 +784,7 @@ class TestPropertyClass(unittest.TestCase):
784
784
  self.assertIsNone(p2.languageIn)
785
785
  self.assertIsNone(p2.uniqueLang)
786
786
 
787
- def test_propertyclass_update4(self):
787
+ def test_propertyclass_update_04(self):
788
788
  p1 = PropertyClass(
789
789
  con=self._connection,
790
790
  project=self._project,
@@ -817,7 +817,7 @@ class TestPropertyClass(unittest.TestCase):
817
817
  self.assertEqual(p2.description, LangString("An annotation@en"))
818
818
 
819
819
 
820
- def test_propertyclass_update5(self):
820
+ def test_propertyclass_update_05(self):
821
821
  p1 = PropertyClass(
822
822
  con=self._connection,
823
823
  project=self._project,
@@ -851,7 +851,7 @@ class TestPropertyClass(unittest.TestCase):
851
851
  Xsd_string("nom français@fr"),
852
852
  Xsd_string("name deutsch@de")])
853
853
 
854
- def test_propertyclass_update6(self):
854
+ def test_propertyclass_update_06(self):
855
855
  p1 = PropertyClass(
856
856
  con=self._connection,
857
857
  project=self._project,
@@ -901,7 +901,7 @@ class TestPropertyClass(unittest.TestCase):
901
901
  for r in res:
902
902
  self.assertIn(r['comment'], [Xsd_string("description english@en"), Xsd_string("description français@fr")])
903
903
 
904
- def test_propertyclass_update7(self):
904
+ def test_propertyclass_update_07(self):
905
905
  p7 = PropertyClass(con=self._connection,
906
906
  project=self._project,
907
907
  property_class_iri=Xsd_QName('test:testprop7'),
@@ -920,7 +920,7 @@ class TestPropertyClass(unittest.TestCase):
920
920
  ignore_cache=True)
921
921
  self.assertEqual(p7.get(PropClassAttr.TYPE), {OwlPropertyType.SymmetricProperty, OwlPropertyType.TransitiveProperty, OwlPropertyType.OwlDataProperty})
922
922
 
923
- def test_propertyclass_update8(self):
923
+ def test_propertyclass_update_08(self):
924
924
  p8 = PropertyClass(con=self._connection,
925
925
  project=self._project,
926
926
  property_class_iri=Xsd_QName('test:testprop8'),
@@ -939,7 +939,7 @@ class TestPropertyClass(unittest.TestCase):
939
939
  ignore_cache=True)
940
940
  self.assertEqual(p8.get(PropClassAttr.TYPE), {OwlPropertyType.SymmetricProperty, OwlPropertyType.OwlDataProperty})
941
941
 
942
- def test_propertyclass_update9(self):
942
+ def test_propertyclass_update_09(self):
943
943
  i = PropertyClass(con=self._connection,
944
944
  project=self._project,
945
945
  property_class_iri=Xsd_QName('test:isChild9'),
@@ -957,6 +957,109 @@ class TestPropertyClass(unittest.TestCase):
957
957
  ignore_cache=True)
958
958
  self.assertEqual(i2.get(PropClassAttr.INVERSE_OF), Xsd_QName('test:anotherParent'))
959
959
 
960
+ def test_propertyclass_update_10(self):
961
+ i = PropertyClass(con=self._connection,
962
+ project=self._project,
963
+ property_class_iri=Xsd_QName('test:isChild10'),
964
+ toClass=Iri('test:Human'),
965
+ inverseOf=Xsd_QName('test:isParent10'),
966
+ name=LangString(["Child"]),
967
+ description={"Child of the human"})
968
+ i.create()
969
+ i.type = [OwlPropertyType.FunctionalProperty]
970
+ i.update()
971
+ i2 = PropertyClass.read(con=self._connection,
972
+ project=self._project,
973
+ property_class_iri=Xsd_QName('test:isChild10'),
974
+ ignore_cache=True)
975
+ self.assertTrue({OwlPropertyType.FunctionalProperty} <= set(i2.type))
976
+
977
+ def test_propertyclass_update_11(self):
978
+ i = PropertyClass(con=self._connection,
979
+ project=self._project,
980
+ property_class_iri=Xsd_QName('test:isChild11'),
981
+ type={OwlPropertyType.FunctionalProperty, OwlPropertyType.StatementProperty, OwlPropertyType.TransitiveProperty},
982
+ toClass=Iri('test:Human'),
983
+ name=LangString(["Child"]),
984
+ description={"Child of the human"})
985
+ i.create()
986
+ i.type.discard(OwlPropertyType.FunctionalProperty)
987
+ i.update()
988
+ i2 = PropertyClass.read(con=self._connection,
989
+ project=self._project,
990
+ property_class_iri=Xsd_QName('test:isChild11'),
991
+ ignore_cache=True)
992
+ self.assertTrue({OwlPropertyType.StatementProperty, OwlPropertyType.TransitiveProperty} <= set(i2.type))
993
+ self.assertTrue(OwlPropertyType.FunctionalProperty not in i2.type)
994
+
995
+ def test_propertyclass_update_12(self):
996
+ i = PropertyClass(con=self._connection,
997
+ project=self._project,
998
+ property_class_iri=Xsd_QName('test:isChild12'),
999
+ type={OwlPropertyType.FunctionalProperty, OwlPropertyType.TransitiveProperty},
1000
+ toClass=Iri('test:Human'),
1001
+ name=LangString(["Child"]),
1002
+ description={"Child of the human"})
1003
+ i.create()
1004
+ i.type.add(OwlPropertyType.StatementProperty)
1005
+ i.update()
1006
+ i2 = PropertyClass.read(con=self._connection,
1007
+ project=self._project,
1008
+ property_class_iri=Xsd_QName('test:isChild12'),
1009
+ ignore_cache=True)
1010
+ self.assertTrue({OwlPropertyType.StatementProperty, OwlPropertyType.FunctionalProperty, OwlPropertyType.TransitiveProperty} <= set(i2.type))
1011
+
1012
+ def test_propertyclass_update_13(self):
1013
+ i = PropertyClass(con=self._connection,
1014
+ project=self._project,
1015
+ property_class_iri=Xsd_QName('test:isChild13'),
1016
+ type={OwlPropertyType.StatementProperty},
1017
+ toClass=Iri('test:Human'),
1018
+ name=LangString(["Child"]),
1019
+ description={"Child of the human"})
1020
+ i.create()
1021
+ i.type.discard(OwlPropertyType.StatementProperty)
1022
+ i.update()
1023
+ i2 = PropertyClass.read(con=self._connection,
1024
+ project=self._project,
1025
+ property_class_iri=Xsd_QName('test:isChild13'),
1026
+ ignore_cache=True)
1027
+ self.assertTrue(OwlPropertyType.StatementProperty not in set(i2.type))
1028
+
1029
+ def test_propertyclass_update_14(self):
1030
+ i = PropertyClass(con=self._connection,
1031
+ project=self._project,
1032
+ property_class_iri=Xsd_QName('test:isChild14'),
1033
+ type={OwlPropertyType.StatementProperty},
1034
+ toClass=Iri('test:Human'),
1035
+ name=LangString(["Child"]),
1036
+ description={"Child of the human"})
1037
+ i.create()
1038
+ i.type = None
1039
+ i.update()
1040
+ i2 = PropertyClass.read(con=self._connection,
1041
+ project=self._project,
1042
+ property_class_iri=Xsd_QName('test:isChild14'),
1043
+ ignore_cache=True)
1044
+ self.assertTrue(OwlPropertyType.StatementProperty not in set(i2.type))
1045
+
1046
+ def test_propertyclass_update_15(self):
1047
+ i = PropertyClass(con=self._connection,
1048
+ project=self._project,
1049
+ property_class_iri=Xsd_QName('test:isChild15'),
1050
+ type={OwlPropertyType.StatementProperty},
1051
+ toClass=Iri('test:Human'),
1052
+ name=LangString(["Child"]),
1053
+ description={"Child of the human"})
1054
+ i.create()
1055
+ del i.type
1056
+ i.update()
1057
+ i2 = PropertyClass.read(con=self._connection,
1058
+ project=self._project,
1059
+ property_class_iri=Xsd_QName('test:isChild15'),
1060
+ ignore_cache=True)
1061
+ self.assertTrue(OwlPropertyType.StatementProperty not in set(i2.type))
1062
+
960
1063
  # @unittest.skip('Work in progress')
961
1064
  def test_propertyclass_delete_attrs(self):
962
1065
  p1 = PropertyClass(
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "oldaplib"
3
- version = "0.3.15"
3
+ version = "0.3.17"
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.15"
File without changes