コード例 #1
0
        def process_revision_directives(context, rev, generate_revisions):
            existing_upgrades = generate_revisions[0].upgrade_ops
            existing_downgrades = generate_revisions[0].downgrade_ops

            # model1 will run the upgrades, e.g. create the table,
            # model2 will run the downgrades as upgrades, e.g. drop
            # the table again

            generate_revisions[:] = [
                ops.MigrationScript(
                    util.rev_id(),
                    existing_upgrades,
                    ops.DowngradeOps(),
                    version_path=os.path.join(_get_staging_directory(),
                                              "model1"),
                    head="model1@head",
                ),
                ops.MigrationScript(
                    util.rev_id(),
                    ops.UpgradeOps(ops=existing_downgrades.ops),
                    ops.DowngradeOps(),
                    version_path=os.path.join(_get_staging_directory(),
                                              "model2"),
                    head="model2@head",
                ),
            ]
コード例 #2
0
        def process_revision_directives(context, rev, generate_revisions):
            existing_upgrades = generate_revisions[0].upgrade_ops
            existing_downgrades = generate_revisions[0].downgrade_ops

            # model1 will run the upgrades, e.g. create the table,
            # model2 will run the downgrades as upgrades, e.g. drop
            # the table again

            generate_revisions[:] = [
                ops.MigrationScript(
                    util.rev_id(),
                    existing_upgrades,
                    ops.DowngradeOps(),
                    version_path=os.path.join(
                        _get_staging_directory(), "model1"),
                    head="model1@head"
                ),
                ops.MigrationScript(
                    util.rev_id(),
                    existing_downgrades,
                    ops.DowngradeOps(),
                    version_path=os.path.join(
                        _get_staging_directory(), "model2"),
                    head="model2@head"
                )
            ]
コード例 #3
0
 def process_revision_directives(context, rev, generate_revisions):
     generate_revisions[:] = [
         ops.MigrationScript(
             util.rev_id(),
             ops.UpgradeOps(),
             ops.DowngradeOps(),
             version_path=os.path.join(
                 _get_staging_directory(), "model1"),
             head="model1@head"
         ),
         ops.MigrationScript(
             util.rev_id(),
             ops.UpgradeOps(),
             ops.DowngradeOps(),
             version_path=os.path.join(
                 _get_staging_directory(), "model2"),
             head="model2@head"
         ),
         ops.MigrationScript(
             util.rev_id(),
             ops.UpgradeOps(),
             ops.DowngradeOps(),
             version_path=os.path.join(
                 _get_staging_directory(), "model3"),
             head="model3@head"
         ),
     ]
コード例 #4
0
 def process_revision_directives(context, rev, generate_revisions):
     generate_revisions[:] = [
         ops.MigrationScript(
             util.rev_id(),
             ops.UpgradeOps(),
             ops.DowngradeOps(),
             version_path=os.path.join(_get_staging_directory(),
                                       "model1"),
             head="model1@head",
         ),
         ops.MigrationScript(
             util.rev_id(),
             ops.UpgradeOps(),
             ops.DowngradeOps(),
             version_path=os.path.join(_get_staging_directory(),
                                       "model2"),
             head="model2@head",
         ),
         ops.MigrationScript(
             util.rev_id(),
             ops.UpgradeOps(),
             ops.DowngradeOps(),
             version_path=os.path.join(_get_staging_directory(),
                                       "model3"),
             head="model3@head",
         ),
     ]
コード例 #5
0
    def test_script_location_muliple(self):
        config = _multi_dir_testing_config()

        script = ScriptDirectory.from_config(config)

        def normpath(path):
            return path.replace("/", ":NORM:")

        normpath = mock.Mock(side_effect=normpath)

        with mock.patch("os.path.normpath", normpath):
            eq_(
                script._version_locations,
                [
                    os.path.abspath(
                        os.path.join(_get_staging_directory(),
                                     "model1/")).replace("/", ":NORM:"),
                    os.path.abspath(
                        os.path.join(_get_staging_directory(),
                                     "model2/")).replace("/", ":NORM:"),
                    os.path.abspath(
                        os.path.join(_get_staging_directory(),
                                     "model3/")).replace("/", ":NORM:"),
                ],
            )
