From a2661400f30232cee8934a02382fb2f0e2d7afdc Mon Sep 17 00:00:00 2001 From: David Snopek Date: Tue, 16 Jul 2013 20:22:17 +0100 Subject: [PATCH] Moved import code into it's own module so things outside of the ImportExportHandler can use it (like a setup_new_collection function). --- AnkiServer/apps/rest_app.py | 33 ++++++++------------------------- AnkiServer/importer.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 25 deletions(-) create mode 100644 AnkiServer/importer.py diff --git a/AnkiServer/apps/rest_app.py b/AnkiServer/apps/rest_app.py index 752b399..e80b1ea 100644 --- a/AnkiServer/apps/rest_app.py +++ b/AnkiServer/apps/rest_app.py @@ -12,7 +12,7 @@ except ImportError: import os, logging -__all__ = ['RestApp', 'RestHandlerBase', 'hasReturnValue', 'noReturnValue'] +__all__ = ['RestApp', 'RestHandlerBase', 'noReturnValue'] def noReturnValue(func): func.hasReturnValue = False @@ -345,30 +345,15 @@ class ImportExportHandler(RestHandlerBase): def _get_importer_class(self, data): filetype = data['filetype'] - # We do this as an if/elif/else guy, because I don't want to even import - # the modules until someone actually attempts to import the type - if filetype == 'text': - from anki.importing.csvfile import TextImporter - return TextImporter - elif filetype == 'apkg': - from anki.importing.apkg import AnkiPackageImporter - return AnkiPackageImporter - elif filetype == 'anki1': - from anki.importing.anki1 import Anki1Importer - return Anki1Importer - elif filetype == 'supermemo_xml': - from anki.importing.supermemo_xml import SupermemoXmlImporter - return SupermemoXmlImporter - elif filetype == 'mnemosyne': - from anki.importing.mnemo import MnemosyneImporter - return MnemosyneImporter - elif filetype == 'pauker': - from anki.importing.pauker import PaukerImporter - return PaukerImporter - else: + from AnkiServer.importer import get_importer_class + importer_class = get_importer_class(filetype) + if importer_class is None: raise HTTPBadRequest("Unknown filetype '%s'" % filetype) + return importer_class + def import_file(self, col, data, ids): + import AnkiServer.importer import tempfile # get the importer class @@ -384,9 +369,7 @@ class ImportExportHandler(RestHandlerBase): path = fd.name fd.write(filedata) - importer = importer_class(col, path) - importer.open() - importer.run() + AnkiServer.importer.import_file(importer_class, col, path) finally: if path is not None: os.unlink(path) diff --git a/AnkiServer/importer.py b/AnkiServer/importer.py new file mode 100644 index 0000000..2c33f4c --- /dev/null +++ b/AnkiServer/importer.py @@ -0,0 +1,29 @@ + +from anki.importing.csvfile import TextImporter +from anki.importing.apkg import AnkiPackageImporter +from anki.importing.anki1 import Anki1Importer +from anki.importing.supermemo_xml import SupermemoXmlImporter +from anki.importing.mnemo import MnemosyneImporter +from anki.importing.pauker import PaukerImporter + +importers = { + 'text': TextImporter, + 'apkg': AnkiPackageImporter, + 'anki1': Anki1Importer, + 'supermemo_xml': SupermemoXmlImporter, + 'mnemosyne': MnemosyneImporter, + 'pauker': PaukerImporter, +} + +def get_importer_class(type): + global importers + return importers.get(type) + +def import_file(importer_class, col, path): + importer = importer_class(col, path) + + if importer.needMapper: + importer.open() + + importer.run() +