glance.db.sqlalchemy.migrate_repo package

Subpackages

Submodules

glance.db.sqlalchemy.migrate_repo.manage module

glance.db.sqlalchemy.migrate_repo.schema module

Various conveniences used for migration scripts

glance.db.sqlalchemy.migrate_repo.schema.BigInteger()
glance.db.sqlalchemy.migrate_repo.schema.Boolean()
glance.db.sqlalchemy.migrate_repo.schema.DateTime()
glance.db.sqlalchemy.migrate_repo.schema.Integer()
glance.db.sqlalchemy.migrate_repo.schema.Numeric()
glance.db.sqlalchemy.migrate_repo.schema.PickleType()
glance.db.sqlalchemy.migrate_repo.schema.String(length)
glance.db.sqlalchemy.migrate_repo.schema.Text()
glance.db.sqlalchemy.migrate_repo.schema.create_tables(tables)[source]
glance.db.sqlalchemy.migrate_repo.schema.drop_tables(tables)[source]
glance.db.sqlalchemy.migrate_repo.schema.from_migration_import(module_name, fromlist)[source]

Import a migration file and return the module

Parameters:
  • module_name – name of migration module to import from (ex: 001_add_images_table)
  • fromlist – list of items to import (ex: define_images_table)
Returns:

module object

This bit of ugliness warrants an explanation:

As you’re writing migrations, you’ll frequently want to refer to tables defined in previous migrations.

In the interest of not repeating yourself, you need a way of importing that table into a ‘future’ migration.

However, tables are bound to metadata, so what you need to import is really a table factory, which you can late-bind to your current metadata object.

Moreover, migrations begin with a number (001...), which means they aren’t valid Python identifiers. This means we can’t perform a ‘normal’ import on them (the Python lexer will ‘splode). Instead, we need to use __import__ magic to bring the table-factory into our namespace.

Example Usage:

(define_images_table,) = from_migration_import(
‘001_add_images_table’, [‘define_images_table’])

images = define_images_table(meta)

# Refer to images table

Module contents