X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/357027375ff8867f42ca34bcbfb5a78b5b185fc3..9a5e7a1f45c46fbf3509cb660e29806e7ca05a8d:/src/catalogue/management/commands/checkcovers.py diff --git a/src/catalogue/management/commands/checkcovers.py b/src/catalogue/management/commands/checkcovers.py index 7535dd474..db9fc4c47 100644 --- a/src/catalogue/management/commands/checkcovers.py +++ b/src/catalogue/management/commands/checkcovers.py @@ -1,23 +1,23 @@ -# -*- coding: utf-8 -*- # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # -from optparse import make_option from django.contrib.sites.models import Site from django.core.management.base import BaseCommand -from catalogue import app_settings from django.utils.functional import lazy +from catalogue import app_settings def ancestor_has_cover(book): while book.parent: book = book.parent - if book.extra_info.get('cover_url'): + if book.get_extra_info_json().get('cover_url'): return True return False current_domain = lazy(lambda: Site.objects.get_current().domain, str)() + + def full_url(obj): return 'http://%s%s' % ( current_domain, @@ -25,12 +25,13 @@ def full_url(obj): class Command(BaseCommand): - option_list = BaseCommand.option_list + ( - make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, - help='Suppress output'), - ) help = 'Checks cover sources and licenses.' + def add_arguments(self, parser): + parser.add_argument( + '-q', '--quiet', action='store_false', dest='verbose', + default=True, help='Suppress output') + def handle(self, **options): from collections import defaultdict import re @@ -45,23 +46,22 @@ class Command(BaseCommand): bad_license = defaultdict(list) no_license = [] - re_license = re.compile(ur'.*,\s*(CC.*)') + re_license = re.compile(r'.*,\s*(CC.*)') redakcja_url = app_settings.REDAKCJA_URL good_license = re.compile("(%s)" % ")|(".join( app_settings.GOOD_LICENSES)) - with transaction.commit_on_success(): + with transaction.atomic(): for book in Book.objects.all().order_by('slug').iterator(): - extra_info = book.extra_info + extra_info = book.get_extra_info_json() if not extra_info.get('cover_url'): if ancestor_has_cover(book): with_ancestral_cover.append(book) else: without_cover.append(book) else: - if not extra_info.get('cover_source', '' - ).startswith(redakcja_url): + if not extra_info.get('cover_source', '').startswith(redakcja_url): not_redakcja.append(book) match = re_license.match(extra_info.get('cover_by', '')) if match: @@ -70,7 +70,7 @@ class Command(BaseCommand): else: no_license.append(book) - print """%d books with no covers, %d with inherited covers. + print("""%d books with no covers, %d with inherited covers. Bad licenses used: %s (%d covers without license). %d covers not from %s. """ % ( @@ -80,51 +80,53 @@ Bad licenses used: %s (%d covers without license). len(no_license), len(not_redakcja), redakcja_url, - ) + )) if verbose: if bad_license: - print - print "Bad license:" - print "============" + print() + print("Bad license:") + print("============") for lic, books in bad_license.items(): - print - print lic + print() + print(lic) for book in books: - print full_url(book) + print(full_url(book)) if no_license: - print - print "No license:" - print "===========" + print() + print("No license:") + print("===========") for book in no_license: - print - print full_url(book) - print book.extra_info.get('cover_by') - print book.extra_info.get('cover_source') - print book.extra_info.get('cover_url') + print() + print(full_url(book)) + extra_info = book.get_extra_info_json() + print(extra_info.get('cover_by')) + print(extra_info.get('cover_source')) + print(extra_info.get('cover_url')) if not_redakcja: - print - print "Not from Redakcja or source missing:" - print "====================================" + print() + print("Not from Redakcja or source missing:") + print("====================================") for book in not_redakcja: - print - print full_url(book) - print book.extra_info.get('cover_by') - print book.extra_info.get('cover_source') - print book.extra_info.get('cover_url') + print() + print(full_url(book)) + extra_info = book.get_extra_info_json() + print(extra_info.get('cover_by')) + print(extra_info.get('cover_source')) + print(extra_info.get('cover_url')) if without_cover: - print - print "No cover:" - print "=========" + print() + print("No cover:") + print("=========") for book in without_cover: - print full_url(book) + print(full_url(book)) if with_ancestral_cover: - print - print "With ancestral cover:" - print "=====================" + print() + print("With ancestral cover:") + print("=====================") for book in with_ancestral_cover: - print full_url(book) + print(full_url(book))