From 590132c52e9fe3e5523cde7ea1206ce586880689 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 24 Jul 2014 18:48:17 -0400 Subject: [PATCH] - ignore __init__.py in versions directory, fixes #95. --- alembic/script.py | 5 +++-- docs/build/changelog.rst | 9 +++++++++ tests/test_revision_create.py | 34 +++++++++++++++++++++++++++++++++- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/alembic/script.py b/alembic/script.py index 32943664..ed44f71b 100644 --- a/alembic/script.py +++ b/alembic/script.py @@ -4,8 +4,8 @@ import re import shutil from . import util -_sourceless_rev_file = re.compile(r'(.*\.py)(c|o)?$') -_only_source_rev_file = re.compile(r'(.*\.py)$') +_sourceless_rev_file = re.compile(r'(?!__init__)(.*\.py)(c|o)?$') +_only_source_rev_file = re.compile(r'(?!__init__)(.*\.py)$') _legacy_rev = re.compile(r'([a-f0-9]+)\.py$') _mod_def_re = re.compile(r'(upgrade|downgrade)_([a-z0-9]+)') _slug_re = re.compile(r'\w+') @@ -209,6 +209,7 @@ class ScriptDirectory(object): @util.memoized_property def _revision_map(self): map_ = {} + for file_ in os.listdir(self.versions): script = Script._from_filename(self, self.versions, file_) if script is None: diff --git a/docs/build/changelog.rst b/docs/build/changelog.rst index 5f140405..1f7cb5db 100644 --- a/docs/build/changelog.rst +++ b/docs/build/changelog.rst @@ -5,6 +5,15 @@ Changelog .. changelog:: :version: 0.6.6 + .. change:: + :tags: bug + :tickets: 95 + :pullreq: bitbucket:24 + + A file named ``__init__.py`` in the ``versions/`` directory is now + ignored by Alembic when the collection of version files is retrieved. + Pull request courtesy Michael Floering. + .. change:: :tags: bug :pullreq: bitbucket:23 diff --git a/tests/test_revision_create.py b/tests/test_revision_create.py index 07ed6d44..5bf12cf4 100644 --- a/tests/test_revision_create.py +++ b/tests/test_revision_create.py @@ -1,7 +1,7 @@ from tests import clear_staging_env, staging_env, eq_, ne_, is_, staging_directory from tests import _no_sql_testing_config, env_file_fixture, script_file_fixture, _testing_config from alembic import command -from alembic.script import ScriptDirectory +from alembic.script import ScriptDirectory, Script from alembic.environment import EnvironmentContext from alembic import util import os @@ -159,6 +159,36 @@ class TemplateArgsTest(unittest.TestCase): {"x": "x1", "y": "y2", "z": "z1", "q": "q1"} ) + def test_step_ignore_init_py(self): + """test that __init__.py is ignored.""" + + env_file_fixture(""" +context.configure(dialect_name='sqlite', template_args={"somearg":"somevalue"}) +""") + command.revision(self.cfg, message="some rev") + script = ScriptDirectory.from_config(self.cfg) + path = os.path.join(script.versions, "__init__.py") + with open(path, 'w') as f: + f.write( + "crap, crap -> crap" + ) + command.revision(self.cfg, message="another rev") + + script.get_revision('head') + + def test_is_ignored_filename(self): + script = ScriptDirectory.from_config(self.cfg) + cases = [ + '__init__.py', + u'__init__.py', + u'__init__.pyc', + u'__init__.pyx', + u'__init__.pyo', + ] + for case in cases: + assert Script._from_filename( + script, script.versions, case) is None + def test_tmpl_args_revision(self): env_file_fixture(""" context.configure(dialect_name='sqlite', template_args={"somearg":"somevalue"}) @@ -168,8 +198,10 @@ context.configure(dialect_name='sqlite', template_args={"somearg":"somevalue"}) revision = ${repr(up_revision)} down_revision = ${repr(down_revision)} """) + command.revision(self.cfg, message="some rev") script = ScriptDirectory.from_config(self.cfg) + rev = script.get_revision('head') with open(rev.path) as f: text = f.read() -- 2.47.2