med/media/management/commands/import_future_media.py

50 lines
1.9 KiB
Python
Raw Normal View History

2020-10-03 13:05:05 +00:00
from random import random
2020-05-22 19:49:09 +00:00
from time import sleep
from django.core.exceptions import ValidationError
from django.core.management import BaseCommand
from media.forms import MediaAdminForm
from media.models import BD, FutureMedia, Manga, Roman
class Command(BaseCommand):
def handle(self, *args, **options):
for future_medium in FutureMedia.objects.all():
isbn = future_medium.isbn
type_str = future_medium.type
if type_str == 'bd':
cl = BD
elif type_str == 'manga':
cl = Manga
elif type_str == 'roman':
cl = Roman
else:
self.stderr.write(self.style.WARNING(
"Unknown medium type: {type}. Ignoring..."
.format(type=type_str)))
continue
if cl.objects.filter(isbn=isbn).exists():
2020-10-02 15:12:02 +00:00
self.stderr.write(self.style.WARNING(f"ISBN {isbn} for type {type_str} already exists, remove it"))
future_medium.delete()
continue
2020-05-22 19:49:09 +00:00
form = MediaAdminForm(instance=cl(),
data={"isbn": isbn, "_isbn": True, })
# Don't DDOS any website
2020-10-03 13:05:05 +00:00
sleep(5 + (4 * random() - 1))
2020-05-22 19:49:09 +00:00
try:
form.full_clean()
2020-10-02 15:12:02 +00:00
if hasattr(form.instance, "subtitle") and not form.instance.subtitle:
form.instance.subtitle = ""
2020-05-22 19:49:09 +00:00
form.save()
future_medium.delete()
self.stdout.write(self.style.SUCCESS(
"Medium with ISBN {isbn} successfully imported"
.format(isbn=isbn)))
2020-10-03 13:05:05 +00:00
except Exception as e:
2020-05-22 19:49:09 +00:00
self.stderr.write(self.style.WARNING(
"An error occured while importing ISBN {isbn}: {error}"
2020-10-03 13:47:22 +00:00
.format(isbn=isbn, error=str(e.__class__) + "(" + str(e) + ")")))