Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Refactor distribution migration 0032
This allows the migration to be reverted.

[noissue]
  • Loading branch information
mdellweg authored and dralley committed Apr 15, 2021
1 parent 66ff8fb commit d0c9bad
Showing 1 changed file with 52 additions and 51 deletions.
103 changes: 52 additions & 51 deletions pulp_rpm/app/migrations/0032_new_distribution_model.py
Expand Up @@ -4,73 +4,74 @@
import django.db.models.deletion


pks_to_delete = []


def migrate_data_from_old_master_model_to_new_master_model(apps, schema_editor):
def migrate_data_from_old_model_to_new_model_up(apps, schema_editor):
""" Move objects from RpmDistribution to NewRpmDistribution."""
RpmDistribution = apps.get_model('rpm', 'RpmDistribution')
CoreDistribution = apps.get_model('core', 'Distribution')
for old_file_distribution in RpmDistribution.objects.all():
NewRpmDistribution = apps.get_model('rpm', 'NewRpmDistribution')
for distribution in RpmDistribution.objects.all():
with transaction.atomic():
new_master_model_entry = CoreDistribution(
pulp_id=old_file_distribution.pulp_id,
pulp_created=old_file_distribution.pulp_created,
pulp_last_updated=old_file_distribution.pulp_last_updated,
pulp_type=old_file_distribution.pulp_type,
name=old_file_distribution.name,
base_path=old_file_distribution.base_path,
content_guard=old_file_distribution.content_guard,
remote=old_file_distribution.remote,
publication=old_file_distribution.publication,
)
new_master_model_entry.save()
old_file_distribution.distribution_ptr = new_master_model_entry
old_file_distribution.save()
pks_to_delete.append(old_file_distribution.pulp_id)
NewRpmDistribution(
pulp_id=distribution.pulp_id,
pulp_created=distribution.pulp_created,
pulp_last_updated=distribution.pulp_last_updated,
pulp_type=distribution.pulp_type,
name=distribution.name,
base_path=distribution.base_path,
content_guard=distribution.content_guard,
remote=distribution.remote,
publication=distribution.publication
).save()
distribution.delete()


def delete_remaining_old_master_model_entries(apps, schema_editor):
with connection.cursor() as cursor:
for pk in pks_to_delete:
cursor.execute("DELETE from core_basedistribution WHERE pulp_id = %s", [pk])
def migrate_data_from_old_model_to_new_model_down(apps, schema_editor):
""" Move objects from NewRpmDistribution to RpmDistribution."""
RpmDistribution = apps.get_model('rpm', 'RpmDistribution')
NewRpmDistribution = apps.get_model('rpm', 'NewRpmDistribution')
for distribution in NewRpmDistribution.objects.all():
with transaction.atomic():
RpmDistribution(
pulp_id=distribution.pulp_id,
pulp_created=distribution.pulp_created,
pulp_last_updated=distribution.pulp_last_updated,
pulp_type=distribution.pulp_type,
name=distribution.name,
base_path=distribution.base_path,
content_guard=distribution.content_guard,
remote=distribution.remote,
publication=distribution.publication
).save()
distribution.delete()


class Migration(migrations.Migration):
atomic = False

dependencies = [
('core', '0062_add_new_distribution_mastermodel'),
('rpm', '0031_ulnremote'),
]

operations = [
migrations.AddField(
model_name='rpmdistribution',
name='distribution_ptr',
field=models.OneToOneField(auto_created=True, null=True, default=None,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True, primary_key=False,
related_name='rpm_rpmdistribution', serialize=False,
to='core.Distribution'),
preserve_default=False,
migrations.CreateModel(
name='NewRpmDistribution',
fields=[
('distribution_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, related_name='rpm_rpmdistribution', serialize=False, to='core.Distribution')),
],
options={
'default_related_name': '%(app_label)s_%(model_name)s',
},
bases=('core.distribution',),
),
migrations.RunPython(migrate_data_from_old_master_model_to_new_master_model),
migrations.RemoveField(
model_name='rpmdistribution',
name='basedistribution_ptr',
migrations.RunPython(
code=migrate_data_from_old_model_to_new_model_up,
reverse_code=migrate_data_from_old_model_to_new_model_down,
),
migrations.AlterField(
model_name='rpmdistribution',
name='distribution_ptr',
field=models.OneToOneField(auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True, primary_key=True,
related_name='rpm_rpmdistribution', serialize=False,
to='core.Distribution'),
preserve_default=False,
migrations.DeleteModel(
name='RpmDistribution',
),
migrations.RemoveField(
model_name='rpmdistribution',
name='publication',
migrations.RenameModel(
old_name='NewRpmDistribution',
new_name='RpmDistribution',
),
migrations.RunPython(delete_remaining_old_master_model_entries),
]

0 comments on commit d0c9bad

Please sign in to comment.