From d74d87988d677d4c4a739bbd02cb54bb842ae4a5 Mon Sep 17 00:00:00 2001 From: olivier Date: Wed, 4 Mar 2009 17:02:18 +0000 Subject: [PATCH] migration: reorganized code layout git-svn-id: http://svn.parisson.org/svn/crem@68 3bf09e05-f825-4182-b9bc-eedd7160adf0 --- .../migration/{ => data}/geoEthnoTelemeta.xml | 0 trunk/import/migration/migrate.py | 67 ++++++++++--------- trunk/import/migration/migration.ini.default | 2 +- trunk/import/migration/{ => tasks}/api.py | 10 ++- trunk/import/migration/{ => tasks}/core.py | 0 trunk/import/migration/{ => tasks}/enums.py | 0 trunk/import/migration/{ => tasks}/ethnic.py | 0 .../import/migration/{ => tasks}/geoethno.py | 0 .../migration/{ => tasks}/publishers.py | 0 trunk/import/migration/{ => tasks}/reset.py | 4 +- 10 files changed, 48 insertions(+), 35 deletions(-) rename trunk/import/migration/{ => data}/geoEthnoTelemeta.xml (100%) rename trunk/import/migration/{ => tasks}/api.py (79%) rename trunk/import/migration/{ => tasks}/core.py (100%) rename trunk/import/migration/{ => tasks}/enums.py (100%) rename trunk/import/migration/{ => tasks}/ethnic.py (100%) rename trunk/import/migration/{ => tasks}/geoethno.py (100%) rename trunk/import/migration/{ => tasks}/publishers.py (100%) rename trunk/import/migration/{ => tasks}/reset.py (96%) diff --git a/trunk/import/migration/geoEthnoTelemeta.xml b/trunk/import/migration/data/geoEthnoTelemeta.xml similarity index 100% rename from trunk/import/migration/geoEthnoTelemeta.xml rename to trunk/import/migration/data/geoEthnoTelemeta.xml diff --git a/trunk/import/migration/migrate.py b/trunk/import/migration/migrate.py index 74ebe27..b48a66e 100644 --- a/trunk/import/migration/migrate.py +++ b/trunk/import/migration/migrate.py @@ -4,66 +4,71 @@ import sys import ConfigParser import MySQLdb -from api import IDataMigrator - -import reset -import enums -import geoethno -import ethnic -import publishers +from tasks.api import IDataMigrator, IDataInitializer +import tasks class Migrator(Component): - data_migrators = ExtensionPoint(IDataMigrator) + initializers = ExtensionPoint(IDataInitializer) + migrators = ExtensionPoint(IDataMigrator) + + def run_tasks(self, tasks, type, only_task = None): + ntasks = 0 + task = None + for t in tasks: + if only_task: + if t.get_name() == only_task: + task = t + else: + task = t + + if task: + print "Runinng %s %s\n" % (task.get_name(), type) + task.setup(cfg, self.src_db, self.target_db) + task.process() + ntasks += 1 + if only_task: + break + return ntasks + - def run(self, config, migrator_name = None): - src_db = MySQLdb.connect(user=cfg.get('src', 'user'), + def run(self, config, only_task = None): + self.cfg = config + self.src_db = MySQLdb.connect(user=cfg.get('src', 'user'), host=cfg.get('src', 'host'), db=cfg.get('src', 'name'), passwd=cfg.get('src', 'pass'), charset='utf8') - target_db = MySQLdb.connect(user=cfg.get('target', 'user'), + self.target_db = MySQLdb.connect(user=cfg.get('target', 'user'), host=cfg.get('target', 'host'), db=cfg.get('target', 'name'), passwd=cfg.get('target', 'pass'), charset='utf8') - item = None - for m in self.data_migrators: - if migrator_name: - if m.get_name() == migrator_name: - item = m - else: - item = m + ntasks = self.run_tasks(self.initializers, "initializer", only_task = only_task) + ntasks += self.run_tasks(self.migrators, "migrator", only_task = only_task) - if item: - print "Runinng %s migrator\n" % item.get_name() - item.setup(config, src_db, target_db) - item.process() - if migrator_name: - break - - if migrator_name and not item: - raise "No such migrator: %s" % migrator_name + if only_task and not ntasks: + raise "No such task: %s" % only_task if __name__ == '__main__': if len(sys.argv) != 2 and len(sys.argv) != 3: - print "Usage: %s [migrator_name]" % sys.argv[0] + print "Usage: %s [task_name]" % sys.argv[0] sys.exit(1) if (len(sys.argv) == 3): - migrator_name = sys.argv[2] + only_task = sys.argv[2] else: - migrator_name = None + only_task = None cfg = ConfigParser.ConfigParser() cfg.read(sys.argv[1]) cmpmgr = ComponentManager() migrator = Migrator(cmpmgr) - migrator.run(cfg, migrator_name) + migrator.run(cfg, only_task) diff --git a/trunk/import/migration/migration.ini.default b/trunk/import/migration/migration.ini.default index 02bd935..ee87cc5 100644 --- a/trunk/import/migration/migration.ini.default +++ b/trunk/import/migration/migration.ini.default @@ -11,4 +11,4 @@ name=crem_src host=127.0.0.1 [geoethno] -xml_file=geoEthnoTelemeta.xml +xml_file=data/geoEthnoTelemeta.xml diff --git a/trunk/import/migration/api.py b/trunk/import/migration/tasks/api.py similarity index 79% rename from trunk/import/migration/api.py rename to trunk/import/migration/tasks/api.py index cca0379..1504243 100644 --- a/trunk/import/migration/api.py +++ b/trunk/import/migration/tasks/api.py @@ -9,7 +9,7 @@ from telemeta.core import * -class IDataMigrator(Interface): +class IDataMigrationTask(Interface): def setup(cfg, src_db, target_db): """Set the migrator up""" @@ -21,3 +21,11 @@ class IDataMigrator(Interface): def process(): """Run the migration task""" + +class IDataInitializer(IDataMigrationTask): + pass + +class IDataMigrator(IDataMigrationTask): + pass + + diff --git a/trunk/import/migration/core.py b/trunk/import/migration/tasks/core.py similarity index 100% rename from trunk/import/migration/core.py rename to trunk/import/migration/tasks/core.py diff --git a/trunk/import/migration/enums.py b/trunk/import/migration/tasks/enums.py similarity index 100% rename from trunk/import/migration/enums.py rename to trunk/import/migration/tasks/enums.py diff --git a/trunk/import/migration/ethnic.py b/trunk/import/migration/tasks/ethnic.py similarity index 100% rename from trunk/import/migration/ethnic.py rename to trunk/import/migration/tasks/ethnic.py diff --git a/trunk/import/migration/geoethno.py b/trunk/import/migration/tasks/geoethno.py similarity index 100% rename from trunk/import/migration/geoethno.py rename to trunk/import/migration/tasks/geoethno.py diff --git a/trunk/import/migration/publishers.py b/trunk/import/migration/tasks/publishers.py similarity index 100% rename from trunk/import/migration/publishers.py rename to trunk/import/migration/tasks/publishers.py diff --git a/trunk/import/migration/reset.py b/trunk/import/migration/tasks/reset.py similarity index 96% rename from trunk/import/migration/reset.py rename to trunk/import/migration/tasks/reset.py index b0bdad1..c2fcce6 100644 --- a/trunk/import/migration/reset.py +++ b/trunk/import/migration/tasks/reset.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- from telemeta.core import * -from api import IDataMigrator +from api import IDataInitializer class DatabaseResetMigrator(Component): - implements(IDataMigrator) + implements(IDataInitializer) tables = [ 'physical_formats', -- 2.39.5