Housekeeping.
authorRadek Czajka <rczajka@rczajka.pl>
Tue, 6 Aug 2019 09:38:11 +0000 (11:38 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Tue, 6 Aug 2019 09:38:11 +0000 (11:38 +0200)
296 files changed:
src/ajaxable/__init__.py
src/ajaxable/templatetags/ajaxable_tags.py
src/api/admin.py
src/api/drf_auth.py
src/api/migrations/0001_initial.py
src/api/migrations/0002_auto_20151221_1225.py
src/api/migrations/0003_bookuserdata.py
src/api/migrations/0004_bookuserdata_last_changed.py
src/api/migrations/0005_consumer_nonce_resource_token.py
src/api/models.py
src/api/renderers.py
src/api/request_validator.py
src/api/serializers.py
src/api/settings.py
src/api/tests/tests.py
src/api/urls.py
src/api/utils.py
src/api/views.py
src/catalogue/__init__.py
src/catalogue/admin.py
src/catalogue/api/helpers.py
src/catalogue/api/urls.py
src/catalogue/apps.py
src/catalogue/constants.py
src/catalogue/feeds.py
src/catalogue/fields.py
src/catalogue/forms.py
src/catalogue/helpers.py
src/catalogue/import_utils.py
src/catalogue/management/commands/load_abstracts.py
src/catalogue/management/commands/update_popularity.py
src/catalogue/management/commands/update_preview_status.py
src/catalogue/migrations/0001_initial.py
src/catalogue/migrations/0002_book_ancestor.py
src/catalogue/migrations/0003_populate_ancestors.py
src/catalogue/migrations/0004_remove_booktags_count_related_info.py
src/catalogue/migrations/0005_auto_20141016_1337.py
src/catalogue/migrations/0006_auto_20141022_1059.py
src/catalogue/migrations/0007_auto_20151123_1529.py
src/catalogue/migrations/0008_auto_20151221_1225.py
src/catalogue/migrations/0009_auto_20160127_1019.py
src/catalogue/migrations/0010_bookpopularity.py
src/catalogue/migrations/0011_auto_20160413_1152.py
src/catalogue/migrations/0012_auto_20161020_1407.py
src/catalogue/migrations/0013_book_print_on_demand.py
src/catalogue/migrations/0014_auto_20170627_1442.py
src/catalogue/migrations/0015_book_recommended.py
src/catalogue/migrations/0016_auto_20171031_1232.py
src/catalogue/migrations/0017_auto_20171214_1746.py
src/catalogue/migrations/0018_auto_20171221_1106.py
src/catalogue/migrations/0019_auto_20171221_1107.py
src/catalogue/migrations/0020_book_cover_api_thumb.py
src/catalogue/migrations/0021_auto_20171222_1404.py
src/catalogue/migrations/0022_auto_20180226_1503.py
src/catalogue/migrations/0023_book_abstract.py
src/catalogue/migrations/0024_auto_20180510_1407.py
src/catalogue/migrations/0024_book_audio_length.py
src/catalogue/migrations/0025_merge.py
src/catalogue/migrations/0026_book_preview_key.py
src/catalogue/models/__init__.py
src/catalogue/models/book.py
src/catalogue/models/source.py
src/catalogue/models/tag.py
src/catalogue/tasks.py
src/catalogue/templatetags/catalogue_tags.py
src/catalogue/test_utils.py
src/catalogue/tests/test_book_import.py
src/catalogue/tests/test_bookmedia.py
src/catalogue/tests/test_cover.py
src/catalogue/tests/test_tags.py
src/catalogue/tests/test_templatetags.py
src/catalogue/tests/test_visit.py
src/catalogue/urls.py
src/catalogue/utils.py
src/chunks/admin.py
src/chunks/migrations/0001_initial.py
src/chunks/migrations/0002_auto_20140911_1253.py
src/chunks/migrations/0003_auto_20151221_1225.py
src/chunks/templatetags/chunks.py
src/chunks/translation.py
src/club/admin.py
src/club/apps.py
src/club/forms.py
src/club/helpers.py
src/club/management/commands/prolong.py
src/club/migrations/0001_initial.py
src/club/migrations/0002_auto_20190416_1024.py
src/club/migrations/0003_remove_payuorder_amount.py
src/club/migrations/0004_payucardtoken_pos_id.py
src/club/migrations/0005_auto_20190416_1052.py
src/club/migrations/0006_auto_20190416_1236.py
src/club/migrations/0007_auto_20190416_1625.py
src/club/migrations/0008_membership_name.py
src/club/migrations/0009_auto_20190510_1510.py
src/club/migrations/0010_auto_20190529_0946.py
src/club/models.py
src/club/payment_methods.py
src/club/payu/__init__.py
src/club/payu/forms.py
src/club/payu/models.py
src/club/payu/pos.py
src/club/payu/tests/integration.py
src/club/payu/tests/tests.py [deleted file]
src/club/payu/views.py
src/club/permissions.py
src/club/templatetags/club.py
src/club/translation.py
src/club/urls.py
src/club/views.py
src/contact/__init__.py
src/contact/admin.py
src/contact/fields.py
src/contact/forms.py
src/contact/mailing.py
src/contact/migrations/0001_initial.py
src/contact/models.py
src/contact/templatetags/contact_tags.py
src/contact/urls.py
src/contact/views.py
src/contact/widgets.py
src/dictionary/constants.py
src/dictionary/migrations/0001_initial.py
src/dictionary/migrations/0002_auto_20141006_1422.py
src/dictionary/migrations/0003_auto_20141023_1445.py
src/dictionary/migrations/0004_auto_20151221_1225.py
src/dictionary/templatetags/set_get.py
src/dictionary/tests.py
src/dictionary/urls.py
src/dictionary/views.py
src/funding/__init__.py
src/funding/admin.py
src/funding/forms.py
src/funding/migrations/0001_initial.py
src/funding/migrations/0002_auto_20151221_1225.py
src/funding/migrations/0003_auto_20180416_1336.py
src/funding/migrations/0004_auto_20190729_1450.py
src/funding/models.py
src/funding/tests.py
src/funding/utils.py
src/funding/widgets.py
src/infopages/admin.py
src/infopages/migrations/0001_initial.py
src/infopages/migrations/0002_auto_20151221_1225.py
src/infopages/templatetags/infopages_tags.py
src/infopages/translation.py
src/infopages/urls.py
src/infopages/views.py
src/isbn/forms.py
src/isbn/management/commands/eisbn_csv.py
src/isbn/management/commands/export_onix.py
src/isbn/management/commands/import_onix.py
src/isbn/migrations/0001_initial.py
src/isbn/migrations/0002_auto_20180213_1617.py
src/isbn/migrations/0003_isbnpool_purpose.py
src/isbn/migrations/0004_auto_20180215_1042.py
src/isbn/migrations/0005_auto_20190729_1450.py
src/isbn/urls.py
src/isbn/utils.py
src/isbn/views.py
src/lesmianator/__init__.py
src/lesmianator/migrations/0001_initial.py
src/lesmianator/migrations/0002_auto_20151221_1225.py
src/lesmianator/migrations/0003_auto_20190729_1450.py
src/lesmianator/models.py
src/lesmianator/urls.py
src/libraries/admin.py
src/libraries/migrations/0001_initial.py
src/libraries/migrations/0002_auto_20151221_1225.py
src/libraries/urls.py
src/libraries/views.py
src/manage.py
src/newsletter/admin.py
src/newsletter/forms.py
src/newsletter/migrations/0001_initial.py
src/newsletter/migrations/0002_auto_20160914_1452.py
src/newsletter/models.py
src/newsletter/tests.py [deleted file]
src/newsletter/urls.py
src/newsletter/views.py
src/newtagging/admin.py [deleted file]
src/newtagging/managers.py
src/newtagging/models.py
src/oai/handlers.py
src/oai/tests/test_oaipmhapi.py
src/oai/urls.py
src/oai/views.py
src/opds/tests/test_opds.py
src/opds/urls.py
src/opds/views.py
src/paypal/forms.py
src/paypal/migrations/0001_initial.py
src/paypal/migrations/0002_billingagreement_token.py
src/paypal/migrations/0003_auto_20190729_1450.py
src/paypal/rest.py
src/pdcounter/admin.py
src/pdcounter/migrations/0001_initial.py
src/pdcounter/migrations/0002_auto_20151221_1225.py
src/pdcounter/models.py
src/pdcounter/templatetags/time_tags.py
src/pdcounter/views.py
src/picture/admin.py
src/picture/api/urls.py
src/picture/api/views.py
src/picture/forms.py
src/picture/migrations/0001_initial.py
src/picture/migrations/0002_remove_picture__related_info.py
src/picture/migrations/0003_auto_20140924_1559.py
src/picture/migrations/0004_auto_20141016_1337.py
src/picture/migrations/0005_auto_20141022_1001.py
src/picture/migrations/0006_auto_20151221_1225.py
src/picture/migrations/0007_auto_20160125_1709.py
src/picture/migrations/0008_auto_20160413_1152.py
src/picture/models.py
src/picture/tests/test_picture_import.py
src/polls/admin.py
src/polls/forms.py
src/polls/migrations/0001_initial.py
src/polls/migrations/0002_auto_20151221_1225.py
src/polls/templatetags/polls_tags.py
src/polls/urls.py
src/push/admin.py
src/push/forms.py
src/push/migrations/0001_initial.py
src/push/migrations/0002_auto_20180830_1627.py
src/push/migrations/0003_auto_20180831_1135.py
src/push/models.py
src/push/urls.py
src/push/utils.py
src/reporting/models.py
src/reporting/templatetags/reporting_stats.py
src/reporting/urls.py
src/search/__init__.py
src/search/fields.py
src/search/forms.py
src/search/index.py
src/search/templatetags/search_tags.py
src/search/tests/__init__.py
src/search/tests/index.py
src/search/urls.py
src/search/views.py
src/social/api/urls.py
src/social/api/views.py
src/social/migrations/0001_initial.py
src/social/migrations/0002_auto_20151221_1225.py
src/social/migrations/0003_cite_banner.py
src/social/migrations/0004_auto_20170725_1204.py
src/social/migrations/0005_auto_20190318_1309.py
src/social/migrations/0006_legacy_group.py
src/social/migrations/0007_auto_20190318_1339.py
src/social/migrations/0008_auto_20190403_1510.py
src/social/migrations/0009_auto_20190715_1405.py
src/social/migrations/0010_cite_background_plain.py
src/social/models.py
src/sortify.py
src/sponsors/__init__.py
src/sponsors/migrations/0001_initial.py
src/sponsors/migrations/0002_auto_20151221_1225.py
src/sponsors/widgets.py
src/stats/tasks.py
src/suggest/admin.py
src/suggest/forms.py
src/suggest/migrations/0001_initial.py
src/suggest/migrations/0002_auto_20151221_1225.py
src/suggest/migrations/0003_auto_20190729_1450.py
src/suggest/urls.py
src/waiter/__init__.py
src/waiter/migrations/0001_initial.py
src/waiter/settings.py
src/waiter/tasks.py
src/waiter/urls.py
src/waiter/utils.py
src/waiter/views.py
src/wolnelektury/__init__.py
src/wolnelektury/apps.py
src/wolnelektury/celery.py
src/wolnelektury/contact_forms.py
src/wolnelektury/context_processors.py
src/wolnelektury/forms.py
src/wolnelektury/management/commands/clean_social_accounts.py
src/wolnelektury/management/profile.py
src/wolnelektury/migrations/getpaid/0001_initial.py
src/wolnelektury/migrations/getpaid/0002_auto_20151221_1225.py
src/wolnelektury/settings/__init__.py
src/wolnelektury/settings/auth.py
src/wolnelektury/settings/contrib.py
src/wolnelektury/settings/custom.py
src/wolnelektury/settings/locale.py
src/wolnelektury/settings/paths.py
src/wolnelektury/settings/static.py
src/wolnelektury/settings/test.py
src/wolnelektury/signals.py
src/wolnelektury/templatetags/blog.py
src/wolnelektury/templatetags/switch_tag.py
src/wolnelektury/test_utils.py
src/wolnelektury/utils.py
src/wolnelektury/wsgi.py

index ffa3788..46cda3d 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index d327e2e..9406481 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -23,7 +22,7 @@ def placeholdized_ul(form):
 @register.filter
 def pretty_field(field, template=None):
     if template is None:
-        template = u'''
+        template = '''
             <li>
               <span class="error">%(errors)s</span>
               <label class="nohide"><span class="label">%(label)s: </span>%(input)s</label>
@@ -39,7 +38,7 @@ def pretty_field(field, template=None):
 
 @register.filter
 def pretty_checkbox(field):
-    return pretty_field(field, template=u'''
+    return pretty_field(field, template='''
         <li class="checkbox">
           <span class="error">%(errors)s</span>
           <label class="nohide">%(input)s<span class="label"> %(label)s</span></label>
index c931db0..9857498 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.contrib import admin
 from . import models
 
index 893f066..fa57b41 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index a4a8a84..4c3af2f 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 
index 339068a..4245868 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 2a70fb5..f8b45e7 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 from django.conf import settings
index f42c405..d00ac8b 100644 (file)
@@ -1,8 +1,8 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-from django.db import migrations, models
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import datetime
+from django.db import migrations, models
 from django.utils.timezone import utc
 
 
index ebbf81d..9b706a4 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-02-28 22:38
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.conf import settings
 from django.db import migrations, models
 import django.db.models.deletion
index 1e25c36..e72aaff 100644 (file)
@@ -76,7 +76,7 @@ class Nonce(models.Model):
     key = models.CharField(max_length=255)
 
     def __str__(self):
-        return u"Nonce %s for %s" % (self.key, self.consumer_key)
+        return "Nonce %s for %s" % (self.key, self.consumer_key)
 
 
 class Consumer(models.Model):
@@ -88,13 +88,13 @@ class Consumer(models.Model):
     user = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, null=True, blank=True, related_name='consumers')
 
     def __str__(self):
-        return u"Consumer %s with key %s" % (self.name, self.key)
+        return "Consumer %s with key %s" % (self.name, self.key)
 
 
 class Token(models.Model):
     REQUEST = 1
     ACCESS = 2
-    TOKEN_TYPES = ((REQUEST, u'Request'), (ACCESS, u'Access'))
+    TOKEN_TYPES = ((REQUEST, 'Request'), (ACCESS, 'Access'))
 
     key = models.CharField(max_length=KEY_SIZE)
     secret = models.CharField(max_length=SECRET_SIZE)
@@ -105,4 +105,4 @@ class Token(models.Model):
     consumer = models.ForeignKey(Consumer, models.CASCADE)
 
     def __str__(self):
-        return u"%s Token %s for %s" % (self.get_token_type_display(), self.key, self.consumer)
+        return "%s Token %s for %s" % (self.get_token_type_display(), self.key, self.consumer)
index b5b63c6..57edec3 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from rest_framework_xml.renderers import XMLRenderer
 
 
index 2c16691..690d3e9 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index fb013e4..237a155 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 0802c54..e69de29 100644 (file)
@@ -1,12 +0,0 @@
-# -*- 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.
-#
-import os.path
-from django.conf import settings
-
-
-try:
-    MOBILE_INIT_DB = settings.API_MOBILE_INIT_DB
-except AttributeError:
-    MOBILE_INIT_DB = os.path.abspath(os.path.join(settings.MEDIA_ROOT, 'api/mobile/initial/'))
index 993a524..e17db29 100644 (file)
@@ -302,8 +302,8 @@ class OAuth1Tests(ApiTest):
         ).digest()
         h = b64encode(h).rstrip(b'\n')
         sign = quote(h)
-        query = u"{}&oauth_signature={}".format(base_query, sign)
-        response = self.client.get(u'/api/oauth/access_token/?' + query)
+        query = "{}&oauth_signature={}".format(base_query, sign)
+        response = self.client.get('/api/oauth/access_token/?' + query)
         access_token_data = parse_qs(response.content.decode('latin1'))
         access_token = access_token_data['oauth_token'][0]
 
index cb890da..536d3fe 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index a3a1f89..3674838 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 99c8df1..69f9b8b 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 612517b..1290f81 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -13,7 +12,7 @@ default_app_config = 'catalogue.apps.CatalogueConfig'
 
 class Settings(AppSettings):
     """Default settings for catalogue app."""
