From fd922cc83c5b33cfb7250cc489f4a34dc334003b Mon Sep 17 00:00:00 2001 From: j Date: Sun, 24 Jan 2016 12:05:58 +0530 Subject: [PATCH] faster changelog rebuild --- oml/changelog.py | 9 +++++++-- oml/user/models.py | 17 +++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/oml/changelog.py b/oml/changelog.py index 03900a5..d12c8b3 100644 --- a/oml/changelog.py +++ b/oml/changelog.py @@ -45,7 +45,11 @@ class Changelog(db.Model): sig = sa.Column(sa.String(96)) @classmethod - def record(cls, user, action, *args): + def record(cls, user, action, *args, **kwargs): + commit = True + if '_commit' in kwargs: + commit = kwargs['_commit'] + del kwargs['_commit'] c = cls() c.created = datetime.utcnow() c.timestamp = datetime2ts(c.created) @@ -55,7 +59,8 @@ class Changelog(db.Model): _data = str(c.revision) + str(c.timestamp) + c.data _data = _data.encode() state.db.session.add(c) - state.db.session.commit() + if commit: + state.db.session.commit() logger.debug('record change: %s', c.json()) @classmethod diff --git a/oml/user/models.py b/oml/user/models.py index 8d9fe0e..d9e715b 100644 --- a/oml/user/models.py +++ b/oml/user/models.py @@ -186,28 +186,29 @@ class User(db.Model): def rebuild_changelog(self): Changelog.query.filter_by(user_id=self.id).delete() for item in self.library.get_items().order_by('created'): - Changelog.record(self, 'additem', item.id, item.info) - Changelog.record(self, 'edititem', item.id, item.meta) + Changelog.record(self, 'additem', item.id, item.info, _commit=False) + Changelog.record(self, 'edititem', item.id, item.meta, _commit=False) lists = [] for l in List.query.filter_by(user_id=self.id, type='static').order_by('index_'): if l.name: lists.append(l.name) - Changelog.record(self, 'addlist', l.name) + Changelog.record(self, 'addlist', l.name, _commit=False) items = [i.id for i in l.get_items().options(load_only('id'))] if items: - Changelog.record(self, 'addlistitems', l.name, items) + Changelog.record(self, 'addlistitems', l.name, items, _commit=False) if len(lists) > 1: - Changelog.record(self, 'orderlists', lists) + Changelog.record(self, 'orderlists', lists, _commit=False) for peer in User.query.filter_by(peered=True): - Changelog.record(self, 'addpeer', peer.id, self.nickname) + Changelog.record(self, 'addpeer', peer.id, self.nickname, _commit=False) if peer.info.get('contact'): Changelog.record(self, 'editpeer', peer.id, { 'contact': peer.info.get('contact') - }) + }, _commit=False) if settings.preferences.get('contact'): - Changelog.record(self, 'editcontact', settings.preferences.get('contact')) + Changelog.record(self, 'editcontact', settings.preferences.get('contact'), _commit=False) + state.db.session.commit() list_items = sa.Table('listitem', db.metadata, sa.Column('list_id', sa.Integer(), sa.ForeignKey('list.id')),