コード例 #6
0
    def test_script_location(self):
        config = _no_sql_testing_config()

        script = ScriptDirectory.from_config(config)

        def normpath(path):
            return path.replace("/", ":NORM:")

        normpath = mock.Mock(side_effect=normpath)

        with mock.patch("os.path.normpath", normpath):
            eq_(
                script._version_locations,
                (
                    os.path.abspath(
                        os.path.join(
                            _get_staging_directory(), "scripts", "versions"
                        )
                    ).replace("/", ":NORM:"),
                ),
            )

            eq_(
                script.versions,
                os.path.abspath(
                    os.path.join(
                        _get_staging_directory(), "scripts", "versions"
                    )
                ).replace("/", ":NORM:"),
            )
コード例 #7
0
ファイル: plugin_base.py プロジェクト: maxy1106/flask-every
def stop_test_class(cls):
    sqla_stc(cls)
    import os
    from alembic.testing.env import _get_staging_directory

    assert not os.path.exists(_get_staging_directory()), (
        "staging directory %s was not cleaned up" % _get_staging_directory())
コード例 #8
0
 def test_args(self):
     script = ScriptDirectory(_get_staging_directory(),
                              file_template="%(rev)s_%(slug)s_"
                              "%(year)s_%(month)s_"
                              "%(day)s_%(hour)s_"
                              "%(minute)s_%(second)s")
     create_date = datetime.datetime(2012, 7, 25, 15, 8, 5)
     eq_(
         script._rev_path(script.versions, "12345", "this is a message",
                          create_date),
         os.path.abspath("%s/versions/12345_this_is_a_"
                         "message_2012_7_25_15_8_5.py" %
                         _get_staging_directory()))
コード例 #9
0
 def test_multiple_dir_no_bases_version_path(self):
     script = command.revision(
         self.cfg,
         message="x",
         version_path=os.path.join(_get_staging_directory(), "model1"),
     )
     assert os.access(script.path, os.F_OK)
コード例 #10
0
    def setUp(self):
        self.env = staging_env()
        self.cfg = _multi_dir_testing_config()
        self.cfg.set_main_option("revision_environment", "true")

        script = ScriptDirectory.from_config(self.cfg)
        # MARKMARK
        self.model1 = util.rev_id()
        self.model2 = util.rev_id()
        self.model3 = util.rev_id()
        for model, name in [
            (self.model1, "model1"),
            (self.model2, "model2"),
            (self.model3, "model3"),
        ]:
            script.generate_revision(
                model, name, refresh=True,
                version_path=os.path.join(_get_staging_directory(), name),
                head="base")

            write_script(script, model, """\
"%s"
revision = '%s'
down_revision = None
branch_labels = ['%s']

from alembic import op

def upgrade():
    pass

def downgrade():
    pass

""" % (name, model, name))
コード例 #11
0
 def test_args(self):
     script = ScriptDirectory(
         _get_staging_directory(),
         file_template="%(rev)s_%(slug)s_"
         "%(year)s_%(month)s_"
         "%(day)s_%(hour)s_"
         "%(minute)s_%(second)s"
     )
     create_date = datetime.datetime(2012, 7, 25, 15, 8, 5)
     eq_(
         script._rev_path(
             script.versions, "12345", "this is a message", create_date),
         os.path.abspath(
             "%s/versions/12345_this_is_a_"
             "message_2012_7_25_15_8_5.py" % _get_staging_directory())
     )
コード例 #12
0
    def setUp(self):
        self.env = staging_env()
        self.cfg = _multi_dir_testing_config()
        self.cfg.set_main_option("revision_environment", "true")

        script = ScriptDirectory.from_config(self.cfg)
        self.model1 = util.rev_id()
        self.model2 = util.rev_id()
        self.model3 = util.rev_id()
        for model, name in [
            (self.model1, "model1"),
            (self.model2, "model2"),
            (self.model3, "model3"),
        ]:
            script.generate_revision(
                model, name, refresh=True,
                version_path=os.path.join(_get_staging_directory(), name),
                head="base")

            write_script(script, model, """\
"%s"
revision = '%s'
down_revision = None
branch_labels = ['%s']

from alembic import op

def upgrade():
    pass

def downgrade():
    pass

""" % (name, model, name))
コード例 #13
0
ファイル: test_post_write.py プロジェクト: zzzeek/alembic
 def expected_additional_arguments_fn(rev_path):
     return [
         "arg1",
         rev_path,
         "--config",
         os.path.abspath(_get_staging_directory()) + "/pyproject.toml",
     ]