-    DEFAULT_LANGUAGE = u'pol'
+    DEFAULT_LANGUAGE = 'pol'
     # PDF needs TeXML + XeLaTeX, MOBI needs Calibre.
     DONT_BUILD = {'pdf', 'mobi'}
     FORMAT_ZIPS = {
index 44b6fb7..9008df1 100644 (file)
@@ -4,7 +4,6 @@
 from django.contrib import admin
 from django import forms
 
-from newtagging.admin import TaggableModelAdmin, TaggableModelForm
 from catalogue.models import Tag, Book, Fragment, BookMedia, Collection, Source
 
 
@@ -17,7 +16,7 @@ class TagAdmin(admin.ModelAdmin):
 
     def occurrences(self, tag):
         return tag.items.count()
-    occurrences.short_description = u'Wystąpienia'
+    occurrences.short_description = 'Wystąpienia'
 
     prepopulated_fields = {'slug': ('name',), 'sort_key': ('name',)}
     radio_fields = {'category': admin.HORIZONTAL}
@@ -29,12 +28,7 @@ class MediaInline(admin.TabularInline):
     extra = 0
 
 
-#FIXME: Taggable admin is broken.
-#class BookAdmin(TaggableModelAdmin):
 class BookAdmin(admin.ModelAdmin):
-    #tag_model = Tag
-    #form = TaggableModelForm
-
     list_display = ('title', 'slug', 'created_at', 'has_epub_file', 'has_html_file', 'has_description',)
     search_fields = ('title',)
     ordering = ('title',)
@@ -42,11 +36,7 @@ class BookAdmin(admin.ModelAdmin):
     inlines = [MediaInline]
 
 
-#FIXME: Taggable admin is broken.
-#class FragmentAdmin(TaggableModelAdmin):
 class FragmentAdmin(admin.ModelAdmin):
-    #tag_model = Tag
-
     list_display = ('book', 'anchor',)
     ordering = ('book', 'anchor',)
 
index d872dde..6813e03 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db.models import Q
 from catalogue.models import Book
 
index d70338a..0f2343d 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 5dbc8b3..36c6b84 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 1a655f4..2a00ac2 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 82b0a75..d33b799 100644 (file)
@@ -58,11 +58,11 @@ class AudiobookFeed(Feed):
         extra_info = item.get_extra_info_json()
         artist = extra_info.get('artist_name', None)
         if artist is not None:
-            lines.append(u'Czyta: %s' % artist)
+            lines.append('Czyta: %s' % artist)
         director = extra_info.get('director_name', None)
         if director is not None:
-            lines.append(u'Reżyseria: %s' % director)
-        return u'<br/>\n'.join(lines)
+            lines.append('Reżyseria: %s' % director)
+        return '<br/>\n'.join(lines)
 
     def item_link(self, item):
         return item.book.get_absolute_url()
index 8f6bc7a..46cde23 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 94df6cd..53d69c1 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 0330e69..796ed04 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 65b7116..587e05b 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 19ff8c4..587f943 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index df9dedf..d2af0d4 100644 (file)
@@ -1,9 +1,6 @@
-# -*- 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 __future__ import print_function, unicode_literals
-
 from django.core.management.base import BaseCommand
 from django.db.models import Count
 
index cd2e8d8..dc3631e 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 3acfad9..ac8f9d7 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 import fnpdjango.storage
index 114a6c2..49dd6f0 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index b611757..c36aee1 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations
 
 
index 48c936f..e474f1b 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index 6de3157..202e519 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index f36eb07..7f12f6d 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index 86afa98..3bd9b9c 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index d8e9af1..04e79c3 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import catalogue.fields
 import catalogue.models.bookmedia
index eebb58b..9def7ad 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 from sortify import sortify
index 608af9c..81834f9 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 
index b344660..43ac385 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 4ce2c19..34c700c 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index c2ceaea..d6addf7 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 5a95bba..0affd0a 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import catalogue.fields
 import catalogue.models.bookmedia
index 6e04500..d92d458 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index f606c13..8e0080e 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 9095cb0..0d5b36e 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 581f109..9a2aee3 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 751e707..17f7db1 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 1b0960e..2d73807 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import catalogue.fields
 import catalogue.models.book
index 8bf9a60..8f4e4f2 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import catalogue.fields
 import catalogue.models.book
index a673f42..fef3abb 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 6fed356..2959bd5 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 819bf26..620723a 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 89e38af..6d2d872 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 66c8c8f..b43ede8 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 9e0335a..e5ab008 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-06-26 08:33
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 7aebc31..0881cb7 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 033febf..9116a46 100644 (file)
@@ -56,7 +56,7 @@ class Book(models.Model):
     title = models.CharField(_('title'), max_length=32767)
     sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False)
     sort_key_author = models.CharField(
-        _('sort key by author'), max_length=120, db_index=True, editable=False, default=u'')
+        _('sort key by author'), max_length=120, db_index=True, editable=False, default='')
     slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True)
     common_slug = models.SlugField(_('slug'), max_length=120, db_index=True)
     language = models.CharField(_('language code'), max_length=3, db_index=True, default=app_settings.DEFAULT_LANGUAGE)
@@ -180,7 +180,7 @@ class Book(models.Model):
             others = ' i inni'
         else:
             others = ''
-        return ', '.join(u'\xa0'.join(reversed(translator.split(', ', 1))) for translator in translators) + others
+        return ', '.join('\xa0'.join(reversed(translator.split(', ', 1))) for translator in translators) + others
 
     def cover_source(self):
         return self.get_extra_info_json().get('cover_source', self.parent.cover_source() if self.parent else '')
@@ -194,7 +194,7 @@ class Book(models.Model):
         try:
             author = self.authors().first().sort_key
         except AttributeError:
-            author = u''
+            author = ''
         self.sort_key_author = author
 
         self.cached_author = self.tag_unicode('author')
@@ -347,7 +347,7 @@ class Book(models.Model):
             project = meta.get('project')
             if not project:
                 # temporary fallback
-                project = u'CzytamySłuchając'
+                project = 'CzytamySłuchając'
 
             projects.add((project, meta.get('funded_by', '')))
 
@@ -716,14 +716,14 @@ class Book(models.Model):
         return books_by_author, orphans, books_by_parent
 
     _audiences_pl = {
-        "SP": (1, u"szkoła podstawowa"),
-        "SP1": (1, u"szkoła podstawowa"),
-        "SP2": (1, u"szkoła podstawowa"),
-        "SP3": (1, u"szkoła podstawowa"),
-        "P": (1, u"szkoła podstawowa"),
-        "G": (2, u"gimnazjum"),
-        "L": (3, u"liceum"),
-        "LP": (3, u"liceum"),
+        "SP": (1, "szkoła podstawowa"),
+        "SP1": (1, "szkoła podstawowa"),
+        "SP2": (1, "szkoła podstawowa"),
+        "SP3": (1, "szkoła podstawowa"),
+        "P": (1, "szkoła podstawowa"),
+        "G": (2, "gimnazjum"),
+        "L": (3, "liceum"),
+        "LP": (3, "liceum"),
     }
 
     def audiences_pl(self):
index 08cac0c..77b1a67 100644 (file)
@@ -25,7 +25,7 @@ class Source(models.Model):
             str(self.pk)
             old_self = type(self).objects.get(pk=self)
         except type(self).DoesNotExist:
-            old_name = u''
+            old_name = ''
             old_netloc = self.netloc
         else:
             old_name = old_self.name
index db7267e..6aaa97c 100644 (file)
@@ -43,9 +43,9 @@ class TagRelation(models.Model):
 
     def __str__(self):
         try:
-            return u'%s [%s]' % (self.content_type.get_object_for_this_type(pk=self.object_id), self.tag)
+            return '%s [%s]' % (self.content_type.get_object_for_this_type(pk=self.object_id), self.tag)
         except ObjectDoesNotExist:
-            return u'<deleted> [%s]' % self.tag
+            return '<deleted> [%s]' % self.tag
 
 
 class Tag(models.Model):
index a7b67ae..781dd6e 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 39f044a..69ff8d3 100644 (file)
@@ -81,48 +81,48 @@ def title_from_tags(tags):
 
     self = split_tags(tags)
 
-    title = u''
+    title = ''
 
     # Specjalny przypadek oglądania wszystkich lektur na danej półce
     if len(self) == 1 and 'set' in self:
-        return u'Półka %s' % self['set']
+        return 'Półka %s' % self['set']
 
     # Specjalny przypadek "Twórczość w pozytywizmie", wtedy gdy tylko epoka
     # jest wybrana przez użytkownika
     if 'epoch' in self and len(self) == 1:
-        text = u'Twórczość w %s' % flection.get_case(str(self['epoch']), u'miejscownik')
+        text = 'Twórczość w %s' % flection.get_case(str(self['epoch']), 'miejscownik')
         return capfirst(text)
 
     # Specjalny przypadek "Dramat w twórczości Sofoklesa", wtedy gdy podane
     # są tylko rodzaj literacki i autor
     if 'kind' in self and 'author' in self and len(self) == 2:
-        text = u'%s w twórczości %s' % (
-            str(self['kind']), flection.get_case(str(self['author']), u'dopełniacz'))
+        text = '%s w twórczości %s' % (
+            str(self['kind']), flection.get_case(str(self['author']), 'dopełniacz'))
         return capfirst(text)
 
     # Przypadki ogólniejsze
     if 'theme' in self:
-        title += u'Motyw %s' % str(self['theme'])
+        title += 'Motyw %s' % str(self['theme'])
 
     if 'genre' in self:
         if 'theme' in self:
-            title += u' w %s' % flection.get_case(str(self['genre']), u'miejscownik')
+            title += ' w %s' % flection.get_case(str(self['genre']), 'miejscownik')
         else:
             title += str(self['genre'])
 
     if 'kind' in self or 'author' in self or 'epoch' in self:
         if 'genre' in self or 'theme' in self:
             if 'kind' in self:
-                title += u' w %s ' % flection.get_case(str(self['kind']), u'miejscownik')
+                title += ' w %s ' % flection.get_case(str(self['kind']), 'miejscownik')
             else:
-                title += u' w twórczości '
+                title += ' w twórczości '
         else:
-            title += u'%s ' % str(self.get('kind', u'twórczość'))
+            title += '%s ' % str(self.get('kind', 'twórczość'))
 
     if 'author' in self:
-        title += flection.get_case(str(self['author']), u'dopełniacz')
+        title += flection.get_case(str(self['author']), 'dopełniacz')
     elif 'epoch' in self:
-        title += flection.get_case(str(self['epoch']), u'dopełniacz')
+        title += flection.get_case(str(self['epoch']), 'dopełniacz')
 
     return capfirst(title)
 
index ad3e491..a6e69db 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -73,11 +72,11 @@ def info_args(title, language=None):
     """ generate some keywords for comfortable BookInfoCreation  """
     slug = str(slugify(title))
     if language is None:
-        language = u'pol'
+        language = 'pol'
     return {
         'title': str(title),
         'url': WLURI.from_slug(slug),
-        'about': u"http://wolnelektury.pl/example/URI/%s" % slug,
+        'about': "http://wolnelektury.pl/example/URI/%s" % slug,
         'language': language,
     }
 
index 9fdb298..d369924 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -15,14 +14,14 @@ class BookImportLogicTests(WLTestCase):
     def setUp(self):
         WLTestCase.setUp(self)
         self.book_info = BookInfoStub(
-            url=WLURI.from_slug(u"default-book"),
-            about=u"http://wolnelektury.pl/example/URI/default_book",
-            title=u"Default Book",
+            url=WLURI.from_slug("default-book"),
+            about="http://wolnelektury.pl/example/URI/default_book",
+            title="Default Book",
             author=PersonStub(("Jim",), "Lazy"),
             kind="X-Kind",
             genre="X-Genre",
             epoch="X-Epoch",
-            language=u"pol",
+            language="pol",
         )
 
         self.expected_tags = [
@@ -84,7 +83,7 @@ class BookImportLogicTests(WLTestCase):
         self.assertTrue(book.has_html_file())
 
         self.assertEqual(book.fragments.count(), 1)
-        self.assertEqual(book.fragments.all()[0].text, u'<p class="paragraph">Ala ma kota</p>\n')
+        self.assertEqual(book.fragments.all()[0].text, '<p class="paragraph">Ala ma kota</p>\n')
 
         self.assert_(('theme', 'love') in [(tag.category, tag.slug) for tag in book.fragments.all()[0].tags])
 
@@ -116,7 +115,7 @@ class BookImportLogicTests(WLTestCase):
 
     def test_book_with_invalid_slug(self):
         """ Book with invalid characters in slug shouldn't be imported """
-        self.book_info.url = WLURI.from_slug(u"default_book")
+        self.book_info.url = WLURI.from_slug("default_book")
         book_text = "<utwor />"
         with self.assertRaises(ValueError):
             models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
@@ -124,7 +123,7 @@ class BookImportLogicTests(WLTestCase):
     def test_book_replace_title(self):
         book_text = """<utwor />"""
         models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
-        self.book_info.title = u"Extraordinary"
+        self.book_info.title = "Extraordinary"
         book = models.Book.from_text_and_meta(ContentFile(book_text), self.book_info, overwrite=True)
 
         tags = [(tag.category, tag.slug) for tag in book.tags]
@@ -290,14 +289,14 @@ class TreeImportTest(WLTestCase):
         self.assertEqual(
                 list(self.client.get('/katalog/gatunek/x-genre/').context['object_list']),
                 [self.parent],
-                u"There should be only parent on common tag page."
+                "There should be only parent on common tag page."
             )
         # pies = models.Tag.objects.get(slug='pies')
         themes = self.parent.related_themes()
-        self.assertEqual(len(themes), 1, u"There should be child theme in parent theme counter.")
+        self.assertEqual(len(themes), 1, "There should be child theme in parent theme counter.")
         # TODO: book_count is deprecated, update here.
         # epoch = models.Tag.objects.get(slug='x-epoch')
-        # self.assertEqual(epoch.book_count, 1, u"There should be only parent in common tag's counter.")
+        # self.assertEqual(epoch.book_count, 1, "There should be only parent in common tag's counter.")
 
     def test_child_republish(self):
         child_text = """<utwor>
@@ -311,15 +310,15 @@ class TreeImportTest(WLTestCase):
         self.assertEqual(
                 list(self.client.get('/katalog/gatunek/x-genre/').context['object_list']),
                 [self.parent],
-                u"There should only be parent on common tag page."
+                "There should only be parent on common tag page."
             )
         # pies = models.Tag.objects.get(slug='pies')
         # kot = models.Tag.objects.get(slug='kot')
         self.assertEqual(len(self.parent.related_themes()), 2,
-                         u"There should be child themes in parent theme counter.")
+                         "There should be child themes in parent theme counter.")
         # TODO: book_count is deprecated, update here.
         # epoch = models.Tag.objects.get(slug='x-epoch')
-        # self.assertEqual(epoch.book_count, 1, u"There should only be parent in common tag's counter.")
+        # self.assertEqual(epoch.book_count, 1, "There should only be parent in common tag's counter.")
 
     def test_book_change_child(self):
         second_child_info = BookInfoStub(
@@ -346,24 +345,24 @@ class TreeImportTest(WLTestCase):
         self.assertEqual(
             set(self.client.get('/katalog/gatunek/x-genre/').context['object_list']),
             {self.parent, self.child},
-            u"There should be parent and old child on common tag page."
+            "There should be parent and old child on common tag page."
         )
         # kot = models.Tag.objects.get(slug='kot')
         self.assertEqual(len(self.parent.related_themes()), 1,
-                         u"There should only be new child themes in parent theme counter.")
+                         "There should only be new child themes in parent theme counter.")
         # # book_count deprecated, update test.
         # epoch = models.Tag.objects.get(slug='x-epoch')
         # self.assertEqual(epoch.book_count, 2,
-        #                  u"There should be parent and old child in common tag's counter.")
+        #                  "There should be parent and old child in common tag's counter.")
         self.assertEqual(
             list(self.client.get('/katalog/lektura/parent/motyw/kot/').context['fragments']),
             [second_child.fragments.all()[0]],
-            u"There should be new child's fragments on parent's theme page."
+            "There should be new child's fragments on parent's theme page."
         )
         self.assertEqual(
             list(self.client.get('/katalog/lektura/parent/motyw/pies/').context['fragments']),
             [],
-            u"There should be no old child's fragments on parent's theme page."
+            "There should be no old child's fragments on parent's theme page."
         )
 
 
@@ -378,7 +377,7 @@ class MultilingualBookImportTest(WLTestCase):
             kind='X-Kind',
             author=PersonStub(("Joe",), "Doe"),
             variant_of=common_uri,
-            **info_args(u"Książka")
+            **info_args("Książka")
         )
 
         self.eng_info = BookInfoStub(
index b744f96..6bc6aa3 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -24,7 +23,7 @@ class BookMediaTests(WLTestCase):
         self.book.save()
 
     def test_diacritics(self):
-        bm = models.BookMedia(book=self.book, type="ogg", name=u"Zażółć gęślą jaźń")
+        bm = models.BookMedia(book=self.book, type="ogg", name="Zażółć gęślą jaźń")
         self.set_title(bm.name)
         bm.file.save(None, self.file)
         self.assertEqual(basename(bm.file.name), 'zazolc-gesla-jazn.ogg')
@@ -59,10 +58,10 @@ class BookMediaTests(WLTestCase):
             File save doesn't clobber some other media with similar name.
         """
 
-        bm = models.BookMedia(book=self.book, type='ogg', name=u"Tytul")
+        bm = models.BookMedia(book=self.book, type='ogg', name="Tytul")
         self.set_title(bm.name)
         bm.file.save(None, self.file)
-        bm2 = models.BookMedia(book=self.book, type='ogg', name=u"Tytuł")
+        bm2 = models.BookMedia(book=self.book, type='ogg', name="Tytuł")
         self.set_title(bm2.name)
         bm2.file.save(None, self.file2)
         self.assertEqual(basename(bm.file.name), 'tytul.ogg')
index 59a05ed..9b2b011 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 7717782..29acd4a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -78,15 +77,15 @@ class TagRelatedTagsTests(WLTestCase):
         author = PersonStub(("Common",), "Man")
 
         gchild_info = BookInfoStub(author=author, genre="GchildGenre", epoch='Epoch', kind="Kind",
-                                   **info_args(u"GChild"))
+                                   **info_args("GChild"))
         child1_info = BookInfoStub(author=author, genre="ChildGenre", epoch='Epoch', kind="ChildKind",
                                    parts=[gchild_info.url],
-                                   **info_args(u"Child1"))
+                                   **info_args("Child1"))
         child2_info = BookInfoStub(author=author, genre="ChildGenre", epoch='Epoch', kind="ChildKind",
-                                   **info_args(u"Child2"))
+                                   **info_args("Child2"))
         parent_info = BookInfoStub(author=author, genre="Genre", epoch='Epoch', kind="Kind",
                                    parts=[child1_info.url, child2_info.url],
-                                   **info_args(u"Parent"))
+                                   **info_args("Parent"))
 
         for info in gchild_info, child1_info, child2_info, parent_info:
             book_text = """<utwor><opowiadanie><akap>
@@ -183,7 +182,7 @@ class CleanTagRelationTests(WLTestCase):
         WLTestCase.setUp(self)
         author = PersonStub(("Common",), "Man")
 
-        book_info = BookInfoStub(author=author, genre="G", epoch='E', kind="K", **info_args(u"Book"))
+        book_info = BookInfoStub(author=author, genre="G", epoch='E', kind="K", **info_args("Book"))
         book_text = """<utwor><opowiadanie><akap>
             <begin id="m01" /><motyw id="m01">Theme</motyw>Ala ma kota
             <end id="m01" />
