mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-09-26 13:30:13 +00:00
6f9c7f39fb
This doesn't impact much, it just allows you to reverse the migration, which you would probably (hopefully) only want ot do in development.
51 lines
1.3 KiB
Python
51 lines
1.3 KiB
Python
import re
|
|
from itertools import chain
|
|
|
|
from django.db import migrations, transaction
|
|
from django.db.models import Q
|
|
|
|
from bookwyrm.settings import LANGUAGE_ARTICLES
|
|
|
|
|
|
def set_sort_title(edition):
|
|
articles = chain(
|
|
*(LANGUAGE_ARTICLES.get(language, ()) for language in tuple(edition.languages))
|
|
)
|
|
edition.sort_title = re.sub(
|
|
f'^{" |^".join(articles)} ', "", str(edition.title).lower()
|
|
)
|
|
return edition
|
|
|
|
|
|
@transaction.atomic
|
|
def populate_sort_title(apps, schema_editor):
|
|
Edition = apps.get_model("bookwyrm", "Edition")
|
|
db_alias = schema_editor.connection.alias
|
|
editions_wo_sort_title = Edition.objects.using(db_alias).filter(
|
|
Q(sort_title__isnull=True) | Q(sort_title__exact="")
|
|
)
|
|
batch_size = 1000
|
|
start = 0
|
|
end = batch_size
|
|
while True:
|
|
batch = editions_wo_sort_title[start:end]
|
|
if not batch.exists():
|
|
break
|
|
Edition.objects.bulk_update(
|
|
(set_sort_title(edition) for edition in batch), ["sort_title"]
|
|
)
|
|
start = end
|
|
end += batch_size
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
("bookwyrm", "0178_auto_20230328_2132"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(
|
|
populate_sort_title, reverse_code=migrations.RunPython.noop
|
|
),
|
|
]
|