Changeset 190:5eea812dbbe7
- Timestamp:
- 07/19/09 21:08:44 (8 months ago)
- Author:
- rgrp
- Branch:
- default
- convert_revision:
- svn:0ead1229-0713-0410-96cd-f668dbfad531/trunk@276
- Message:
-
[model][m]: Use sqlalchemy-migrate to handle db/model upgrade (ticket:53).
- Integrate into cli with an upgrade command in shakespeare-admin
- Ensure that creating with latest model data will set migrate_version correctly
- Ensure clean removes migrate tables
- Current model has been copied over to be first migrate script (001_pre_migrate_model.py)
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r187
|
r190
|
|
| 23 | 23 | 'pygooglechart>=0.2,<0.3', |
| 24 | 24 | 'FormAlchemy>=1.0', |
| | 25 | # last version to work with SQLA < 0.5 |
| | 26 | 'SQLAlchemy-migrate==0.4.5', |
| 25 | 27 | # 'annotater>=0.1', |
| 26 | 28 | ], |
-
|
r189
|
r190
|
|
| 78 | 78 | # Commands |
| 79 | 79 | |
| 80 | | db_actions = [ 'clean', 'create', 'rebuild', 'init_shksprdata', 'init_miltondata' ] |
| | 80 | db_actions = [ 'create', 'upgrade', 'clean', 'rebuild', 'init_shksprdata', 'init_miltondata' ] |
| 81 | 81 | def do_db(self, line=None): |
| 82 | 82 | if line is None or line not in self.db_actions: |
| … |
… |
|
| 86 | 86 | import shakespeare.model as model |
| 87 | 87 | import shakespeare |
| 88 | | if line == 'clean': |
| | 88 | migrate_repository = 'shakespeare/migration/' |
| | 89 | if line == 'create': |
| | 90 | model.repo.create_db() |
| | 91 | elif line == 'clean': |
| 89 | 92 | model.repo.clean_db() |
| 90 | | elif line == 'create': |
| 91 | | model.repo.create_db() |
| 92 | 93 | elif line == 'rebuild': |
| 93 | 94 | model.repo.rebuild_db() |
| | 95 | elif line == 'upgrade': |
| | 96 | import migrate.versioning.api |
| | 97 | import migrate.versioning.api as mig |
| | 98 | mig.upgrade(model.meta.engine.url, migrate_repository, |
| | 99 | version=None) |
| | 100 | elif line == 'downgrade': |
| | 101 | # TODO (need a version argument ...) |
| | 102 | raise NotImplementedError() |
| 94 | 103 | elif line.startswith('init_'): |
| 95 | 104 | modname = line.strip()[5:] |
| … |
… |
|
| 102 | 111 | usage = \ |
| 103 | 112 | '''db { %s } |
| | 113 | |
| 104 | 114 | ''' % ' | '.join(self.db_actions) |
| | 115 | usage += ' upgrade: upgrade db to latest version using sqlalchemy migrate' |
| 105 | 116 | print usage |
| 106 | 117 | |
-
|
r189
|
r190
|
|
| 1 | 1 | '''The application's domain model objects''' |
| | 2 | import logging |
| 2 | 3 | import sqlalchemy |
| 3 | 4 | from sqlalchemy import orm |
| … |
… |
|
| 5 | 6 | import meta |
| 6 | 7 | from dm import * |
| | 8 | |
| | 9 | log = logging.getLogger(__name__) |
| 7 | 10 | |
| 8 | 11 | def init_model(engine): |
| … |
… |
|
| 20 | 23 | def create_db(self): |
| 21 | 24 | self.metadata.create_all(bind=self.metadata.bind) |
| | 25 | # sqlalchemy migrate hack |
| | 26 | from migrate.versioning.api import version_control, version |
| | 27 | import shakespeare.migration.versions |
| | 28 | v = version(shakespeare.migration.__path__[0]) |
| | 29 | log.info( "Setting current version to '%s'" % v ) |
| | 30 | version_control(self.metadata.bind.url, shakespeare.migration.__path__[0], v) |
| 22 | 31 | |
| 23 | 32 | def clean_db(self): |
| 24 | 33 | self.metadata.drop_all(bind=self.metadata.bind) |
| | 34 | # remove migrate stuff if it exists |
| | 35 | import sqlalchemy.exceptions |
| | 36 | try: |
| | 37 | version_table = Table('migrate_version', self.metadata, autoload=True) |
| | 38 | version_table.drop() |
| | 39 | except sqlalchemy.exceptions.NoSuchTableError: |
| | 40 | pass |
| 25 | 41 | |
| 26 | 42 | def rebuild_db(self): |