@@ -220,7 +219,7 @@ class TestIdenticalTag(WLTestCase):
         WLTestCase.setUp(self)
         author = PersonStub((), "Tag")
 
-        self.book_info = BookInfoStub(author=author, genre="tag", epoch='tag', kind="tag", **info_args(u"tag"))
+        self.book_info = BookInfoStub(author=author, genre="tag", epoch='tag', kind="tag", **info_args("tag"))
         self.book_text = """<utwor>
             <opowiadanie>
             <akap>
@@ -263,10 +262,10 @@ class BookTagsTests(WLTestCase):
         author2 = PersonStub(("Jim",), "Lazy")
 
         child_info = BookInfoStub(authors=(author1, author2), genre="ChildGenre", epoch='Epoch', kind="ChildKind",
-                                  **info_args(u"Child"))
+                                  **info_args("Child"))
         parent_info = BookInfoStub(author=author1, genre="Genre", epoch='Epoch', kind="Kind",
                                    parts=[child_info.url],
-                                   **info_args(u"Parent"))
+                                   **info_args("Parent"))
 
         for info in child_info, parent_info:
             book_text = """<utwor><opowiadanie><akap>
index c69472f..a538976 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -16,10 +15,10 @@ class BookDescTests(WLTestCase):
         authors = PersonStub(("Common",), "Man"), PersonStub(("Jane",), "Doe")
 
         child_info = BookInfoStub(authors=authors, genre="Genre", epoch='Epoch', kind="Kind",
-                                  **info_args(u"Child"))
+                                  **info_args("Child"))
         parent_info = BookInfoStub(authors=authors, genre="Genre", epoch='Epoch', kind="Kind",
                                    parts=[child_info.url],
-                                   **info_args(u"Parent"))
+                                   **info_args("Parent"))
 
         self.child = models.Book.from_text_and_meta(ContentFile('<utwor/>'), child_info)
         models.Book.from_text_and_meta(ContentFile('<utwor/>'), parent_info)
