pep8 and other code-style changes
[wolnelektury.git] / src / catalogue / management / commands / report_dead_links.py
1 # -*- coding: utf-8 -*-
2 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
4 #
5 from __future__ import print_function, unicode_literals
6
7 from django.core.management.base import BaseCommand
8
9
10 class Command(BaseCommand):
11     help = 'Checks for dead links.'
12
13     def handle(self, **options):
14         from catalogue.models import Book
15         from picture.models import Picture
16         from urllib2 import urlopen, HTTPError, URLError
17         from django.core.urlresolvers import reverse
18         from django.contrib.sites.models import Site
19
20         domain = Site.objects.get_current().domain
21
22         fields = [
23             (
24                 Book,
25                 [
26                     ('gazeta_link', lambda b: b.gazeta_link),
27                     ('wiki_link', lambda b: b.wiki_link),
28                     ('źródło', lambda b: b.extra_info.get('source_url')),
29                 ],
30                 'admin:catalogue_book_change'
31             ),
32             (
33                 Picture,
34                 [
35                     ('gazeta_link', lambda p: p.culturepl_link),
36                     ('wiki_link', lambda p: p.wiki_link),
37                     ('źródło', lambda p: p.extra_info.get('source_url')),
38                 ],
39                 'admin:pictures_picture_change'
40             )
41         ]
42
43         for model, model_fields, admin_name in fields:
44             for obj in model.objects.all():
45                 clean = True
46                 for name, get in model_fields:
47                     url = get(obj)
48                     if url:
49                         try:
50                             urlopen(url)
51                         except (HTTPError, URLError, ValueError), e:
52                             if clean:
53                                 clean = False
54                                 print(unicode(obj).encode('utf-8'))
55                                 print(('Na stronie: https://%s%s' % (domain, obj.get_absolute_url())).encode('utf-8'))
56                                 print(
57                                     ('Administracja: https://%s%s' % (domain, reverse(admin_name, args=[obj.pk])))
58                                     .encode('utf-8'))
59                                 if obj.extra_info.get('about'):
60                                     print(('Redakcja: %s' % (obj.extra_info.get('about'),)).encode('utf-8'))
61                             print(('    %s (%s): %s' % (name, getattr(e, 'code', 'błąd'), url)).encode('utf-8'))
62                 if not clean:
63                     print()