diff --git a/tcms/testcases/migrations/0011_trim_bugsystem_fields.py b/tcms/testcases/migrations/0011_trim_bugsystem_fields.py index 12df6a90e0..8044765016 100644 --- a/tcms/testcases/migrations/0011_trim_bugsystem_fields.py +++ b/tcms/testcases/migrations/0011_trim_bugsystem_fields.py @@ -1,37 +1,33 @@ -# Generated by Django 2.2.4 on 2019-08-16 12:17 +import glob +import json + from django.db import migrations, models +from tcms.rpc.serializer import Serializer + def forwards_store_data(apps, schema_editor): bug_system_model = apps.get_model('testcases', 'BugSystem') - file_name = '/tmp/kiwitcms-testcases-migration-0011-\ -BugSystem' # nosec:B108:hardcoded_tmp_directory - with open(file_name, 'w') as temp_file: - for bug_system in bug_system_model.objects.all(): - temp_file.write('{},{},{},{}\n'.format( - bug_system.name, - bug_system.description, - bug_system.url_reg_exp, - bug_system.validate_reg_exp - )) + for bug_system in bug_system_model.objects.all(): + file_name = '/tmp/kiwitcms-testcases-migration\ +-0011-BugSystem-%d' % bug_system.pk # nosec:B108:hardcoded_tmp_directory + + with open(file_name, 'w') as outfile: + json.dump(Serializer(model=bug_system).serialize_model(), outfile) def backwards_restore_data(apps, schema_editor): bug_system_model = apps.get_model('testcases', 'BugSystem') - file_name = '/tmp/kiwitcms-testcases-migration-0011-\ -BugSystem' # nosec:B108:hardcoded_tmp_directory - with open(file_name, 'r') as temp_file: - for line in temp_file: - try: - bug_system = bug_system_model.objects.get(name=line[0]) - bug_system.description = line[1] - bug_system.url_reg_exp = line[2] - bug_system.validate_reg_exp = line[3] - bug_system.save() - except bug_system_model.DoesNotExist: - print('BugSystem {} not found'.format(line[0])) + for file_name in glob.glob( + '/tmp/kiwitcms-testcases-migration-0011-\ +BugSystem-*' # nosec:B108:hardcoded_tmp_directory + ): + with open(file_name, 'r') as infile: + data = json.load(infile) + bug_system = bug_system_model(**data) + bug_system.save() class Migration(migrations.Migration): @@ -41,7 +37,25 @@ class Migration(migrations.Migration): ] operations = [ + # make these 2 fields null=True so they can be restored in the reverse migration + # once these 2 operations are reversed the fields should become once again NOT NULL + migrations.AlterField(model_name='bugsystem', + name='validate_reg_exp', + field=models.CharField(max_length=128, + help_text='A valid JavaScript regular ' + 'expression such as ^\\d$', + verbose_name='RegExp for ID validation', + null=True)), + migrations.AlterField(model_name='bugsystem', + name='url_reg_exp', + field=models.CharField(max_length=8192, + help_text='A valid Python format string such ' + 'as http://bugs.example.com/%s', + verbose_name='URL format string', + null=True)), + migrations.RunPython(forwards_store_data, backwards_restore_data), + migrations.RemoveField( model_name='bugsystem', name='description', @@ -54,20 +68,4 @@ class Migration(migrations.Migration): model_name='bugsystem', name='validate_reg_exp', ), - migrations.AlterField(model_name='bugsystem', - name='validate_reg_exp', - preserve_default=False, - field=models.CharField(max_length=128, - help_text='A valid JavaScript regular ' - 'expression such as ^\\d$', - verbose_name='RegExp for ID validation', - default='')), - migrations.AlterField(model_name='bugsystem', - name='url_reg_exp', - preserve_default=False, - field=models.CharField(max_length=8192, - help_text='A valid Python format string such ' - 'as http://bugs.example.com/%s', - verbose_name='URL format string', - default='')), ]