skip audio reprocessing if necessary
[mediagoblin.git] / mediagoblin / db / migration_tools.py
index e5380a3b9c3795731c9a8b3f0c4151ae8bab8841..e75f37572c6cb036ed7f8787d313f1e8ecc9fac6 100644 (file)
@@ -17,6 +17,9 @@
 from mediagoblin.tools.common import simple_printer
 from sqlalchemy import Table
 
+class TableAlreadyExists(Exception):
+    pass
+
 
 class MigrationManager(object):
     """
@@ -26,7 +29,7 @@ class MigrationManager(object):
     to the latest migrations, etc.
     """
 
-    def __init__(self, name, models, migration_registry, session,
+    def __init__(self, name, models, foundations, migration_registry, session,
                  printer=simple_printer):
         """
         Args:
@@ -37,6 +40,7 @@ class MigrationManager(object):
         """
         self.name = unicode(name)
         self.models = models
+        self.foundations = foundations
         self.session = session
         self.migration_registry = migration_registry
         self._sorted_migrations = None
@@ -128,12 +132,27 @@ class MigrationManager(object):
         # sanity check before we proceed, none of these should be created
         for model in self.models:
             # Maybe in the future just print out a "Yikes!" or something?
-            assert not model.__table__.exists(self.session.bind)
+            if model.__table__.exists(self.session.bind):
+                raise TableAlreadyExists(
+                    u"Intended to create table '%s' but it already exists" %
+                    model.__table__.name)
 
         self.migration_model.metadata.create_all(
             self.session.bind,
             tables=[model.__table__ for model in self.models])
 
+    def populate_table_foundations(self):
+        """
+        Create the table foundations (default rows) as layed out in FOUNDATIONS
+            in mediagoblin.db.models
+        """
+        for Model, rows in self.foundations.items():
+            self.printer(u'   + Laying foundations for %s table\n' % 
+                (Model.__name__))
+            for parameters in rows:
+                new_row = Model(**parameters)
+                self.session.add(new_row)
+
     def create_new_migration_record(self):
         """
         Create a new migration record for this migration set
@@ -169,8 +188,7 @@ class MigrationManager(object):
         if self.name == u'__main__':
             return u"main mediagoblin tables"
         else:
-            # TODO: Use the friendlier media manager "human readable" name
-            return u'media type "%s"' % self.name
+            return u'plugin "%s"' % self.name
 
     def init_or_migrate(self):
         """
@@ -197,9 +215,9 @@ class MigrationManager(object):
 
             self.init_tables()
             # auto-set at latest migration number
-            self.create_new_migration_record()  
-            
+            self.create_new_migration_record()
             self.printer(u"done.\n")
+            self.populate_table_foundations()
             self.set_current_migration()
             return u'inited'