index 29011fa..83d5e0b 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -14,7 +13,7 @@ class VisitTest(WLTestCase):
         WLTestCase.setUp(self)
         author = PersonStub(("Jane",), "Doe")
         book_info = BookInfoStub(author=author, genre="Sielanka",
-            epoch='Epoch', kind="Kind", **info_args(u"A book"))
+            epoch='Epoch', kind="Kind", **info_args("A book"))
         self.book = models.Book.from_text_and_meta(ContentFile('''
             <utwor>
             <opowiadanie>
index 0fc51a6..ac551b9 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index ec938ea..7f33741 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -249,7 +248,7 @@ def truncate_html_words(s, num, end_text='...'):
     s = force_text(s)
     length = int(num)
     if length <= 0:
-        return u''
+        return ''
     html4_singlets = ('br', 'col', 'link', 'base', 'img', 'param', 'area', 'hr', 'input')
     # Set up regular expressions
     re_words = re.compile(r'&.*?;|<.*?>|(\w[\w-]*)', re.U)
index 6da19ec..38ac2b2 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 94ed3da..cf0cccc 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index 09d541c..baeec06 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index a7d7ca3..fd1c0bb 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 200002b..e86288e 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django import template
 from django.core.cache import cache
 from django.utils.safestring import mark_safe
index 1b7e830..4338699 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 85b8520..64218f1 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.contrib import admin
 from modeltranslation.admin import TranslationAdmin
 from . import models
index ee25849..8481359 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.apps import AppConfig
 
 class ClubConfig(AppConfig):
index b818d1c..1906bc9 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from decimal import Decimal
 from django import forms
 from . import models
index 4ece5f9..b4ef0dd 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.utils.timezone import now
 from .models import Schedule
 
index 9bc5e68..3c8b36c 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from datetime import timedelta
 from django.core.management.base import BaseCommand, CommandError
 from django.utils.timezone import now
index 3480e3f..1dbbcc1 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-03-04 20:50
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.conf import settings
 from django.db import migrations, models
 import django.db.models.deletion
index 9c876ad..2e5ba7e 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-04-16 08:24
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 
index 0b39964..3adcf2a 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-04-16 08:45
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations
 
 
index f432a0a..6d40183 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-04-16 08:50
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 111e93c..19c5c7f 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-04-16 08:52
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index c5eaca5..817a9bf 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-04-16 10:36
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations
 
 
index 9730d44..97ead12 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-04-16 14:25
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 
index ce30b25..1e8bc9f 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-04-17 13:39
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 57a110f..a823e64 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-05-10 13:10
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 77f13de..ca5ee4d 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-05-29 07:46
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 1f47d58..c49b888 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from datetime import datetime, timedelta
 from django.conf import settings
 from django.contrib.sites.models import Site
@@ -126,7 +129,7 @@ class Membership(models.Model):
         verbose_name_plural = _('memberships')
 
     def __str__(self):
-        return u'tow. ' + str(self.user)
+        return str(self.user)
 
     @classmethod
     def is_active_for(cls, user):
index a71a67b..99694ef 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.conf import settings
 from django.urls import reverse
 
index b59b58e..e5bfbdb 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.conf import settings
 from .pos import POS
 
index 24c24a0..bdcdf56 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django import forms
 
 
index 4fe4d94..1cd689d 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import json
 from urllib.parse import urlencode
 from urllib.request import HTTPError
index c9dca99..db03d43 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import requests
 
 
index 3619b90..3cef8ae 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.contrib.staticfiles.testing import StaticLiveServerTestCase
 from selenium.webdriver.firefox.webdriver import WebDriver
 
diff --git a/src/club/payu/tests/tests.py b/src/club/payu/tests/tests.py
deleted file mode 100644 (file)
index bcfd951..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-# 1. idziemy do płatności, wyświetlamy widget, klikamy w wydżet
-
-# (pierwsza płatność) OrderCreateRequest z tokenem jednorazowym
-#  < możliwa odpowiedź: WARNING_CONTINUE_3DS ([status]status_co
-#  < token wielorazowy
-#  < błąd http
-#  < nieczytelna odpowiedź
-
-# OrderCreateRequest z tokenem wielorazowym
-
-
-
-# integration tests:
-
-# (run on payu sandbox)
-# open browser, display widget, input data, run widget, fetch token
-# 
index f84bf76..3f06b37 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from hashlib import md5, sha256
 from django.conf import settings
 from django import http
index a08880d..646df6c 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from rest_framework.permissions import BasePermission
 from .models import Membership
 
index 1a34169..65dcd68 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django import template
 from ..helpers import get_active_schedule
 
index 38772a7..cb8d02c 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 844359b..3e0391b 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.conf.urls import url
 from . import views
 
index e80acaa..e469345 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.conf import settings
 from django.contrib.auth.decorators import login_required
 from django.http import HttpResponseRedirect
index 3bce2e3..bbf0f3d 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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.
+#
 """
 Generic app for creating contact forms.
 
index 32d12ec..cf8d06c 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import csv
 import json
 
@@ -19,8 +22,7 @@ class ContactAdminMeta(admin.ModelAdmin.__class__):
         raise AttributeError(name)
 
 
-class ContactAdmin(admin.ModelAdmin):
-    __metaclass__ = ContactAdminMeta
+class ContactAdmin(admin.ModelAdmin, metaclass=ContactAdminMeta):
     date_hierarchy = 'created_at'
     list_display = ['created_at', 'contact', 'form_tag'] + \
         ["admin_list_%d" % i for i in range(admin_list_width)]
index c2c97b3..578776a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index ee44e4b..ecdc47d 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import json
 from django.contrib.sites.models import Site
 from django.core.exceptions import ValidationError
@@ -26,9 +29,8 @@ class ContactFormMeta(forms.Form.__class__):
         return model
 
 
-class ContactForm(forms.Form):
+class ContactForm(forms.Form, metaclass=ContactFormMeta):
     """Subclass and define some fields."""
-    __metaclass__ = ContactFormMeta
 
     form_tag = None
     form_title = _('Contact form')
index baacf3d..4dee9c5 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from hashlib import md5
 
 from django.conf import settings
index 682a097..08f688f 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 
index b173b4d..929106e 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import json
 import yaml
 from hashlib import sha1
@@ -20,7 +23,7 @@ class Contact(models.Model):
         if type(value) in (tuple, list, dict):
             value = yaml.safe_dump(value, allow_unicode=True, default_flow_style=False)
             if for_html:
-                value = smart_text(value).replace(u" ", unichr(160))
+                value = smart_text(value).replace(" ", unichr(160))
         return value
 
     class Meta:
index aadba16..4e07846 100755 (executable)
@@ -1,4 +1,6 @@
-# -*- 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 django.template import Library
 from contact.models import Contact
 
index c475cd4..9fbce2f 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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 django.conf.urls import url
 from . import views
 
index 0f8aad9..6f62052 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from urllib.parse import unquote
 
 from datetime import datetime
index 62a4976..fd2a49e 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -8,6 +7,6 @@ from django.utils.html import format_html
 
 
 class HeaderWidget(forms.widgets.Widget):
-    def render(self, name, value, attrs=None):
+    def render(self, name, value, attrs=None, renderer=None):
         attrs.update(self.attrs)
         return format_html('<a{0}></a>', flatatt(attrs))
index e99dc3f..51fc67b 100644 (file)
@@ -1,9 +1,6 @@
-# -*- 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 __future__ import unicode_literals
-
 from django.utils.translation import ugettext_lazy as _
 
 
index 60ea4b6..58fb7aa 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 
index f51e83f..d763e9a 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 
index ee4beee..77aea8a 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index ee7252c..c0a1454 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 9afe3e8..7baa5da 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 6c48cee..0b5924b 100755 (executable)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -16,7 +15,7 @@ class DictionaryTests(WLTestCase):
             kind="X-Kind",
             genre="X-Genre",
             epoch="X-Epoch",
-            **info_args(u"Default Book")
+            **info_args("Default Book")
         )
 
     def test_book_with_footnote(self):
index a5582a1..2baf628 100755 (executable)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index f9c1035..719568a 100755 (executable)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 9e81e9e..d17c68d 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -8,7 +7,7 @@ from catalogue.utils import AppSettings
 
 class Settings(AppSettings):
     """Default settings for funding app."""
-    DEFAULT_LANGUAGE = u'pl'
+    DEFAULT_LANGUAGE = 'pl'
     DEFAULT_AMOUNT = 20
     MIN_AMOUNT = 1
     DAYS_NEAR = 2
index 5f552c4..a59704d 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 1c85135..915e2aa 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -26,7 +25,7 @@ class FundingForm(NewsletterForm):
             "and to send you updates about your payment and the fundraiser status (which you can always turn off).<br/>"
             "Your e-mail won't be publicised.")), required=False)
 
-    data_processing_part2 = u'''\
+    data_processing_part2 = '''\
 W przypadku podania danych zostaną one wykorzystane w sposób podany powyżej, a w przypadku wyrażenia dodatkowej zgody 
 adres e-mail zostanie wykorzystany także w celu przesyłania newslettera Wolnych Lektur.'''
 
index cd46551..6b511da 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 
index 3224eb0..a85ea1b 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 94485d7..b368eef 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 17822ee..345c6f5 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-07-29 12:50
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 
index b439ebf..79385a2 100644 (file)
@@ -38,7 +38,7 @@ class Offer(models.Model):
     notified_end = models.DateTimeField(_('End notifications sent'), blank=True, null=True)
 
     def cover_img_tag(self):
-        return u'<img src="%s" />' % self.cover.url
+        return '<img src="%s" />' % self.cover.url
     cover_img_tag.short_description = _('Cover preview')
     cover_img_tag.allow_tags = True
 
@@ -48,7 +48,7 @@ class Offer(models.Model):
         ordering = ['-end']
 
     def __str__(self):
-        return u"%s - %s" % (self.author, self.title)
+        return "%s - %s" % (self.author, self.title)
 
     def get_absolute_url(self):
         return reverse('funding_offer', args=[self.slug])
@@ -258,7 +258,7 @@ class Perk(models.Model):
         ordering = ['-price']
 
     def __str__(self):
-        return "%s (%s%s)" % (self.name, self.price, u" for %s" % self.offer if self.offer else "")
+        return "%s (%s%s)" % (self.name, self.price, " for %s" % self.offer if self.offer else "")
 
 
 class Funding(models.Model):
@@ -358,7 +358,7 @@ class Spent(models.Model):
         ordering = ['-timestamp']
 
     def __str__(self):
-        return u"Spent: %s" % str(self.book)
+        return "Spent: %s" % str(self.book)
 
 
 @receiver(getpaid.signals.new_payment_query)
index ccbf08f..d062809 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index e93d816..afebd8a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -12,7 +11,7 @@ from fnpdjango.utils.text import char_map
 sane_in_payu_title = re.escape(
     string.ascii_uppercase +
     string.ascii_lowercase +
-    u'ąćęłńóśźżĄĆĘŁŃÓŚŹŻ' +
+    'ąćęłńóśźżĄĆĘŁŃÓŚŹŻ' +
     string.digits +
     ' ' +
     "".join(set(string.punctuation) - set('\\'))
index f66cde3..3eacb13 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -12,7 +11,7 @@ class PerksAmountWidget(forms.Textarea):
     def perks_input_name(name):
         return "_%s_perk" % name
 
-    def render(self, name, value, attrs=None):
+    def render(self, name, value, attrs=None, renderer=None):
         try:
             value = Decimal(value)
         except DecimalException:
index 67960ae..d2f5fb0 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 2c3f4f0..f9978c7 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index d5755e7..530f2bb 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index d7c93ca..3c3cfdf 100755 (executable)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index caf94e3..cf5caf4 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index ffae439..9d82335 100755 (executable)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index fe2db84..23ae502 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 5f2940c..7d47fb5 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from datetime import date
 import json
 from urllib.request import urlopen
@@ -13,8 +16,8 @@ from librarian.parser import WLDocument
 
 
 class WLISBNForm(forms.Form):
-    platform_url = forms.URLField(label=u'Adres na platformie')
-    publishing_date = forms.DateField(label=u'Data publikacji', initial=date.today)
+    platform_url = forms.URLField(label='Adres na platformie')
+    publishing_date = forms.DateField(label='Data publikacji', initial=date.today)
 
     def prepare_data(self):
         platform_url = self.cleaned_data['platform_url']
@@ -63,20 +66,20 @@ class FNPISBNForm(forms.Form):
         ('SOFT', _('Soft cover book')),
     )
     LANGUAGE_CHOICES = (
-        ('pol', u'polski'),
-        ('eng', u'angielski'),
-        ('ger', u'niemiecki'),
-        ('fre', u'francuski'),
+        ('pol', 'polski'),
+        ('eng', 'angielski'),
+        ('ger', 'niemiecki'),
+        ('fre', 'francuski'),
     )
 
     title = forms.CharField()
-    authors = forms.CharField(help_text=u'wartości oddzielone przecinkami lub „Wielu autorów”')
+    authors = forms.CharField(help_text='wartości oddzielone przecinkami lub „Wielu autorów”')
     formats = forms.MultipleChoiceField(choices=FORMAT_CHOICES)
     language = forms.ChoiceField(choices=LANGUAGE_CHOICES)
     publishing_date = forms.DateField()
 
     def prepare_author(self, name):
-        if name == u'Wielu autorów':
+        if name == 'Wielu autorów':
             return {'role': 'A01', 'unnamed': '04'}
         if ' ' in name:
             first_name, last_name = [s.strip() for s in name.rsplit(' ', 1)]
index 9d9d83b..af64e35 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 860bc79..73cb8db 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import json
 from django.core.management.base import BaseCommand
 from django.utils import timezone
index 85d54ec..1a1fe9e 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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 datetime import date
 from lxml import etree
 from django.core.management.base import BaseCommand
@@ -6,6 +8,7 @@ from django.core.management.base import BaseCommand
 from isbn.models import ISBNPool, ONIXRecord
 from librarian import XMLNamespace
 
+
 ONIXNS = XMLNamespace('http://ns.editeur.org/onix/3.0/reference')
 
 DIRECT_FIELDS = {
@@ -19,7 +22,7 @@ DIRECT_FIELDS = {
     'imprint': 'ImprintName',
 }
 
-UNKNOWN = u'Autor nieznany'
+UNKNOWN = 'Autor nieznany'
 
 
 def parse_date(date_str):
index 78a45b9..f55eef0 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 
index 3cf11a4..45a40c9 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 6e4dc09..59a70eb 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 2015dc2..8193d22 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index fc43a36..3f94556 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-07-29 12:50
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 
index dae6719..2a977e5 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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 django.conf.urls import url
 from . import views
 
index da81c84..3e29e86 100644 (file)
@@ -1,6 +1,9 @@
-# -*- 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 librarian import RDFNS, DCNS
 
+
 FORMATS = ('PDF', 'HTML', 'TXT', 'EPUB', 'MOBI')
 
 FORMATS_WITH_CHILDREN = ('PDF', 'EPUB', 'MOBI')
@@ -30,11 +33,11 @@ PRODUCT_FORMATS = {
     'E127': ('mobi', 'application/x-mobipocket-ebook'),
 }
 
-VOLUME_SEPARATORS = (u'. część ', u', część ', u', tom ', u'. der tragödie ')
+VOLUME_SEPARATORS = ('. część ', ', część ', ', tom ', '. der tragödie ')
 
 
 def is_institution(name):
-    return name.startswith(u'Zgromadzenie Ogólne')
+    return name.startswith('Zgromadzenie Ogólne')
 
 
 def get_volume(title):
index 399a25d..09c3466 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.contrib.auth.decorators import permission_required
 from django.http.response import HttpResponseRedirect
 from django.shortcuts import render
index 54eee5b..d38129a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 3199bf0..d490d6e 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 from django.conf import settings
index 94d6537..d855ff6 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index d43a9c7..45eb6de 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-07-29 12:50
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.conf import settings
 from django.db import migrations, models
 import django.db.models.deletion
index 00440a1..9e2f166 100644 (file)
@@ -47,7 +47,7 @@ class Poem(models.Model):
     @staticmethod
     def choose_letter(word, continuations):
         if word not in continuations:
-            return u'\n'
+            return '\n'
 
         choices = sum((continuations[word][letter]
                        for letter in continuations[word]))
@@ -66,7 +66,7 @@ class Poem(models.Model):
             return ''
 
         letters = []
-        word = u''
+        word = ''
 
         finished_stanza_verses = 0
         current_stanza_verses = 0
@@ -82,7 +82,7 @@ class Poem(models.Model):
             word = word[-length + 1:] + letter
             char_count += 1
 
-            if letter == u'\n':
+            if letter == '\n':
                 if verse_start:
                     finished_stanza_verses += current_stanza_verses
                     current_stanza_verses = 0
index 2685e83..15d6f25 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 5629e93..6644dd6 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-\r
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.\r
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.\r
 #\r
index 91c10e5..c12ad3c 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 
index 123580d..a0b7c53 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 897da15..3e3d78e 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 98b3634..1d15797 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index a29b48f..fd2fbfb 100755 (executable)
@@ -1,4 +1,7 @@
 #!/usr/bin/env python
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import os
 import sys
 
index 9fe387d..530eeca 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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 django.conf.urls import url
 from django.contrib import admin
 from django.http.response import HttpResponse
index d473cf3..1091ed8 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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 django.core.exceptions import ValidationError
 from django.core.validators import validate_email
 from django.forms import Form, BooleanField, MultipleChoiceField
@@ -16,15 +18,15 @@ from wolnelektury.utils import send_noreply_mail
 class NewsletterForm(Form):
     email_field = 'email'
     agree_newsletter = BooleanField(
-        required=False, initial=False, label=_(u'I want to receive Wolne Lektury\'s newsletter.'))
+        required=False, initial=False, label=_('I want to receive Wolne Lektury\'s newsletter.'))
     mailing = False
     mailing_field = 'agree_newsletter'
 
-    data_processing_part1 = u'''\
+    data_processing_part1 = '''\
 Administratorem danych osobowych jest Fundacja Nowoczesna Polska (ul. Marszałkowska 84/92 lok. 125, 00-514 Warszawa).
 Podanie danych osobowych jest dobrowolne.'''
-    data_processing_part2 = u'''Dane są przetwarzane w zakresie niezbędnym do wysyłania newslettera odbiorcom.'''
-    data_processing_part3 = u'''\
+    data_processing_part2 = '''Dane są przetwarzane w zakresie niezbędnym do wysyłania newslettera odbiorcom.'''
+    data_processing_part3 = '''\
 Osobom, których dane są zbierane, przysługuje prawo dostępu do treści swoich danych oraz ich poprawiania.
 Więcej informacji w <a href="">polityce prywatności.</a>'''
 
@@ -48,7 +50,7 @@ Więcej informacji w <a href="">polityce prywatności.</a>'''
         else:
             # subscription, created = Subscription.objects.get_or_create(email=email, defaults={'active': False})
             # send_noreply_mail(
-            #     ugettext(u'Confirm your subscription to Wolne Lektury newsletter'),
+            #     ugettext('Confirm your subscription to Wolne Lektury newsletter'),
             #     render_to_string('newsletter/subscribe_email.html', {'subscription': subscription}), [email])
             mailing.subscribe(email, mailing_lists=self.cleaned_data.get('mailing_lists'))
 
@@ -60,8 +62,8 @@ class SubscribeForm(NewsletterForm):
     email = EmailField(label=_('email address'))
     mailing_lists = MultipleChoiceField(
         widget=CheckboxSelectMultiple,
-        choices=(('general', _(u'general newsletter')), ('contest', _(u'about the contest'))),
-        label=_(u'mailing list'))
+        choices=(('general', _('general newsletter')), ('contest', _('about the contest'))),
+        label=_('mailing list'))
 
     def __init__(self, *args, **kwargs):
         super(SubscribeForm, self).__init__(*args, **kwargs)
@@ -75,7 +77,7 @@ class UnsubscribeForm(Form):
         try:
             subscription = Subscription.objects.get(email=email)
         except Subscription.DoesNotExist:
-            raise ValidationError(ugettext(u'Email address not found.'))
+            raise ValidationError(ugettext('Email address not found.'))
         self.cleaned_data['subscription'] = subscription
 
     def save(self):
@@ -87,6 +89,6 @@ class UnsubscribeForm(Form):
         context = {'subscription': subscription}
         # refactor to send_noreply_mail
         send_noreply_mail(
-            ugettext(u'Unsubscribe from Wolne Lektury\'s newsletter.'),
+            ugettext('Unsubscribe from Wolne Lektury\'s newsletter.'),
             render_to_string('newsletter/unsubscribe_email.html', context),
             [subscription.email], fail_silently=True)
index 6897278..0826679 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 60d6fef..f3b7c76 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 0cbf867..38faf34 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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.
+#
 import hashlib
 
 from django.db.models import Model, EmailField, DateTimeField, BooleanField
@@ -8,7 +10,7 @@ from django.conf import settings
 
 class Subscription(Model):
     email = EmailField(verbose_name=_('email address'), unique=True)
-    active = BooleanField(default=True, verbose_name=_(u'active'))
+    active = BooleanField(default=True, verbose_name=_('active'))
     created_at = DateTimeField(auto_now_add=True)
     last_modified = DateTimeField(auto_now=True)
 
diff --git a/src/newsletter/tests.py b/src/newsletter/tests.py
deleted file mode 100644 (file)
index 7ce503c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.test import TestCase
-
-# Create your tests here.
index a34d98c..c99b47a 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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 django.conf.urls import url
 from . import views
 
index 7fd67b2..4c57a25 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.http import Http404
 from django.http.response import HttpResponseRedirect
 from django.shortcuts import render, get_object_or_404
@@ -17,14 +20,14 @@ def subscribe_form(request):
     else:
         form = SubscribeForm()
     return render(request, 'newsletter/subscribe_form.html', {
-        'page_title': _(u'Subscribe To Newsletter'),
+        'page_title': _('Subscribe To Newsletter'),
         'form': form,
     })
 
 
 def subscribed(request):
     return render(request, 'newsletter/subscribed.html', {
-        'page_title': _(u'Subscribed'),
+        'page_title': _('Subscribed'),
     })
 
 
@@ -39,7 +42,7 @@ def confirm_subscription(request, subscription_id, hashcode):
     subscription.active = True
     subscription.save()
     return render(request, 'newsletter/confirm_subscription.html', {
-        'page_title': _(u'Subscription confirmed')
+        'page_title': _('Subscription confirmed')
     })
 
 
@@ -52,12 +55,12 @@ def unsubscribe_form(request):
     else:
         form = UnsubscribeForm()
     return render(request, 'newsletter/unsubscribe_form.html', {
-        'page_title': _(u'Unsubscribe'),
+        'page_title': _('Unsubscribe'),
         'form': form,
     })
 
 
 def unsubscribed(request):
     return render(request, 'newsletter/unsubscribed.html', {
-        'page_title': _(u'Unsubscribed'),
+        'page_title': _('Unsubscribed'),
     })
diff --git a/src/newtagging/admin.py b/src/newtagging/admin.py
deleted file mode 100644 (file)
index 569982d..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-# -*- coding: utf-8 -*-
-from django.contrib import admin
-from django import forms
-from django.utils.safestring import mark_safe
-from django.utils.translation import ugettext_lazy as _
-
-
-class FilteredSelectMultiple(forms.SelectMultiple):
-    """
-    A SelectMultiple with a JavaScript filter interface.
-
-    Note that the resulting JavaScript assumes that the SelectFilter2.js
-    library and its dependencies have been loaded in the HTML page.
-    """
-    def _media(self):
-        from django.conf import settings
-        js = ['js/SelectBox.js', 'js/SelectFilter2.js']
-        return forms.Media(js=['%sadmin/%s' % (settings.STATIC_URL, url) for url in js])
-    media = property(_media)
-
-    def __init__(self, verbose_name, is_stacked, attrs=None, choices=()):
-        self.verbose_name = verbose_name
-        self.is_stacked = is_stacked
-        super(FilteredSelectMultiple, self).__init__(attrs, choices)
-
-    def render(self, name, value, attrs=None, choices=()):
-        from django.conf import settings
-        output = [
-            super(FilteredSelectMultiple, self).render(name, value, attrs, choices),
-            u'<script type="text/javascript">addEvent(window, "load", function(e) {',
-            u'SelectFilter.init("id_%s", "%s", %s, "%s"); });</script>\n' % (
-                name, self.verbose_name.replace('"', '\\"'),
-                int(self.is_stacked), settings.STATIC_URL + "admin/")
-        ]
-        # TODO: "id_" is hard-coded here. This should instead use the correct
-        # API to determine the ID dynamically.
-        return mark_safe(u''.join(output))
-
-
-class TaggableModelForm(forms.ModelForm):
-    tags = forms.MultipleChoiceField(
-        label=_('tags').capitalize(), required=False,
-        widget=FilteredSelectMultiple(_('tags'), is_stacked=False))
-
-    def __init__(self, *args, **kwargs):
-        if 'instance' in kwargs:
-            if 'initial' not in kwargs:
-                kwargs['initial'] = {}
-            kwargs['initial']['tags'] = [tag.id for tag in self.tag_model.objects.get_for_object(kwargs['instance'])]
-        super(TaggableModelForm, self).__init__(*args, **kwargs)
-        self.fields['tags'].choices = [(tag.id, tag.name) for tag in self.tag_model.objects.all()]
-
-    def save(self, commit):
-        obj = super(TaggableModelForm, self).save()
-        tag_ids = self.cleaned_data['tags']
-        tags = self.tag_model.objects.filter(pk__in=tag_ids)
-        self.tag_model.objects.update_tags(obj, tags)
-        return obj
-
-    def save_m2m(self):
-        # TODO: Shouldn't be needed
-        pass
-
-
-class TaggableModelAdmin(admin.ModelAdmin):
-    form = TaggableModelForm
-
-    def get_form(self, request, obj=None):
-        form = super(TaggableModelAdmin, self).get_form(request, obj)
-        form.tag_model = self.tag_model
-        return form
index 7de7fe7..b9a7543 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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.
+#
 """
 Custom managers for Django models registered with the tagging
 application.
index 800cd00..e3e8f3c 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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.
+#
 """
 Models and managers for generic tagging.
 """
index 16d7609..356f51b 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -75,7 +74,7 @@ class Catalogue(common.ResumptionOAIPMH):
 
         try:
             earliest_delete = \
-                Deleted.objects.exclude(slug__exact=u'').order_by('deleted_at')[0].deleted_at
+                Deleted.objects.exclude(slug__exact='').order_by('deleted_at')[0].deleted_at
         except IndexError:
             earliest_delete = year_zero
 
@@ -134,7 +133,7 @@ class Catalogue(common.ResumptionOAIPMH):
             # books = Book.tagged.with_all([tag])
         else:
             books = Book.objects.filter(preview=False)
-        deleted = Deleted.objects.exclude(slug__exact=u'')
+        deleted = Deleted.objects.exclude(slug__exact='')
 
         books = books.order_by('changed_at')
         deleted = deleted.order_by('deleted_at')
index 938624b..214a1c6 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 205d5e6..2088a8a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 5bb9025..25455fb 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 339bfaa..2c37bd4 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -14,7 +13,7 @@ from search.index import Index
 AtomNS = XMLNamespace("http://www.w3.org/2005/Atom")
 
 
-@skipIf(getattr(settings, 'NO_SEARCH_INDEX', False), u'Requires search server and NO_SEARCH_INDEX=False.')
+@skipIf(getattr(settings, 'NO_SEARCH_INDEX', False), 'Requires search server and NO_SEARCH_INDEX=False.')
 class OpdsSearchTests(WLTestCase):
     """Tests search feed in OPDS.."""
     def setUp(self):
@@ -34,7 +33,7 @@ class OpdsSearchTests(WLTestCase):
             self.client.get('/opds/search/?%s' % query).content)
         elem_ids = tree.findall('.//%s/%s' % (AtomNS('entry'), AtomNS('id')))
         slugs = [WLURI(elem.text).slug for elem in elem_ids]
-        self.assertEqual(set(slugs), set(b.slug for b in books), u"OPDS search '%s' failed." % query)
+        self.assertEqual(set(slugs), set(b.slug for b in books), "OPDS search '%s' failed." % query)
 
     def test_opds_search_simple(self):
         """Do a simple q= test, also emulate dumb OPDS clients."""
index 8f1059f..213c55a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index c71822f..6d04c6c 100644 (file)
@@ -28,39 +28,39 @@ log = logging.getLogger('opds')
 
 _root_feeds = (
     {
-        u"category": u"",
-        u"link": u"opds_user",
-        u"link_args": [],
-        u"title": u"Moje półki",
-        u"description": u"Półki użytkownika dostępne po zalogowaniu"
+        "category": "",
+        "link": "opds_user",
+        "link_args": [],
+        "title": "Moje półki",
+        "description": "Półki użytkownika dostępne po zalogowaniu"
     },
     {
-        u"category": u"author",
-        u"link": u"opds_by_category",
-        u"link_args": [u"author"],
-        u"title": u"Autorzy",
-        u"description": u"Utwory wg autorów"
+        "category": "author",
+        "link": "opds_by_category",
+        "link_args": ["author"],
+        "title": "Autorzy",
+        "description": "Utwory wg autorów"
     },
     {
-        u"category": u"kind",
-        u"link": u"opds_by_category",
-        u"link_args": [u"kind"],
-        u"title": u"Rodzaje",
-        u"description": u"Utwory wg rodzajów"
+        "category": "kind",
+        "link": "opds_by_category",
+        "link_args": ["kind"],
+        "title": "Rodzaje",
+        "description": "Utwory wg rodzajów"
     },
     {
-        u"category": u"genre",
-        u"link": u"opds_by_category",
-        u"link_args": [u"genre"],
-        u"title": u"Gatunki",
-        u"description": u"Utwory wg gatunków"
+        "category": "genre",
+        "link": "opds_by_category",
+        "link_args": ["genre"],
+        "title": "Gatunki",
+        "description": "Utwory wg gatunków"
     },
     {
-        u"category": u"epoch",
-        u"link": u"opds_by_category",
-        u"link_args": [u"epoch"],
-        u"title": u"Epoki",
-        u"description": u"Utwory wg epok"
+        "category": "epoch",
+        "link": "opds_by_category",
+        "link_args": ["epoch"],
+        "title": "Epoki",
+        "description": "Utwory wg epok"
     },
 )
 
@@ -73,8 +73,8 @@ def full_url(url):
 
 
 class OPDSFeed(Atom1Feed):
-    link_rel = u"subsection"
-    link_type = u"application/atom+xml"
+    link_rel = "subsection"
+    link_type = "application/atom+xml"
 
     _book_parent_img = lazy(lambda: full_url(os.path.join(settings.STATIC_URL, "img/book-parent.png")), str)()
     try:
@@ -90,45 +90,45 @@ class OPDSFeed(Atom1Feed):
 
     def add_root_elements(self, handler):
         super(OPDSFeed, self).add_root_elements(handler)
-        handler.addQuickElement(u"link", None,
-                                {u"href": reverse("opds_authors"),
-                                 u"rel": u"start",
-                                 u"type": u"application/atom+xml"})
-        handler.addQuickElement(u"link", None,
-                                {u"href": full_url(os.path.join(settings.STATIC_URL, "opensearch.xml")),
-                                 u"rel": u"search",
-                                 u"type": u"application/opensearchdescription+xml"})
+        handler.addQuickElement("link", None,
+                                {"href": reverse("opds_authors"),
+                                 "rel": "start",
+                                 "type": "application/atom+xml"})
+        handler.addQuickElement("link", None,
+                                {"href": full_url(os.path.join(settings.STATIC_URL, "opensearch.xml")),
+                                 "rel": "search",
+                                 "type": "application/opensearchdescription+xml"})
 
     def add_item_elements(self, handler, item):
         """ modified from Atom1Feed.add_item_elements """
-        handler.addQuickElement(u"title", item['title'])
+        handler.addQuickElement("title", item['title'])
 
         # add a OPDS Navigation link if there's no enclosure
         if not item.get('enclosures') is None:
             handler.addQuickElement(
-                u"link", u"", {u"href": item['link'], u"rel": u"subsection", u"type": u"application/atom+xml"})
+                "link", "", {"href": item['link'], "rel": "subsection", "type": "application/atom+xml"})
             # add a "green book" icon
             handler.addQuickElement(
-                u"link", '',
+                "link", '',
                 {
-                    u"rel": u"http://opds-spec.org/thumbnail",
-                    u"href": self._book_parent_img,
-                    u"length": self._book_parent_img_size,
-                    u"type": u"image/png",
+                    "rel": "http://opds-spec.org/thumbnail",
+                    "href": self._book_parent_img,
+                    "length": self._book_parent_img_size,
+                    "type": "image/png",
                 })
         if item['pubdate'] is not None:
             # FIXME: rfc3339_date is undefined, is this ever run?
-            handler.addQuickElement(u"updated", rfc3339_date(item['pubdate']).decode('utf-8'))
+            handler.addQuickElement("updated", rfc3339_date(item['pubdate']).decode('utf-8'))
 
         # Author information.
         if item['author_name'] is not None:
-            handler.startElement(u"author", {})
-            handler.addQuickElement(u"name", item['author_name'])
+            handler.startElement("author", {})
+            handler.addQuickElement("name", item['author_name'])
             if item['author_email'] is not None:
-                handler.addQuickElement(u"email", item['author_email'])
+                handler.addQuickElement("email", item['author_email'])
             if item['author_link'] is not None:
-                handler.addQuickElement(u"uri", item['author_link'])
-            handler.endElement(u"author")
+                handler.addQuickElement("uri", item['author_link'])
+            handler.endElement("author")
 
         # Unique ID.
         if item['unique_id'] is not None:
@@ -136,54 +136,54 @@ class OPDSFeed(Atom1Feed):
         else:
             # FIXME: get_tag_uri is undefined, is this ever run?
             unique_id = get_tag_uri(item['link'], item['pubdate'])
-        handler.addQuickElement(u"id", unique_id)
+        handler.addQuickElement("id", unique_id)
 
         # Summary.
         # OPDS needs type=text
         if item['description'] is not None:
-            handler.addQuickElement(u"summary", item['description'], {u"type": u"text"})
+            handler.addQuickElement("summary", item['description'], {"type": "text"})
 
         # Enclosure as OPDS Acquisition Link
         for enc in item.get('enclosures', []):
             handler.addQuickElement(
-                u"link", '',
+                "link", '',
                 {
-                    u"rel": u"http://opds-spec.org/acquisition",
-                    u"href": enc.url,
-                    u"length": enc.length,
-                    u"type": enc.mime_type,
+                    "rel": "http://opds-spec.org/acquisition",
+                    "href": enc.url,
+                    "length": enc.length,
+                    "type": enc.mime_type,
                 })
             # add a "red book" icon
             handler.addQuickElement(
-                u"link", '',
+                "link", '',
                 {
-                    u"rel": u"http://opds-spec.org/thumbnail",
-                    u"href": self._book_img,
-                    u"length": self._book_img_size,
-                    u"type": u"image/png",
+                    "rel": "http://opds-spec.org/thumbnail",
+                    "href": self._book_img,
+                    "length": self._book_img_size,
+                    "type": "image/png",
                 })
 
         # Categories.
         for cat in item['categories']:
-            handler.addQuickElement(u"category", u"", {u"term": cat})
+            handler.addQuickElement("category", "", {"term": cat})
 
         # Rights.
         if item['item_copyright'] is not None:
-            handler.addQuickElement(u"rights", item['item_copyright'])
+            handler.addQuickElement("rights", item['item_copyright'])
 
 
 class AcquisitionFeed(Feed):
     feed_type = OPDSFeed
-    link = u'http://www.wolnelektury.pl/'
+    link = 'http://www.wolnelektury.pl/'
     item_enclosure_mime_type = "application/epub+zip"
-    author_name = u"Wolne Lektury"
-    author_link = u"http://www.wolnelektury.pl/"
+    author_name = "Wolne Lektury"
+    author_link = "http://www.wolnelektury.pl/"
 
     def item_title(self, book):
         return book.title
 
     def item_description(self):
-        return u''
+        return ''
 
     def item_link(self, book):
         return book.get_absolute_url()
@@ -192,13 +192,13 @@ class AcquisitionFeed(Feed):
         try:
             return book.authors().first().name
         except AttributeError:
-            return u''
+            return ''
 
     def item_author_link(self, book):
         try:
             return book.authors().first().get_absolute_url()
         except AttributeError:
-            return u''
+            return ''
 
     def item_enclosure_url(self, book):
         return full_url(book.epub_url()) if book.epub_file else None
@@ -210,11 +210,11 @@ class AcquisitionFeed(Feed):
 @piwik_track
 class RootFeed(Feed):
     feed_type = OPDSFeed
-    title = u'Wolne Lektury'
-    link = u'http://wolnelektury.pl/'
-    description = u"Spis utworów na stronie http://WolneLektury.pl"
-    author_name = u"Wolne Lektury"
-    author_link = u"http://wolnelektury.pl/"
+    title = 'Wolne Lektury'
+    link = 'http://wolnelektury.pl/'
+    description = "Spis utworów na stronie http://WolneLektury.pl"
+    author_name = "Wolne Lektury"
+    author_link = "http://wolnelektury.pl/"
 
     def items(self):
         return _root_feeds
@@ -232,10 +232,10 @@ class RootFeed(Feed):
 @piwik_track
 class ByCategoryFeed(Feed):
     feed_type = OPDSFeed
-    link = u'http://wolnelektury.pl/'
-    description = u"Spis utworów na stronie http://WolneLektury.pl"
-    author_name = u"Wolne Lektury"
-    author_link = u"http://wolnelektury.pl/"
+    link = 'http://wolnelektury.pl/'
+    description = "Spis utworów na stronie http://WolneLektury.pl"
+    author_name = "Wolne Lektury"
+    author_link = "http://wolnelektury.pl/"
 
     def get_object(self, request, category):
         feed = [feed for feed in _root_feeds if feed['category'] == category]
@@ -259,7 +259,7 @@ class ByCategoryFeed(Feed):
         return reverse("opds_by_tag", args=[item.category, item.slug])
 
     def item_description(self):
-        return u''
+        return ''
 
 
 @piwik_track
@@ -271,7 +271,7 @@ class ByTagFeed(AcquisitionFeed):
         return tag.name
 
     def description(self, tag):
-        return u"Spis utworów na stronie http://WolneLektury.pl"
+        return "Spis utworów na stronie http://WolneLektury.pl"
 
     def get_object(self, request, category, slug):
         return get_object_or_404(Tag, category=category, slug=slug)
@@ -284,16 +284,16 @@ class ByTagFeed(AcquisitionFeed):
 @piwik_track
 class UserFeed(Feed):
     feed_type = OPDSFeed
-    link = u'http://www.wolnelektury.pl/'
-    description = u"Półki użytkownika na stronie http://WolneLektury.pl"
-    author_name = u"Wolne Lektury"
-    author_link = u"http://wolnelektury.pl/"
+    link = 'http://www.wolnelektury.pl/'
+    description = "Półki użytkownika na stronie http://WolneLektury.pl"
+    author_name = "Wolne Lektury"
+    author_link = "http://wolnelektury.pl/"
 
     def get_object(self, request):
         return request.user
 
     def title(self, user):
-        return u"Półki użytkownika %s" % user.username
+        return "Półki użytkownika %s" % user.username
 
     def items(self, user):
         return Tag.objects.filter(category='set', user=user).exclude(items=None)
@@ -305,7 +305,7 @@ class UserFeed(Feed):
         return reverse("opds_user_set", args=[item.slug])
 
     def item_description(self):
-        return u''
+        return ''
 
 
 @factory_decorator(logged_in_or_basicauth())
@@ -318,7 +318,7 @@ class UserSetFeed(AcquisitionFeed):
         return tag.name
 
     def description(self, tag):
-        return u"Spis utworów na stronie http://WolneLektury.pl"
+        return "Spis utworów na stronie http://WolneLektury.pl"
 
     def get_object(self, request, slug):
         return get_object_or_404(Tag, category='set', slug=slug, user=request.user)
@@ -329,8 +329,8 @@ class UserSetFeed(AcquisitionFeed):
 
 @piwik_track
 class SearchFeed(AcquisitionFeed):
-    description = u"Wyniki wyszukiwania na stronie WolneLektury.pl"
-    title = u"Wyniki wyszukiwania"
+    description = "Wyniki wyszukiwania na stronie WolneLektury.pl"
+    title = "Wyniki wyszukiwania"
 
     QUOTE_OR_NOT = r'(?:(?=["])"([^"]+)"|([^ ]+))'
     INLINE_QUERY_RE = re.compile(
index 4cc7660..f35219a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 6380c0f..7850800 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 from django.conf import settings
index 7a45e87..83c0fc0 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 4c47ec7..1e7b2f8 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-07-29 12:50
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.conf import settings
 from django.db import migrations, models
 import django.db.models.deletion
index 57c150b..92752b7 100644 (file)
@@ -72,8 +72,8 @@ def create_agreement(amount, app=False):
         plan_id = plan.plan_id
     start = (timezone.now() + timedelta(0, 3600*24)).astimezone(pytz.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
     billing_agreement = paypalrestsdk.BillingAgreement({
-        "name": u"Subskrypcja klubu WL",
-        "description": u"Stałe wsparcie Wolnych Lektur kwotą %s złotych" % amount,
+        "name": "Subskrypcja klubu WL",
+        "description": "Stałe wsparcie Wolnych Lektur kwotą %s złotych" % amount,
         "start_date": start,
         "plan": {
             "id": plan_id,
index b83756b..5f1e77a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index fdd0a8e..f6d5ed1 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index 6447cc1..e02d5ce 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 7d6181d..40bf3e6 100644 (file)
@@ -14,7 +14,7 @@ class Author(models.Model):
     slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True)
     sort_key = models.CharField(_('sort key'), max_length=120, db_index=True)
     description = models.TextField(_('description'), blank=True)
-    death = models.IntegerField(_(u'year of death'), blank=True, null=True)
+    death = models.IntegerField(_('year of death'), blank=True, null=True)
     gazeta_link = models.CharField(blank=True, max_length=240)
     wiki_link = models.CharField(blank=True, max_length=240)
 
index 42427fb..98d516c 100755 (executable)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 3be24c0..5e3f3be 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -17,7 +16,7 @@ def book_stub_detail(request, slug):
     else:
         pd_counter = None
 
-    form = PublishingSuggestForm(initial={"books": u"%s — %s, \n" % (book.author, book.title)})
+    form = PublishingSuggestForm(initial={"books": "%s — %s, \n" % (book.author, book.title)})
 
     return render(request, 'pdcounter/book_stub_detail.html', {
         'book': book,
index debe11a..1020f49 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index e8dc146..cb457f5 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index fddc86c..4ca98b9 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 14706d9..47156e8 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 22611bb..08f66d6 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from os.path import join
 from django.conf import settings
 from django.db import models, migrations
index 10542c8..d19e2c2 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index 4e257d8..6c71425 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index 88d1249..432702f 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index 9ece9d7..2d8f7b1 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import json
 from django.core.files.base import ContentFile
 from django.db import models, migrations
index 50f97b5..ccead19 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 1f70f40..90e943b 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from os.path import join
 import sorl.thumbnail.fields
 from django.conf import settings
index 92db5c5..6d2c093 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 1ad09e2..875ebcc 100644 (file)
@@ -118,7 +118,7 @@ class Picture(models.Model):
         try:
             author = self.authors().first().sort_key
         except AttributeError:
-            author = u''
+            author = ''
         self.sort_key_author = author
 
         ret = super(Picture, self).save(force_insert, force_update)
index 022b33c..8ff1251 100644 (file)
@@ -1,9 +1,6 @@
-# -*- 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 __future__ import with_statement
-
 from os import path
 from picture.models import Picture
 from catalogue.test_utils import WLTestCase
@@ -18,8 +15,8 @@ class PictureTest(WLTestCase):
         for area in picture.areas.all():
             themes.update([
                 (tag.category, tag.name)
-                for tag in area.tags if tag.category in (u'theme', u'thing')])
-        assert themes == {(u'theme', u'nieporządek'), (u'thing', u'Kosmos')}, \
+                for tag in area.tags if tag.category in ('theme', 'thing')])
+        assert themes == {('theme', 'nieporządek'), ('thing', 'Kosmos')}, \
             'Bad themes on Picture areas: %s' % themes
 
         pic_themes = set([tag.name for tag in picture.tags if tag.category in ('theme', 'thing')])
index 235e8f3..6941694 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 20d53fe..ac97354 100644 (file)
@@ -1,14 +1,13 @@
-# -*- coding: utf-8 -*-\r
-# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.\r
-# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.\r
-#\r
-from django import forms\r
-\r
-\r
-class PollForm(forms.Form):\r
-    vote = forms.ChoiceField(widget=forms.RadioSelect)\r
-\r
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from django import forms
+
+
+class PollForm(forms.Form):
+    vote = forms.ChoiceField(widget=forms.RadioSelect)
+
     def __init__(self, *args, **kwargs):
-        poll = kwargs.pop('poll', None)\r
-        super(PollForm, self).__init__(*args, **kwargs)\r
-        self.fields['vote'].choices = [(item.id, item.content) for item in poll.items.all()]\r
+        poll = kwargs.pop('poll', None)
+        super(PollForm, self).__init__(*args, **kwargs)
+        self.fields['vote'].choices = [(item.id, item.content) for item in poll.items.all()]
index 79592e9..58b9d8d 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 
index e759488..5edd0ff 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 7124b86..e6e3f8a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 8a5f621..897686b 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 339e2e7..1843dbb 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index f3c832b..afe12d1 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -17,7 +16,7 @@ class NotificationForm(forms.ModelForm):
 
     def save(self, commit=True):
         notification = super(NotificationForm, self).save(commit=commit)
-        wl_base = u'https://' + Site.objects.get_current().domain
+        wl_base = 'https://' + Site.objects.get_current().domain
         if notification.image:
             image_url = wl_base + notification.image.url
         else:
index 86a33dc..cbe1c26 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 3cf282c..592da39 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index e90a814..7a6abd0 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index bb84b99..b149ed7 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -8,9 +7,9 @@ from django.utils.translation import ugettext_lazy as _
 
 class Notification(models.Model):
     timestamp = models.DateTimeField(auto_now_add=True)
-    title = models.CharField(max_length=256, verbose_name=_(u'title'))
-    body = models.CharField(max_length=2048, verbose_name=_(u'content'))
-    image = models.ImageField(verbose_name=_(u'image'), blank=True, upload_to='push/img')
+    title = models.CharField(max_length=256, verbose_name=_('title'))
+    body = models.CharField(max_length=2048, verbose_name=_('content'))
+    image = models.ImageField(verbose_name=_('image'), blank=True, upload_to='push/img')
     message_id = models.CharField(max_length=2048)
 
     class Meta:
index 173b2dd..c7f64d9 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 6845315..eb11984 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 740b927..df7df2e 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 7a20804..ef91aed 100755 (executable)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index f4a65f4..fa7ceb2 100755 (executable)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index d384124..e69de29 100644 (file)
@@ -1,4 +0,0 @@
-# -*- 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.
-#
index c27cce1..10afd59 100755 (executable)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -15,9 +14,9 @@ class JQueryAutoCompleteWidget(forms.TextInput):
         super(JQueryAutoCompleteWidget, self).__init__(*args, **kwargs)
 
     def render_js(self, field_id, options):
-        return u'$(\'#%s\').autocomplete(%s).result(autocomplete_result_handler);' % (field_id, options)
+        return '$(\'#%s\').autocomplete(%s).result(autocomplete_result_handler);' % (field_id, options)
 
-    def render(self, name, value=None, attrs=None):
+    def render(self, name, value=None, attrs=None, renderer=None):
         final_attrs = self.build_attrs(self.attrs, attrs)
         final_attrs["name"] = name
         if value:
@@ -26,7 +25,7 @@ class JQueryAutoCompleteWidget(forms.TextInput):
         if 'id' not in self.attrs:
             final_attrs['id'] = 'id_%s' % name
 
-        html = u'''<input type="text" %(attrs)s/>
+        html = '''<input type="text" %(attrs)s/>
             <script type="text/javascript">//<!--
             %(js)s//--></script>
             ''' % {
@@ -42,7 +41,7 @@ class JQueryAutoCompleteSearchWidget(JQueryAutoCompleteWidget):
         super(JQueryAutoCompleteSearchWidget, self).__init__(*args, **kwargs)
 
     def render_js(self, field_id, options):
-        return u""
+        return ""
 
 
 class JQueryAutoCompleteField(forms.CharField):
index b67ae77..d62ab64 100755 (executable)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index bd31a2a..e471cd6 100644 (file)
@@ -390,16 +390,16 @@ class Index(SolrIndex):
             return
 
         def fix_format(text):
-            # separator = [u" ", u"\t", u".", u";", u","]
+            # separator = [" ", "\t", ".", ";", ","]
             if isinstance(text, list):
                 # need to join it first
                 text = filter(lambda s: s is not None, content)
-                text = u' '.join(text)
+                text = ' '.join(text)
                 # for i in range(len(text)):
                 #     if i > 0:
                 #         if text[i][0] not in separator\
                 #             and text[i - 1][-1] not in separator:
-                #          text.insert(i, u" ")
+                #          text.insert(i, " ")
 
             return re.sub("(?m)/$", "", text)
 
@@ -463,7 +463,7 @@ class Index(SolrIndex):
                     elif end is not None and footnote is not [] and end.tag in self.footnote_tags:
                         handle_text.pop()
                         doc = add_part(snippets, header_index=position, header_type=header.tag,
-                                       text=u''.join(footnote),
+                                       text=''.join(footnote),
                                        is_footnote=True)
                         self.index.add(doc)
                         footnote = []
@@ -613,7 +613,7 @@ class SearchResult(object):
         return result
 
     def __str__(self):
-        return u"<SR id=%d %d(%d) hits score=%f %d snippets>" % \
+        return "<SR id=%d %d(%d) hits score=%f %d snippets>" % \
             (self.book_id, len(self._hits),
              len(self._processed_hits) if self._processed_hits else -1,
              self._score, len(self.snippets))
@@ -802,7 +802,7 @@ class PictureResult(object):
             self._hits.append(hit)
 
     def __str__(self):
-        return u"<PR id=%d score=%f >" % (self.picture_id, self._score)
+        return "<PR id=%d score=%f >" % (self.picture_id, self._score)
 
     def __repr__(self):
         return str(self)
index 05c504c..8d0b74b 100644 (file)
@@ -23,8 +23,8 @@ def book_searched(context, result):
             continue
         snip = result.snippets[idx]
         # fix some formattting
-        snip = re.sub(r"[ \t\n]*\n[ \t\n]*", u"\n", snip)
-        snip = re.sub(r"(^[ \t\n]+|[ \t\n]+$)", u"", snip)
+        snip = re.sub(r"[ \t\n]*\n[ \t\n]*", "\n", snip)
+        snip = re.sub(r"(^[ \t\n]+|[ \t\n]+$)", "", snip)
 
         snip = snip.replace("\n", "<br />").replace('---', '&mdash;')
         hit['snippet'] = snip
index 80c974e..6cf7afe 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 2af1d30..34d9586 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -15,7 +14,7 @@ import opds
 
 @override_settings(SEARCH_INDEX=tempfile.mkdtemp(prefix='djangotest_search_'))
 @skipIf(getattr(settings, 'NO_SEARCH_INDEX', False),
-        u'Requires search server and NO_SEARCH_INDEX=False.')
+        'Requires search server and NO_SEARCH_INDEX=False.')
 class BookSearchTests(WLTestCase):
     def setUp(self):
         WLTestCase.setUp(self)
@@ -32,7 +31,7 @@ class BookSearchTests(WLTestCase):
 
     # TODO: Add slop option to sunburnt
     # def test_search_perfect_parts(self):
-    #     books = self.search.search_phrase(u"Jakoż hamować")
+    #     books = self.search.search_phrase("Jakoż hamować")
     #     assert len(books) == 2
     #     for b in books:
     #         b.book_id == self.book.id
index 46914d6..980f5e8 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 3bbe720..2fe94f4 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -119,7 +118,7 @@ def main(request):
     pd_authors = search_pd_authors(query)
     books = search_books(query)
     pictures = search_pictures(query)
-    suggestion = u''
+    suggestion = ''
 
     if not (books or pictures or pd_authors):
         form = PublishingSuggestForm(initial={"books": query + ", "})
index 5c633d8..2ed2d66 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 1be5210..ff6a08f 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 056918b..a0e3bae 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 
index f26e4f8..eac8e6a 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 0aaea6d..76f00bd 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index fb79d8a..2ff02d2 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 3391fab..a4167e1 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-03-18 12:09
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 
index f6881a3..cc7d8d1 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations
 
 
index 0f3fdae..973294e 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-03-18 12:39
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 import django.db.models.deletion
 
index 6398316..ea7fefa 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-04-03 13:10
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations
 
 
index f8c1400..ebc2ccd 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-07-15 12:05
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 54715ab..2d1f525 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-07-15 12:12
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index b8f50ab..29029ee 100644 (file)
@@ -6,7 +6,7 @@ from django.db import models
 from django.conf import settings
 from django.core.exceptions import ValidationError
 from django.urls import reverse
-from django.utils.translation import ugettext_lazy as _, string_concat
+from django.utils.translation import ugettext_lazy as _
 from catalogue.models import Book
 from wolnelektury.utils import cached_render, clear_cached_renders
 
@@ -53,7 +53,9 @@ class Cite(models.Model):
 
     sticky = models.BooleanField(_('sticky'), default=False, db_index=True,
                                  help_text=_('Sticky cites will take precedense.'))
-    banner = models.BooleanField(_('banner'), default=False, help_text=string_concat(_('Adjust size to image, ignore the text'), '<br>(Przestarzałe; użyj funkcji "Obraz" w sekcji "Media box")'))
+    banner = models.BooleanField(_('banner'), default=False, help_text=
+            'Dostosuj wielkość do obrazu tła, zignoruj tekst.'
+            '<br>(Przestarzałe; użyj funkcji "Obraz" w sekcji "Media box")')
 
     background_plain = models.BooleanField(_('plain background'), default=False)
     background_color = models.CharField(_('background color'), max_length=32, blank=True)
@@ -62,7 +64,8 @@ class Cite(models.Model):
         help_text=_('Best image is exactly 975px wide and weights under 100kB.'))
     image_shift = models.IntegerField(
         _('shift'), null=True, blank=True,
-        help_text=string_concat(_('Vertical shift, in percents. 0 means top, 100 is bottom. Default is 50%.'), '<br>(Przestarzałe; użyj obrazka o właściwych proporcjach;)'))
+        help_text='Przesunięcie w pionie, w procentach. 0 to wyrównanie do górnej krawędzi, 100 do dolnej. Domyślne jest 50%.'
+            '<br>(Przestarzałe; użyj obrazka o właściwych proporcjach;)')
     image_title = models.CharField(_('title'), max_length=255, null=True, blank=True)
     image_author = models.CharField(_('author'), max_length=255, blank=True, null=True)
     image_link = models.URLField(_('link'), blank=True, null=True)
