diff --git a/livesync/indico_livesync/__init__.py b/livesync/indico_livesync/__init__.py index 4635e39..324a874 100644 --- a/livesync/indico_livesync/__init__.py +++ b/livesync/indico_livesync/__init__.py @@ -16,8 +16,10 @@ from __future__ import unicode_literals -__all__ = ('LiveSyncPluginBase', 'LiveSyncAgentBase', 'SimpleChange', 'process_records', 'MARCXMLGenerator') +__all__ = ('LiveSyncPluginBase', 'LiveSyncAgentBase', 'SimpleChange', 'process_records', 'MARCXMLGenerator', + 'Uploader', 'MARCXMLUploader') from .base import LiveSyncPluginBase, LiveSyncAgentBase from .simplify import SimpleChange, process_records from .marcxml import MARCXMLGenerator +from .uploader import Uploader, MARCXMLUploader diff --git a/livesync/indico_livesync/uploader.py b/livesync/indico_livesync/uploader.py index cb8824a..957a114 100644 --- a/livesync/indico_livesync/uploader.py +++ b/livesync/indico_livesync/uploader.py @@ -21,9 +21,15 @@ import transaction from indico.core.db import db from indico.util.struct.iterables import grouper +from indico_livesync import MARCXMLGenerator + class Uploader(object): + """Handles batch data upload to a remote service.""" + + #: Number of queue entries to process at a time BATCH_SIZE = 100 + #: Number of events to process at a time during initial export INITIAL_BATCH_SIZE = 100 def __init__(self, agent): @@ -71,3 +77,14 @@ class Uploader(object): record.processed = True db.session.commit() transaction.abort() # clear ZEO cache + + +class MARCXMLUploader(Uploader): + def upload_records(self, records, from_queue): + xml = MARCXMLGenerator.records_to_xml(records) if from_queue else MARCXMLGenerator.objects_to_xml(records) + if xml is not None: + self.upload_xml(xml) + + def upload_xml(self, xml): + """Receives MARCXML strings to be uploaded""" + raise NotImplementedError