From 32a13ebb647e08cfb47db6985ea180502df35e8b Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sat, 17 Feb 2024 16:22:29 +0100 Subject: [PATCH] use base64 encoding for UIDs --- scopes/storage/common.py | 2 ++ scopes/storage/tracking.py | 7 +++++-- tests/test_storage.py | 9 ++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/scopes/storage/common.py b/scopes/storage/common.py index 969cb7c..6e32844 100644 --- a/scopes/storage/common.py +++ b/scopes/storage/common.py @@ -2,6 +2,7 @@ """Common utility stuff for the scopes.storage package.""" +import base64 from sqlalchemy import create_engine, MetaData, text from sqlalchemy.orm import scoped_session, sessionmaker import threading @@ -41,6 +42,7 @@ class Storage(object): self.containers[container.itemFactory.prefix] = container def getItem(self, uid): + uid = base64.urlsafe_b64decode(uid[1:]).decode() prefix, id = uid.split('-') id = int(id) container = self.containers.get(prefix) diff --git a/scopes/storage/tracking.py b/scopes/storage/tracking.py index dc74605..184c21a 100644 --- a/scopes/storage/tracking.py +++ b/scopes/storage/tracking.py @@ -6,6 +6,7 @@ A track consists of a head (index data, metadata) with a fixed set of fields an data (payload) represented as a dict. """ +import base64 from datetime import datetime from sqlalchemy import Table, Column, Index from sqlalchemy import BigInteger, DateTime, Text, func @@ -28,7 +29,7 @@ class Track(object): self.head[self.headFields[ix]] = k for k in self.headFields: if self.head.get(k) is None: - self.heaad[k] = '' + self.head[k] = '' setattr(self, k, self.head[k]) self.data = data or {} self.timeStamp = timeStamp @@ -47,7 +48,9 @@ class Track(object): def uid(self): if self.trackId is None: return None - return '%s-%d' % (self.prefix, self.trackId) + raw = ('%s-%d' % (self.prefix, self.trackId)).encode() + return 'b' + base64.urlsafe_b64encode(raw).decode() + #return '%s-%d' % (self.prefix, self.trackId) @registerContainerClass diff --git a/tests/test_storage.py b/tests/test_storage.py index 97390e5..452345d 100644 --- a/tests/test_storage.py +++ b/tests/test_storage.py @@ -54,13 +54,16 @@ class Test(unittest.TestCase): data=dict(activity='concept')) trid02 = tracks.upsert(tr02) self.assertEqual(trid02, 31) - self.assertEqual(tr02.uid, 'rec-31') + self.assertEqual(tr02.uid, 'bcmVjLTMx') + #self.assertEqual(tr02.uid, 'rec-31') tr02.trackId = trid01 trid021 = tracks.upsert(tr02) self.assertEqual(trid021, trid01) - self.assertEqual(tr02.uid, 'rec-' + str(trid01)) + self.assertEqual(tr02.uid, 'bcmVjLTE=') + #self.assertEqual(tr02.uid, 'rec-' + str(trid01)) - tr03 = storage.getItem('rec-31') + #tr03 = storage.getItem(b'bcmVjLTE=') + tr03 = storage.getItem('bcmVjLTMx') self.assertEqual(tr03.trackId, 31) n = tracks.remove(31)