index 58807bb..0278601 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 import re
 from fnpdjango.utils.text import char_map
 
index f6a851d..c583e6e 100644 (file)
@@ -1,6 +1,5 @@
-# -*- 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.
 #
-__author__ = u'Marek Stępniowski, <marek@stepniowski.com>'
+__author__ = 'Marek Stępniowski, <marek@stepniowski.com>'
 __version__ = '0.1'
index 5f4b523..4f5e468 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 
 
index 0110a88..f0cf696 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 7d53799..3e2dc78 100644 (file)
@@ -20,12 +20,12 @@ class SponsorPageWidget(forms.Textarea):
             'all': (settings.STATIC_URL + 'sponsors/css/footer_admin.css',),
         }
 
-    def render(self, name, value, attrs=None):
-        output = [super(SponsorPageWidget, self).render(name, value, attrs)]
+    def render(self, name, value, attrs=None, renderer=None):
+        output = [super(SponsorPageWidget, self).render(name, value, attrs, renderer)]
         sponsors = [(str(obj), obj.pk, obj.logo.url) for obj in models.Sponsor.objects.all().iterator()]
         sponsors_js = ', '.join('{name: "%s", id: %d, image: "%s"}' % sponsor for sponsor in sponsors)
         output.append('<script type="text/javascript">$(function(e) {')
         # TODO: "id_" is hard-coded here. This should instead use the correct
         # API to determine the ID dynamically.
