]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
- get the test environment to use the command line correctly
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 28 Apr 2010 02:57:54 +0000 (22:57 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 28 Apr 2010 02:57:54 +0000 (22:57 -0400)
- use time-based slightly random hex ids.
- probably going to remove the id from the upgrade/downgrade name, not
much point to it.

alembic/command.py
alembic/options.py
alembic/util.py
tests/__init__.py
tests/test_revisions.py

index cd4508ae97ffa5f06d4e035bc85e6c1121264a76..50452b0a8ac5d058eb9cf54d14276e4805af558d 100644 (file)
@@ -65,7 +65,7 @@ def revision(opts):
     """Create a new revision file."""
 
     script = ScriptDirectory.from_options(opts)
-    script.generate_rev(str(uuid.uuid4().hex), opts.cmd_line_options.message)
+    script.generate_rev(util.rev_id(), opts.cmd_line_options.message)
     
 def upgrade(opts):
     """Upgrade to the latest version."""
index 3b020cb7ae01a9d1c0aac637b5cb6ccaba61bf98..f54a1b4893c8bbd7f9a4cf49ccb60b354ea74b81 100644 (file)
@@ -49,10 +49,14 @@ class Options(object):
                 self.cmd_line_args = parser.parse_args(argv[1:])
         if len(self.cmd_line_args) < 1:
             self.err("no command specified")
-        self.config_file_name = self.cmd_line_options.config
-        self.file_config = ConfigParser.ConfigParser()
-        self.file_config.read([self.config_file_name])
     
+    @util.memoized_property
+    def file_config(self):
+        self.config_file_name = self.cmd_line_options.config
+        file_config = ConfigParser.ConfigParser()
+        file_config.read([self.config_file_name])
+        return file_config
+        
     def get_command(self):
         return self.cmd_line_args[0]
     
index b065ef92f872a7bced858bad20cbb928fc7c3e19..d23d72215aa9c10f41b23e3c9ecf75049e09d175 100644 (file)
@@ -6,6 +6,8 @@ from sqlalchemy import util
 import imp
 import warnings
 import re
+import time
+import random
 
 NO_VALUE = util.symbol("NO_VALUE")
 
@@ -55,6 +57,12 @@ def load_python_file(dir_, filename):
     del sys.modules[module_id]
     return module
 
+def rev_id():
+    v1 = int(time.time()) * 10000
+    v2 = random.randint(0, 9999)
+    val = v1 + v2
+    return hex(val)[2:-1]
+    
 class memoized_property(object):
     """A read-only @property that is only evaluated once."""
     def __init__(self, fget, doc=None):
index ee5eb28ccdc884337f3b03da5e7bce83e4da9ea7..85f79d2aec4365134bad426da9318ce6e5f8799b 100644 (file)
@@ -1,4 +1,4 @@
-from sqlalchemy.test.testing import eq_
+from sqlalchemy.test.testing import eq_, ne_
 from sqlalchemy.util import defaultdict
 from sqlalchemy.engine import url, default
 import shutil
@@ -27,10 +27,13 @@ def _testing_options(**kw):
             'config', 
             os.path.join(staging_directory, 'test_alembic.ini')
         )
+
     return Options(
                 get_option_parser(), 
-                list(itertools.chain(*[["--%s" % k, "%r" % v] for k, v in kw.items()]) )
-                + [os.path.join(staging_directory, 'scripts')]
+                ["./scripts/alembic"] + \
+                list(itertools.chain(*[["--%s" % k, "%s" % v] for k, v in kw.items()])) + \
+                ["init"] +\
+                [os.path.join(staging_directory, 'scripts')]
             )
     
 def staging_env(create=True):
index f704cde05f361000be2764b5a4309ef92eded3dc..5ee1368bf35ceaea1ed584dd6e0ec21747117561 100644 (file)
@@ -1,4 +1,5 @@
-from tests import clear_staging_env, staging_env, eq_
+from tests import clear_staging_env, staging_env, eq_, ne_
+from alembic import util
 import os
 
 def test_001_environment():
@@ -8,38 +9,44 @@ def test_001_environment():
         assert_set
     )
 
-def test_002_heads():
+def test_002_rev_ids():
+    global abc, def_
+    abc = util.rev_id()
+    def_ = util.rev_id()
+    ne_(abc, def_)
+    
+def test_003_heads():
     eq_(env._get_heads(), [])
     
-def test_003_rev():
-    script = env.generate_rev("abc", "this is a message")
+def test_004_rev():
+    script = env.generate_rev(abc, "this is a message")
     eq_(script.module.__doc__,"this is a message")
-    eq_(script.upgrade, "abc")
+    eq_(script.upgrade, abc)
     eq_(script.downgrade, None)
-    assert os.access(os.path.join(env.dir, 'versions', 'abc.py'), os.F_OK)
-    assert callable(script.module.upgrade_abc)
-    eq_(env._get_heads(), ["abc"])
+    assert os.access(os.path.join(env.dir, 'versions', '%s.py' % abc), os.F_OK)
+    assert callable(getattr(script.module, 'upgrade_%s' % abc))
+    eq_(env._get_heads(), [abc])
     
-def test_004_nextrev():
-    script = env.generate_rev("def", "this is the next rev")
-    eq_(script.upgrade, "def")
-    eq_(script.downgrade, "abc")
-    eq_(env._revision_map["abc"].nextrev, "def")
-    assert callable(script.module.upgrade_def)
-    assert callable(script.module.downgrade_abc)
-    eq_(env._get_heads(), ["def"])
+def test_005_nextrev():
+    script = env.generate_rev(def_, "this is the next rev")
+    eq_(script.upgrade, def_)
+    eq_(script.downgrade, abc)
+    eq_(env._revision_map[abc].nextrev, def_)
+    assert callable(getattr(script.module, 'upgrade_%s' % def_))
+    assert callable(getattr(script.module, 'downgrade_%s' % abc))
+    eq_(env._get_heads(), [def_])
 
-def test_005_from_clean_env():
+def test_006_from_clean_env():
     # test the environment so far with a 
     # new ScriptDirectory instance.
     
     env = staging_env(create=False)
-    abc = env._revision_map["abc"]
-    def_ = env._revision_map["def"]
-    eq_(abc.nextrev, "def")
-    eq_(abc.upgrade, "abc")
-    eq_(def_.downgrade, "abc")
-    eq_(env._get_heads(), ["def"])
+    abc_rev = env._revision_map[abc]
+    def_rev = env._revision_map[def_]
+    eq_(abc_rev.nextrev, def_)
+    eq_(abc_rev.upgrade, abc)
+    eq_(def_rev.downgrade, abc)
+    eq_(env._get_heads(), [def_])
     
 def setup():
     global env