コード例 #14
0
 def _write_metadata(self, meta):
     path = os.path.join(_get_staging_directory(), 'scripts', 'env.py')
     with open(path) as env_:
         existing_env = env_.read()
     existing_env = existing_env.replace("target_metadata = {}", meta)
     with open(path, "w") as env_:
         env_.write(existing_env)
コード例 #15
0
 def _write_metadata(self, meta):
     path = os.path.join(_get_staging_directory(), 'scripts', 'env.py')
     with open(path) as env_:
         existing_env = env_.read()
     existing_env = existing_env.replace(
         "target_metadata = {}",
         meta)
     with open(path, "w") as env_:
         env_.write(existing_env)
コード例 #16
0
    def test_new_locations_no_autogen(self):
        m = sa.MetaData()

        def process_revision_directives(context, rev, generate_revisions):
            generate_revisions[:] = [
                ops.MigrationScript(
                    util.rev_id(),
                    ops.UpgradeOps(),
                    ops.DowngradeOps(),
                    version_path=os.path.join(
                        _get_staging_directory(), "model1"
                    ),
                    head="model1@head",
                ),
                ops.MigrationScript(
                    util.rev_id(),
                    ops.UpgradeOps(),
                    ops.DowngradeOps(),
                    version_path=os.path.join(
                        _get_staging_directory(), "model2"
                    ),
                    head="model2@head",
                ),
                ops.MigrationScript(
                    util.rev_id(),
                    ops.UpgradeOps(),
                    ops.DowngradeOps(),
                    version_path=os.path.join(
                        _get_staging_directory(), "model3"
                    ),
                    head="model3@head",
                ),
            ]

        with self._env_fixture(process_revision_directives, m):
            revs = command.revision(self.cfg, message="some message")

        script = ScriptDirectory.from_config(self.cfg)

        for rev, model in [
            (revs[0], "model1"),
            (revs[1], "model2"),
            (revs[2], "model3"),
        ]:
            rev_script = script.get_revision(rev.revision)
            eq_(
                rev_script.path,
                os.path.abspath(
                    os.path.join(
                        _get_staging_directory(),
                        model,
                        "%s_.py" % (rev_script.revision,),
                    )
                ),
            )
            assert os.path.exists(rev_script.path)
コード例 #17
0
    def test_multiple_dir_chooses_base(self):
        command.revision(
            self.cfg, message="x",
            head="base",
            version_path=os.path.join(_get_staging_directory(), "model1"))

        script2 = command.revision(
            self.cfg, message="y",
            head="base",
            version_path=os.path.join(_get_staging_directory(), "model2"))

        script3 = command.revision(
            self.cfg, message="y2",
            head=script2.revision)

        eq_(
            os.path.dirname(script3.path),
            os.path.abspath(os.path.join(_get_staging_directory(), "model2"))
        )
        assert os.access(script3.path, os.F_OK)
コード例 #18
0
 def test_env_emits_warning(self):
     with assertions.expect_warnings(
             "File %s loaded twice! ignoring. "
             "Please ensure version_locations is unique" %
         (os.path.realpath(
             os.path.join(_get_staging_directory(), "model1",
                          "%s_model1.py" % self.model1)))):
         script = ScriptDirectory.from_config(self.cfg)
         script.revision_map.heads
         eq_([rev.revision for rev in script.walk_revisions()],
             [self.model1, self.model2, self.model3])
コード例 #19
0
    def test_multiple_dir_chooses_base(self):
        command.revision(self.cfg,
                         message="x",
                         head="base",
                         version_path=os.path.join(_get_staging_directory(),
                                                   "model1"))

        script2 = command.revision(self.cfg,
                                   message="y",
                                   head="base",
                                   version_path=os.path.join(
                                       _get_staging_directory(), "model2"))

        script3 = command.revision(self.cfg,
                                   message="y2",
                                   head=script2.revision)

        eq_(os.path.dirname(script3.path),
            os.path.abspath(os.path.join(_get_staging_directory(), "model2")))
        assert os.access(script3.path, os.F_OK)
