bookwyrm/bookwyrm/migrations/0077_rename_physical_format_edition_physical_format_detail.py

105 lines
3.1 KiB
Python
Raw Normal View History

2021-06-19 15:17:27 +00:00
# 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)
2021-06-19 15:37:53 +00:00
.filter(physical_format_detail__isnull=False)
2021-06-19 15:17:27 +00:00
)
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:
2021-06-19 15:37:53 +00:00
free_format = edition.physical_format_detail.lower()
2021-06-19 15:17:27 +00:00
if free_format in mappings:
edition.physical_format = mappings[free_format]
2021-06-19 15:37:53 +00:00
edition.save()
2021-06-19 15:17:27 +00:00
else:
2021-06-19 15:37:53 +00:00
matches = [v for k, v in mappings.items() if k in free_format]
2021-06-19 15:17:27 +00:00
if not matches:
continue
edition.physical_format = matches[0]
2021-06-19 15:37:53 +00:00
edition.save()
2021-06-19 15:17:27 +00:00
2021-08-04 21:12:37 +00:00
2021-06-19 15:36:12 +00:00
def reverse(app_registry, schema_editor):
"""doesn't need to do anything"""
2021-06-19 15:17:27 +00:00
2021-08-04 21:12:37 +00:00
2021-06-19 15:17:27 +00:00
class Migration(migrations.Migration):
dependencies = [
("bookwyrm", "0076_preview_images"),
]
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", "Audiobookformat"),
("EBook", "Ebook"),
("GraphicNovel", "Graphicnovel"),
("Hardcover", "Hardcover"),
("Paperback", "Paperback"),
],
max_length=255,
null=True,
),
),
2021-06-19 15:36:12 +00:00
migrations.RunPython(infer_format, reverse),
2021-06-19 15:17:27 +00:00
]