moviewyrm/bookwyrm/management/commands/remove_editions.py

43 lines
1.2 KiB
Python
Raw Permalink Normal View History

2021-03-08 16:49:10 +00:00
""" PROCEED WITH CAUTION: this permanently deletes book data """
from django.core.management.base import BaseCommand
from django.db.models import Count, Q
from bookwyrm import models
def remove_editions():
2021-04-26 16:15:42 +00:00
"""combine duplicate editions and update related models"""
# not in use
2021-03-08 16:49:10 +00:00
filters = {
"%s__isnull" % r.name: True for r in models.Edition._meta.related_objects
}
# no cover, no identifying fields
2021-03-08 16:49:10 +00:00
filters["cover"] = ""
null_fields = {
"%s__isnull" % f: True for f in ["isbn_10", "isbn_13", "oclc_number"]
}
2021-03-08 16:49:10 +00:00
editions = (
models.Edition.objects.filter(
Q(languages=[]) | Q(languages__contains=["English"]),
**filters,
**null_fields
)
.annotate(Count("parent_work__editions"))
.filter(
# mustn't be the only edition for the work
parent_work__editions__count__gt=1
)
)
print(editions.count())
editions.delete()
class Command(BaseCommand):
2021-04-26 16:15:42 +00:00
"""dedplucate allllll the book data models"""
2021-03-08 16:49:10 +00:00
help = "merges duplicate book data"
# pylint: disable=no-self-use,unused-argument
def handle(self, *args, **options):
2021-04-26 16:15:42 +00:00
"""run deudplications"""
remove_editions()