コード例 #20
0
    def test_new_locations_no_autogen(self):
        m = sa.MetaData()

        def process_revision_directives(context, rev, generate_revisions):
            generate_revisions[:] = [
                ops.MigrationScript(
                    util.rev_id(),
                    ops.UpgradeOps(),
                    ops.DowngradeOps(),
                    version_path=os.path.join(
                        _get_staging_directory(), "model1"),
                    head="model1@head"
                ),
                ops.MigrationScript(
                    util.rev_id(),
                    ops.UpgradeOps(),
                    ops.DowngradeOps(),
                    version_path=os.path.join(
                        _get_staging_directory(), "model2"),
                    head="model2@head"
                ),
                ops.MigrationScript(
                    util.rev_id(),
                    ops.UpgradeOps(),
                    ops.DowngradeOps(),
                    version_path=os.path.join(
                        _get_staging_directory(), "model3"),
                    head="model3@head"
                ),
            ]

        with self._env_fixture(process_revision_directives, m):
            revs = command.revision(self.cfg, message="some message")

        script = ScriptDirectory.from_config(self.cfg)

        for rev, model in [
            (revs[0], "model1"),
            (revs[1], "model2"),
            (revs[2], "model3"),
        ]:
            rev_script = script.get_revision(rev.revision)
            eq_(
                rev_script.path,
                os.path.abspath(os.path.join(
                    _get_staging_directory(), model,
                    "%s_.py" % (rev_script.revision, )
                ))
            )
            assert os.path.exists(rev_script.path)
コード例 #21
0
    def _test_tz(self, timezone_arg, given, expected):
        script = ScriptDirectory(_get_staging_directory(),
                                 file_template="%(rev)s_%(slug)s_"
                                 "%(year)s_%(month)s_"
                                 "%(day)s_%(hour)s_"
                                 "%(minute)s_%(second)s",
                                 timezone=timezone_arg)

        with mock.patch(
                "alembic.script.base.datetime",
                mock.Mock(datetime=mock.Mock(utcnow=lambda: given,
                                             now=lambda: given))):
            create_date = script._generate_create_date()
        eq_(create_date, expected)
コード例 #22
0
 def test_env_emits_warning(self):
     with assertions.expect_warnings(
         "File %s loaded twice! ignoring. "
         "Please ensure version_locations is unique" % (
             os.path.realpath(os.path.join(
             _get_staging_directory(),
             "model1",
             "%s_model1.py" % self.model1
             )))
     ):
         script = ScriptDirectory.from_config(self.cfg)
         script.revision_map.heads
         eq_(
             [rev.revision for rev in script.walk_revisions()],
             [self.model1, self.model2, self.model3]
         )
コード例 #23
0
    def setUp(self):
        self.env = staging_env()
        self.cfg = _multi_dir_testing_config(
            # this is a duplicate of one of the paths
            # already present in this fixture
            extra_version_location="%(here)s/model1"
        )

        script = ScriptDirectory.from_config(self.cfg)
        self.model1 = util.rev_id()
        self.model2 = util.rev_id()
        self.model3 = util.rev_id()
        for model, name in [
            (self.model1, "model1"),
            (self.model2, "model2"),
            (self.model3, "model3"),
        ]:
            script.generate_revision(
                model,
                name,
                refresh=True,
                version_path=os.path.join(_get_staging_directory(), name),
                head="base",
            )
            write_script(
                script,
                model,
                """\
"%s"
revision = '%s'
down_revision = None
branch_labels = ['%s']

from alembic import op


def upgrade():
    pass


def downgrade():
    pass

"""
                % (name, model, name),
            )
コード例 #24
0
    def test_sys_path_prepend(self, config_value, expected):
        self.cfg.set_main_option("prepend_sys_path", config_value)

        script = ScriptDirectory.from_config(self.cfg)
        env = EnvironmentContext(self.cfg, script)

        target = os.path.abspath(_get_staging_directory())

        def assert_(heads, context):
            eq_(
                [os.path.abspath(p) for p in sys.path[0:len(expected)]],
                [os.path.abspath(p) for p in expected],
            )
            return []

        p = [p for p in sys.path if os.path.abspath(p) != target]
        with mock.patch.object(sys, "path", p):
            env.configure(url="sqlite://", fn=assert_)
            with env:
                script.run_env()