-        output.append(u'$("#id_%s").sponsorsFooter({sponsors: [%s]}); });</script>\n' % (name, sponsors_js))
-        return mark_safe(u''.join(output))
+        output.append('$("#id_%s").sponsorsFooter({sponsors: [%s]}); });</script>\n' % (name, sponsors_js))
+        return mark_safe(''.join(output))
index cb2ec83..d0aeb7a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -23,7 +22,7 @@ except AttributeError:
 
 @task(ignore_result=True)
 def track_request(piwik_args):
-    piwik_url = "%s%s%s" % (settings.PIWIK_URL, u"/piwik.php?", piwik_args)
+    piwik_url = "%s%s%s" % (settings.PIWIK_URL, "/piwik.php?", piwik_args)
     conn = HTTPConnection(_host)
     conn.request('GET', piwik_url)
     conn.close()
index b76b621..7c7159d 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 90d3b98..952c4fe 100644 (file)
@@ -20,7 +20,7 @@ class SuggestForm(NewsletterForm):
     contact = forms.CharField(label=_('Contact'), max_length=120, required=False)
     description = forms.CharField(label=_('Description'), widget=forms.Textarea, required=True)
 
-    data_processing_part2 = u'''\
+    data_processing_part2 = '''\
 Dane są przetwarzane w zakresie niezbędnym do obsługi zgłoszenia. W przypadku wyrażenia dodatkowej zgody \
 adres e-mail zostanie wykorzystany także w celu przesyłania newslettera Wolnych Lektur.'''
 
@@ -34,7 +34,7 @@ adres e-mail zostanie wykorzystany także w celu przesyłania newslettera Wolnyc
             suggestion.user = request.user
         suggestion.save()
 
-        mail_managers(u'Nowa sugestia na stronie WolneLektury.pl', u'''\
+        mail_managers('Nowa sugestia na stronie WolneLektury.pl', '''\
 Zgłoszono nową sugestię w serwisie WolneLektury.pl.
 http://%(site)s%(url)s
 
@@ -55,8 +55,8 @@ Kontakt: %(contact)s
             pass
         else:
             send_noreply_mail(
-                ugettext(u'Thank you for your suggestion.'),
-                ugettext(u"""\
+                ugettext('Thank you for your suggestion.'),
+                ugettext("""\
 Thank you for your comment on WolneLektury.pl.
 The suggestion has been referred to the project coordinator."""),
                 [contact], fail_silently=True)
@@ -73,7 +73,7 @@ class PublishingSuggestForm(NewsletterForm):
 
     def clean(self):
         if not self.cleaned_data['ebook'] and not self.cleaned_data['audiobook']:
-            msg = ugettext(u"One of these options is required.")
+            msg = ugettext("One of these options is required.")
             self._errors['ebook'] = self.error_class([msg])
             self._errors['audiobook'] = self.error_class([msg])
         return super(PublishingSuggestForm, self).clean()
@@ -94,7 +94,7 @@ class PublishingSuggestForm(NewsletterForm):
         suggestion.save()
 
         if not suggestion.is_spam():
-            mail_managers(u'Konsultacja planu wydawniczego na WolneLektury.pl', u'''\
+            mail_managers('Konsultacja planu wydawniczego na WolneLektury.pl', '''\
     Zgłoszono nową sugestię nt. planu wydawniczego w serwisie WolneLektury.pl.
     %(url)s
 
@@ -119,8 +119,8 @@ class PublishingSuggestForm(NewsletterForm):
                 pass
             else:
                 send_noreply_mail(
-                    ugettext(u'Thank you for your suggestion.'),
-                    ugettext(u"""\
+                    ugettext('Thank you for your suggestion.'),
+                    ugettext("""\
 Thank you for your comment on WolneLektury.pl.
 The suggestion has been referred to the project coordinator."""),
                     [contact], fail_silently=True)
index 6e43ed1..e61375a 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 from django.conf import settings
index 126808b..c8eece6 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 6d0a3f4..505c4b0 100644 (file)
@@ -1,7 +1,6 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2019-07-29 12:50
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.conf import settings
 from django.db import migrations, models
 import django.db.models.deletion
index 167a1a8..4a03a0d 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 9c83ee3..6209782 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index a579d6e..90ce6e9 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import picklefield.fields
 
index 15fb7ef..c5cb328 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 89db402..0961b38 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 51d5f6e..ffe9805 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 68d21bd..a08ee15 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 836534e..b001fef 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index c379250..2d0acdb 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index a75fd0c..d1535d3 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 23bf6dc..1aa0b2e 100644 (file)
@@ -1,9 +1,6 @@
-# -*- 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 __future__ import absolute_import
-
 import os
 from celery import Celery
 from django.conf import settings
index 6d436a0..9eb87ff 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -14,220 +13,220 @@ mark_safe_lazy = lazy(mark_safe, str)
 
 class KonkursForm(ContactForm):
     form_tag = 'konkurs'
-    form_title = u"Konkurs Trzy strony"
+    form_title = "Konkurs Trzy strony"
     admin_list = ['podpis', 'contact', 'temat']
     ends_on = (2017, 11, 8)
     disabled_template = 'contact/disabled_contact_form.html'
 
-    opiekun_header = HeaderField(label=u'Dane\xa0Opiekuna/Opiekunki')
-    opiekun_nazwisko = forms.CharField(label=u'Imię i nazwisko', max_length=128)
-    contact = forms.EmailField(label=u'Adres e-mail', max_length=128)
-    opiekun_tel = forms.CharField(label=u'Numer telefonu', max_length=32)
-    nazwa_dkk = forms.CharField(label=u'Nazwa DKK', max_length=128)
-    adres_dkk = forms.CharField(label=u'Adres DKK', max_length=128)
-
-    uczestnik_header = HeaderField(label=u'Dane\xa0Uczestnika/Uczestniczki')
-    uczestnik_imie = forms.CharField(label=u'Imię', max_length=128)
-    uczestnik_nazwisko = forms.CharField(label=u'Nazwisko', max_length=128)
-    uczestnik_email = forms.EmailField(label=u'Adres e-mail', max_length=128)
-    wiek = forms.ChoiceField(label=u'Kategoria wiekowa', choices=(
+    opiekun_header = HeaderField(label='Dane\xa0Opiekuna/Opiekunki')
+    opiekun_nazwisko = forms.CharField(label='Imię i nazwisko', max_length=128)
+    contact = forms.EmailField(label='Adres e-mail', max_length=128)
+    opiekun_tel = forms.CharField(label='Numer telefonu', max_length=32)
+    nazwa_dkk = forms.CharField(label='Nazwa DKK', max_length=128)
+    adres_dkk = forms.CharField(label='Adres DKK', max_length=128)
+
+    uczestnik_header = HeaderField(label='Dane\xa0Uczestnika/Uczestniczki')
+    uczestnik_imie = forms.CharField(label='Imię', max_length=128)
+    uczestnik_nazwisko = forms.CharField(label='Nazwisko', max_length=128)
+    uczestnik_email = forms.EmailField(label='Adres e-mail', max_length=128)
+    wiek = forms.ChoiceField(label='Kategoria wiekowa', choices=(
         ('0-11', 'do 11 lat'),
         ('12-15', '12–15 lat'),
         ('16-19', '16–19 lat'),
     ))
-    tytul = forms.CharField(label=u'Tytuł opowiadania', max_length=255)
+    tytul = forms.CharField(label='Tytuł opowiadania', max_length=255)
     plik = forms.FileField(
-        label=u'Plik z opowiadaniem',
-        help_text=u'Prosimy o nazwanie pliku imieniem i nazwiskiem autora.')
+        label='Plik z opowiadaniem',
+        help_text='Prosimy o nazwanie pliku imieniem i nazwiskiem autora.')
 
-    agree_header = HeaderField(label=u'Oświadczenia')
+    agree_header = HeaderField(label='Oświadczenia')
     agree_terms = forms.BooleanField(
         label='Regulamin',
         help_text=mark_safe_lazy(
-            u'Znam i akceptuję <a href="/media/chunks/attachment/Regulamin_konkursu_Trzy_strony.pdf">'
-            u'Regulamin Konkursu</a>.'),
+            'Znam i akceptuję <a href="/media/chunks/attachment/Regulamin_konkursu_Trzy_strony.pdf">'
+            'Regulamin Konkursu</a>.'),
     )
     agree_data = forms.BooleanField(
         label='Przetwarzanie danych osobowych',
-        help_text=u'Oświadczam, że wyrażam zgodę na przetwarzanie danych osobowych zawartych w niniejszym formularzu '
-              u'zgłoszeniowym przez Fundację Nowoczesna Polska (administratora danych) z siedzibą w Warszawie (00-514) '
-              u'przy ul. Marszałkowskiej 84/92 lok. 125 na potrzeby organizacji Konkursu. Jednocześnie oświadczam, '
-              u'że zostałam/em poinformowana/y o tym, że mam prawo wglądu w treść swoich danych i możliwość ich '
-              u'poprawiania oraz że ich podanie jest dobrowolne, ale niezbędne do dokonania zgłoszenia.')
+        help_text='Oświadczam, że wyrażam zgodę na przetwarzanie danych osobowych zawartych w niniejszym formularzu '
+              'zgłoszeniowym przez Fundację Nowoczesna Polska (administratora danych) z siedzibą w Warszawie (00-514) '
+              'przy ul. Marszałkowskiej 84/92 lok. 125 na potrzeby organizacji Konkursu. Jednocześnie oświadczam, '
+              'że zostałam/em poinformowana/y o tym, że mam prawo wglądu w treść swoich danych i możliwość ich '
+              'poprawiania oraz że ich podanie jest dobrowolne, ale niezbędne do dokonania zgłoszenia.')
     agree_license = forms.BooleanField(
         label='Licencja',
         help_text=mark_safe_lazy(
-            u'Wyrażam zgodę oraz potwierdzam, że autor/ka (lub ich przedstawiciele ustawowi – gdy dotyczy) '
-            u'wyrazili zgodę na korzystanie z opowiadania zgodnie z postanowieniami wolnej licencji '
-            u'<a href="https://creativecommons.org/licenses/by-sa/3.0/pl/">Creative Commons Uznanie autorstwa – '
-            u'Na tych samych warunkach 3.0</a>. Licencja pozwala każdemu na swobodne, nieodpłatne korzystanie z utworu '
-            u'w oryginale oraz w postaci opracowań do wszelkich celów wymagając poszanowania autorstwa i innych praw '
-            u'osobistych oraz tego, aby ewentualne opracowania utworu były także udostępniane na tej samej licencji.'))
+            'Wyrażam zgodę oraz potwierdzam, że autor/ka (lub ich przedstawiciele ustawowi – gdy dotyczy) '
+            'wyrazili zgodę na korzystanie z opowiadania zgodnie z postanowieniami wolnej licencji '
+            '<a href="https://creativecommons.org/licenses/by-sa/3.0/pl/">Creative Commons Uznanie autorstwa – '
+            'Na tych samych warunkach 3.0</a>. Licencja pozwala każdemu na swobodne, nieodpłatne korzystanie z utworu '
+            'w oryginale oraz w postaci opracowań do wszelkich celów wymagając poszanowania autorstwa i innych praw '
+            'osobistych oraz tego, aby ewentualne opracowania utworu były także udostępniane na tej samej licencji.'))
     agree_wizerunek = forms.BooleanField(
         label='Rozpowszechnianie wizerunku',
-        help_text=u'Wyrażam zgodę oraz potwierdzam, że autor/ka opowiadania (lub ich przedstawiciele ustawowi – '
-              u'gdy dotyczy) wyrazili zgodę na fotografowanie i nagrywanie podczas gali wręczenia nagród i następnie '
-              u'rozpowszechnianie ich wizerunków.')
+        help_text='Wyrażam zgodę oraz potwierdzam, że autor/ka opowiadania (lub ich przedstawiciele ustawowi – '
+              'gdy dotyczy) wyrazili zgodę na fotografowanie i nagrywanie podczas gali wręczenia nagród i następnie '
+              'rozpowszechnianie ich wizerunków.')
 
 
 class CoJaCzytamForm(ContactForm):
     form_tag = 'cojaczytam'
-    form_title = u"#cojaczytam?"
+    form_title = "#cojaczytam?"
     admin_list = ['opiekun_nazwisko', 'contact', 'nazwa_kampanii']
     # ends_on = (2018, 11, 16)
     disabled_template = 'contact/disabled_contact_form.html'
-    submit_label = u'Wyślij'
+    submit_label = 'Wyślij'
 
-    opiekun_nazwisko = forms.CharField(label=u'Imię i nazwisko Opiekuna/ki', max_length=128)
-    contact = forms.EmailField(label=u'Adres e-mail Opiekuna/ki', max_length=128)
-    opiekun_tel = forms.CharField(label=u'Numer telefonu Opiekuna/ki', max_length=32)
-    nazwa_dkk = forms.CharField(label=u'Nazwa szkoły/biblioteki publicznej', max_length=128)
-    adres_dkk = forms.CharField(label=u'Adres szkoły/biblioteki publicznej', max_length=128)
+    opiekun_nazwisko = forms.CharField(label='Imię i nazwisko Opiekuna/ki', max_length=128)
+    contact = forms.EmailField(label='Adres e-mail Opiekuna/ki', max_length=128)
+    opiekun_tel = forms.CharField(label='Numer telefonu Opiekuna/ki', max_length=32)
+    nazwa_dkk = forms.CharField(label='Nazwa szkoły/biblioteki publicznej', max_length=128)
+    adres_dkk = forms.CharField(label='Adres szkoły/biblioteki publicznej', max_length=128)
 
-    nazwa_kampanii = forms.CharField(label=u'Nazwa kampanii', max_length=255)
+    nazwa_kampanii = forms.CharField(label='Nazwa kampanii', max_length=255)
 
-    wiek = forms.ChoiceField(label=u'Grupa wiekowa', choices=(
-        ('9-14', u'uczniowie kl. IV-VIII szkół podstawowych w wieku 9-14 lat,'),
-        ('15-19', u'uczniowie gimnazjum oraz wszystkich typów szkół ponadpodstawowych w wieku 15-19.'),
+    wiek = forms.ChoiceField(label='Grupa wiekowa', choices=(
+        ('9-14', 'uczniowie kl. IV-VIII szkół podstawowych w wieku 9-14 lat,'),
+        ('15-19', 'uczniowie gimnazjum oraz wszystkich typów szkół ponadpodstawowych w wieku 15-19.'),
     ), widget=forms.RadioSelect)
 
-    uczestnik1_header = HeaderField(label=u'Dane\xa0Uczestników (3 do 5)')
-    uczestnik1_imie = forms.CharField(label=u'Imię', max_length=128)
-    uczestnik1_nazwisko = forms.CharField(label=u'Nazwisko', max_length=128)
-    uczestnik1_email = forms.EmailField(label=u'Adres e-mail', max_length=128)
-    uczestnik2_header = HeaderField(label=u'')
-    uczestnik2_imie = forms.CharField(label=u'Imię', max_length=128)
-    uczestnik2_nazwisko = forms.CharField(label=u'Nazwisko', max_length=128)
-    uczestnik2_email = forms.EmailField(label=u'Adres e-mail', max_length=128)
-    uczestnik3_header = HeaderField(label=u'')
-    uczestnik3_imie = forms.CharField(label=u'Imię', max_length=128)
-    uczestnik3_nazwisko = forms.CharField(label=u'Nazwisko', max_length=128)
-    uczestnik3_email = forms.EmailField(label=u'Adres e-mail', max_length=128)
-    uczestnik4_header = HeaderField(label=u'')
-    uczestnik4_imie = forms.CharField(label=u'Imię', max_length=128, required=False)
-    uczestnik4_nazwisko = forms.CharField(label=u'Nazwisko', max_length=128, required=False)
-    uczestnik4_email = forms.EmailField(label=u'Adres e-mail', max_length=128, required=False)
-    uczestnik5_header = HeaderField(label=u'')
-    uczestnik5_imie = forms.CharField(label=u'Imię', max_length=128, required=False)
-    uczestnik5_nazwisko = forms.CharField(label=u'Nazwisko', max_length=128, required=False)
-    uczestnik5_email = forms.EmailField(label=u'Adres e-mail', max_length=128, required=False)
-
-    ankieta_header = HeaderField(label=u'')
+    uczestnik1_header = HeaderField(label='Dane\xa0Uczestników (3 do 5)')
+    uczestnik1_imie = forms.CharField(label='Imię', max_length=128)
+    uczestnik1_nazwisko = forms.CharField(label='Nazwisko', max_length=128)
+    uczestnik1_email = forms.EmailField(label='Adres e-mail', max_length=128)
+    uczestnik2_header = HeaderField(label='')
+    uczestnik2_imie = forms.CharField(label='Imię', max_length=128)
+    uczestnik2_nazwisko = forms.CharField(label='Nazwisko', max_length=128)
+    uczestnik2_email = forms.EmailField(label='Adres e-mail', max_length=128)
+    uczestnik3_header = HeaderField(label='')
+    uczestnik3_imie = forms.CharField(label='Imię', max_length=128)
+    uczestnik3_nazwisko = forms.CharField(label='Nazwisko', max_length=128)
+    uczestnik3_email = forms.EmailField(label='Adres e-mail', max_length=128)
+    uczestnik4_header = HeaderField(label='')
+    uczestnik4_imie = forms.CharField(label='Imię', max_length=128, required=False)
+    uczestnik4_nazwisko = forms.CharField(label='Nazwisko', max_length=128, required=False)
+    uczestnik4_email = forms.EmailField(label='Adres e-mail', max_length=128, required=False)
+    uczestnik5_header = HeaderField(label='')
+    uczestnik5_imie = forms.CharField(label='Imię', max_length=128, required=False)
+    uczestnik5_nazwisko = forms.CharField(label='Nazwisko', max_length=128, required=False)
+    uczestnik5_email = forms.EmailField(label='Adres e-mail', max_length=128, required=False)
+
+    ankieta_header = HeaderField(label='')
     opis_kampanii = forms.CharField(
-        label=u'Krótki opis realizacji oraz przebiegu kampanii', max_length=255, widget=forms.Textarea)
-    co_sie_udalo = forms.CharField(label=u'Co udało Wam się zrealizować?', max_length=1024, widget=forms.Textarea)
+        label='Krótki opis realizacji oraz przebiegu kampanii', max_length=255, widget=forms.Textarea)
+    co_sie_udalo = forms.CharField(label='Co udało Wam się zrealizować?', max_length=1024, widget=forms.Textarea)
     co_sie_nie_udalo = forms.CharField(
-        label=u'Czy jest coś, co chcieliście zrealizować, a się nie udało? Jeśli tak, to dlaczego?', max_length=1024,
+        label='Czy jest coś, co chcieliście zrealizować, a się nie udało? Jeśli tak, to dlaczego?', max_length=1024,
         widget=forms.Textarea)
     wnioski = forms.CharField(
-        label=u'Jakie wnioski na przyszłość wyciągnęliście z tego, czego się nie udało zrealizować?', max_length=1024,
+        label='Jakie wnioski na przyszłość wyciągnęliście z tego, czego się nie udało zrealizować?', max_length=1024,
         widget=forms.Textarea)
     zasieg = forms.CharField(
-        label=u'Do ilu odbiorców udało Wam się dotrzeć z Waszą kompanią? Podaj liczbę, może być szacunkowa.',
+        label='Do ilu odbiorców udało Wam się dotrzeć z Waszą kompanią? Podaj liczbę, może być szacunkowa.',
         max_length=1024, widget=forms.Textarea)
     grupy_odbiorcow = forms.CharField(
-        label=u'Do jakich grup odbiorców dotarliście (np. uczniowie, nauczyciele, rodzice, seniorzy, inni)?',
+        label='Do jakich grup odbiorców dotarliście (np. uczniowie, nauczyciele, rodzice, seniorzy, inni)?',
         max_length=1024, widget=forms.Textarea)
     plik = forms.FileField(
-        label=u'Plik .zip ze stworzonymi materiałami (np. zdjęcia, dokumenty tekstowe)')
+        label='Plik .zip ze stworzonymi materiałami (np. zdjęcia, dokumenty tekstowe)')
     materialy = forms.CharField(
-        label=u'Adresy stworzonych materiałów online (jeśli dotyczy)', max_length=1024, widget=forms.Textarea,
+        label='Adresy stworzonych materiałów online (jeśli dotyczy)', max_length=1024, widget=forms.Textarea,
         required=False)
 
-    agree_header = HeaderField(label=u'Oświadczenia')
+    agree_header = HeaderField(label='Oświadczenia')
     agree_terms = forms.BooleanField(
         label='Regulamin',
         help_text=mark_safe_lazy(
-            u'Znam i akceptuję <a href="/media/chunks/attachment/Regulamin_konkursu_cojaczytam_edycja_2018.pdf">'
-            u'Regulamin Konkursu</a>.'),
+            'Znam i akceptuję <a href="/media/chunks/attachment/Regulamin_konkursu_cojaczytam_edycja_2018.pdf">'
+            'Regulamin Konkursu</a>.'),
     )
     agree_data = forms.BooleanField(
         label='Przetwarzanie danych osobowych',
-        help_text=u'Oświadczam, że wyrażam zgodę na przetwarzanie danych osobowych zawartych w niniejszym formularzu '
-              u'zgłoszeniowym przez Fundację Nowoczesna Polska (administratora danych) z siedzibą w Warszawie (00-514) '
-              u'przy ul. Marszałkowskiej 84/92 lok. 125 na potrzeby organizacji Konkursu. Jednocześnie oświadczam, '
-              u'że zostałam/em poinformowana/y o tym, że mam prawo wglądu w treść swoich danych i możliwość ich '
-              u'poprawiania oraz że ich podanie jest dobrowolne, ale niezbędne do dokonania zgłoszenia.')
+        help_text='Oświadczam, że wyrażam zgodę na przetwarzanie danych osobowych zawartych w niniejszym formularzu '
+              'zgłoszeniowym przez Fundację Nowoczesna Polska (administratora danych) z siedzibą w Warszawie (00-514) '
+              'przy ul. Marszałkowskiej 84/92 lok. 125 na potrzeby organizacji Konkursu. Jednocześnie oświadczam, '
+              'że zostałam/em poinformowana/y o tym, że mam prawo wglądu w treść swoich danych i możliwość ich '
+              'poprawiania oraz że ich podanie jest dobrowolne, ale niezbędne do dokonania zgłoszenia.')
     agree_license = forms.BooleanField(
         label='Licencja',
         help_text=mark_safe_lazy(
-            u'Wyrażam zgodę oraz potwierdzam, że uczestnicy (lub ich przedstawiciele ustawowi – gdy dotyczy) '
-            u'wyrazili zgodę na korzystanie ze stworzonych materiałów zgodnie z postanowieniami '
-            u'<a href="http://freedomdefined.org/Definition/Pl">wolnej licencji</a>, takiej jak '
-            u'<a href="https://creativecommons.org/licenses/by-sa/3.0/pl/">Creative Commons Uznanie autorstwa – '
-            u'Na tych samych warunkach 3.0 PL</a>. Licencja pozwala każdemu na swobodne, nieodpłatne korzystanie '
-            u'z utworu '
-            u'w oryginale oraz w postaci opracowań do wszelkich celów wymagając poszanowania autorstwa i innych praw '
-            u'osobistych oraz tego, aby ewentualne opracowania utworu były także udostępniane na tej samej licencji.'))
+            'Wyrażam zgodę oraz potwierdzam, że uczestnicy (lub ich przedstawiciele ustawowi – gdy dotyczy) '
+            'wyrazili zgodę na korzystanie ze stworzonych materiałów zgodnie z postanowieniami '
+            '<a href="http://freedomdefined.org/Definition/Pl">wolnej licencji</a>, takiej jak '
+            '<a href="https://creativecommons.org/licenses/by-sa/3.0/pl/">Creative Commons Uznanie autorstwa – '
+            'Na tych samych warunkach 3.0 PL</a>. Licencja pozwala każdemu na swobodne, nieodpłatne korzystanie '
+            'z utworu '
+            'w oryginale oraz w postaci opracowań do wszelkich celów wymagając poszanowania autorstwa i innych praw '
+            'osobistych oraz tego, aby ewentualne opracowania utworu były także udostępniane na tej samej licencji.'))
     agree_wizerunek = forms.BooleanField(
         label='Rozpowszechnianie wizerunku',
-        help_text=u'Wyrażam zgodę oraz potwierdzam, że uczestnicy (lub ich przedstawiciele ustawowi – gdy dotyczy) '
-                  u'wyrazili zgodę na fotografowanie oraz nagrywanie, a następnie rozpowszechnianie ich '
-                  u'wizerunków w celach promocyjnych.')
+        help_text='Wyrażam zgodę oraz potwierdzam, że uczestnicy (lub ich przedstawiciele ustawowi – gdy dotyczy) '
+                  'wyrazili zgodę na fotografowanie oraz nagrywanie, a następnie rozpowszechnianie ich '
+                  'wizerunków w celach promocyjnych.')
 
 
 class WorkshopsForm(ContactForm):
     form_tag = 'warsztaty'
-    form_title = u"Wolne Lektury Fest"
-    nazwisko = forms.CharField(label=u'Imię i nazwisko uczestnika', max_length=128)
-    instytucja = forms.CharField(label=u'Instytucja/organizacja', max_length=128, required=False)
-    contact = forms.EmailField(label=u'Adres e-mail', max_length=128)
-    tel = forms.CharField(label=u'Numer telefonu', max_length=32)
+    form_title = "Wolne Lektury Fest"
+    nazwisko = forms.CharField(label='Imię i nazwisko uczestnika', max_length=128)
+    instytucja = forms.CharField(label='Instytucja/organizacja', max_length=128, required=False)
+    contact = forms.EmailField(label='Adres e-mail', max_length=128)
+    tel = forms.CharField(label='Numer telefonu', max_length=32)
     warsztat = forms.ChoiceField(choices=(
-        ('skad-i-jak', u'Skąd i jak bezpiecznie korzystać z darmowych i wolnych wideo i zdjęć w sieci? '
-                       u'Jak wykorzystać wolne licencje by zwiększyć zasięg Twoich publikacji?'),
-        ('jak-badac', u'Jak badać wykorzystanie zbiorów domeny publicznej?'),
-        ('kultura', u'Kultura dostępna dla wszystkich')),
+        ('skad-i-jak', 'Skąd i jak bezpiecznie korzystać z darmowych i wolnych wideo i zdjęć w sieci? '
+                       'Jak wykorzystać wolne licencje by zwiększyć zasięg Twoich publikacji?'),
+        ('jak-badac', 'Jak badać wykorzystanie zbiorów domeny publicznej?'),
+        ('kultura', 'Kultura dostępna dla wszystkich')),
         widget=forms.RadioSelect,
     )
-    agree_header = HeaderField(label=mark_safe_lazy(u'<strong>Oświadczenia</strong>'))
+    agree_header = HeaderField(label=mark_safe_lazy('<strong>Oświadczenia</strong>'))
     agree_data = forms.BooleanField(
         label='Przetwarzanie danych osobowych',
-        help_text=u'Oświadczam, że wyrażam zgodę na przetwarzanie danych osobowych zawartych w niniejszym formularzu '
-              u'zgłoszeniowym przez Fundację Nowoczesna Polska (administratora danych) z siedzibą w Warszawie (00-514) '
-              u'przy ul. Marszałkowskiej 84/92 lok. 125 na potrzeby organizacji warsztatów w ramach wydarzenia '
-              u'„WOLNE LEKTURY FEST”. Jednocześnie oświadczam, że zostałam/em poinformowana/y o tym, że mam prawo '
-              u'wglądu w treść swoich danych i możliwość ich poprawiania oraz że ich podanie jest dobrowolne, '
-              u'ale niezbędne do dokonania zgłoszenia.')
+        help_text='Oświadczam, że wyrażam zgodę na przetwarzanie danych osobowych zawartych w niniejszym formularzu '
+              'zgłoszeniowym przez Fundację Nowoczesna Polska (administratora danych) z siedzibą w Warszawie (00-514) '
+              'przy ul. Marszałkowskiej 84/92 lok. 125 na potrzeby organizacji warsztatów w ramach wydarzenia '
+              '„WOLNE LEKTURY FEST”. Jednocześnie oświadczam, że zostałam/em poinformowana/y o tym, że mam prawo '
+              'wglądu w treść swoich danych i możliwość ich poprawiania oraz że ich podanie jest dobrowolne, '
+              'ale niezbędne do dokonania zgłoszenia.')
     agree_wizerunek = forms.BooleanField(
         label='Rozpowszechnianie wizerunku',
-        help_text=u'Wyrażam zgodę na fotografowanie i nagrywanie podczas warsztatów „WOLNE LEKTURY FEST” '
-                  u'24.11.2017 roku i następnie rozpowszechnianie mojego wizerunku w celach promocyjnych.')
+        help_text='Wyrażam zgodę na fotografowanie i nagrywanie podczas warsztatów „WOLNE LEKTURY FEST” '
+                  '24.11.2017 roku i następnie rozpowszechnianie mojego wizerunku w celach promocyjnych.')
     agree_gala = forms.BooleanField(
-        label=u'Wezmę udział w uroczystej gali o godz. 19.00.', required=False)
+        label='Wezmę udział w uroczystej gali o godz. 19.00.', required=False)
 
 
 class WLFest2018Form(ContactForm):
     form_tag = 'wlfest2018'
-    form_title = u"Wolne Lektury Fest"
-    nazwisko = forms.CharField(label=u'Imię i nazwisko uczestnika', max_length=128)
-    instytucja = forms.CharField(label=u'Instytucja/organizacja', max_length=128, required=False)
-    contact = forms.EmailField(label=u'Adres e-mail', max_length=128)
-    tel = forms.CharField(label=u'Numer telefonu', max_length=32)
+    form_title = "Wolne Lektury Fest"
+    nazwisko = forms.CharField(label='Imię i nazwisko uczestnika', max_length=128)
+    instytucja = forms.CharField(label='Instytucja/organizacja', max_length=128, required=False)
+    contact = forms.EmailField(label='Adres e-mail', max_length=128)
+    tel = forms.CharField(label='Numer telefonu', max_length=32)
     warsztaty = forms.MultipleChoiceField(choices=(
-        ('kim-sa-odbiorcy', u'Kim są odbiorcy zdigitalizowanych zasobów kultury w Polsce? (9:30-11:30)'),
-        ('business-model-canvas', u'Business Model Canvas dla kultury (9:30-11:30)'),
-        ('jak-byc-glam', u'Jak być GLAM? Współpraca pomiędzy instytucjami kultury a Wikipedią (12:00-14:00)'),
-        ('wirtualne-muzea', u'Jak twórczo i zgodnie z prawem wykorzystywać zasoby dziedzictwa kulturowego '
-                            u'na przykładzie portalu „Wirtualne Muzea Małopolski” (12:00-14:00)'),
-        ('jak-legalnie-tworzyc', u'Jak legalnie tworzyć i korzystać z cudzej twórczości (15:00-17:00)'),
-        ('aplikacje-w-dzialaniach', u'Aplikacje w działaniach kulturalnych (15:00-17:00)')),
+        ('kim-sa-odbiorcy', 'Kim są odbiorcy zdigitalizowanych zasobów kultury w Polsce? (9:30-11:30)'),
+        ('business-model-canvas', 'Business Model Canvas dla kultury (9:30-11:30)'),
+        ('jak-byc-glam', 'Jak być GLAM? Współpraca pomiędzy instytucjami kultury a Wikipedią (12:00-14:00)'),
+        ('wirtualne-muzea', 'Jak twórczo i zgodnie z prawem wykorzystywać zasoby dziedzictwa kulturowego '
+                            'na przykładzie portalu „Wirtualne Muzea Małopolski” (12:00-14:00)'),
+        ('jak-legalnie-tworzyc', 'Jak legalnie tworzyć i korzystać z cudzej twórczości (15:00-17:00)'),
+        ('aplikacje-w-dzialaniach', 'Aplikacje w działaniach kulturalnych (15:00-17:00)')),
         widget=forms.CheckboxSelectMultiple,
     )
-    agree_header = HeaderField(label=mark_safe_lazy(u'<strong>Oświadczenia</strong>'))
+    agree_header = HeaderField(label=mark_safe_lazy('<strong>Oświadczenia</strong>'))
     agree_data = forms.BooleanField(
         label='Przetwarzanie danych osobowych',
-        help_text=u'Administratorem danych osobowych przetwarzanych w związku z organizacją wydarzenia '
-                  u'„WOLNE LEKTURY FEST” jest Fundacja Nowoczesna Polska '
-                  u'(ul. Marszałkowska 84/92 lok. 125, 00-514 Warszawa). Podanie danych osobowych jest konieczne '
-                  u'do dokonania rejestracji na wydarzenie. Dane są przetwarzane w zakresie niezbędnym '
-                  u'do przeprowadzenia wydarzenia, a także w celach prowadzenia statystyk, '
-                  u'ewaluacji i sprawozdawczości. Osobom, których dane są zbierane, przysługuje prawo dostępu '
-                  u'do treści swoich danych oraz ich poprawiania. Więcej informacji w polityce prywatności '
-                  u'(https://nowoczesnapolska.org.pl/prywatnosc/).')
+        help_text='Administratorem danych osobowych przetwarzanych w związku z organizacją wydarzenia '
+                  '„WOLNE LEKTURY FEST” jest Fundacja Nowoczesna Polska '
+                  '(ul. Marszałkowska 84/92 lok. 125, 00-514 Warszawa). Podanie danych osobowych jest konieczne '
+                  'do dokonania rejestracji na wydarzenie. Dane są przetwarzane w zakresie niezbędnym '
+                  'do przeprowadzenia wydarzenia, a także w celach prowadzenia statystyk, '
+                  'ewaluacji i sprawozdawczości. Osobom, których dane są zbierane, przysługuje prawo dostępu '
+                  'do treści swoich danych oraz ich poprawiania. Więcej informacji w polityce prywatności '
+                  '(https://nowoczesnapolska.org.pl/prywatnosc/).')
     agree_wizerunek = forms.BooleanField(
         label='Rozpowszechnianie wizerunku',
-        help_text=u'Wyrażam zgodę na fotografowanie i nagrywanie podczas warsztatów „WOLNE LEKTURY FEST” '
-                  u'28.11.2018 roku i następnie rozpowszechnianie mojego wizerunku w celach promocyjnych.')
+        help_text='Wyrażam zgodę na fotografowanie i nagrywanie podczas warsztatów „WOLNE LEKTURY FEST” '
+                  '28.11.2018 roku i następnie rozpowszechnianie mojego wizerunku w celach promocyjnych.')
     agree_gala = forms.BooleanField(
-        label=u'Wezmę udział w spotkaniu z Julią Fiedorczuk o godz. 17:30.', required=False)
+        label='Wezmę udział w spotkaniu z Julią Fiedorczuk o godz. 17:30.', required=False)
index 0079ea0..fb857ba 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 0eb1e97..c3c378f 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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 allauth.socialaccount.forms import SignupForm
 from django.contrib.auth.forms import UserCreationForm
 from django.contrib.auth.models import User
@@ -8,7 +10,7 @@ from newsletter.forms import NewsletterForm
 
 # has to be this order, because otherwise the form is lacking fields
 class RegistrationForm(UserCreationForm, NewsletterForm):
-    data_processing_part2 = u'''\
+    data_processing_part2 = '''\
 Dane są przetwarzane w zakresie niezbędnym do prowadzenia serwisu, a także w celach prowadzenia statystyk, \
 ewaluacji i sprawozdawczości. W przypadku wyrażenia dodatkowej zgody adres e-mail zostanie wykorzystany \
 także w celu przesyłania newslettera Wolnych Lektur.'''
@@ -23,7 +25,7 @@ także w celu przesyłania newslettera Wolnych Lektur.'''
 
 
 class SocialSignupForm(NewsletterForm, SignupForm):
-    data_processing_part2 = u'''\
+    data_processing_part2 = '''\
 Dane są przetwarzane w zakresie niezbędnym do prowadzenia serwisu, a także w celach prowadzenia statystyk, \
 ewaluacji i sprawozdawczości. W przypadku wyrażenia dodatkowej zgody adres e-mail zostanie wykorzystany \
 także w celu przesyłania newslettera Wolnych Lektur.'''
index ca7692e..72c2978 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 6978ea8..a40e73f 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 1271201..7e0d66c 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models, migrations
 import django.db.models.deletion
 import getpaid.abstract_mixin
index 8e1eba1..3cc3f48 100644 (file)
@@ -1,6 +1,6 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import migrations, models
 
 
index 78b556d..4cab2b1 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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.
+#
 # Django settings for wolnelektury project.
 from .apps import *
 from .basic import *
index e704dc6..d482499 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index bf2962b..528688b 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index fbb7ba2..0ac8a8a 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 0a48766..16ca0c2 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
@@ -23,14 +22,14 @@ def gettext(s):
     return s
 
 LANGUAGES = tuple(sorted([
-    ('pl', u'polski'),
-    ('de', u'Deutsch'),
-    ('en', u'English'),
-    ('lt', u'lietuvių'),
-    ('fr', u'français'),
-    ('ru', u'русский'),
-    ('es', u'español'),
-    ('uk', u'українська'),
-    # ('jp', u'日本語'),
-    ('it', u'italiano'),
+    ('pl', 'polski'),
+    ('de', 'Deutsch'),
+    ('en', 'English'),
+    ('lt', 'lietuvių'),
+    ('fr', 'français'),
+    ('ru', 'русский'),
+    ('es', 'español'),
+    ('uk', 'українська'),
+    # ('jp', '日本語'),
+    ('it', 'italiano'),
 ], key=lambda x: x[0]))
index 32ab1c2..1a167b9 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index b8b7828..6cf7666 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index 25bd82c..57718b8 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from wolnelektury.settings import *
 
 THUMBNAIL_BACKEND = 'wolnelektury.test_utils.DummyThumbnailBackend'
index d15b960..c698c54 100644 (file)
@@ -1,4 +1,3 @@
-# -*- 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.
 #
index ca97e25..cb5c2e7 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from datetime import date
 from django.conf import settings
 from django.template import Library
index ca67823..d4701ab 100644 (file)
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
 # Source: http://djangosnippets.org/snippets/967/
 # Author: adurdin
 # Posted: August 13, 2008
index f22eb98..7463517 100644 (file)
@@ -1,3 +1,6 @@
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 class DummyThumbnailBackend:
     class DummyThumbnail:
         def __init__(self, url):
index c9b1a18..b0b9726 100644 (file)
@@ -118,8 +118,8 @@ def ajax(login_required=False, method=None, template=None, permission_required=N
 
 def send_noreply_mail(subject, message, recipient_list, **kwargs):
     send_mail(
-        u'[WolneLektury] ' + subject,
-        message + u"\n\n-- \n" + ugettext(u'Message sent automatically. Please do not reply.'),
+        '[WolneLektury] ' + subject,
+        message + "\n\n-- \n" + ugettext('Message sent automatically. Please do not reply.'),
         'no-reply@wolnelektury.pl', recipient_list, **kwargs)
 
 
index fe72d39..5fc78fe 100644 (file)
@@ -1,4 +1,6 @@
-# -*- 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.
+#
 import os
 
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "wolnelektury.settings")