oldaplib 0.3.28__py3-none-any.whl → 0.3.30__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,7 @@
1
1
  import re
2
+ import jwt
3
+
4
+ from datetime import datetime, timedelta
2
5
  from enum import Flag, auto
3
6
  from functools import partial
4
7
  from typing import Type, Any, Self, cast
@@ -1046,6 +1049,7 @@ class ResourceInstance:
1046
1049
  limit: int = 100,
1047
1050
  offset: int = 0,
1048
1051
  indent: int = 0, indent_inc: int = 4) -> dict[Iri, dict[str, Xsd]]:
1052
+ # TODO: PROBLEM: does not work for properties which use MAX_COUNT > 1 !!!!!!!
1049
1053
  """
1050
1054
  Retrieves all resources matching the specified parameters from a data store using a SPARQL query.
1051
1055
  Depending on the `count_only` flag, it can return either a count of matching resources or detailed
@@ -1161,7 +1165,22 @@ class ResourceInstance:
1161
1165
  return result
1162
1166
 
1163
1167
  @staticmethod
1164
- def get_media_object_by_id(con: IConnection, mediaObjectId: Xsd_string | str) -> dict[str, Xsd] | None:
1168
+ def get_media_object_by_id(con: IConnection, mediaObjectId: Xsd_string | str) -> dict[str, Xsd]:
1169
+ """
1170
+ Retrieves a media object by its ID from the system. This method queries a SPARQL endpoint
1171
+ to fetch details about the media object and constructs a resulting dictionary with the
1172
+ media object attributes and its associated metadata. Additionally, a signed JWT token
1173
+ is included in the result for security purposes.
1174
+
1175
+ :param con: A connection interface that provides access to the SPARQL endpoint and user context.
1176
+ :type con: IConnection
1177
+ :param mediaObjectId: The ID of the media object to be fetched, represented as an XSD string or a Python string.
1178
+ :type mediaObjectId: Xsd_string | str
1179
+ :return: A dictionary containing key-value pairs of media object attributes and metadata,
1180
+ with an additional JWT token for security. Returns None if the media object is not found.
1181
+ :rtype: dict[str, Xsd] | None
1182
+ :raises OldapErrorNotFound: Raised when the media object with the specified ID is not found.
1183
+ """
1165
1184
  if not isinstance(mediaObjectId, Xsd_string):
1166
1185
  mediaObjectId = Xsd_string(mediaObjectId, validate=True)
1167
1186
  blank = ''
@@ -1169,19 +1188,14 @@ class ResourceInstance:
1169
1188
  sparql = context.sparql_context
1170
1189
 
1171
1190
  sparql += f"""