コード例 #25
0
ファイル: test_command.py プロジェクト: zzzeek/alembic
    def test_init_w_package(self):

        path = os.path.join(_get_staging_directory(), "foobar")

        with mock.patch("alembic.command.open") as open_:
            command.init(self.cfg, directory=path, package=True)
            eq_(
                open_.mock_calls,
                [
                    mock.call(
                        os.path.abspath(os.path.join(path, "__init__.py")),
                        "w"),
                    mock.call().close(),
                    mock.call(
                        os.path.abspath(
                            os.path.join(path, "versions", "__init__.py")),
                        "w",
                    ),
                    mock.call().close(),
                ],
            )
コード例 #26
0
    def setUp(self):
        self.env = staging_env()
        self.cfg = _multi_dir_testing_config(
            # this is a duplicate of one of the paths
            # already present in this fixture
            extra_version_location='%(here)s/model1'
        )

        script = ScriptDirectory.from_config(self.cfg)
        self.model1 = util.rev_id()
        self.model2 = util.rev_id()
        self.model3 = util.rev_id()
        for model, name in [
            (self.model1, "model1"),
            (self.model2, "model2"),
            (self.model3, "model3"),
        ]:
            script.generate_revision(
                model, name, refresh=True,
                version_path=os.path.join(_get_staging_directory(), name),
                head="base")
            write_script(script, model, """\
"%s"
revision = '%s'
down_revision = None
branch_labels = ['%s']

from alembic import op


def upgrade():
    pass


def downgrade():
    pass

""" % (name, model, name))
コード例 #27
0
    def _test_tz(self, timezone_arg, given, expected):
        script = ScriptDirectory(
            _get_staging_directory(),
            file_template="%(rev)s_%(slug)s_"
            "%(year)s_%(month)s_"
            "%(day)s_%(hour)s_"
            "%(minute)s_%(second)s",
            timezone=timezone_arg
        )

        with mock.patch(
                "alembic.script.base.datetime",
                mock.Mock(
                    datetime=mock.Mock(
                        utcnow=lambda: given,
                        now=lambda: given
                    )
                )
        ):
            create_date = script._generate_create_date()
        eq_(
            create_date,
            expected
        )
コード例 #28
0
def env():
    r"""Create an environment in which to run this test.

    Creates the environment directory using alembic.testing utilities, and
    additionally creates a revision map and scripts.

    Expressed visually, the map looks like this::

        A
        |
        B
        |
        C
        | \
        D  D0
        |  |  \
        E  E0  E1
        | /   / |
        F   F1  F2
        | /   / |
        G   G2  G3
        |   |  / |
        |   |  | G4
        |  /  / /
        | / / /
        ||/ /
        H--

    Note that ``H`` alone has a "depends_on", namely ``G4``.

    Uses class scope to create different environments for different backends.
    """
    env = staging_env()
    env_file_fixture(_env_content)
    _write_config_file(_cfg_content % (_get_staging_directory(),
                                       sqla_test_config.db_url))
    revs = env._revs = {}

    def gen(rev, head=None, **kw):
        if head:
            kw['head'] = [env._revs[h].revision for h in head.split()]
        revid = '__'.join((rev, util.rev_id()))
        env._revs[rev] = env.generate_revision(revid, rev, splice=True, **kw)

    gen('A')
    gen('B')
    gen('C')
    gen('D')
    gen('D0', 'C')
    gen('E', 'D')
    gen('E0', 'D0')
    gen('E1', 'D0')
    gen('F', 'E E0')
    gen('F1', 'E1')
    gen('F2', 'E1')
    gen('G', 'F F1')
    gen('G2', 'F2')
    gen('G3', 'F2')
    gen('G4', 'G3')
    gen('H', 'G G2', depends_on='G4')

    revids = env._revids = {k: v.revision for k, v in revs.items()}
    env.R = type('R', (object,), revids)
    yield env
コード例 #29
0
 def test_multiple_dir_no_bases_version_path(self):
     script = command.revision(
         self.cfg, message="x",
         version_path=os.path.join(_get_staging_directory(), "model1"))
     assert os.access(script.path, os.F_OK)