From bfb796d78a628b3c6c72b5cad6b5e16b263c6ea3 Mon Sep 17 00:00:00 2001 From: Adrian Moennich Date: Mon, 10 Nov 2014 15:46:29 +0100 Subject: [PATCH] Add initial export code --- livesync/indico_livesync/base.py | 11 ++++++++++- livesync/indico_livesync/cli.py | 18 ++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/livesync/indico_livesync/base.py b/livesync/indico_livesync/base.py index 6ce7081..0fc87d4 100644 --- a/livesync/indico_livesync/base.py +++ b/livesync/indico_livesync/base.py @@ -71,5 +71,14 @@ class LiveSyncAgentBase(object): return self.agent.queue.filter_by(processed=False).order_by(LiveSyncQueueEntry.timestamp).limit(count).all() def run(self): - """Runs the livsync export""" + """Runs the livesync export""" + raise NotImplementedError + + def run_initial_export(self, events): + """Runs the initial export. + + This process is expected to take a very long time. + + :param events: iterable of all events in this indico instance + """ raise NotImplementedError diff --git a/livesync/indico_livesync/cli.py b/livesync/indico_livesync/cli.py index 38d653f..37fef3e 100644 --- a/livesync/indico_livesync/cli.py +++ b/livesync/indico_livesync/cli.py @@ -23,7 +23,8 @@ from terminaltables import AsciiTable from indico.core.db import db, DBMgr from indico.core.db.sqlalchemy.util.session import update_session_options -from indico.util.console import cformat +from indico.util.console import cformat, conferenceHolderIterator +from MaKaC.conference import ConferenceHolder from indico_livesync.models.agents import LiveSyncAgent @@ -73,7 +74,17 @@ def initial_export(agent_id, force=False): print 'The initial export has already been performed for this agent.' print cformat('To re-run it, use %{yellow!}--force%{reset}') return - print 'TODO: run initial export' + + def _iter_events(): + for i, (_, event) in enumerate(conferenceHolderIterator(ConferenceHolder(), deepness='event'), 1): + yield event + if i % 1000 == 0: + # Clean local ZEO cache + transaction.abort() + + with DBMgr.getInstance().global_connection(): + agent.backend(agent).run_initial_export(_iter_events()) + agent.initial_data_exported = True db.session.commit() @@ -111,6 +122,9 @@ def run(agent_id=None): agent_list = [agent] for agent in agent_list: + if not agent.initial_data_exported: + print cformat('Skipping agent: %{red!}{}%{reset} (initial export not performed)').format(agent.name) + continue print cformat('Running agent: %{white!}{}%{reset}').format(agent.name) with DBMgr.getInstance().global_connection(): try: