use base64 encoding for UIDs

This commit is contained in:
Helmut Merz 2024-02-17 16:22:29 +01:00
parent 02a56bf94d
commit 32a13ebb64
3 changed files with 13 additions and 5 deletions

View file

@ -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)

View file

@ -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

View file

@ -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)