def add_delete_partitioned_model(self, operation: DeleteModel): """Adds a :see:PostgresDeletePartitionedModel operation to the list of operations to execute in the migration.""" _, args, kwargs = operation.deconstruct() return self.add( operations.PostgresDeletePartitionedModel(*args, **kwargs))
def add_delete_materialized_view_model(self, operation: DeleteModel): """Adds a :see:PostgresDeleteMaterializedViewModel operation to the list of operations to execute in the migration.""" _, args, kwargs = operation.deconstruct() return self.add( operations.PostgresDeleteMaterializedViewModel(*args, **kwargs))
def test_ambiguous_operations(self): self.migration.operations = [ CreateModel("model", []), DeleteModel("model") ] with self.assertRaises(AmbiguousStage): must_post_deploy_migration(self.migration)
def test_ambiguous_operations(self): self.migration.operations = [ CreateModel("model", []), DeleteModel("model") ] with self.assertRaises(AmbiguousStage): get_migration_stage(self.migration)
def test_mixed_reorder(self): post_deploy_operations = [DeleteModel("other")] self.assertEqual( partition_operations( post_deploy_operations + self.pre_deploy_operations, "migrations"), (self.pre_deploy_operations, post_deploy_operations), )
def test_post_deploy_operations(self): post_deploy_operation = Operation() post_deploy_operation.stage = Stage.POST_DEPLOY operations = [ DeleteModel("model"), RemoveField("model", "field"), post_deploy_operation, ] for operation in operations: with self.subTest(operation=operation): self.assertIs(get_operation_stage(operation), Stage.POST_DEPLOY)
def test_operations_stages(self): self.assertIsNone(get_migration_stage(self.migration)) self.migration.operations = [CreateModel("model", [])] self.assertEqual(get_migration_stage(self.migration), Stage.PRE_DEPLOY) self.migration.operations = [ DeleteModel("model"), RemoveField("model", "field"), ] self.assertEqual(get_migration_stage(self.migration), Stage.POST_DEPLOY)
def test_stage_fallback_setting(self): self.migration.operations = [ CreateModel("model", []), DeleteModel("model") ] with self.assertRaises(AmbiguousStage): get_migration_stage(self.migration) overrides = ["tests.migration", "tests"] for stage, override in product(Stage, overrides): with self.subTest(stage=stage, override=override), self.settings( MIGRATION_STAGES_FALLBACK={override: stage}): self.assertIs(get_migration_stage(self.migration), stage)
class PartitionOperationsTests(SimpleTestCase): pre_deploy_operations = [ CreateModel("model", []), ] post_deploy_operations = [ DeleteModel("model"), ] def test_empty(self): self.assertEqual(partition_operations([], "migrations"), ([], [])) def test_pre_deploy_only(self): self.assertEqual( partition_operations(self.pre_deploy_operations, "migrations"), (self.pre_deploy_operations, []), ) def test_post_deploy_only(self): self.assertEqual( partition_operations(self.post_deploy_operations, "migrations"), ([], self.post_deploy_operations), ) def test_mixed(self): self.assertEqual( partition_operations( self.pre_deploy_operations + self.post_deploy_operations, "migrations"), (self.pre_deploy_operations, self.post_deploy_operations), ) def test_mixed_reorder(self): post_deploy_operations = [DeleteModel("other")] self.assertEqual( partition_operations( post_deploy_operations + self.pre_deploy_operations, "migrations"), (self.pre_deploy_operations, post_deploy_operations), ) def test_ambiguous(self): with self.assertRaises(AmbiguousStage): partition_operations( self.post_deploy_operations + self.pre_deploy_operations, "migrations")