Optionally number versions with timestamps instead of sequences
This commit is contained in:
parent
7681155af7
commit
cbebf76ade
@ -10,6 +10,7 @@ from migrate.versioning.script import *
|
|||||||
from nose.tools import raises
|
from nose.tools import raises
|
||||||
|
|
||||||
from migrate.tests import fixture
|
from migrate.tests import fixture
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
class TestRepository(fixture.Pathed):
|
class TestRepository(fixture.Pathed):
|
||||||
@ -96,6 +97,24 @@ class TestVersionedRepository(fixture.Pathed):
|
|||||||
self.assert_(repos.latest >= 2)
|
self.assert_(repos.latest >= 2)
|
||||||
self.assert_(repos.latest < 3)
|
self.assert_(repos.latest < 3)
|
||||||
|
|
||||||
|
|
||||||
|
def test_timestmap_numbering_version(self):
|
||||||
|
repos = Repository(self.path_repos)
|
||||||
|
repos.config.set('db_settings', 'use_timestamp_numbering', True)
|
||||||
|
|
||||||
|
# Get latest version, or detect if a specified version exists
|
||||||
|
self.assertEquals(repos.latest, 0)
|
||||||
|
# repos.latest isn't an integer, but a VerNum
|
||||||
|
# (so we can't just assume the following tests are correct)
|
||||||
|
self.assert_(repos.latest >= 0)
|
||||||
|
self.assert_(repos.latest < 1)
|
||||||
|
|
||||||
|
# Create a script and test again
|
||||||
|
now = int(datetime.utcnow().strftime('%Y%m%d%H%M%S'))
|
||||||
|
repos.create_script('')
|
||||||
|
print repos.latest
|
||||||
|
self.assertEquals(repos.latest, now)
|
||||||
|
|
||||||
def test_source(self):
|
def test_source(self):
|
||||||
"""Get a script object by version number and view its source"""
|
"""Get a script object by version number and view its source"""
|
||||||
# Load repository and commit script
|
# Load repository and commit script
|
||||||
|
@ -115,6 +115,7 @@ class Repository(pathed.Pathed):
|
|||||||
options.setdefault('version_table', 'migrate_version')
|
options.setdefault('version_table', 'migrate_version')
|
||||||
options.setdefault('repository_id', name)
|
options.setdefault('repository_id', name)
|
||||||
options.setdefault('required_dbs', [])
|
options.setdefault('required_dbs', [])
|
||||||
|
options.setdefault('use_timestamp_numbering', '0')
|
||||||
|
|
||||||
tmpl = open(os.path.join(tmpl_dir, cls._config)).read()
|
tmpl = open(os.path.join(tmpl_dir, cls._config)).read()
|
||||||
ret = TempitaTemplate(tmpl).substitute(options)
|
ret = TempitaTemplate(tmpl).substitute(options)
|
||||||
@ -152,10 +153,13 @@ class Repository(pathed.Pathed):
|
|||||||
|
|
||||||
def create_script(self, description, **k):
|
def create_script(self, description, **k):
|
||||||
"""API to :meth:`migrate.versioning.version.Collection.create_new_python_version`"""
|
"""API to :meth:`migrate.versioning.version.Collection.create_new_python_version`"""
|
||||||
|
|
||||||
|
k['use_timestamp_numbering'] = self.use_timestamp_numbering
|
||||||
self.versions.create_new_python_version(description, **k)
|
self.versions.create_new_python_version(description, **k)
|
||||||
|
|
||||||
def create_script_sql(self, database, **k):
|
def create_script_sql(self, database, **k):
|
||||||
"""API to :meth:`migrate.versioning.version.Collection.create_new_sql_version`"""
|
"""API to :meth:`migrate.versioning.version.Collection.create_new_sql_version`"""
|
||||||
|
k['use_timestamp_numbering'] = self.use_timestamp_numbering
|
||||||
self.versions.create_new_sql_version(database, **k)
|
self.versions.create_new_sql_version(database, **k)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -173,6 +177,13 @@ class Repository(pathed.Pathed):
|
|||||||
"""Returns repository id specified in config"""
|
"""Returns repository id specified in config"""
|
||||||
return self.config.get('db_settings', 'repository_id')
|
return self.config.get('db_settings', 'repository_id')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def use_timestamp_numbering(self):
|
||||||
|
"""Returns use_timestamp_numbering specified in config"""
|
||||||
|
ts_numbering = self.config.get('db_settings', 'use_timestamp_numbering', raw=True)
|
||||||
|
|
||||||
|
return ts_numbering
|
||||||
|
|
||||||
def version(self, *p, **k):
|
def version(self, *p, **k):
|
||||||
"""API to :attr:`migrate.versioning.version.Collection.version`"""
|
"""API to :attr:`migrate.versioning.version.Collection.version`"""
|
||||||
return self.versions.version(*p, **k)
|
return self.versions.version(*p, **k)
|
||||||
|
@ -18,3 +18,8 @@ version_table={{ locals().pop('version_table') }}
|
|||||||
# be using to ensure your updates to that database work properly.
|
# be using to ensure your updates to that database work properly.
|
||||||
# This must be a list; example: ['postgres','sqlite']
|
# This must be a list; example: ['postgres','sqlite']
|
||||||
required_dbs={{ locals().pop('required_dbs') }}
|
required_dbs={{ locals().pop('required_dbs') }}
|
||||||
|
|
||||||
|
# When creating new change scripts, Migrate will stamp the new script with
|
||||||
|
# a version number. By default this is latest_version + 1. You can set this
|
||||||
|
# to 'true' to tell Migrate to use the UTC timestamp instead.
|
||||||
|
use_timestamp_numbering='false'
|
@ -8,6 +8,7 @@ import logging
|
|||||||
|
|
||||||
from migrate import exceptions
|
from migrate import exceptions
|
||||||
from migrate.versioning import pathed, script
|
from migrate.versioning import pathed, script
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -88,9 +89,17 @@ class Collection(pathed.Pathed):
|
|||||||
""":returns: Latest version in Collection"""
|
""":returns: Latest version in Collection"""
|
||||||
return max([VerNum(0)] + self.versions.keys())
|
return max([VerNum(0)] + self.versions.keys())
|
||||||
|
|
||||||
|
def _next_ver_num(self, use_timestamp_numbering):
|
||||||
|
print use_timestamp_numbering
|
||||||
|
if use_timestamp_numbering == True:
|
||||||
|
print "Creating new timestamp version!"
|
||||||
|
return VerNum(int(datetime.utcnow().strftime('%Y%m%d%H%M%S')))
|
||||||
|
else:
|
||||||
|
return self.latest + 1
|
||||||
|
|
||||||
def create_new_python_version(self, description, **k):
|
def create_new_python_version(self, description, **k):
|
||||||
"""Create Python files for new version"""
|
"""Create Python files for new version"""
|
||||||
ver = self.latest + 1
|
ver = self._next_ver_num(k.pop('use_timestamp_numbering', False))
|
||||||
extra = str_to_filename(description)
|
extra = str_to_filename(description)
|
||||||
|
|
||||||
if extra:
|
if extra:
|
||||||
@ -107,7 +116,7 @@ class Collection(pathed.Pathed):
|
|||||||
|
|
||||||
def create_new_sql_version(self, database, **k):
|
def create_new_sql_version(self, database, **k):
|
||||||
"""Create SQL files for new version"""
|
"""Create SQL files for new version"""
|
||||||
ver = self.latest + 1
|
ver = self._next_ver_num(k.pop('use_timestamp_numbering', False))
|
||||||
self.versions[ver] = Version(ver, self.path, [])
|
self.versions[ver] = Version(ver, self.path, [])
|
||||||
|
|
||||||
# Create new files.
|
# Create new files.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user