From dfc5cefcee8f3c6e2a17d9efe5c37da2983a2cee Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sat, 16 Mar 2024 14:26:36 +0100 Subject: [PATCH] fixes; work in progress: topics --- scopes/storage/folder.py | 4 ++-- scopes/storage/tracking.py | 15 +++++++++++---- tests/tlib_storage.py | 10 ++++++++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/scopes/storage/folder.py b/scopes/storage/folder.py index 1a05e61..fd3994c 100644 --- a/scopes/storage/folder.py +++ b/scopes/storage/folder.py @@ -45,8 +45,8 @@ class Folder(Track): return self.container.storage.getItem(self.ref) def setTarget(self, target): - self.ref = target.uid - self.container.save(self) + self.set('ref', target.uid) + self.container.update(self) def __str__(self): return '%s: %s; keys: %s' % (self.__class__.__name__, diff --git a/scopes/storage/tracking.py b/scopes/storage/tracking.py index e2ebe59..ebd45ba 100644 --- a/scopes/storage/tracking.py +++ b/scopes/storage/tracking.py @@ -119,10 +119,16 @@ class Container(object): return self.insert(track) if self.insertOnChange and found.data != track.data: return self.insert(track) - if found.data != track.data or found.timeStamp != track.timeStamp: + changed = False + if found.data != track.data: found.update(track.data) + changed = True + if track.timeStamp is not None and found.timeStamp != track.timeStamp: found.timeStamp = track.timeStamp + changed = True + if changed: self.update(found) + track.trackId = found.trackId return found.trackId def insert(self, track, withTrackId=False): @@ -130,14 +136,15 @@ class Container(object): values = self.setupValues(track, withTrackId) stmt = t.insert().values(**values).returning(t.c.trackid) trackId = self.session.execute(stmt).first()[0] + track.trackId = trackId self.storage.mark_changed() return trackId - def update(self, track): + def update(self, track, updateTimeStamp=False): t = self.table + if updateTimeStamp or track.timeStamp is None: + track.timeStamp = datetime.now() values = self.setupValues(track) - if track.timeStamp is None: - values['timestamp'] = datetime.now() stmt = t.update().values(**values).where(t.c.trackid == track.trackId) n = self.session.execute(stmt).rowcount if n > 0: diff --git a/tests/tlib_storage.py b/tests/tlib_storage.py index 0cab6e0..b6526e6 100644 --- a/tests/tlib_storage.py +++ b/tests/tlib_storage.py @@ -96,11 +96,17 @@ def test_topic(self, config): storage = config.storageFactory(config.dbschema) storage.dropTable('topics') topics = storage.getContainer(topic.Topic) + types = storage.getContainer(concept.Type) concept.storePredicate(storage, concept.defaultPredicate) root = folder.Root(storage) - root['top']['topics'] = folder.Folder() + root['top']['topics'] = ftopics = folder.Folder() + ttopic = types.queryLast(name='topic') + self.assertEqual(ttopic.name, 'topic') + ftopics.setTarget(ttopic) + self.assertEqual(ftopics.ref, 'type-6') - tp_itc = topic.Topic('itc') + tp_itc = topic.Topic('itc', data=dict( + title='ITC', description='Information and Communication Technology')) topics.save(tp_itc) storage.commit()