install_migration_version_if_missing() now a separate function

Also added it to MigrationManager.migrate_new(), because we'll always
need a migration number when migrating.
This commit is contained in:
Christopher Allan Webber 2011-07-10 18:27:38 -05:00
parent 8569533f21
commit 1b38cfa3b7

View File

@ -198,19 +198,25 @@ class MigrationManager(object):
{u'$set': {u'current_migration': migration_number}}, {u'$set': {u'current_migration': migration_number}},
upsert=True) upsert=True)
def database_current_migration(self, install_if_missing=False): def install_migration_version_if_missing(self):
"""
Sets the migration to the latest version if no migration
version at all is set.
"""
mgoblin_metadata = self.database[u'app_metadata'].find_one(
{u'_id': u'mediagoblin'})
if not mgoblin_metadata:
latest_migration = self.latest_migration()
self.set_current_migration(latest_migration)
def database_current_migration(self):
""" """
Return the current migration in the database. Return the current migration in the database.
""" """
mgoblin_metadata = self.database[u'app_metadata'].find_one( mgoblin_metadata = self.database[u'app_metadata'].find_one(
{u'_id': u'mediagoblin'}) {u'_id': u'mediagoblin'})
if not mgoblin_metadata: if not mgoblin_metadata:
if install_if_missing: return None
latest_migration = self.latest_migration()
self.set_current_migration(latest_migration)
return latest_migration
else:
return None
else: else:
return mgoblin_metadata[u'current_migration'] return mgoblin_metadata[u'current_migration']
@ -227,6 +233,7 @@ class MigrationManager(object):
Get a list of migrations to run still, if any. Get a list of migrations to run still, if any.
""" """
db_current_migration = self.database_current_migration() db_current_migration = self.database_current_migration()
return [ return [
(migration_number, migration_func) (migration_number, migration_func)
for migration_number, migration_func in self.sorted_migrations for migration_number, migration_func in self.sorted_migrations
@ -244,6 +251,11 @@ class MigrationManager(object):
run post-migration. Takes (migration_number, migration_func) run post-migration. Takes (migration_number, migration_func)
as arguments as arguments
""" """
# If we aren't set to any version number, presume we're at the
# latest (which means we'll do nothing here...)
# @@: should this be in migrations_to_run()?
self.install_migration_version_if_missing()
for migration_number, migration_func in self.migrations_to_run(): for migration_number, migration_func in self.migrations_to_run():
if pre_callback: if pre_callback:
pre_callback(migration_number, migration_func) pre_callback(migration_number, migration_func)