fixes; work in progress: topics

This commit is contained in:
Helmut Merz 2024-03-16 14:26:36 +01:00
parent f6308ff9bf
commit dfc5cefcee
3 changed files with 21 additions and 8 deletions

View file

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

View file

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

View file

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