# Generated by Django 3.2 on 2021-05-21 00:17 from django.db import migrations import bookwyrm def infer_format(app_registry, schema_editor): """set the new phsyical format field based on existing format data""" db_alias = schema_editor.connection.alias editions = ( app_registry.get_model("bookwyrm", "Edition") .objects.using(db_alias) .filter(physical_format_detail__isnull=False) ) mappings = { "paperback": "Paperback", "soft": "Paperback", "pamphlet": "Paperback", "peperback": "Paperback", "tapa blanda": "Paperback", "turtleback": "Paperback", "pocket": "Paperback", "spiral": "Paperback", "ring": "Paperback", "平装": "Paperback", "简装": "Paperback", "hardcover": "Hardcover", "hardcocer": "Hardcover", "hardover": "Hardcover", "hardback": "Hardcover", "library": "Hardcover", "tapa dura": "Hardcover", "leather": "Hardcover", "clothbound": "Hardcover", "精装": "Hardcover", "ebook": "EBook", "e-book": "EBook", "digital": "EBook", "computer file": "EBook", "epub": "EBook", "online": "EBook", "pdf": "EBook", "elektronische": "EBook", "electronic": "EBook", "audiobook": "AudiobookFormat", "audio": "AudiobookFormat", "cd": "AudiobookFormat", "dvd": "AudiobookFormat", "mp3": "AudiobookFormat", "cassette": "AudiobookFormat", "kindle": "AudiobookFormat", "talking": "AudiobookFormat", "sound": "AudiobookFormat", "comic": "GraphicNovel", "graphic": "GraphicNovel", } for edition in editions: free_format = edition.physical_format_detail.lower() if free_format in mappings: edition.physical_format = mappings[free_format] edition.save() else: matches = [v for k, v in mappings.items() if k in free_format] if not matches: continue edition.physical_format = matches[0] edition.save() def reverse(app_registry, schema_editor): """doesn't need to do anything""" class Migration(migrations.Migration): dependencies = [ ('bookwyrm', '0100_shelf_description'), ] operations = [ migrations.RenameField( model_name="edition", old_name="physical_format", new_name="physical_format_detail", ), migrations.AddField( model_name="edition", name="physical_format", field=bookwyrm.models.fields.CharField( blank=True, choices=[ ("AudiobookFormat", "Audiobook"), ("EBook", "eBook"), ("GraphicNovel", "Graphic novel"), ("Hardcover", "Hardcover"), ("Paperback", "Paperback"), ], max_length=255, null=True, ), ), migrations.RunPython(infer_format, reverse), ]