2023-04-25 04:29:55 +00:00
|
|
|
import re
|
|
|
|
from itertools import chain
|
|
|
|
|
|
|
|
from django.db import migrations, transaction
|
|
|
|
from django.db.models import Q
|
|
|
|
|
|
|
|
from bookwyrm.settings import LANGUAGE_ARTICLES
|
|
|
|
|
|
|
|
|
2023-04-27 20:30:52 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
|
2023-04-25 04:29:55 +00:00
|
|
|
@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="")
|
|
|
|
)
|
2023-07-17 12:42:17 +00:00
|
|
|
batch_size = 1000
|
2023-04-27 20:30:52 +00:00
|
|
|
start = 0
|
|
|
|
end = batch_size
|
2023-04-29 14:43:55 +00:00
|
|
|
while True:
|
|
|
|
batch = editions_wo_sort_title[start:end]
|
|
|
|
if not batch.exists():
|
|
|
|
break
|
2023-04-27 20:30:52 +00:00
|
|
|
Edition.objects.bulk_update(
|
2023-04-29 14:43:55 +00:00
|
|
|
(set_sort_title(edition) for edition in batch), ["sort_title"]
|
2023-04-26 00:46:38 +00:00
|
|
|
)
|
2023-04-27 20:30:52 +00:00
|
|
|
start = end
|
|
|
|
end += batch_size
|
2023-04-25 04:29:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
|
|
|
|
dependencies = [
|
|
|
|
("bookwyrm", "0178_auto_20230328_2132"),
|
|
|
|
]
|
|
|
|
|
|
|
|
operations = [
|
2023-11-01 23:24:47 +00:00
|
|
|
migrations.RunPython(
|
|
|
|
populate_sort_title, reverse_code=migrations.RunPython.noop
|
|
|
|
),
|
2023-04-25 04:29:55 +00:00
|
|
|
]
|