def test_rebase__normal_rebase(self, scripts_dir):
     home = MigrationHome(scripts_dir)
     home.migrations["gggggg"].change_down_revision("cccccc")
     home.migrations["eeeeee"].change_down_revision("dddddd")
     # now, the graph should look like this:
     # .......................
     # .                     .
     # .      aaaaaa         .
     # .        |            .
     # .      bbbbbb         .
     # .       / \           .
     # .      /   \          .
     # .  ccccc  dddddd      .
     # .   |      /  \       .
     # .   |     /    \      .
     # .   |  eeeee  ffffff  .
     # .   |                 .
     # .  gggggg             .
     # .                     .
     # .                     .
     # .......................
     home.rebase("dddddd", "gggggg")
     assert home.generate_dependency_graph() == {
         "aaaaaa": {None},
         "bbbbbb": {"aaaaaa"},
         "cccccc": {"bbbbbb"},
         "dddddd": {"gggggg"},
         "eeeeee": {"dddddd"},
         "ffffff": {"dddddd"},
         "gggggg": {"cccccc"},
     }
 def test_generate_dependency_graph(self, scripts_dir):
     home = MigrationHome(scripts_dir)
     assert home.generate_dependency_graph() == {
         "aaaaaa": {None},
         "bbbbbb": {"aaaaaa"},
         "cccccc": {"bbbbbb"},
         "dddddd": {"bbbbbb"},
         "eeeeee": {"cccccc", "dddddd"},
         "ffffff": {"dddddd"},
         "gggggg": {"eeeeee", "ffffff"},
     }
 def test_move__multiple_new_base(self, scripts_dir):
     home = MigrationHome(scripts_dir)
     home.move("eeeeee", "ffffff", "dddddd")
     assert home.generate_dependency_graph() == {
         "aaaaaa": {None},
         "bbbbbb": {"aaaaaa"},
         "cccccc": {"bbbbbb"},
         "dddddd": {"bbbbbb"},
         "ffffff": {"dddddd"},
         "gggggg": {"ffffff", "cccccc", "dddddd"},
         "eeeeee": {"ffffff", "dddddd"},
     }
 def test_prune__delete_head(self, scripts_dir):
     home = MigrationHome(scripts_dir)
     assert scripts_dir.joinpath("gggggg-dummy-migration.py").exists()
     home.prune("gggggg")
     assert home.generate_dependency_graph() == {
         "aaaaaa": {None},
         "bbbbbb": {"aaaaaa"},
         "cccccc": {"bbbbbb"},
         "dddddd": {"bbbbbb"},
         "eeeeee": {"cccccc", "dddddd"},
         "ffffff": {"dddddd"},
     }
     assert not scripts_dir.joinpath("gggggg-dummy-migration.py").exists()
 def test_prune__delete_complex_branch(self, scripts_dir):
     home = MigrationHome(scripts_dir)
     assert os.path.exists(
         os.path.join(scripts_dir, "dddddd-dummy-migration.py"))
     home.prune("dddddd")
     assert home.generate_dependency_graph() == {
         "aaaaaa": {None},
         "bbbbbb": {"aaaaaa"},
         "cccccc": {"bbbbbb"},
         "eeeeee": {"bbbbbb", "cccccc"},
         "ffffff": {"bbbbbb"},
         "gggggg": {"eeeeee", "ffffff"},
     }
     assert not os.path.exists(
         os.path.join(scripts_dir, "dddddd-dummy-migration.py"))
Beispiel #6
0
def render(
    alembic_home_dir: pathlib.Path = typer.Option(
        "etc/alembic/versions",
        exists=True,
        help="The directory where the alembic migrations live",
    ),
):
    home = MigrationHome(alembic_home_dir)
    graph = home.generate_dependency_graph()
    print("strict digraph {")
    for (key, value) in graph.items():
        for child in value:
            if child is None:
                continue
            print(f"  {key} -> {child}")
    print("}")