+++ /dev/null
-# -*- 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
-
-
-def ancestor_has_cover(book):
- while book.parent:
- book = book.parent
- if book.extra_info.get('cover_url'):
- return True
- return False
-
-
-current_domain = Site.objects.get_current().domain
-def full_url(obj):
- return 'http://%s%s' % (
- current_domain,
- obj.get_absolute_url())
-
-
-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 handle(self, **options):
- from collections import defaultdict
- import re
- from django.db import transaction
- from catalogue.models import Book
-
- verbose = options['verbose']
-
- without_cover = []
- with_ancestral_cover = []
- by_flickr_author = defaultdict(list)
- not_flickr = []
- by_license = defaultdict(list)
- no_license = []
-
- re_flickr = re.compile(ur'https?://(?:www.)?flickr.com/photos/([^/]*)/.*')
- re_license = re.compile(ur'.*,\s*(CC.*)')
-
- with transaction.commit_on_success():
- for book in Book.objects.all().order_by('slug').iterator():
- extra_info = book.extra_info
- if not extra_info.get('cover_url'):
- if ancestor_has_cover(book):
- with_ancestral_cover.append(book)
- else:
- without_cover.append(book)
- else:
- match = re_flickr.match(extra_info.get('cover_source', ''))
- if match:
- by_flickr_author[match.group(1)].append(book)
- else:
- not_flickr.append(book)
- match = re_license.match(extra_info.get('cover_by', ''))
- if match:
- by_license[match.group(1)].append(book)
- else:
- no_license.append(book)
-
- print """%d books with no covers, %d with ancestral covers.
-Licenses used: %s (%d covers without license).
-Flickr authors: %s (%d covers not from flickr).
-""" % (
- len(without_cover),
- len(with_ancestral_cover),
- ", ".join(sorted(by_license.keys())),
- len(no_license),
- ", ".join(sorted(by_flickr_author.keys())),
- len(not_flickr),
- )
-
- if verbose:
- print
- print "By license:"
- print "==========="
- for lic, books in by_license.items():
- print
- print lic
- for book in books:
- print full_url(book)
-
- 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 "By Flickr author:"
- print "================="
- for author, books in by_flickr_author.items():
- print
- print "author: http://flickr.com/photos/%s/" % author
- for book in books:
- print full_url(book)
-
- print
- print "Not from Flickr or source missing:"
- print "=================================="
- for book in not_flickr:
- 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 "No cover:"
- print "========="
- for book in without_cover:
- print full_url(book)
-
- print
- print "With ancestral cover:"
- print "====================="
- for book in with_ancestral_cover:
- print full_url(book)