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 785e0a1..3e0954b 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 = kw.get('data') or {} self.timeStamp = kw.get('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/scopes/tests.py b/scopes/tests.py index 89ee6f4..511b222 100644 --- a/scopes/tests.py +++ b/scopes/tests.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)