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 migrate.tests import fixture
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class TestRepository(fixture.Pathed):
|
||||
@ -96,6 +97,24 @@ class TestVersionedRepository(fixture.Pathed):
|
||||
self.assert_(repos.latest >= 2)
|
||||
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):
|
||||
"""Get a script object by version number and view its source"""
|
||||
# Load repository and commit script
|
||||
|
@ -115,6 +115,7 @@ class Repository(pathed.Pathed):
|
||||
options.setdefault('version_table', 'migrate_version')
|
||||
options.setdefault('repository_id', name)
|
||||
options.setdefault('required_dbs', [])
|
||||
options.setdefault('use_timestamp_numbering', '0')
|
||||
|
||||
tmpl = open(os.path.join(tmpl_dir, cls._config)).read()
|
||||
ret = TempitaTemplate(tmpl).substitute(options)
|
||||
@ -152,10 +153,13 @@ class Repository(pathed.Pathed):
|
||||
|
||||
def create_script(self, description, **k):
|
||||
"""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)
|
||||
|
||||
def create_script_sql(self, database, **k):
|
||||
"""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)
|
||||
|
||||
@property
|
||||
@ -173,6 +177,13 @@ class Repository(pathed.Pathed):
|
||||
"""Returns repository id specified in config"""
|
||||
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):
|
||||
"""API to :attr:`migrate.versioning.version.Collection.version`"""
|
||||
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.
|
||||
# This must be a list; example: ['postgres','sqlite']
|
||||
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.versioning import pathed, script
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
@ -88,9 +89,17 @@ class Collection(pathed.Pathed):
|
||||
""":returns: Latest version in Collection"""
|
||||
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):
|
||||
"""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)
|
||||
|
||||
if extra:
|
||||
@ -107,7 +116,7 @@ class Collection(pathed.Pathed):
|
||||
|
||||
def create_new_sql_version(self, database, **k):
|
||||
"""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, [])
|
||||
|
||||
# Create new files.
|
||||
|
Loading…
x
Reference in New Issue
Block a user