Made it so that it's migrate_new() which installs the migration
authorChristopher Allan Webber <cwebber@dustycloud.org>
Mon, 11 Jul 2011 03:02:51 +0000 (22:02 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Mon, 11 Jul 2011 03:02:51 +0000 (22:02 -0500)
version if missing, migrations_to_run just throws an error if not set

mediagoblin/db/util.py

index 1a4dd95ba81a04a02ffccd8ce43b401b3052a7b1..5a1b317d3332bdd13eae991590afe132d0fbf01f 100644 (file)
@@ -115,6 +115,9 @@ def remove_deprecated_indexes(database, deprecated_indexes=DEPRECATED_INDEXES):
 # Don't set this yourself!  RegisterMigration will automatically fill
 # this with stuff via decorating methods in migrations.py
 
+class MissingCurrentMigration(Exception): pass
+
+
 MIGRATIONS = {}
 
 
@@ -164,6 +167,16 @@ class MigrationManager(object):
         self.migration_registry = migration_registry
         self._sorted_migrations = None
 
+    def _ensure_current_migration_record(self):
+        """
+        If there isn't a database[u'app_metadata'] mediagoblin entry
+        with the 'current_migration', throw an error.
+        """
+        if self.database_current_migration() is None:
+            MissingCurrentMigration(
+                "Tried to call function which requires "
+                "'current_migration' set in database")
+
     @property
     def sorted_migrations(self):
         """
@@ -235,9 +248,7 @@ class MigrationManager(object):
         Note that calling this will set your migration version to the
         latest version if it isn't installed to anything yet!
         """
-        # If we aren't set to any version number, presume we're at the
-        # latest (which means we'll do nothing here...)
-        self.install_migration_version_if_missing()
+        self._ensure_current_migration_record()
 
         db_current_migration = self.database_current_migration()
 
@@ -258,6 +269,10 @@ class MigrationManager(object):
            run post-migration.  Takes (migration_number, migration_func)
            as arguments
         """
+        # If we aren't set to any version number, presume we're at the
+        # latest (which means we'll do nothing here...)
+        self.install_migration_version_if_missing()
+
         for migration_number, migration_func in self.migrations_to_run():
             if pre_callback:
                 pre_callback(migration_number, migration_func)