##// END OF EJS Templates
Synced with latest sqlalchemy-migrate, added new upcomming migration for 1.3
marcink -
r1632:5b2cf21b beta
parent child Browse files
Show More
@@ -0,0 +1,24 b''
1 # -*- coding: utf-8 -*-
2 """
3 rhodecode.model.db
4 ~~~~~~~~~~~~~~~~~~
5
6 Database Models for RhodeCode
7
8 :created_on: Apr 08, 2010
9 :author: marcink
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 :license: GPLv3, see COPYING for more details.
12 """
13 # This program is free software: you can redistribute it and/or modify
14 # it under the terms of the GNU General Public License as published by
15 # the Free Software Foundation, either version 3 of the License, or
16 # (at your option) any later version.
17 #
18 # This program is distributed in the hope that it will be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 # GNU General Public License for more details.
22 #
23 # You should have received a copy of the GNU General Public License
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. No newline at end of file
@@ -0,0 +1,28 b''
1 import logging
2 import datetime
3
4 from sqlalchemy import *
5 from sqlalchemy.exc import DatabaseError
6 from sqlalchemy.orm import relation, backref, class_mapper
7 from sqlalchemy.orm.session import Session
8
9 from rhodecode.lib.dbmigrate.migrate import *
10 from rhodecode.lib.dbmigrate.migrate.changeset import *
11
12 from rhodecode.model.meta import Base
13
14 log = logging.getLogger(__name__)
15
16 def upgrade(migrate_engine):
17 """ Upgrade operations go here.
18 Don't create your own engine; bind migrate_engine to your metadata
19 """
20
21
22
23 return
24
25
26 def downgrade(migrate_engine):
27 meta = MetaData()
28 meta.bind = migrate_engine
@@ -8,4 +8,4 b''
8 from rhodecode.lib.dbmigrate.migrate.versioning import *
8 from rhodecode.lib.dbmigrate.migrate.versioning import *
9 from rhodecode.lib.dbmigrate.migrate.changeset import *
9 from rhodecode.lib.dbmigrate.migrate.changeset import *
10
10
11 __version__ = '0.7.2.dev' No newline at end of file
11 __version__ = '0.7.3.dev' No newline at end of file
@@ -39,7 +39,7 b' class SQLiteHelper(SQLiteCommon):'
39
39
40 insertion_string = self._modify_table(table, column, delta)
40 insertion_string = self._modify_table(table, column, delta)
41
41
42 table.create()
42 table.create(bind=self.connection)
43 self.append(insertion_string % {'table_name': table_name})
43 self.append(insertion_string % {'table_name': table_name})
44 self.execute()
44 self.execute()
45 self.append('DROP TABLE migration_tmp')
45 self.append('DROP TABLE migration_tmp')
@@ -83,6 +83,5 b' class NotSupportedError(Error):'
83 class InvalidConstraintError(Error):
83 class InvalidConstraintError(Error):
84 """Invalid constraint error"""
84 """Invalid constraint error"""
85
85
86
87 class MigrateDeprecationWarning(DeprecationWarning):
86 class MigrateDeprecationWarning(DeprecationWarning):
88 """Warning for deprecated features in Migrate"""
87 """Warning for deprecated features in Migrate"""
@@ -119,7 +119,7 b' def script_sql(database, description, re'
119
119
120 For instance, manage.py script_sql postgresql description creates:
120 For instance, manage.py script_sql postgresql description creates:
121 repository/versions/001_description_postgresql_upgrade.sql and
121 repository/versions/001_description_postgresql_upgrade.sql and
122 repository/versions/001_description_postgresql_postgres.sql
122 repository/versions/001_description_postgresql_downgrade.sql
123 """
123 """
124 repo = Repository(repository)
124 repo = Repository(repository)
125 repo.create_script_sql(database, description, **opts)
125 repo.create_script_sql(database, description, **opts)
@@ -212,14 +212,15 b' def test(url, repository, **opts):'
212 """
212 """
213 engine = opts.pop('engine')
213 engine = opts.pop('engine')
214 repos = Repository(repository)
214 repos = Repository(repository)
215 script = repos.version(None).script()
216
215
217 # Upgrade
216 # Upgrade
218 log.info("Upgrading...")
217 log.info("Upgrading...")
218 script = repos.version(None).script(engine.name, 'upgrade')
219 script.run(engine, 1)
219 script.run(engine, 1)
220 log.info("done")
220 log.info("done")
221
221
222 log.info("Downgrading...")
222 log.info("Downgrading...")
223 script = repos.version(None).script(engine.name, 'downgrade')
223 script.run(engine, -1)
224 script.run(engine, -1)
224 log.info("done")
225 log.info("done")
225 log.info("Success")
226 log.info("Success")
@@ -115,7 +115,7 b' class Repository(pathed.Pathed):'
115 options.setdefault('version_table', 'migrate_version')
115 options.setdefault('version_table', 'migrate_version')
116 options.setdefault('repository_id', name)
116 options.setdefault('repository_id', name)
117 options.setdefault('required_dbs', [])
117 options.setdefault('required_dbs', [])
118 options.setdefault('use_timestamp_numbering', '0')
118 options.setdefault('use_timestamp_numbering', False)
119
119
120 tmpl = open(os.path.join(tmpl_dir, cls._config)).read()
120 tmpl = open(os.path.join(tmpl_dir, cls._config)).read()
121 ret = TempitaTemplate(tmpl).substitute(options)
121 ret = TempitaTemplate(tmpl).substitute(options)
@@ -180,9 +180,9 b' class Repository(pathed.Pathed):'
180 @property
180 @property
181 def use_timestamp_numbering(self):
181 def use_timestamp_numbering(self):
182 """Returns use_timestamp_numbering specified in config"""
182 """Returns use_timestamp_numbering specified in config"""
183 ts_numbering = self.config.get('db_settings', 'use_timestamp_numbering', raw=True)
183 if self.config.has_option('db_settings', 'use_timestamp_numbering'):
184
184 return self.config.getboolean('db_settings', 'use_timestamp_numbering')
185 return ts_numbering
185 return False
186
186
187 def version(self, *p, **k):
187 def version(self, *p, **k):
188 """API to :attr:`migrate.versioning.version.Collection.version`"""
188 """API to :attr:`migrate.versioning.version.Collection.version`"""
@@ -17,8 +17,16 b' def getDiffOfModelAgainstDatabase(metada'
17 :return: object which will evaluate to :keyword:`True` if there \
17 :return: object which will evaluate to :keyword:`True` if there \
18 are differences else :keyword:`False`.
18 are differences else :keyword:`False`.
19 """
19 """
20 return SchemaDiff(metadata,
20 db_metadata = sqlalchemy.MetaData(engine, reflect=True)
21 sqlalchemy.MetaData(engine, reflect=True),
21
22 # sqlite will include a dynamically generated 'sqlite_sequence' table if
23 # there are autoincrement sequences in the database; this should not be
24 # compared.
25 if engine.dialect.name == 'sqlite':
26 if 'sqlite_sequence' in db_metadata.tables:
27 db_metadata.remove(db_metadata.tables['sqlite_sequence'])
28
29 return SchemaDiff(metadata, db_metadata,
22 labelA='model',
30 labelA='model',
23 labelB='database',
31 labelB='database',
24 excludeTables=excludeTables)
32 excludeTables=excludeTables)
@@ -7,4 +7,6 b" del _vars['__template_name__']"
7 _vars.pop('repository_name', None)
7 _vars.pop('repository_name', None)
8 defaults = ", ".join(["%s='%s'" % var for var in _vars.iteritems()])
8 defaults = ", ".join(["%s='%s'" % var for var in _vars.iteritems()])
9 }}
9 }}
10 main({{ defaults }})
10
11 if __name__ == '__main__':
12 main({{ defaults }})
@@ -26,4 +26,5 b' conf_dict = ConfigLoader(conf_path).pars'
26
26
27 # migrate supports passing url as an existing Engine instance (since 0.6.0)
27 # migrate supports passing url as an existing Engine instance (since 0.6.0)
28 # usage: migrate -c path/to/config.ini COMMANDS
28 # usage: migrate -c path/to/config.ini COMMANDS
29 main(url=engine_from_config(conf_dict), repository=migrations.__path__[0],{{ defaults }})
29 if __name__ == '__main__':
30 main(url=engine_from_config(conf_dict), repository=migrations.__path__[0],{{ defaults }})
@@ -90,9 +90,7 b' class Collection(pathed.Pathed):'
90 return max([VerNum(0)] + self.versions.keys())
90 return max([VerNum(0)] + self.versions.keys())
91
91
92 def _next_ver_num(self, use_timestamp_numbering):
92 def _next_ver_num(self, use_timestamp_numbering):
93 print use_timestamp_numbering
94 if use_timestamp_numbering == True:
93 if use_timestamp_numbering == True:
95 print "Creating new timestamp version!"
96 return VerNum(int(datetime.utcnow().strftime('%Y%m%d%H%M%S')))
94 return VerNum(int(datetime.utcnow().strftime('%Y%m%d%H%M%S')))
97 else:
95 else:
98 return self.latest + 1
96 return self.latest + 1
@@ -21,7 +21,7 b' def upgrade(migrate_engine):'
21 #==========================================================================
21 #==========================================================================
22 # Add table `groups``
22 # Add table `groups``
23 #==========================================================================
23 #==========================================================================
24 from rhodecode.lib.dbmigrate.schema.db_1_2_0 import Group
24 from rhodecode.lib.dbmigrate.schema.db_1_2_0 import RepoGroup as Group
25 Group().__table__.create()
25 Group().__table__.create()
26
26
27 #==========================================================================
27 #==========================================================================
General Comments 0
You need to be logged in to leave comments. Login now