1172
- SELECT ?subject ?graph ?path ?permval ?originalName ?serverUrl ?protocol ?originalMimeType
1191
+ SELECT ?subject ?graph ?path ?prop ?val ?permval
1173
1192
  WHERE {{
1174
1193
  VALUES ?inputImageId {{ {mediaObjectId.toRdf} }}
1175
-
1176
1194
  ?subject rdf:type shared:MediaObject .
1177
1195
  GRAPH ?graph {{
1178
- ?subject shared:imageId ?inputImageId .
1179
- ?subject shared:originalName ?originalName .
1180
- ?subject shared:originalMimeType ?originalMimeType .
1181
- ?subject shared:serverUrl ?serverUrl .
1182
- ?subject shared:path ?path .
1183
- ?subject shared:protocol ?protocol .
1184
1196
  ?subject oldap:grantsPermission ?permset .
1197
+ ?subject shared:imageId ?inputImageId .
1198
+ ?subject ?prop ?val .
1185
1199
  }}
1186
1200
  GRAPH oldap:admin {{
1187
1201
  {con.userIri.toRdf} oldap:hasPermissions ?permset .
@@ -1196,16 +1210,109 @@ class ResourceInstance:
1196
1210
  print(sparql)
1197
1211
  raise
1198
1212
  res = QueryProcessor(context, jsonres)
1199
- if len(res) == 0 or len(res) > 1:
1213
+ if len(res) == 0:
1200
1214
  raise OldapErrorNotFound(f'Media object with id {mediaObjectId} not found.')
1201
- return {'iri': res[0]['subject'],
1202
- 'shared:originalName': res[0]['originalName'],
1203
- 'shared:originalMimeType': res[0]['originalMimeType'],
1204
- 'shared:serverUrl': res[0]['serverUrl'],
1205
- 'shared:protocol': res[0]['protocol'],
1206
- 'graph': res[0]['graph'],
1207
- 'shared:path': res[0]['path'],
1208
- 'oldap:permissionValue': res[0]['permval']}
1215
+ result: dict[str, Xsd] = {
1216
+ 'iri': res[0].get('subject'),
1217
+ 'graph': res[0].get('graph'),
1218
+ 'permval': res[0].get('permval')
1219
+ }
1220
+ for r in res:
1221
+ if str(r['prop']) == 'rdf:type':
1222
+ continue
1223
+ if str(r['prop']) in {'oldap:createdBy', 'oldap:creationDate', 'oldap:lastModifiedBy', 'oldap:lastModificationDate',
1224
+ 'shared:imageId', 'shared:originalName', 'shared:originalMimeType', 'shared:serverUrl', 'shared:path', 'shared:protocol'}:
1225
+ result[str(r['prop'])] = r['val']
1226
+ else:
1227
+ if result.get(str(r['prop'])) is None:
1228
+ result[str(r['prop'])] = []
1229
+ result[str(r['prop'])].append(r['val'])
1230
+
1231
+ expiration = datetime.now().astimezone() + timedelta(minutes=2)
1232
+ payload = {
1233
+ 'userIri': str(con.userIri),
1234
+ 'userid': str(con.userid),
1235
+ 'id': str(mediaObjectId),
1236
+ 'path': str(result.get('shared:path')),
1237
+ 'permval': str(result.get('permval')),
1238
+ "exp": expiration.timestamp(),
1239
+ "iat": int(datetime.now().astimezone().timestamp()),
1240
+ "iss": "http://oldap.org"
1241
+ }
1242
+ token = jwt.encode(
1243
+ payload=payload,
1244
+ key=con.jwtkey,
1245
+ algorithm="HS256")
1246
+ result['token'] = token
1247
+
1248
+ return result
1249
+
1250
+ @staticmethod
1251
+ def get_media_object_by_iri(con: IConnection, mediaObjectIri: Iri | str) -> dict[str, Xsd] | None:
1252
+ if not isinstance(mediaObjectIri, Iri):
1253
+ mediaObjectIri = Iri(mediaObjectIri, validate=True)
1254
+ blank = ''
1255
+ context = Context(name=con.context_name)
1256
+ sparql = context.sparql_context
1257
+
1258
+ sparql += f"""
1259
+ SELECT ?graph ?prop ?val ?permval
1260
+ WHERE {{
1261
+ {mediaObjectIri.toRdf} rdf:type shared:MediaObject .
1262
+ GRAPH ?graph {{
1263
+ {mediaObjectIri.toRdf} oldap:grantsPermission ?permset .
1264
+ {mediaObjectIri.toRdf} shared:imageId ?inputImageId .
1265
+ {mediaObjectIri.toRdf} ?prop ?val .
1266
+ }}
1267
+ GRAPH oldap:admin {{
1268
+ {con.userIri.toRdf} oldap:hasPermissions ?permset .
1269
+ ?permset oldap:givesPermission ?DataPermission .
1270
+ ?DataPermission oldap:permissionValue ?permval .
1271
+ }}
1272
+ }}
1273
+ """
1274
+ try:
1275
+ jsonres = con.query(sparql)
1276
+ except OldapError:
1277
+ print(sparql)
1278
+ raise
1279
+ res = QueryProcessor(context, jsonres)
1280
+ if len(res) == 0:
1281
+ raise OldapErrorNotFound(f'Media object with iri {mediaObjectIri} not found.')
1282
+ result: dict[str, Xsd] = {
1283
+ 'iri': mediaObjectIri,
1284
+ 'graph': res[0].get('graph'),
1285
+ 'permval': res[0].get('permval')
1286
+ }
1287
+ for r in res:
1288
+ if str(r['prop']) == 'rdf:type':
1289
+ continue
1290
+ if str(r['prop']) in {'oldap:createdBy', 'oldap:creationDate', 'oldap:lastModifiedBy', 'oldap:lastModificationDate',
1291
+ 'shared:imageId', 'shared:originalName', 'shared:originalMimeType', 'shared:serverUrl', 'shared:path', 'shared:protocol'}:
1292
+ result[str(r['prop'])] = r['val']
1293
+ else:
1294
+ if result.get(str(r['prop'])) is None:
1295
+ result[str(r['prop'])] = []
1296
+ result[str(r['prop'])].append(r['val'])
1297
+
1298
+ expiration = datetime.now().astimezone() + timedelta(minutes=2)
1299
+ payload = {
1300
+ 'userIri': str(con.userIri),
1301
+ 'userid': str(con.userid),
1302
+ 'id': str(result.get('shared:imageId')),
1303
+ 'path': str(result['shared:path']),
1304
+ 'permval': str(result['permval']),
1305
+ "exp": expiration.timestamp(),
1306
+ "iat": int(datetime.now().astimezone().timestamp()),
1307
+ "iss": "http://oldap.org"
1308
+ }
1309
+ token = jwt.encode(
1310
+ payload=payload,
1311
+ key=con.jwtkey,
1312
+ algorithm="HS256")
1313
+ result['token'] = token
1314
+
1315
+ return result
1209
1316
 
1210
1317
 
1211
1318
  def toJsonObject(self) -> dict[str, list[str] | str]:
@@ -150,7 +150,7 @@ def dump_list_to(con: IConnection,
150
150
  make_dict(node, listdict[str(listnode.oldapListNodeId)]['nodes'])
151
151
 
152
152
  #
153
- # We need to get the OldapList IRI for aksing the cache...
153
+ # We need to get the OldapList IRI for asking the cache...
154
154
  #
155
155
  if not isinstance(project, Project):
156
156
  project = Project.read(con, project)
@@ -1601,10 +1601,21 @@ class ResourceClass(Model, Notify):
1601
1601
  sparql = f'INSERT DATA {{#E\n'
1602
1602
  sparql += f' GRAPH {self._graph}:onto {{\n'
1603
1603
  sparql += f'{blank:{indent * indent_inc}}{self._owlclass_iri} rdfs:subClassOf [\n'
1604
+ sparql += f'{blank:{(indent + 1) * indent_inc}}rdf:type owl:Restriction ;\n'
1604
1605
  if isinstance(prop, Xsd_QName):
1605
- sparql += prop.create_owl_part2(haspropdata=hasprop.haspropdata)
1606
+ # sparql += prop.create_owl_part2(haspropdata=hasprop.haspropdata)
1607
+ sparql += f'{blank:{(indent + 1) * indent_inc}}owl:onProperty {prop.toRdf}'
1608
+ if hasprop.haspropdata.minCount and hasprop.haspropdata.maxCount and hasprop.haspropdata.minCount == hasprop.haspropdata.maxCount:
1609
+ tmp = Xsd_nonNegativeInteger(hasprop.haspropdata.minCount)
1610
+ sparql += f' ;\n{blank:{(indent + 1) * indent_inc}}owl:qualifiedCardinality {tmp.toRdf}'
1611
+ else:
1612
+ if hasprop.haspropdata.minCount:
1613
+ tmp = Xsd_nonNegativeInteger(hasprop.haspropdata.minCount)
1614
+ sparql += f' ;\n{blank:{(indent + 1) * indent_inc}}owl:minQualifiedCardinality {tmp.toRdf}'
1615
+ if hasprop.haspropdata.maxCount:
1616
+ tmp = Xsd_nonNegativeInteger(hasprop.haspropdata.maxCount)
1617
+ sparql += f' ;\n{blank:{(indent + 1) * indent_inc}}owl:maxQualifiedCardinality {tmp.toRdf}'
1606
1618
  elif isinstance(prop, PropertyClass):
1607
- sparql += f'{blank:{(indent + 1) * indent_inc}}rdf:type owl:Restriction ;\n'
1608
1619
  sparql += f'{blank:{(indent + 1) * indent_inc}}owl:onProperty {prop.property_class_iri.toRdf}'
1609
1620
  sparql += hasprop.create_owl(indent=1)
1610
1621
  else:
oldaplib/src/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.3.28"
1
+ __version__ = "0.3.30"
@@ -5,6 +5,7 @@ import unittest
5
5
  from pathlib import Path
6
6
  from pprint import pprint
7
7
  from time import sleep
8
+ import jwt
8
9
 
9
10
  from oldaplib.src.cachesingleton import CacheSingletonRedis
10
11
  from oldaplib.src.datamodel import DataModel
@@ -702,16 +703,71 @@ class TestObjectFactory(unittest.TestCase):
702
703
  self.assertEqual(len(res), 8)
703
704
 
704
705
  #@unittest.skip('Work in progress')
705
- def test_read_media_object(self):
706
- res = ResourceInstance.get_media_object_by_id(con=self._connection,mediaObjectId='x_34db.tif')
706
+ def test_read_media_object_by_id_A(self):
707
+ res = ResourceInstance.get_media_object_by_id(con=self._connection, mediaObjectId='x_34db.tif')
707
708
  self.assertEqual(res['iri'], Iri("urn:uuid:1b8e3f42-6d7a-4c9b-a3f8-93c2e5d7b901"))
709
+ self.assertEqual(res['permval'], Xsd_integer(2))
710
+ self.assertEqual(res['shared:imageId'], Xsd_string('x_34db.tif'))
708
711
  self.assertEqual(res['shared:originalName'], Xsd_string("testfile.tif"))
709
712
  self.assertEqual(res['shared:originalMimeType'], Xsd_string("image/tiff"))
710
713
  self.assertEqual(res['shared:serverUrl'], Xsd_string("https://iiif.oldap.org"))
711
714
  self.assertEqual(res['shared:protocol'], Xsd_string("iiif"))
712
715
  self.assertEqual(res['graph'], Xsd_QName("test:data"))
713
716
  self.assertEqual(res['shared:path'], Xsd_string("test/subtest"))
714
- self.assertEqual(res['oldap:permissionValue'], Xsd_integer(2))
717
+ tinfo = jwt.decode(jwt=res['token'], key=self._connection.jwtkey, algorithms="HS256")
718
+ self.assertEqual(tinfo['id'], 'x_34db.tif')
719
+ self.assertEqual(tinfo['path'], 'test/subtest')
720
+ self.assertEqual(tinfo['permval'], '2')
721
+
722
+ def test_read_media_object_by_id_B(self):
723
+ res = ResourceInstance.get_media_object_by_id(con=self._connection, mediaObjectId='x_42db.jpg')
724
+ self.assertEqual(res['iri'], Iri("urn:uuid:1b8e3f42-6d7a-4c9b-a3f8-93c2e5d7b999"))
725
+ self.assertEqual(res['permval'], Xsd_integer(2))
726
+ self.assertEqual(res['shared:imageId'], Xsd_string('x_42db.jpg'))
727
+ self.assertEqual(res['shared:originalName'], Xsd_string("testfile.jpg"))
728
+ self.assertEqual(res['shared:originalMimeType'], Xsd_string("image/jpeg"))
729
+ self.assertEqual(res['shared:serverUrl'], Xsd_string("https://iiif.oldap.org"))
730
+ self.assertEqual(res['shared:protocol'], Xsd_string("iiif"))
731
+ self.assertEqual(res['graph'], Xsd_QName("test:data"))
732
+ self.assertEqual(res['test:caption'], [Xsd_string("This is a non-real, non-existing image")])
733
+ self.assertEqual(res['shared:path'], Xsd_string("test/subtest"))
734
+ tinfo = jwt.decode(jwt=res['token'], key=self._connection.jwtkey, algorithms="HS256")
735
+ self.assertEqual(tinfo['id'], 'x_42db.jpg')
736
+ self.assertEqual(tinfo['path'], 'test/subtest')
737
+ self.assertEqual(tinfo['permval'], '2')
738
+
739
+ def test_read_media_object_by_iri_A(self):
740
+ res = ResourceInstance.get_media_object_by_iri(con=self._connection, mediaObjectIri='urn:uuid:1b8e3f42-6d7a-4c9b-a3f8-93c2e5d7b901')
741
+ self.assertEqual(res['iri'], Iri("urn:uuid:1b8e3f42-6d7a-4c9b-a3f8-93c2e5d7b901"))
742
+ self.assertEqual(res['permval'], Xsd_integer(2))
743
+ self.assertEqual(res['shared:imageId'], Xsd_string('x_34db.tif'))
744
+ self.assertEqual(res['shared:originalName'], Xsd_string("testfile.tif"))
745
+ self.assertEqual(res['shared:originalMimeType'], Xsd_string("image/tiff"))
746
+ self.assertEqual(res['shared:serverUrl'], Xsd_string("https://iiif.oldap.org"))
747
+ self.assertEqual(res['shared:protocol'], Xsd_string("iiif"))
748
+ self.assertEqual(res['graph'], Xsd_QName("test:data"))
749
+ self.assertEqual(res['shared:path'], Xsd_string("test/subtest"))
750
+ tinfo = jwt.decode(jwt=res['token'], key=self._connection.jwtkey, algorithms="HS256")
751
+ self.assertEqual(tinfo['id'], 'x_34db.tif')
752
+ self.assertEqual(tinfo['path'], 'test/subtest')
753
+ self.assertEqual(tinfo['permval'], '2')
754
+
755
+ def test_read_media_object_by_iri_B(self):
756
+ res = ResourceInstance.get_media_object_by_iri(con=self._connection, mediaObjectIri='urn:uuid:1b8e3f42-6d7a-4c9b-a3f8-93c2e5d7b999')
757
+ self.assertEqual(res['iri'], Iri("urn:uuid:1b8e3f42-6d7a-4c9b-a3f8-93c2e5d7b999"))
758
+ self.assertEqual(res['permval'], Xsd_integer(2))
759
+ self.assertEqual(res['shared:imageId'], Xsd_string('x_42db.jpg'))
760
+ self.assertEqual(res['shared:originalName'], Xsd_string("testfile.jpg"))
761
+ self.assertEqual(res['shared:originalMimeType'], Xsd_string("image/jpeg"))
762
+ self.assertEqual(res['shared:serverUrl'], Xsd_string("https://iiif.oldap.org"))
763
+ self.assertEqual(res['shared:protocol'], Xsd_string("iiif"))
764
+ self.assertEqual(res['graph'], Xsd_QName("test:data"))
765
+ self.assertEqual(res['test:caption'], [Xsd_string("This is a non-real, non-existing image")])
766
+ self.assertEqual(res['shared:path'], Xsd_string("test/subtest"))
767
+ tinfo = jwt.decode(jwt=res['token'], key=self._connection.jwtkey, algorithms="HS256")
768
+ self.assertEqual(tinfo['id'], 'x_42db.jpg')
769
+ self.assertEqual(tinfo['path'], 'test/subtest')
770
+ self.assertEqual(tinfo['permval'], '2')
715
771
 
716
772
  def test_create_media_object(self):
717
773
  dm = DataModel.read(con=self._connection, project='test')
@@ -132,6 +132,20 @@ test:data {
132
132
  shared:protocol 'iiif';
133
133
  shared:path 'test/subtest' .
134
134
 
135
+ <urn:uuid:1b8e3f42-6d7a-4c9b-a3f8-93c2e5d7b999> a shared:MediaObject;
136
+ :createdBy <https://orcid.org/0000-0003-1681-4036>;
137
+ :creationDate "2025-11-13T16:43:28.861171+01:00"^^xsd:dateTimeStamp;
138
+ :lastModifiedBy <https://orcid.org/0000-0003-1681-4036>;
139
+ :lastModificationDate "2025-11-13T16:43:28.861171+01:00"^^xsd:dateTimeStamp;
140
+ :grantsPermission :GenericView;
141
+ shared:originalName 'testfile.jpg';
142
+ shared:originalMimeType 'image/jpeg';
143
+ shared:serverUrl 'https://iiif.oldap.org';
144
+ shared:imageId 'x_42db.jpg';
145
+ shared:protocol 'iiif';
146
+ shared:path 'test/subtest' ;
147
+ test:caption 'This is a non-real, non-existing image' .
148
+
135
149
 
136
150
 
137
151
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: oldaplib
3
- Version: 0.3.28
3
+ Version: 0.3.30
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
@@ -58,18 +58,18 @@ oldaplib/src/helpers/tools.py,sha256=sNbiOLucTGNFzZmiWwPLFOb80VTXQH0Zd9uCGubhzAk
58
58
  oldaplib/src/iconnection.py,sha256=XlOc2Kh4tK_UOHydLQwlWjUFLUze-Aq_vEZpf9KS1-s,3677
59
59
  oldaplib/src/in_project.py,sha256=2KuhHPj8DNveFRBeImrRfxlCOYhBK-mcxXYUp6s--j8,10672
60
60
  oldaplib/src/model.py,sha256=VACR3T6zJYFaE5J1PFFdP0OSwhbu4sahoLMWg6_L_rE,19267
61
- oldaplib/src/objectfactory.py,sha256=0kKYh48JJbFRrhAvrMy65E_7seKFg1bGPBlgD6xo0Z4,67554
61
+ oldaplib/src/objectfactory.py,sha256=O9f4U74aMYb-ilRRp4-0Bf02Nr242zkpSGjQieXCx-w,72081
62
62
  oldaplib/src/oldaplist.py,sha256=s5afrHtUnvDfMUFoZTt-jMxlBlmK2c0tLeTMp0KiIfg,43077
63
- oldaplib/src/oldaplist_helpers.py,sha256=1Gur0nS1PCKb9iUtCKPUFDOYjw6vvAwYpe-G3DdxlEc,14213
63
+ oldaplib/src/oldaplist_helpers.py,sha256=D_X7KdFjPNlX-OwR04D6onxhFucrGo8052WuJPRjLkA,14213
64
64
  oldaplib/src/oldaplistnode.py,sha256=NnC2juEGTtEkDO6OlB9PjSw_zTF-wSsRUgEk-6VV9DA,87344
65
65
  oldaplib/src/oldaplogging.py,sha256=IDSOylms9OSTInYPC4Y2QrTTEzRL0T5I2QssCevOhTU,1242
66
66
  oldaplib/src/permissionset.py,sha256=JU9cwgAEf3ppHvSzPZEgKxhYcYVxZoN1mqP96lexOSA,32912
67
67
  oldaplib/src/project.py,sha256=ic0cIYYcPk--7XsfbymuGkFbiUFmFJqNgjTWY2Rws7Q,35266
68
68
  oldaplib/src/propertyclass.py,sha256=OuzCSCRp8Qfz-PolmoH7FARfTEvWJd42ghLgvPsgT78,97213
69
- oldaplib/src/resourceclass.py,sha256=_WEyZRlt_sA_q8vzoOP8PdkBtjje8khiVHyvr_-1_ro,102817
69
+ oldaplib/src/resourceclass.py,sha256=E_CT3MKgFyLUtvtrUtRU7sV5s0TPwxEb6l74PsnbgrI,103724
70
70
  oldaplib/src/user.py,sha256=fJVTbKjFi2WvnEzyDt77_Yh9s1X1Er3JkWHBQd-hF20,51805
71
71
  oldaplib/src/userdataclass.py,sha256=FbZkcRt0pKbOeqsZ7HbpwoKE-XPWH2AqpHG1GcsrBPo,12364
72
- oldaplib/src/version.py,sha256=giDvISHbc4E1R9Lm3V5loYL-rswle56sCcNX9JTtpF4,22
72
+ oldaplib/src/version.py,sha256=oBh5g9gWulwxsDtRAyFCLUGwW6sQ-rbAyv9UolefvTY,22
73
73
  oldaplib/src/xsd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  oldaplib/src/xsd/floatingpoint.py,sha256=rDReKqh0mXyc4F5wslgTUxbeGf3-PGERyughj5_62YI,8852
75
75
  oldaplib/src/xsd/iri.py,sha256=w1Dr0z-REi7yPe3GPGnyzGrLVMvLY03kEeK-AmZ9sxw,8383
@@ -126,7 +126,7 @@ oldaplib/test/test_hasproperty.py,sha256=jVagmFXjfEfdbfzkD_KZjjNIVoSr06feWlO9I4N
126
126
  oldaplib/test/test_in_project.py,sha256=DYT-guwRQ9crnfEt7cQZxoEMxThin7QeymNce3jaZx4,7779
127
127
  oldaplib/test/test_langstring.py,sha256=37BeKiQzj63G-SyS_paK_SEG7ulRbGrE89Mz40UB_bE,15146
128
128
  oldaplib/test/test_language_in.py,sha256=ELqHO-YIsZSCPF3E3rWde4J7rERL7En7sV_pzQ00zgs,8826
129
- oldaplib/test/test_objectfactory.py,sha256=VeQJBWH-DVqg1K5XTwlVMOqkXy-OYSUXF0LsVAG4vh8,39281
129
+ oldaplib/test/test_objectfactory.py,sha256=Rsafy0M8Idn4pWpOr2DZkUWffUA7DiwUFP-fXfhAw5Y,43131
130
130
  oldaplib/test/test_observable_dict.py,sha256=GxD0sM0nsVfVRBu92SFGkJ6--YXq4ibBWI4IpjZZzDU,1396
131
131
  oldaplib/test/test_observable_set.py,sha256=JWZSoAsr8XIEBXPVgSVJjQQEEc8uSAme5IrFYLYVVXw,6313
132
132
  oldaplib/test/test_oldaplist.py,sha256=jMM3HiSFs7YcS2ltEvot6637EhK-fMV0W5DSUlFdTRI,20098
@@ -145,7 +145,7 @@ oldaplib/testdata/connection_test.trig,sha256=LFTGLEae7SaTU67rwvgvg_epi09O7oPZwf
145
145
  oldaplib/testdata/datamodel_test.trig,sha256=0n02awPthzi-Lx-_ABlrD9yZ3I1sWxp7eIbFwSxwKNA,802
146
146
  oldaplib/testdata/event_type.yaml,sha256=wpXiheSEKh4xOoUZvAxWytJQ-sNK6oUYdVpOmyW9wPc,3083
147
147
  oldaplib/testdata/hlist_schema.yaml,sha256=fgHiB-ZxOkE6OvkZKk9SL2kNn8Akj6dS6ySDFSpknTA,186
148
- oldaplib/testdata/instances_test.trig,sha256=aPzzKOVdsFAJGgDMSBHylsvlkq5fIEb6WYFjjKTZmFU,7581
148
+ oldaplib/testdata/instances_test.trig,sha256=_7KEjBLXUAvmoqxCi-YckEX31_f2rasNsH70gU6EjIE,8244
149
149
  oldaplib/testdata/institution_or_building_type.yaml,sha256=SA2rsQwoAdyn6eSIJU1ilmdIQf-f1XNApwBow-JlJTo,2439
150
150
  oldaplib/testdata/language.yaml,sha256=YaQA77d7QyOydqNylR5RSb-0A6h9pLM4mgadJSrYC3A,451
151
151
  oldaplib/testdata/location_type.yaml,sha256=amlhYNDc9qLv_if6urtAtBTnEXrVrb6_aulE180GYkc,1323
@@ -158,6 +158,6 @@ oldaplib/testdata/source_type.yaml,sha256=dSihKikw3O-IlGf6anj5KWMoBYLaweLVF1Zojm
158
158
  oldaplib/testdata/test_move_left_of_toL.yaml,sha256=2m1OSQrQFlsCQxeJrjzBAO74LMprNDo_HuyrYGsOeXI,787
159
159
  oldaplib/testdata/testlist.yaml,sha256=AT11nXEG81Sfyb-tr1gQV0H_dZBrOCcFuHf7YtL8P2g,1994
160
160
  oldaplib/testit.http,sha256=qW7mnr6aNLXFG6lQdLgyhXILOPN6qc5iFVZclLyVvkY,303
161
- oldaplib-0.3.28.dist-info/METADATA,sha256=F5M8jRtM6Rdj0zA8sDJ57lnkjkjMA4yUa8XlZ31XE5U,3010
162
- oldaplib-0.3.28.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
163
- oldaplib-0.3.28.dist-info/RECORD,,
161
+ oldaplib-0.3.30.dist-info/METADATA,sha256=vOTAT5ZHrbqKmyOnlj995JTMD0YM4Seco8czXKub8uw,3010
162
+ oldaplib-0.3.30.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
163
+ oldaplib-0.3.30.dist-info/RECORD,,