style
authorJan Szejko <jan.szejko@gmail.com>
Fri, 1 Jul 2016 12:26:27 +0000 (14:26 +0200)
committerJan Szejko <jan.szejko@gmail.com>
Fri, 1 Jul 2016 12:26:41 +0000 (14:26 +0200)
83 files changed:
NOTICE
README.md
apps/apiclient/models.py
apps/apiclient/tests.py
apps/apiclient/urls.py
apps/apiclient/views.py
apps/build/management/commands/build.py
apps/catalogue/__init__.py
apps/catalogue/admin.py
apps/catalogue/constants.py
apps/catalogue/ebook_utils.py
apps/catalogue/feeds.py
apps/catalogue/forms.py
apps/catalogue/management/commands/__init__.py
apps/catalogue/management/commands/assign_from_redmine.py
apps/catalogue/management/commands/fixdc.py
apps/catalogue/management/commands/import_wl.py
apps/catalogue/management/commands/merge_books.py
apps/catalogue/managers.py
apps/catalogue/models/__init__.py
apps/catalogue/models/book.py
apps/catalogue/models/chunk.py
apps/catalogue/models/listeners.py
apps/catalogue/models/template.py
apps/catalogue/signals.py
apps/catalogue/tasks.py
apps/catalogue/templatetags/book_list.py
apps/catalogue/templatetags/catalogue.py
apps/catalogue/templatetags/common_tags.py
apps/catalogue/templatetags/set_get_parameter.py
apps/catalogue/templatetags/wall.py
apps/catalogue/tests/book.py
apps/catalogue/tests/gallery.py
apps/catalogue/tests/xml_updater.py
apps/catalogue/urls.py
apps/catalogue/views.py
apps/catalogue/xml_tools.py
apps/cover/forms.py
apps/cover/models.py
apps/cover/tests.py
apps/cover/urls.py
apps/dvcs/models.py
apps/dvcs/signals.py
apps/dvcs/storage.py
apps/dvcs/tests/__init__.py
apps/email_mangler/templatetags/email.py
apps/fileupload/forms.py
apps/fileupload/templatetags/upload_tags.py
apps/fileupload/urls.py
apps/fileupload/views.py
apps/toolbar/__init__.py
apps/toolbar/admin.py
apps/toolbar/management/commands/fixbuttons.py
apps/wiki/__init__.py
apps/wiki/admin.py
apps/wiki/forms.py
apps/wiki/models.py
apps/wiki/nice_diff.py
apps/wiki/settings.py
apps/wiki/urls.py
apps/wiki/views.py
deployment/base.py
deployment/environment_template.py
lib/librarian
lib/slughifi.py
lib/vstorage/__init__.py
lib/vstorage/hgui.py
lib/vstorage/tests.py
lib/wlapi/__init__.py
lib/wlapi/tests.py
redakcja/context_processors.py
redakcja/settings/__init__.py
redakcja/settings/common.py
redakcja/settings/compress.py
redakcja/settings/integration_test.py
redakcja/settings/test.py
redakcja/urls.py
redakcja/wsgi.py
requirements.txt
scripts/fix_pd.py
tests/integration/__init__.py
tests/integration/base.py
tests/integration/smoke_test.py

diff --git a/NOTICE b/NOTICE
index 815f1c9..c99b6d8 100644 (file)
--- a/NOTICE
+++ b/NOTICE
@@ -1,9 +1,9 @@
-    
+
     FNP Redakcja
 
     Copyright © 2010 Fundacja Nowoczesna Polska <fundacja@nowoczesnapolska.org.pl>
     FNP Redakcja
 
     Copyright © 2010 Fundacja Nowoczesna Polska <fundacja@nowoczesnapolska.org.pl>
-    
-    For full list of contributors see AUTHORS file. 
+
+    For full list of contributors see AUTHORS file.
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU Affero General Public License as published by
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU Affero General Public License as published by
index 93ffb1c..64cebfb 100644 (file)
--- a/README.md
+++ b/README.md
@@ -48,4 +48,3 @@ JavaScript (wymagany node.js i xsltproc):
 
     $ npm install
     $ ./node_modules/.bin/mocha -u tdd $(find -name *_test.js)
 
     $ npm install
     $ ./node_modules/.bin/mocha -u tdd $(find -name *_test.js)
-    
\ No newline at end of file
index d3c8f62..b311878 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from django.db import models
 from django.contrib.auth.models import User
 
 from django.db import models
 from django.contrib.auth.models import User
 
@@ -16,5 +17,3 @@ class OAuthConnection(models.Model):
             o = cls(user=user)
             o.save()
             return o
             o = cls(user=user)
             o.save()
             return o
-
-
index 2247054..13cd4a5 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 """
 This file demonstrates two different styles of tests (one doctest and one
 unittest). These will both pass when you run "manage.py test".
 """
 This file demonstrates two different styles of tests (one doctest and one
 unittest). These will both pass when you run "manage.py test".
@@ -7,6 +8,7 @@ Replace these with more appropriate tests for your application.
 
 from django.test import TestCase
 
 
 from django.test import TestCase
 
+
 class SimpleTest(TestCase):
     def test_basic_addition(self):
         """
 class SimpleTest(TestCase):
     def test_basic_addition(self):
         """
@@ -20,4 +22,3 @@ Another way to test that 1 + 1 is equal to 2.
 >>> 1 + 1 == 2
 True
 """}
 >>> 1 + 1 == 2
 True
 """}
-
index 55cc466..4a32307 100755 (executable)
@@ -1,6 +1,8 @@
+# -*- coding: utf-8 -*-
 from django.conf.urls import patterns, url
 
 from django.conf.urls import patterns, url
 
-urlpatterns = patterns('apiclient.views',
+urlpatterns = patterns(
+    'apiclient.views',
     url(r'^oauth/$', 'oauth', name='apiclient_oauth'),
     url(r'^oauth_callback/$', 'oauth_callback', name='apiclient_oauth_callback'),
 )
     url(r'^oauth/$', 'oauth', name='apiclient_oauth'),
     url(r'^oauth_callback/$', 'oauth_callback', name='apiclient_oauth_callback'),
 )
index 88f4b49..0dbaf5a 100644 (file)
@@ -22,7 +22,7 @@ def oauth(request):
         raise Exception("Invalid response %s." % resp['status'])
 
     request_token = dict(urlparse.parse_qsl(content))
         raise Exception("Invalid response %s." % resp['status'])
 
     request_token = dict(urlparse.parse_qsl(content))
-    
+
     conn = OAuthConnection.get(request.user)
     # this might reset existing auth!
     conn.access = False
     conn = OAuthConnection.get(request.user)
     # this might reset existing auth!
     conn.access = False
@@ -31,7 +31,7 @@ def oauth(request):
     conn.save()
 
     url = "%s?oauth_token=%s&oauth_callback=%s" % (
     conn.save()
 
     url = "%s?oauth_token=%s&oauth_callback=%s" % (
-            WL_AUTHORIZE_URL, 
+            WL_AUTHORIZE_URL,
             request_token['oauth_token'],
             request.build_absolute_uri(reverse("apiclient_oauth_callback")),
             )
             request_token['oauth_token'],
             request.build_absolute_uri(reverse("apiclient_oauth_callback")),
             )
index 50097cf..c275144 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 import os
 from subprocess import call
 from optparse import make_option
 import os
 from subprocess import call
 from optparse import make_option
@@ -7,27 +8,31 @@ from django.core.management import call_command
 
 
 class Command(BaseCommand):
 
 
 class Command(BaseCommand):
-    
+
     option_list = BaseCommand.option_list + (
     option_list = BaseCommand.option_list + (
-        make_option('--node-bin-path',
+        make_option(
+            '--node-bin-path',
             action='store',
             dest='node_bin_path',
             type='string',
             default=None,
             help='Path to node binary'),
             action='store',
             dest='node_bin_path',
             type='string',
             default=None,
             help='Path to node binary'),
-        make_option('--npm-bin',
+        make_option(
+            '--npm-bin',
             action='store',
             dest='npm_bin',
             type='string',
             default='npm',
             help='Path to npm binary'),
             action='store',
             dest='npm_bin',
             type='string',
             default='npm',
             help='Path to npm binary'),
-        make_option('--editor-npm-env',
+        make_option(
+            '--editor-npm-env',
             action='store',
             dest='editor_npm_env',
             type='string',
             default=None,
             help='Destination path of npm environment, defaults to ./node_modules'),
             action='store',
             dest='editor_npm_env',
             type='string',
             default=None,
             help='Destination path of npm environment, defaults to ./node_modules'),
-        make_option('--editor-optimize',
+        make_option(
+            '--editor-optimize',
             action='store',
             dest='editor_optimize',
             type='string',
             action='store',
             dest='editor_optimize',
             type='string',
@@ -48,7 +53,7 @@ class Command(BaseCommand):
             assert os.path.isdir(npm_env)
             os.symlink(npm_env, os.path.join(rng_base_dir, 'node_modules'))
         try:
             assert os.path.isdir(npm_env)
             os.symlink(npm_env, os.path.join(rng_base_dir, 'node_modules'))
         try:
-            call([options['npm_bin'], 'install'], cwd = rng_base_dir)
+            call([options['npm_bin'], 'install'], cwd=rng_base_dir)
         except OSError:
             raise CommandError('Something went wrong, propably npm binary not found. Tried: %s' % options['npm_bin'])
 
         except OSError:
             raise CommandError('Something went wrong, propably npm binary not found. Tried: %s' % options['npm_bin'])
 
@@ -56,9 +61,9 @@ class Command(BaseCommand):
         if options['node_bin_path']:
             # grunt needs npm binary to be foundable in PATH
             os.environ['PATH'] = '%s:%s' % (options['node_bin_path'], os.environ['PATH'])
         if options['node_bin_path']:
             # grunt needs npm binary to be foundable in PATH
             os.environ['PATH'] = '%s:%s' % (options['node_bin_path'], os.environ['PATH'])
-        args =  ['./node_modules/.bin/grunt', 'build', '--output-dir=%s' % build_dir]
+        args = ['./node_modules/.bin/grunt', 'build', '--output-dir=%s' % build_dir]
         if options['editor_optimize']:
             args.append('--optimize=%s' % options['editor_optimize'])
         if options['editor_optimize']:
             args.append('--optimize=%s' % options['editor_optimize'])
-        call(args, cwd = rng_base_dir)
+        call(args, cwd=rng_base_dir)
 
 
-        call_command('collectstatic', interactive = False, ignore_patterns = ['editor'])
+        call_command('collectstatic', interactive=False, ignore_patterns=['editor'])
index c53f0e7..9012566 100644 (file)
@@ -1 +1 @@
-  # pragma: no cover
+# pragma: no cover
index f8cda9f..ff7f18d 100644 (file)
@@ -1,7 +1,9 @@
+# -*- coding: utf-8 -*-
 from django.contrib import admin
 
 from catalogue import models
 
 from django.contrib import admin
 
 from catalogue import models
 
+
 class BookAdmin(admin.ModelAdmin):
     list_display = ['title', 'public', '_published', '_new_publishable', 'project']
     list_filter = ['public', '_published', '_new_publishable', 'project']
 class BookAdmin(admin.ModelAdmin):
     list_display = ['title', 'public', '_published', '_new_publishable', 'project']
     list_filter = ['public', '_published', '_new_publishable', 'project']
index 0c84232..2f47916 100644 (file)
@@ -6,11 +6,12 @@
 TRIM_BEGIN = " TRIM_BEGIN "
 TRIM_END = " TRIM_END "
 
 TRIM_BEGIN = " TRIM_BEGIN "
 TRIM_END = " TRIM_END "
 
-MASTERS = ['powiesc',
-           'opowiadanie',
-           'liryka_l',
-           'liryka_lp',
-           'dramat_wierszowany_l',
-           'dramat_wierszowany_lp',
-           'dramat_wspolczesny',
-           ]
+MASTERS = [
+    'powiesc',
+    'opowiadanie',
+    'liryka_l',
+    'liryka_lp',
+    'dramat_wierszowany_l',
+    'dramat_wierszowany_lp',
+    'dramat_wspolczesny',
+]
index c16b295..8b7d80f 100644 (file)
@@ -11,9 +11,8 @@ class RedakcjaDocProvider(DocProvider):
         self.publishable = publishable
 
     def by_slug(self, slug):
         self.publishable = publishable
 
     def by_slug(self, slug):
-        return IOFile.from_string(Book.objects.get(dc_slug=slug
-                    ).materialize(publishable=self.publishable
-                    ).encode('utf-8'))
+        return IOFile.from_string(
+            Book.objects.get(dc_slug=slug).materialize(publishable=self.publishable).encode('utf-8'))
 
 
 def serve_file(file_path, name, mime_type):
 
 
 def serve_file(file_path, name, mime_type):
index 4884a4c..1eb421b 100644 (file)
@@ -3,6 +3,7 @@ from django.contrib.syndication.views import Feed
 from django.shortcuts import get_object_or_404
 from catalogue.models import Book, Chunk
 
 from django.shortcuts import get_object_or_404
 from catalogue.models import Book, Chunk
 
+
 class PublishTrackFeed(Feed):
     title = u"Planowane publikacje"
     link = "/"
 class PublishTrackFeed(Feed):
     title = u"Planowane publikacje"
     link = "/"
@@ -22,8 +23,7 @@ class PublishTrackFeed(Feed):
 
     def items(self, obj):
         tag, published = obj
 
     def items(self, obj):
         tag, published = obj
-        books = Book.objects.filter(public=True, _on_track__gte=tag.ordering
-                ).order_by('-_on_track', 'title')
+        books = Book.objects.filter(public=True, _on_track__gte=tag.ordering).order_by('-_on_track', 'title')
         if published is not None:
             books = books.filter(_published=published)
         return books
         if published is not None:
             books = books.filter(_published=published)
         return books
index 85f92ef..7830b4f 100644 (file)
@@ -11,6 +11,7 @@ from django.utils.translation import ugettext_lazy as _
 from catalogue.constants import MASTERS
 from catalogue.models import Book, Chunk, Template
 
 from catalogue.constants import MASTERS
 from catalogue.models import Book, Chunk, Template
 
+
 class DocumentCreateForm(forms.ModelForm):
     """
         Form used for creating new documents.
 class DocumentCreateForm(forms.ModelForm):
     """
         Form used for creating new documents.
@@ -23,8 +24,8 @@ class DocumentCreateForm(forms.ModelForm):
 
     def __init__(self, *args, **kwargs):
         super(DocumentCreateForm, self).__init__(*args, **kwargs)
 
     def __init__(self, *args, **kwargs):
         super(DocumentCreateForm, self).__init__(*args, **kwargs)
-        self.fields['slug'].widget.attrs={'class': 'autoslug'}
-        self.fields['title'].widget.attrs={'class': 'autoslug-source'}
+        self.fields['slug'].widget.attrs = {'class': 'autoslug'}
+        self.fields['title'].widget.attrs = {'class': 'autoslug-source'}
         self.fields['template'].queryset = Template.objects.filter(is_main=True)
 
     def clean(self):
         self.fields['template'].queryset = Template.objects.filter(is_main=True)
 
     def clean(self):
@@ -46,15 +47,16 @@ class DocumentsUploadForm(forms.Form):
         Form used for uploading new documents.
     """
     file = forms.FileField(required=True, label=_('ZIP file'))
         Form used for uploading new documents.
     """
     file = forms.FileField(required=True, label=_('ZIP file'))
-    dirs = forms.BooleanField(label=_('Directories are documents in chunks'),
-            widget = forms.CheckboxInput(attrs={'disabled':'disabled'}))
+    dirs = forms.BooleanField(
+        label=_('Directories are documents in chunks'),
+        widget=forms.CheckboxInput(attrs={'disabled': 'disabled'}))
 
     def clean(self):
 
     def clean(self):
-        file = self.cleaned_data['file']
+        zip_file = self.cleaned_data['zip_file']
 
         import zipfile
         try:
 
         import zipfile
         try:
-            z = self.cleaned_data['zip'] = zipfile.ZipFile(file)
+            z = self.cleaned_data['zip'] = zipfile.ZipFile(zip_file)
         except zipfile.BadZipfile:
             raise forms.ValidationError("Should be a ZIP file.")
         if z.testzip():
         except zipfile.BadZipfile:
             raise forms.ValidationError("Should be a ZIP file.")
         if z.testzip():
@@ -67,10 +69,10 @@ class ChunkForm(forms.ModelForm):
     """
         Form used for editing a chunk.
     """
     """
         Form used for editing a chunk.
     """
-    user = forms.ModelChoiceField(queryset=
-        User.objects.annotate(count=Count('chunk')).
-        order_by('last_name', 'first_name'), required=False,
-        label=_('Assigned to')) 
+    user = forms.ModelChoiceField(
+        queryset=User.objects.annotate(count=Count('chunk')).order_by('last_name', 'first_name'),
+        required=False,
+        label=_('Assigned to'))
 
     class Meta:
         model = Chunk
 
     class Meta:
         model = Chunk
@@ -79,9 +81,9 @@ class ChunkForm(forms.ModelForm):
 
     def __init__(self, *args, **kwargs):
         super(ChunkForm, self).__init__(*args, **kwargs)
 
     def __init__(self, *args, **kwargs):
         super(ChunkForm, self).__init__(*args, **kwargs)
-        self.fields['gallery_start'].widget.attrs={'class': 'number-input'}
-        self.fields['slug'].widget.attrs={'class': 'autoslug'}
-        self.fields['title'].widget.attrs={'class': 'autoslug-source'}
+        self.fields['gallery_start'].widget.attrs = {'class': 'number-input'}
+        self.fields['slug'].widget.attrs = {'class': 'autoslug'}
+        self.fields['title'].widget.attrs = {'class': 'autoslug-source'}
 
     def clean_slug(self):
         slug = self.cleaned_data['slug']
 
     def clean_slug(self):
         slug = self.cleaned_data['slug']
@@ -113,13 +115,11 @@ class BookAppendForm(forms.Form):
         Form for appending a book to another book.
         It means moving all chunks from book A to book B and deleting A.
     """
         Form for appending a book to another book.
         It means moving all chunks from book A to book B and deleting A.
     """
-    append_to = forms.ModelChoiceField(queryset=Book.objects.all(),
-            label=_("Append to"))
+    append_to = forms.ModelChoiceField(queryset=Book.objects.all(), label=_("Append to"))
 
     def __init__(self, book, *args, **kwargs):
 
     def __init__(self, book, *args, **kwargs):
-        ret =  super(BookAppendForm, self).__init__(*args, **kwargs)
+        super(BookAppendForm, self).__init__(*args, **kwargs)
         self.fields['append_to'].queryset = Book.objects.exclude(pk=book.pk)
         self.fields['append_to'].queryset = Book.objects.exclude(pk=book.pk)
-        return ret
 
 
 class BookForm(forms.ModelForm):
 
 
 class BookForm(forms.ModelForm):
@@ -130,20 +130,18 @@ class BookForm(forms.ModelForm):
         exclude = ['project']
 
     def __init__(self, *args, **kwargs):
         exclude = ['project']
 
     def __init__(self, *args, **kwargs):
-        ret = super(BookForm, self).__init__(*args, **kwargs)
+        super(BookForm, self).__init__(*args, **kwargs)
         self.fields['slug'].widget.attrs.update({"class": "autoslug"})
         self.fields['title'].widget.attrs.update({"class": "autoslug-source"})
         self.fields['slug'].widget.attrs.update({"class": "autoslug"})
         self.fields['title'].widget.attrs.update({"class": "autoslug-source"})
-        return ret
 
 
 class ReadonlyBookForm(BookForm):
     """Form used for not editing a Book."""
 
     def __init__(self, *args, **kwargs):
 
 
 class ReadonlyBookForm(BookForm):
     """Form used for not editing a Book."""
 
     def __init__(self, *args, **kwargs):
-        ret = super(ReadonlyBookForm, self).__init__(*args, **kwargs)
+        super(ReadonlyBookForm, self).__init__(*args, **kwargs)
         for field in self.fields.values():
             field.widget.attrs.update({"readonly": True})
         for field in self.fields.values():
             field.widget.attrs.update({"readonly": True})
-        return ret
 
 
 class ChooseMasterForm(forms.Form):
 
 
 class ChooseMasterForm(forms.Form):
index e6f146f..d3792af 100644 (file)
@@ -16,15 +16,20 @@ class XmlUpdaterCommand(BaseCommand):
     In a subclass, provide an XmlUpdater class in the `updater' attribute.
     """
     option_list = BaseCommand.option_list + (
     In a subclass, provide an XmlUpdater class in the `updater' attribute.
     """
     option_list = BaseCommand.option_list + (
-        make_option('-q', '--quiet', action='store_false', dest='verbose',
+        make_option(
+            '-q', '--quiet', action='store_false', dest='verbose',
             default=True, help='Less output'),
             default=True, help='Less output'),
-        make_option('-d', '--dry-run', action='store_true', dest='dry_run',
+        make_option(
+            '-d', '--dry-run', action='store_true', dest='dry_run',
             default=False, help="Don't actually touch anything"),
             default=False, help="Don't actually touch anything"),
-        make_option('-u', '--username', dest='username', metavar='USER',
+        make_option(
+            '-u', '--username', dest='username', metavar='USER',
             help='Assign commits to this user (required, preferably yourself).'),
     )
     args = "[slug]..."
 
             help='Assign commits to this user (required, preferably yourself).'),
     )
     args = "[slug]..."
 
+    updater = NotImplemented
+
     def handle(self, *args, **options):
         verbose = options.get('verbose')
         dry_run = options.get('dry_run')
     def handle(self, *args, **options):
         verbose = options.get('verbose')
         dry_run = options.get('dry_run')
index 9f7b12d..234795c 100644 (file)
@@ -3,7 +3,6 @@
 import csv
 from optparse import make_option
 import re
 import csv
 from optparse import make_option
 import re
-import sys
 import urllib
 import urllib2
 
 import urllib
 import urllib2
 
@@ -22,12 +21,15 @@ REDAKCJA_URL = 'http://redakcja.wolnelektury.pl/documents/'
 
 class Command(BaseCommand):
     option_list = BaseCommand.option_list + (
 
 class Command(BaseCommand):
     option_list = BaseCommand.option_list + (
-        make_option('-r', '--redakcja', dest='redakcja', metavar='URL',
+        make_option(
+            '-r', '--redakcja', dest='redakcja', metavar='URL',
             help='Base URL of Redakcja documents',
             default=REDAKCJA_URL),
             help='Base URL of Redakcja documents',
             default=REDAKCJA_URL),
-        make_option('-q', '--quiet', action='store_false', dest='verbose', default=True,
+        make_option(
+            '-q', '--quiet', action='store_false', dest='verbose', default=True,
             help='Less output'),
             help='Less output'),
-        make_option('-f', '--force', action='store_true', dest='force', default=False,
+        make_option(
+            '-f', '--force', action='store_true', dest='force', default=False,
             help='Force assignment overwrite'),
     )
     help = 'Imports ticket assignments from Redmine.'
             help='Force assignment overwrite'),
     )
     help = 'Imports ticket assignments from Redmine.'
@@ -123,7 +125,6 @@ class Command(BaseCommand):
             if ticket_done:
                 done_tickets += 1
 
             if ticket_done:
                 done_tickets += 1
 
-
         # Print results
         print
         print "Results:"
         # Print results
         print
         print "Results:"
@@ -147,7 +148,5 @@ class Command(BaseCommand):
                 print "  %s (%d tickets)" % (name, unknown_users[name])
         print
 
                 print "  %s (%d tickets)" % (name, unknown_users[name])
         print
 
-
         transaction.commit()
         transaction.leave_transaction_management()
         transaction.commit()
         transaction.leave_transaction_management()
-
index 3f997d0..564773e 100644 (file)
@@ -9,32 +9,35 @@ from catalogue.management import XmlUpdater
 from catalogue.management.commands import XmlUpdaterCommand
 
 
 from catalogue.management.commands import XmlUpdaterCommand
 
 
+def fix_wluri(elem, change, verbose):
+    try:
+        WLURI.strict(elem.text)
+    except ValidationError:
+        correct_field = unicode(WLURI.from_slug(
+            WLURI(elem.text.strip()).slug))
+        try:
+            WLURI.strict(correct_field)
+        except ValidationError:
+            # Can't make a valid WLURI out of it, leave as is.
+            return False
+        if verbose:
+            print "Changing %s from %s to %s" % (
+                elem.tag, elem.text, correct_field
+            )
+        elem.text = correct_field
+        return True
+
+
 class FixDC(XmlUpdater):
     commit_desc = "auto-fixing DC"
     retain_publishable = True
     only_first_chunk = True
 
 class FixDC(XmlUpdater):
     commit_desc = "auto-fixing DC"
     retain_publishable = True
     only_first_chunk = True
 
-    def fix_wluri(elem, change, verbose):
-        try:
-            WLURI.strict(elem.text)
-        except ValidationError:
-            correct_field = unicode(WLURI.from_slug(
-                                WLURI(elem.text.strip()).slug))
-            try:
-                WLURI.strict(correct_field)
-            except ValidationError:
-                # Can't make a valid WLURI out of it, leave as is.
-                return False
-            if verbose:
-                print "Changing %s from %s to %s" % (
-                        elem.tag, elem.text, correct_field
-                    )
-            elem.text = correct_field
-            return True
     for field in BookInfo.FIELDS:
         if field.validator == WLURI:
             XmlUpdater.fixes_elements('.//' + field.uri)(fix_wluri)
 
     for field in BookInfo.FIELDS:
         if field.validator == WLURI:
             XmlUpdater.fixes_elements('.//' + field.uri)(fix_wluri)
 
+    # unused
     @XmlUpdater.fixes_elements(".//" + RDFNS("Description"))
     def fix_rdfabout(elem, change, verbose):
         correct_about = change.tree.book.correct_about()
     @XmlUpdater.fixes_elements(".//" + RDFNS("Description"))
     def fix_rdfabout(elem, change, verbose):
         correct_about = change.tree.book.correct_about()
index 5f60388..8991c3a 100644 (file)
@@ -19,8 +19,7 @@ WL_API = 'http://www.wolnelektury.pl/api/books/'
 
 class Command(BaseCommand):
     option_list = BaseCommand.option_list + (
 
 class Command(BaseCommand):
     option_list = BaseCommand.option_list + (
-        make_option('-q', '--quiet', action='store_false', dest='verbose', default=True,
-            help='Less output'),
+        make_option('-q', '--quiet', action='store_false', dest='verbose', default=True, help='Less output'),
     )
     help = 'Imports XML files from WL.'
 
     )
     help = 'Imports XML files from WL.'
 
@@ -65,15 +64,15 @@ class Command(BaseCommand):
             previous_books = slugs.get(info.slug)
             if previous_books:
                 if len(previous_books) > 1:
             previous_books = slugs.get(info.slug)
             if previous_books:
                 if len(previous_books) > 1:
-                    print self.style.ERROR("There is more than one book "
-                        "with slug %s:"), 
+                    print self.style.ERROR("There is more than one book with slug %s:"),
                 previous_book = previous_books[0]
                 comm = previous_book.slug
             else:
                 previous_book = None
                 comm = '*'
                 previous_book = previous_books[0]
                 comm = previous_book.slug
             else:
                 previous_book = None
                 comm = '*'
-            print book_count, info.slug , '-->', comm
-            Book.import_xml_text(xml_text, title=info.title[:255],
+            print book_count, info.slug, '-->', comm
+            Book.import_xml_text(
+                xml_text, title=info.title[:255],
                 slug=info.slug[:128], previous_book=previous_book,
                 commit_args=commit_args)
             book_count += 1
                 slug=info.slug[:128], previous_book=previous_book,
                 commit_args=commit_args)
             book_count += 1
@@ -85,7 +84,5 @@ class Command(BaseCommand):
                 book_count, )
         print
 
                 book_count, )
         print
 
-
         transaction.commit()
         transaction.leave_transaction_management()
         transaction.commit()
         transaction.leave_transaction_management()
-
index aec113e..d148266 100644 (file)
@@ -1,14 +1,11 @@
 # -*- coding: utf-8 -*-
 
 from optparse import make_option
 # -*- coding: utf-8 -*-
 
 from optparse import make_option
-import sys
 
 
-from django.contrib.auth.models import User
 from django.core.management.base import BaseCommand
 from django.core.management.color import color_style
 from django.db import transaction
 
 from django.core.management.base import BaseCommand
 from django.core.management.color import color_style
 from django.db import transaction
 
-from slughifi import slughifi
 from catalogue.models import Book
 
 
 from catalogue.models import Book
 
 
@@ -26,34 +23,40 @@ def common_prefix(texts):
 
 class Command(BaseCommand):
     option_list = BaseCommand.option_list + (
 
 class Command(BaseCommand):
     option_list = BaseCommand.option_list + (
-        make_option('-s', '--slug', dest='new_slug', metavar='SLUG',
+        make_option(
+            '-s', '--slug', dest='new_slug', metavar='SLUG',
             help='New slug of the merged book (defaults to common part of all slugs).'),
             help='New slug of the merged book (defaults to common part of all slugs).'),
-        make_option('-t', '--title', dest='new_title', metavar='TITLE',
+        make_option(
+            '-t', '--title', dest='new_title', metavar='TITLE',
             help='New title of the merged book (defaults to common part of all titles).'),
             help='New title of the merged book (defaults to common part of all titles).'),
-        make_option('-q', '--quiet', action='store_false', dest='verbose', default=True,
+        make_option(
+            '-q', '--quiet', action='store_false', dest='verbose', default=True,
             help='Less output'),
             help='Less output'),
-        make_option('-g', '--guess', action='store_true', dest='guess', default=False,
+        make_option(
+            '-g', '--guess', action='store_true', dest='guess', default=False,
             help='Try to guess what merges are needed (but do not apply them).'),
             help='Try to guess what merges are needed (but do not apply them).'),
-        make_option('-d', '--dry-run', action='store_true', dest='dry_run', default=False,
+        make_option(
+            '-d', '--dry-run', action='store_true', dest='dry_run', default=False,
             help='Dry run: do not actually change anything.'),
             help='Dry run: do not actually change anything.'),
-        make_option('-f', '--force', action='store_true', dest='force', default=False,
+        make_option(
+            '-f', '--force', action='store_true', dest='force', default=False,
             help='On slug conflict, hide the original book to archive.'),
     )
     help = 'Merges multiple books into one.'
     args = '[slug]...'
 
             help='On slug conflict, hide the original book to archive.'),
     )
     help = 'Merges multiple books into one.'
     args = '[slug]...'
 
-
     def print_guess(self, dry_run=True, force=False):
         from collections import defaultdict
         from pipes import quote
         import re
     def print_guess(self, dry_run=True, force=False):
         from collections import defaultdict
         from pipes import quote
         import re
-    
+
         def read_slug(slug):
         def read_slug(slug):
-            res = []
-            res.append((re.compile(ur'__?(przedmowa)$'), -1))
-            res.append((re.compile(ur'__?(cz(esc)?|ksiega|rozdzial)__?(?P<n>\d*)$'), None))
-            res.append((re.compile(ur'__?(rozdzialy__?)?(?P<n>\d*)-'), None))
-        
+            res = [
+                (re.compile(ur'__?(przedmowa)$'), -1),
+                (re.compile(ur'__?(cz(esc)?|ksiega|rozdzial)__?(?P<n>\d*)$'), None),
+                (re.compile(ur'__?(rozdzialy__?)?(?P<n>\d*)-'), None),
+            ]
+
             for r, default in res:
                 m = r.search(slug)
                 if m:
             for r, default in res:
                 m = r.search(slug)
                 if m:
@@ -63,12 +66,12 @@ class Command(BaseCommand):
                     except IndexError:
                         return default, slug[:start]
             return None, slug
                     except IndexError:
                         return default, slug[:start]
             return None, slug
-    
+
         def file_to_title(fname):
             """ Returns a title-like version of a filename. """
             parts = (p.replace('_', ' ').title() for p in fname.split('__'))
             return ' / '.join(parts)
         def file_to_title(fname):
             """ Returns a title-like version of a filename. """
             parts = (p.replace('_', ' ').title() for p in fname.split('__'))
             return ' / '.join(parts)
-    
+
         merges = defaultdict(list)
         slugs = []
         for b in Book.objects.all():
         merges = defaultdict(list)
         slugs = []
         for b in Book.objects.all():
@@ -76,17 +79,17 @@ class Command(BaseCommand):
             n, ns = read_slug(b.slug)
             if n is not None:
                 merges[ns].append((n, b))
             n, ns = read_slug(b.slug)
             if n is not None:
                 merges[ns].append((n, b))
-    
+
         conflicting_slugs = []
         for slug in sorted(merges.keys()):
             merge_list = sorted(merges[slug])
             if len(merge_list) < 2:
                 continue
         conflicting_slugs = []
         for slug in sorted(merges.keys()):
             merge_list = sorted(merges[slug])
             if len(merge_list) < 2:
                 continue
-    
+
             merge_slugs = [b.slug for i, b in merge_list]
             if slug in slugs and slug not in merge_slugs:
                 conflicting_slugs.append(slug)
             merge_slugs = [b.slug for i, b in merge_list]
             if slug in slugs and slug not in merge_slugs:
                 conflicting_slugs.append(slug)
-    
+
             title = file_to_title(slug)
             print "./manage.py merge_books %s%s--title=%s --slug=%s \\\n    %s\n" % (
                 '--dry-run ' if dry_run else '',
             title = file_to_title(slug)
             print "./manage.py merge_books %s%s--title=%s --slug=%s \\\n    %s\n" % (
                 '--dry-run ' if dry_run else '',
@@ -94,7 +97,7 @@ class Command(BaseCommand):
                 quote(title), slug,
                 " \\\n    ".join(merge_slugs)
                 )
                 quote(title), slug,
                 " \\\n    ".join(merge_slugs)
                 )
-    
+
         if conflicting_slugs:
             if force:
                 print self.style.NOTICE('# These books will be archived:')
         if conflicting_slugs:
             if force:
                 print self.style.NOTICE('# These books will be archived:')
@@ -103,9 +106,7 @@ class Command(BaseCommand):
             for slug in conflicting_slugs:
                 print '#', slug
 
             for slug in conflicting_slugs:
                 print '#', slug
 
-
     def handle(self, *slugs, **options):
     def handle(self, *slugs, **options):
-
         self.style = color_style()
 
         force = options.get('force')
         self.style = color_style()
 
         force = options.get('force')
@@ -148,7 +149,6 @@ class Command(BaseCommand):
         if slugs[0] != new_slug and Book.objects.filter(slug=new_slug).exists():
             self.style.ERROR('Book already exists, skipping!')
 
         if slugs[0] != new_slug and Book.objects.filter(slug=new_slug).exists():
             self.style.ERROR('Book already exists, skipping!')
 
-
         if dry_run and verbose:
             print self.style.NOTICE('DRY RUN: nothing will be changed.')
             print
         if dry_run and verbose:
             print self.style.NOTICE('DRY RUN: nothing will be changed.')
             print
@@ -212,7 +212,5 @@ class Command(BaseCommand):
                         chunk.slug = chunk_slugs[j]
                         chunk.save()
 
                         chunk.slug = chunk_slugs[j]
                         chunk.save()
 
-
         transaction.commit()
         transaction.leave_transaction_management()
         transaction.commit()
         transaction.leave_transaction_management()
-
index 4f804b8..0097cb3 100644 (file)
@@ -1,5 +1,7 @@
+# -*- coding: utf-8 -*-
 from django.db import models
 
 from django.db import models
 
+
 class VisibleManager(models.Manager):
     def get_query_set(self):
         return super(VisibleManager, self).get_query_set().exclude(_hidden=True)
 class VisibleManager(models.Manager):
     def get_query_set(self):
         return super(VisibleManager, self).get_query_set().exclude(_hidden=True)
index faa2d38..c08246e 100755 (executable)
@@ -12,6 +12,7 @@ from catalogue.models.listeners import *
 
 from django.contrib.auth.models import User as AuthUser
 
 
 from django.contrib.auth.models import User as AuthUser
 
+
 class User(AuthUser):
     class Meta:
         proxy = True
 class User(AuthUser):
     class Meta:
         proxy = True
index 83db305..6f47642 100755 (executable)
@@ -137,7 +137,7 @@ class Book(models.Model):
         return instance
 
     def make_chunk_slug(self, proposed):
         return instance
 
     def make_chunk_slug(self, proposed):
-        """ 
+        """
             Finds a chunk slug not yet used in the book.
         """
         slugs = set(c.slug for c in self)
             Finds a chunk slug not yet used in the book.
         """
         slugs = set(c.slug for c in self)
@@ -200,10 +200,10 @@ class Book(models.Model):
 
         # and move the gallery starts
         if gm.was_merged:
 
         # and move the gallery starts
         if gm.was_merged:
-                for chunk in self[len(self) - len_other:]:
-                        old_start = chunk.gallery_start or 1
-                        chunk.gallery_start = old_start + gm.dest_size - gm.num_deleted
-                        chunk.save()
+            for chunk in self[len(self) - len_other:]:
+                old_start = chunk.gallery_start or 1
+                chunk.gallery_start = old_start + gm.dest_size - gm.num_deleted
+                chunk.save()
 
         other.delete()
 
 
         other.delete()
 
@@ -388,7 +388,7 @@ class Book(models.Model):
         return changes
 
     def materialize(self, publishable=False, changes=None):
         return changes
 
     def materialize(self, publishable=False, changes=None):
-        """ 
+        """
             Get full text of the document compiled from chunks.
             Takes the current versions of all texts
             or versions most recently tagged for publishing,
             Get full text of the document compiled from chunks.
             Takes the current versions of all texts
             or versions most recently tagged for publishing,
index 70e185b..b8c5674 100755 (executable)
@@ -53,7 +53,7 @@ class Chunk(dvcs_models.Document):
 
     @models.permalink
     def get_absolute_url(self):
 
     @models.permalink
     def get_absolute_url(self):
-        return ("wiki_editor", [self.book.slug, self.slug])
+        return "wiki_editor", [self.book.slug, self.slug]
 
     def pretty_name(self, book_length=None):
         title = self.book.title
 
     def pretty_name(self, book_length=None):
         title = self.book.title
@@ -63,7 +63,6 @@ class Chunk(dvcs_models.Document):
             title += " (%d/%d)" % (self.number, book_length)
         return title
 
             title += " (%d/%d)" % (self.number, book_length)
         return title
 
-
     # Creating and manipulation
     # =========================
 
     # Creating and manipulation
     # =========================
 
@@ -75,8 +74,8 @@ class Chunk(dvcs_models.Document):
         while not new_chunk:
             new_slug = self.book.make_chunk_slug(slug)
             try:
         while not new_chunk:
             new_slug = self.book.make_chunk_slug(slug)
             try:
-                new_chunk = self.book.chunk_set.create(number=self.number+1,
-                    slug=new_slug[:50], title=title[:255], **kwargs)
+                new_chunk = self.book.chunk_set.create(
+                    number=self.number+1, slug=new_slug[:50], title=title[:255], **kwargs)
             except IntegrityError:
                 pass
         return new_chunk
             except IntegrityError:
                 pass
         return new_chunk
@@ -88,7 +87,6 @@ class Chunk(dvcs_models.Document):
         else:
             return cls.objects.get(book__slug=book_slug, slug=chunk_slug)
 
         else:
             return cls.objects.get(book__slug=book_slug, slug=chunk_slug)
 
-
     # State & cache
     # =============
 
     # State & cache
     # =============
 
@@ -124,6 +122,6 @@ class Chunk(dvcs_models.Document):
 
     def refresh(self):
         """This should be done offline."""
 
     def refresh(self):
         """This should be done offline."""
-        self.changed
-        self.hidden
-        self.short_html
+        self.changed()
+        self.hidden()
+        self.short_html()
index 532f1e7..b40cdc2 100755 (executable)
@@ -50,4 +50,3 @@ def listener_create(sender, instance, created, **kwargs):
     if created:
         instance.chunk_set.create(number=1, slug='1')
 models.signals.post_save.connect(listener_create, sender=Book)
     if created:
         instance.chunk_set.create(number=1, slug='1')
 models.signals.post_save.connect(listener_create, sender=Book)
-
index dded859..f4056fc 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from django.db import models
 
 
 from django.db import models
 
 
index 62ca514..c161147 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from django.dispatch import Signal
 
 post_publish = Signal()
 from django.dispatch import Signal
 
 post_publish = Signal()
index c386c22..d71542c 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from celery.task import task
 from django.utils import translation
 
 from celery.task import task
 from django.utils import translation
 
@@ -11,6 +12,7 @@ def _refresh_by_pk(cls, pk, language=None):
     finally:
         translation.activate(prev_language)
 
     finally:
         translation.activate(prev_language)
 
+
 def refresh_instance(instance):
     _refresh_by_pk.delay(type(instance), instance.pk, translation.get_language())
 
 def refresh_instance(instance):
     _refresh_by_pk.delay(type(instance), instance.pk, translation.get_language())
 
index 14149e8..6e64ed6 100755 (executable)
@@ -1,6 +1,6 @@
+# -*- coding: utf-8 -*-
 from __future__ import absolute_import
 
 from __future__ import absolute_import
 
-from re import split
 from django.db.models import Q, Count
 from django import template
 from django.utils.translation import ugettext_lazy as _
 from django.db.models import Q, Count
 from django import template
 from django.utils.translation import ugettext_lazy as _
@@ -12,10 +12,10 @@ register = template.Library()
 
 class ChunksList(object):
     def __init__(self, chunk_qs):
 
 class ChunksList(object):
     def __init__(self, chunk_qs):
-        #self.chunk_qs = chunk_qs#.annotate(
-            #book_length=Count('book__chunk')).select_related(
-            #'book')#, 'stage__name',
-            #'user')
+        # self.chunk_qs = chunk_qs#.annotate(
+        #     book_length=Count('book__chunk')).select_related(
+        #     'book')#, 'stage__name',
+        #     'user')
         self.chunk_qs = chunk_qs.select_related('book__hidden')
 
         self.book_qs = chunk_qs.values('book_id')
         self.chunk_qs = chunk_qs.select_related('book__hidden')
 
         self.book_qs = chunk_qs.values('book_id')
@@ -111,7 +111,7 @@ def document_list_filter(request, **kwargs):
         chunks = chunks.filter(_states_dict[state])
 
     chunks = foreign_filter(chunks, arg_or_GET('user'), 'user', User, 'username')
         chunks = chunks.filter(_states_dict[state])
 
     chunks = foreign_filter(chunks, arg_or_GET('user'), 'user', User, 'username')
-    chunks = foreign_filter(chunks, arg_or_GET('stage'), 'stage', Chunk.tag_model, 'slug')
+    chunks = foreign_filter(chunks, arg_or_GET('stage'), 'stage', Chunk.tag_model)
     chunks = search_filter(chunks, arg_or_GET('title'), ['book__title', 'title'])
     chunks = foreign_filter(chunks, arg_or_GET('project'), 'book__project', Project, 'pk')
     return chunks
     chunks = search_filter(chunks, arg_or_GET('title'), ['book__title', 'title'])
     chunks = foreign_filter(chunks, arg_or_GET('project'), 'book__project', Project, 'pk')
     return chunks
index 7f372f7..2ff6f3d 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from __future__ import absolute_import
 
 from django.core.urlresolvers import reverse
 from __future__ import absolute_import
 
 from django.core.urlresolvers import reverse
@@ -39,4 +40,3 @@ def main_tabs(context):
 @register.filter
 def nice_name(user):
     return user.get_full_name() or user.username
 @register.filter
 def nice_name(user):
     return user.get_full_name() or user.username
-
index ccaf03b..b547801 100755 (executable)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from django import template
 register = template.Library()
 
 from django import template
 register = template.Library()
 
index b3d44d7..d4e1a88 100755 (executable)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from re import split
 
 from django import template
 from re import split
 
 from django import template
@@ -21,7 +22,7 @@ Using 'django.core.context_processors.request' is required.
 class SetGetParameter(template.Node):
     def __init__(self, values):
         self.values = values
 class SetGetParameter(template.Node):
     def __init__(self, values):
         self.values = values
-        
+
     def render(self, context):
         request = template.Variable('request').resolve(context)
         params = request.GET.copy()
     def render(self, context):
         request = template.Variable('request').resolve(context)
         params = request.GET.copy()
@@ -31,7 +32,7 @@ class SetGetParameter(template.Node):
                     del(params[key])
             else:
                 params[key] = template.Variable(value).resolve(context)
                     del(params[key])
             else:
                 params[key] = template.Variable(value).resolve(context)
-        return '?%s' %  params.urlencode()
+        return '?%s' % params.urlencode()
 
 
 @register.tag
 
 
 @register.tag
index 28671fb..9b607e4 100755 (executable)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from __future__ import absolute_import
 
 from datetime import timedelta
 from __future__ import absolute_import
 
 from datetime import timedelta
@@ -44,15 +45,14 @@ def changes_wall(user=None, max_len=None, day=None):
     for item in qs:
         tag = 'stage' if item.tags.count() else 'change'
         chunk = item.tree
     for item in qs:
         tag = 'stage' if item.tags.count() else 'change'
         chunk = item.tree
-        w  = WallItem(tag)
+        w = WallItem(tag)
         if user and item.author != user:
             w.header = _('Related edit')
         else:
             w.header = _('Edit')
         w.title = chunk.pretty_name()
         w.summary = item.description
         if user and item.author != user:
             w.header = _('Related edit')
         else:
             w.header = _('Edit')
         w.title = chunk.pretty_name()
         w.summary = item.description
-        w.url = reverse('wiki_editor', 
-                args=[chunk.book.slug, chunk.slug]) + '?diff=%d' % item.revision
+        w.url = reverse('wiki_editor', args=[chunk.book.slug, chunk.slug]) + '?diff=%d' % item.revision
         w.timestamp = item.created_at
         w.user = item.author
         w.user_name = item.author_name
         w.timestamp = item.created_at
         w.user = item.author
         w.user_name = item.author_name
@@ -95,7 +95,7 @@ def comments_wall(user=None, max_len=None, day=None):
         next_day = day + timedelta(1)
         qs = qs.filter(submit_date__gte=day, submit_date__lt=next_day)
     for item in qs:
         next_day = day + timedelta(1)
         qs = qs.filter(submit_date__gte=day, submit_date__lt=next_day)
     for item in qs:
-        w  = WallItem('comment')
+        w = WallItem('comment')
         w.header = _('Comment')
         w.title = item.content_object
         w.summary = item.comment
         w.header = _('Comment')
         w.title = item.content_object
         w.summary = item.comment
@@ -143,6 +143,7 @@ def wall(context, user=None, max_len=100):
             comments_wall(user, max_len),
         ], max_len)}
 
             comments_wall(user, max_len),
         ], max_len)}
 
+
 @register.inclusion_tag("catalogue/wall.html", takes_context=True)
 def day_wall(context, day):
     return {
 @register.inclusion_tag("catalogue/wall.html", takes_context=True)
 def day_wall(context, day):
     return {
index df6f3b4..4138b8f 100644 (file)
@@ -42,13 +42,11 @@ class ManipulationTests(TestCase):
         self.assertEqual(self.book2.materialize(), 'book 2')
 
     def test_split_book(self):
         self.assertEqual(self.book2.materialize(), 'book 2')
 
     def test_split_book(self):
-        self.book1.chunk_set.create(number=2, title='Second chunk',
-                slug='book3')
+        self.book1.chunk_set.create(number=2, title='Second chunk', slug='book3')
         self.book1[1].commit('I survived!')
         self.assertEqual(len(self.book1), 2)
         self.book1.split()
         self.book1[1].commit('I survived!')
         self.assertEqual(len(self.book1), 2)
         self.book1.split()
-        self.assertEqual(set([b.slug for b in Book.objects.all()]),
-                set(['book2', '1', 'book3']))
+        self.assertEqual(set([b.slug for b in Book.objects.all()]), {'book2', '1', 'book3'})
         self.assertEqual(
                 Book.objects.get(slug='book3').materialize(),
                 'I survived!')
         self.assertEqual(
                 Book.objects.get(slug='book3').materialize(),
                 'I survived!')
index ad0dfd7..47dfae7 100644 (file)
@@ -18,11 +18,10 @@ class GalleryAppendTests(TestCase):
     def setUp(self):
         self.user = User.objects.create(username='tester')
         self.book1 = Book.create(self.user, 'book 1', slug='book1')
     def setUp(self):
         self.user = User.objects.create(username='tester')
         self.book1 = Book.create(self.user, 'book 1', slug='book1')
-        self.book1.chunk_set.create(number=2, title='Second chunk',
-                slug='book 1 / 2')
-        c=self.book1[1]
-        c.gallery_start=3
-        
+        self.book1.chunk_set.create(number=2, title='Second chunk', slug='book 1 / 2')
+        c = self.book1[1]
+        c.gallery_start = 3
+
         self.scandir = join(settings.MEDIA_ROOT, settings.IMAGE_DIR)
         if not exists(self.scandir):
             makedirs(self.scandir)
         self.scandir = join(settings.MEDIA_ROOT, settings.IMAGE_DIR)
         if not exists(self.scandir):
             makedirs(self.scandir)
@@ -35,31 +34,29 @@ class GalleryAppendTests(TestCase):
             f.close()
         book.gallery = basename(d)
 
             f.close()
         book.gallery = basename(d)
 
-
     def test_both_indexed(self):
         self.book2 = Book.create(self.user, 'book 2', slug='book2')
     def test_both_indexed(self):
         self.book2 = Book.create(self.user, 'book 2', slug='book2')
-        self.book2.chunk_set.create(number=2, title='Second chunk of second book',
-                slug='book 2 / 2')
+        self.book2.chunk_set.create(number=2, title='Second chunk of second book', slug='book 2 / 2')
 
         c = self.book2[1]
         c.gallery_start = 3
         c.save()
 
         c = self.book2[1]
         c.gallery_start = 3
         c.save()
-        
-        print "gallery starts:",self.book2[0].gallery_start, self.book2[1].gallery_start
+
+        print "gallery starts:", self.book2[0].gallery_start, self.book2[1].gallery_start
 
         self.make_gallery(self.book1, {
 
         self.make_gallery(self.book1, {
-            '1-0001_1l' : 'aa',
-            '1-0001_2r' : 'bb',
-            '1-0002_1l' : 'cc',
-            '1-0002_2r' : 'dd',
-            })
+            '1-0001_1l': 'aa',
+            '1-0001_2r': 'bb',
+            '1-0002_1l': 'cc',
+            '1-0002_2r': 'dd',
+        })
 
         self.make_gallery(self.book2, {
 
         self.make_gallery(self.book2, {
-            '1-0001_1l' : 'dd', # the same, should not be moved
-            '1-0001_2r' : 'ff',
-            '2-0002_1l' : 'gg',
-            '2-0002_2r' : 'hh',
-            })
+            '1-0001_1l': 'dd',  # the same, should not be moved
+            '1-0001_2r': 'ff',
+            '2-0002_1l': 'gg',
+            '2-0002_2r': 'hh',
+        })
 
         self.book1.append(self.book2)
 
 
         self.book1.append(self.book2)
 
@@ -75,26 +72,25 @@ class GalleryAppendTests(TestCase):
             '2-0001_2r',
             '3-0002_1l',
             '3-0002_2r',
             '2-0001_2r',
             '3-0002_1l',
             '3-0002_2r',
-            ])        
+            ])
 
         self.assertEqual((4, 6), (self.book1[2].gallery_start, self.book1[3].gallery_start))
 
         self.assertEqual((4, 6), (self.book1[2].gallery_start, self.book1[3].gallery_start))
-        
-        
+
     def test_none_indexed(self):
         self.book2 = Book.create(self.user, 'book 2', slug='book2')
         self.make_gallery(self.book1, {
     def test_none_indexed(self):
         self.book2 = Book.create(self.user, 'book 2', slug='book2')
         self.make_gallery(self.book1, {
-            '0001_1l' : 'aa',
-            '0001_2r' : 'bb',
-            '0002_1l' : 'cc',
-            '0002_2r' : 'dd',
-            })
+            '0001_1l': 'aa',
+            '0001_2r': 'bb',
+            '0002_1l': 'cc',
+            '0002_2r': 'dd',
+        })
 
         self.make_gallery(self.book2, {
 
         self.make_gallery(self.book2, {
-            '0001_1l' : 'ee',
-            '0001_2r' : 'ff',
-            '0002_1l' : 'gg',
-            '0002_2r' : 'hh',
-            })
+            '0001_1l': 'ee',
+            '0001_2r': 'ff',
+            '0002_1l': 'gg',
+            '0002_2r': 'hh',
+        })
 
         self.book1.append(self.book2)
 
 
         self.book1.append(self.book2)
 
@@ -110,25 +106,23 @@ class GalleryAppendTests(TestCase):
             '1-0001_2r',
             '1-0002_1l',
             '1-0002_2r',
             '1-0001_2r',
             '1-0002_1l',
             '1-0002_2r',
-            ])        
-
+            ])
 
 
-    def test_none_indexed(self):
-        import nose.tools
+    def test_none_indexed2(self):
         self.book2 = Book.create(self.user, 'book 2', slug='book2')
         self.make_gallery(self.book1, {
         self.book2 = Book.create(self.user, 'book 2', slug='book2')
         self.make_gallery(self.book1, {
-            '1-0001_1l' : 'aa',
-            '1-0001_2r' : 'bb',
-            '1002_1l' : 'cc',
-            '1002_2r' : 'dd',
-            })
+            '1-0001_1l': 'aa',
+            '1-0001_2r': 'bb',
+            '1002_1l': 'cc',
+            '1002_2r': 'dd',
+        })
 
         self.make_gallery(self.book2, {
 
         self.make_gallery(self.book2, {
-            '0001_1l' : 'ee',
-            '0001_2r' : 'ff',
-            '0002_1l' : 'gg',
-            '0002_2r' : 'hh',
-            })
+            '0001_1l': 'ee',
+            '0001_2r': 'ff',
+            '0002_1l': 'gg',
+            '0002_2r': 'hh',
+        })
 
         self.book1.append(self.book2)
 
 
         self.book1.append(self.book2)
 
@@ -144,5 +138,4 @@ class GalleryAppendTests(TestCase):
             '1-0001_2r',
             '1-0002_1l',
             '1-0002_2r',
             '1-0001_2r',
             '1-0002_1l',
             '1-0002_2r',
-            ])        
-
+            ])
index 9fb5a4a..2db8d80 100644 (file)
@@ -17,7 +17,7 @@ class XmlUpdaterTests(TestCase):
     class SimpleUpdater(XmlUpdater):
         @XmlUpdater.fixes_elements('.//' + DCNS('title'))
         def fix_title(element, **kwargs):
     class SimpleUpdater(XmlUpdater):
         @XmlUpdater.fixes_elements('.//' + DCNS('title'))
         def fix_title(element, **kwargs):
-            element.text = element.text + " fixed"
+            element.text += " fixed"
             return True
 
     def setUp(self):
             return True
 
     def setUp(self):
@@ -31,5 +31,4 @@ class XmlUpdaterTests(TestCase):
         self.assertEqual(
             Book.objects.get(slug='test-book').wldocument(
                 publishable=False).book_info.title,
         self.assertEqual(
             Book.objects.get(slug='test-book').wldocument(
                 publishable=False).book_info.title,
-            self.title + " fixed"
-            )
+            self.title + " fixed")
index ec43053..8f58051 100644 (file)
@@ -6,7 +6,8 @@ from catalogue.feeds import PublishTrackFeed
 from catalogue.views import GalleryView, GalleryPackageView
 
 
 from catalogue.views import GalleryView, GalleryPackageView
 
 
-urlpatterns = patterns('catalogue.views',
+urlpatterns = patterns(
+    'catalogue.views',
     url(r'^$', RedirectView.as_view(url='catalogue/')),
 
     url(r'^catalogue/$', 'document_list', name='catalogue_document_list'),
     url(r'^$', RedirectView.as_view(url='catalogue/')),
 
     url(r'^catalogue/$', 'document_list', name='catalogue_document_list'),
@@ -14,7 +15,7 @@ urlpatterns = patterns('catalogue.views',
     url(r'^user/(?P<username>[^/]+)/$', 'user', name='catalogue_user'),
     url(r'^users/$', 'users', name='catalogue_users'),
     url(r'^activity/$', 'activity', name='catalogue_activity'),
     url(r'^user/(?P<username>[^/]+)/$', 'user', name='catalogue_user'),
     url(r'^users/$', 'users', name='catalogue_users'),
     url(r'^activity/$', 'activity', name='catalogue_activity'),
-    url(r'^activity/(?P<isodate>\d{4}-\d{2}-\d{2})/$', 
+    url(r'^activity/(?P<isodate>\d{4}-\d{2}-\d{2})/$',
         'activity', name='catalogue_activity'),
 
     url(r'^upload/$',
         'activity', name='catalogue_activity'),
 
     url(r'^upload/$',
@@ -26,15 +27,13 @@ urlpatterns = patterns('catalogue.views',
         'create_missing', name='catalogue_create_missing'),
 
     url(r'^book/(?P<slug>[^/]+)/publish$', 'publish', name="catalogue_publish"),
         'create_missing', name='catalogue_create_missing'),
 
     url(r'^book/(?P<slug>[^/]+)/publish$', 'publish', name="catalogue_publish"),
-    #url(r'^(?P<name>[^/]+)/publish/(?P<version>\d+)$', 'publish', name="catalogue_publish"),
+    # url(r'^(?P<name>[^/]+)/publish/(?P<version>\d+)$', 'publish', name="catalogue_publish"),
 
     url(r'^book/(?P<slug>[^/]+)/$', 'book', name="catalogue_book"),
 
     url(r'^book/(?P<slug>[^/]+)/$', 'book', name="catalogue_book"),
-    url(r'^book/(?P<slug>[^/]+)/gallery/$',
-            login_required()(GalleryView.as_view()),
-            name="catalogue_book_gallery"),
+    url(r'^book/(?P<slug>[^/]+)/gallery/$', login_required()(GalleryView.as_view()), name="catalogue_book_gallery"),
     url(r'^book/(?P<slug>[^/]+)/gallery/package$',
     url(r'^book/(?P<slug>[^/]+)/gallery/package$',
-            permission_required('catalogue.change_book')(GalleryPackageView.as_view()),
-            name="catalogue_book_gallery_package"),
+        permission_required('catalogue.change_book')(GalleryPackageView.as_view()),
+        name="catalogue_book_gallery_package"),
     url(r'^book/(?P<slug>[^/]+)/xml$', 'book_xml', name="catalogue_book_xml"),
     url(r'^book/(?P<slug>[^/]+)/txt$', 'book_txt', name="catalogue_book_txt"),
     url(r'^book/(?P<slug>[^/]+)/html$', 'book_html', name="catalogue_book_html"),
     url(r'^book/(?P<slug>[^/]+)/xml$', 'book_xml', name="catalogue_book_xml"),
     url(r'^book/(?P<slug>[^/]+)/txt$', 'book_txt', name="catalogue_book_txt"),
     url(r'^book/(?P<slug>[^/]+)/html$', 'book_html', name="catalogue_book_html"),
index 2ba0fb6..3bee910 100644 (file)
@@ -101,7 +101,7 @@ def create_missing(request, slug=None):
     if request.method == "POST":
         form = forms.DocumentCreateForm(request.POST, request.FILES)
         if form.is_valid():
     if request.method == "POST":
         form = forms.DocumentCreateForm(request.POST, request.FILES)
         if form.is_valid():
-            
+
             if request.user.is_authenticated():
                 creator = request.user
             else:
             if request.user.is_authenticated():
                 creator = request.user
             else:
@@ -395,14 +395,14 @@ def chunk_mass_edit(request):
     if request.method == 'POST':
         ids = map(int, filter(lambda i: i.strip() != '', request.POST.get('ids').split(',')))
         chunks = map(lambda i: Chunk.objects.get(id=i), ids)
     if request.method == 'POST':
         ids = map(int, filter(lambda i: i.strip() != '', request.POST.get('ids').split(',')))
         chunks = map(lambda i: Chunk.objects.get(id=i), ids)
-        
+
         stage = request.POST.get('stage')
         if stage:
             try:
                 stage = Chunk.tag_model.objects.get(slug=stage)
             except Chunk.DoesNotExist:
                 stage = None
         stage = request.POST.get('stage')
         if stage:
             try:
                 stage = Chunk.tag_model.objects.get(slug=stage)
             except Chunk.DoesNotExist:
                 stage = None
-           
+
             for c in chunks:
                 c.stage = stage
 
             for c in chunks:
                 c.stage = stage
 
@@ -414,7 +414,7 @@ def chunk_mass_edit(request):
                 user = User.objects.get(username=username)
             except User.DoesNotExist, e:
                 user = None
                 user = User.objects.get(username=username)
             except User.DoesNotExist, e:
                 user = None
-                
+
             for c in chunks:
                 c.user = user
 
             for c in chunks:
                 c.user = user
 
index 242714b..75cb2d8 100644 (file)
@@ -14,7 +14,7 @@ class ParseError(BaseException):
 
 
 def _trim(text, trim_begin=True, trim_end=True):
 
 
 def _trim(text, trim_begin=True, trim_end=True):
-    """ 
+    """
         Cut off everything before RE_TRIM_BEGIN and after RE_TRIM_END, so
         that eg. one big XML file can be compiled from many small XML files.
     """
         Cut off everything before RE_TRIM_BEGIN and after RE_TRIM_END, so
         that eg. one big XML file can be compiled from many small XML files.
     """
@@ -26,7 +26,7 @@ def _trim(text, trim_begin=True, trim_end=True):
 
 
 def compile_text(parts):
 
 
 def compile_text(parts):
-    """ 
+    """
         Compiles full text from an iterable of parts,
         trimming where applicable.
     """
         Compiles full text from an iterable of parts,
         trimming where applicable.
     """
@@ -103,7 +103,7 @@ def split_xml(text):
         name_elem = deepcopy(element)
         for tag in 'extra', 'motyw', 'pa', 'pe', 'pr', 'pt', 'uwaga':
             for a in name_elem.findall('.//' + tag):
         name_elem = deepcopy(element)
         for tag in 'extra', 'motyw', 'pa', 'pe', 'pr', 'pt', 'uwaga':
             for a in name_elem.findall('.//' + tag):
-                a.text=''
+                a.text = ''
                 del a[:]
         name = etree.tostring(name_elem, method='text', encoding='utf-8').strip()
 
                 del a[:]
         name = etree.tostring(name_elem, method='text', encoding='utf-8').strip()
 
@@ -123,15 +123,11 @@ def split_xml(text):
             while parent[0] is not element:
                 del parent[0]
             element, parent = parent, parent.getparent()
             while parent[0] is not element:
                 del parent[0]
             element, parent = parent, parent.getparent()
-        chunks[:0] = [[name,
-            unicode(etree.tostring(copied, encoding='utf-8'), 'utf-8')
-            ]]
+        chunks[:0] = [[name, unicode(etree.tostring(copied, encoding='utf-8'), 'utf-8')]]
 
         parts = src.findall('.//naglowek_rozdzial')
 
 
         parts = src.findall('.//naglowek_rozdzial')
 
-    chunks[:0] = [[u'początek',
-        unicode(etree.tostring(src, encoding='utf-8'), 'utf-8')
-        ]]
+    chunks[:0] = [[u'początek', unicode(etree.tostring(src, encoding='utf-8'), 'utf-8')]]
 
     for ch in chunks[1:]:
         ch[1] = add_trim_begin(ch[1])
 
     for ch in chunks[1:]:
         ch[1] = add_trim_begin(ch[1])
index 4c71886..969d13a 100755 (executable)
@@ -9,6 +9,7 @@ from django import forms
 from django.utils.translation import ugettext_lazy as _
 from cover.models import Image
 
 from django.utils.translation import ugettext_lazy as _
 from cover.models import Image
 
+
 class ImageAddForm(forms.ModelForm):
     class Meta:
         model = Image
 class ImageAddForm(forms.ModelForm):
     class Meta:
         model = Image
@@ -41,13 +42,12 @@ class ReadonlyImageEditForm(ImageEditForm):
     """Form used for not editing a Book."""
 
     def __init__(self, *args, **kwargs):
     """Form used for not editing a Book."""
 
     def __init__(self, *args, **kwargs):
-        ret = super(ReadonlyImageEditForm, self).__init__(*args, **kwargs)
+        super(ReadonlyImageEditForm, self).__init__(*args, **kwargs)
         for field in self.fields.values():
             field.widget.attrs.update({"readonly": True})
         for field in self.fields.values():
             field.widget.attrs.update({"readonly": True})
-        return ret
 
     def save(self, *args, **kwargs):
 
     def save(self, *args, **kwargs):
-        raise AssertionError, "ReadonlyImageEditForm should not be saved."
+        raise AssertionError("ReadonlyImageEditForm should not be saved.")
 
 
 class FlickrForm(forms.Form):
 
 
 class FlickrForm(forms.Form):
@@ -56,7 +56,7 @@ class FlickrForm(forms.Form):
     def clean_source_url(self):
         def normalize_html(html):
             return re.sub('[\t\n]', '', html)
     def clean_source_url(self):
         def normalize_html(html):
             return re.sub('[\t\n]', '', html)
-    
+
         url = self.cleaned_data['source_url']
         m = re.match(r'(https?://)?(www\.|secure\.)?flickr\.com/photos/(?P<author>[^/]+)/(?P<img>\d+)/?', url)
         if not m:
         url = self.cleaned_data['source_url']
         m = re.match(r'(https?://)?(www\.|secure\.)?flickr\.com/photos/(?P<author>[^/]+)/(?P<img>\d+)/?', url)
         if not m:
index d4432c2..c7657f3 100644 (file)
@@ -3,9 +3,6 @@
 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
-import re
-from urlparse import urljoin
-from django.conf import settings
 from django.core.files.base import ContentFile
 from django.db import models
 from django.db.models.signals import post_save
 from django.core.files.base import ContentFile
 from django.db import models
 from django.db.models.signals import post_save
@@ -20,8 +17,8 @@ class Image(models.Model):
     author = models.CharField(max_length=255, verbose_name=_('author'))
     license_name = models.CharField(max_length=255, verbose_name=_('license name'))
     license_url = models.URLField(max_length=255, blank=True, verbose_name=_('license URL'))
     author = models.CharField(max_length=255, verbose_name=_('author'))
     license_name = models.CharField(max_length=255, verbose_name=_('license name'))
     license_url = models.URLField(max_length=255, blank=True, verbose_name=_('license URL'))
-    source_url = models.URLField(verbose_name=_('source URL'), null = True)
-    download_url = models.URLField(unique=True, verbose_name=_('image download URL'), null = True)
+    source_url = models.URLField(verbose_name=_('source URL'), null=True)
+    download_url = models.URLField(unique=True, verbose_name=_('image download URL'), null=True)
     file = models.ImageField(upload_to='cover/image', editable=True, verbose_name=_('file'))
 
     class Meta:
     file = models.ImageField(upload_to='cover/image', editable=True, verbose_name=_('file'))
 
     class Meta:
@@ -33,7 +30,7 @@ class Image(models.Model):
 
     @models.permalink
     def get_absolute_url(self):
 
     @models.permalink
     def get_absolute_url(self):
-        return ('cover_image', [self.id])
+        return 'cover_image', [self.id]
 
     def get_full_url(self):
         return "http://%s%s" % (Site.objects.get_current().domain, self.get_absolute_url())
 
     def get_full_url(self):
         return "http://%s%s" % (Site.objects.get_current().domain, self.get_absolute_url())
@@ -44,5 +41,3 @@ def download_image(sender, instance, **kwargs):
     if instance.pk and not instance.file:
         t = URLOpener().open(instance.download_url).read()
         instance.file.save("%d.jpg" % instance.pk, ContentFile(t))
     if instance.pk and not instance.file:
         t = URLOpener().open(instance.download_url).read()
         instance.file.save("%d.jpg" % instance.pk, ContentFile(t))
-        
-        
\ No newline at end of file
index 2f5b304..b3be63b 100644 (file)
@@ -17,4 +17,5 @@ class FlickrTests(TestCase):
         self.assertEqual(form.cleaned_data['title'], u"Pirate Stańczyk")
         self.assertEqual(form.cleaned_data['license_name'], "CC BY 2.0")
         self.assertEqual(form.cleaned_data['license_url'], "http://creativecommons.org/licenses/by/2.0/deed.en")
         self.assertEqual(form.cleaned_data['title'], u"Pirate Stańczyk")
         self.assertEqual(form.cleaned_data['license_name'], "CC BY 2.0")
         self.assertEqual(form.cleaned_data['license_url'], "http://creativecommons.org/licenses/by/2.0/deed.en")
-        self.assertEqual(form.cleaned_data['download_url'], "https://farm8.staticflickr.com/7069/6941928577_415844c58e_o.jpg")
+        self.assertEqual(form.cleaned_data['download_url'],
+                         "https://farm8.staticflickr.com/7069/6941928577_415844c58e_o.jpg")
index f1a48d3..31d0c65 100644 (file)
@@ -6,13 +6,12 @@
 from django.conf.urls import patterns, url
 
 
 from django.conf.urls import patterns, url
 
 
-urlpatterns = patterns('cover.views',
+urlpatterns = patterns(
+    'cover.views',
     url(r'^preview/$', 'preview_from_xml', name='cover_preview'),
     url(r'^preview/(?P<book>[^/]+)/$', 'preview', name='cover_preview'),
     url(r'^preview/$', 'preview_from_xml', name='cover_preview'),
     url(r'^preview/(?P<book>[^/]+)/$', 'preview', name='cover_preview'),
-    url(r'^preview/(?P<book>[^/]+)/(?P<chunk>[^/]+)/$',
-            'preview', name='cover_preview'),
-    url(r'^preview/(?P<book>[^/]+)/(?P<chunk>[^/]+)/(?P<rev>\d+)/$',
-            'preview', name='cover_preview'),
+    url(r'^preview/(?P<book>[^/]+)/(?P<chunk>[^/]+)/$', 'preview', name='cover_preview'),
+    url(r'^preview/(?P<book>[^/]+)/(?P<chunk>[^/]+)/(?P<rev>\d+)/$', 'preview', name='cover_preview'),
 
     url(r'^image/$', 'image_list', name='cover_image_list'),
     url(r'^image/(?P<pk>\d+)/?$', 'image', name='cover_image'),
 
     url(r'^image/$', 'image_list', name='cover_image_list'),
     url(r'^image/(?P<pk>\d+)/?$', 'image', name='cover_image'),
index eba2c38..662a645 100644 (file)
@@ -1,9 +1,9 @@
+# -*- coding: utf-8 -*-
 from datetime import datetime
 import os.path
 
 from django.contrib.auth.models import User
 from django.core.files.base import ContentFile
 from datetime import datetime
 import os.path
 
 from django.contrib.auth.models import User
 from django.core.files.base import ContentFile
-from django.core.files.storage import FileSystemStorage
 from django.db import models, transaction
 from django.db.models.base import ModelBase
 from django.utils.translation import ugettext_lazy as _
 from django.db import models, transaction
 from django.db.models.base import ModelBase
 from django.utils.translation import ugettext_lazy as _
@@ -17,8 +17,7 @@ from dvcs.storage import GzipFileSystemStorage
 class Tag(models.Model):
     """A tag (e.g. document stage) which can be applied to a Change."""
     name = models.CharField(_('name'), max_length=64)
 class Tag(models.Model):
     """A tag (e.g. document stage) which can be applied to a Change."""
     name = models.CharField(_('name'), max_length=64)
-    slug = models.SlugField(_('slug'), unique=True, max_length=64, 
-            null=True, blank=True)
+    slug = models.SlugField(_('slug'), unique=True, max_length=64, null=True, blank=True)
     ordering = models.IntegerField(_('ordering'))
 
     _object_cache = {}
     ordering = models.IntegerField(_('ordering'))
 
     _object_cache = {}
@@ -61,38 +60,39 @@ models.signals.pre_save.connect(Tag.listener_changed, sender=Tag)
 def data_upload_to(instance, filename):
     return "%d/%d" % (instance.tree.pk, instance.pk)
 
 def data_upload_to(instance, filename):
     return "%d/%d" % (instance.tree.pk, instance.pk)
 
+
 class Change(models.Model):
     """
         Single document change related to previous change. The "parent"
 class Change(models.Model):
     """
         Single document change related to previous change. The "parent"
-        argument points to the version against which this change has been 
+        argument points to the version against which this change has been
         recorded. Initial text will have a null parent.
         recorded. Initial text will have a null parent.
-        
+
         Data file contains a gzipped text of the document.
     """
     author = models.ForeignKey(User, null=True, blank=True, verbose_name=_('author'))
         Data file contains a gzipped text of the document.
     """
     author = models.ForeignKey(User, null=True, blank=True, verbose_name=_('author'))
-    author_name = models.CharField(_('author name'), max_length=128,
-                        null=True, blank=True,
-                        help_text=_("Used if author is not set.")
-                        )
-    author_email = models.CharField(_('author email'), max_length=128,
-                        null=True, blank=True,
-                        help_text=_("Used if author is not set.")
-                        )
+    author_name = models.CharField(
+        _('author name'), max_length=128,
+        null=True, blank=True,
+        help_text=_("Used if author is not set."))
+    author_email = models.CharField(
+        _('author email'), max_length=128,
+        null=True, blank=True,
+        help_text=_("Used if author is not set."))
     revision = models.IntegerField(_('revision'), db_index=True)
 
     revision = models.IntegerField(_('revision'), db_index=True)
 
-    parent = models.ForeignKey('self',
-                        null=True, blank=True, default=None,
-                        verbose_name=_('parent'),
-                        related_name="children")
+    parent = models.ForeignKey(
+        'self',
+        null=True, blank=True, default=None,
+        verbose_name=_('parent'), related_name="children")
 
 
-    merge_parent = models.ForeignKey('self',
-                        null=True, blank=True, default=None,
-                        verbose_name=_('merge parent'),
-                        related_name="merge_children")
+    merge_parent = models.ForeignKey(
+        'self',
+        null=True, blank=True, default=None,
+        verbose_name=_('merge parent'),
+        related_name="merge_children")
 
     description = models.TextField(_('description'), blank=True, default='')
 
     description = models.TextField(_('description'), blank=True, default='')
-    created_at = models.DateTimeField(editable=False, db_index=True, 
-                        default=datetime.now)
+    created_at = models.DateTimeField(editable=False, db_index=True, default=datetime.now)
     publishable = models.BooleanField(_('publishable'), default=False)
 
     class Meta:
     publishable = models.BooleanField(_('publishable'), default=False)
 
     class Meta:
@@ -109,7 +109,7 @@ class Change(models.Model):
         if self.author:
             return "%s %s <%s>" % (
                 self.author.first_name,
         if self.author:
             return "%s %s <%s>" % (
                 self.author.first_name,
-                self.author.last_name, 
+                self.author.last_name,
                 self.author.email)
         else:
             return "%s <%s>" % (
                 self.author.email)
         else:
             return "%s <%s>" % (
@@ -117,7 +117,6 @@ class Change(models.Model):
                 self.author_email
                 )
 
                 self.author_email
                 )
 
-
     def save(self, *args, **kwargs):
         """
             take the next available revision number if none yet
     def save(self, *args, **kwargs):
         """
             take the next available revision number if none yet
@@ -136,9 +135,7 @@ class Change(models.Model):
         f.close()
         return unicode(text, 'utf-8')
 
         f.close()
         return unicode(text, 'utf-8')
 
-    def merge_with(self, other, author=None, 
-            author_name=None, author_email=None, 
-            description=u"Automatic merge."):
+    def merge_with(self, other, author=None, author_name=None, author_email=None, description=u"Automatic merge."):
         """Performs an automatic merge after straying commits."""
         assert self.tree_id == other.tree_id  # same tree
         if other.parent_id == self.pk:
         """Performs an automatic merge after straying commits."""
         assert self.tree_id == other.tree_id  # same tree
         if other.parent_id == self.pk:
@@ -205,26 +202,29 @@ def create_change_model(model):
 
 
 class DocumentMeta(ModelBase):
 
 
 class DocumentMeta(ModelBase):
-    "Metaclass for Document models."
-    def __new__(cls, name, bases, attrs):
+    """Metaclass for Document models."""
+    def __new__(mcs, name, bases, attrs):
 
 
-        model = super(DocumentMeta, cls).__new__(cls, name, bases, attrs)
+        model = super(DocumentMeta, mcs).__new__(mcs, name, bases, attrs)
         if not model._meta.abstract:
             # create a real Tag object and `stage' fk
             model.tag_model = create_tag_model(model)
         if not model._meta.abstract:
             # create a real Tag object and `stage' fk
             model.tag_model = create_tag_model(model)
-            models.ForeignKey(model.tag_model, verbose_name=_('stage'),
+            models.ForeignKey(
+                model.tag_model, verbose_name=_('stage'),
                 null=True, blank=True).contribute_to_class(model, 'stage')
 
             # create real Change model and `head' fk
             model.change_model = create_change_model(model)
 
                 null=True, blank=True).contribute_to_class(model, 'stage')
 
             # create real Change model and `head' fk
             model.change_model = create_change_model(model)
 
-            models.ForeignKey(model.change_model,
-                    null=True, blank=True, default=None,
-                    verbose_name=_('head'), 
-                    help_text=_("This document's current head."),
-                    editable=False).contribute_to_class(model, 'head')
+            models.ForeignKey(
+                model.change_model,
+                null=True, blank=True, default=None,
+                verbose_name=_('head'),
+                help_text=_("This document's current head."),
+                editable=False).contribute_to_class(model, 'head')
 
 
-            models.ForeignKey(User, null=True, blank=True, editable=False,
+            models.ForeignKey(
+                User, null=True, blank=True, editable=False,
                 verbose_name=_('creator'), related_name="created_%s" % name.lower()
                 ).contribute_to_class(model, 'creator')
 
                 verbose_name=_('creator'), related_name="created_%s" % name.lower()
                 ).contribute_to_class(model, 'creator')
 
@@ -239,7 +239,8 @@ class Document(models.Model):
     # default repository path
     REPO_PATH = os.path.join(settings.MEDIA_ROOT, 'dvcs')
 
     # default repository path
     REPO_PATH = os.path.join(settings.MEDIA_ROOT, 'dvcs')
 
-    user = models.ForeignKey(User, null=True, blank=True,
+    user = models.ForeignKey(
+        User, null=True, blank=True,
         verbose_name=_('user'), help_text=_('Work assignment.'))
 
     class Meta:
         verbose_name=_('user'), help_text=_('Work assignment.'))
 
     class Meta:
@@ -257,8 +258,7 @@ class Document(models.Model):
             change = self.change_set.get(pk=change)
         return change.materialize()
 
             change = self.change_set.get(pk=change)
         return change.materialize()
 
-    def commit(self, text, author=None, author_name=None, author_email=None,
-            publishable=False, **kwargs):
+    def commit(self, text, author=None, author_name=None, author_email=None, publishable=False, **kwargs):
         """Commits a new revision.
 
         This will automatically merge the commit into the main branch,
         """Commits a new revision.
 
         This will automatically merge the commit into the main branch,
@@ -286,12 +286,13 @@ class Document(models.Model):
             # set stage to next tag after the commited one
             self.stage = max(tags, key=lambda t: t.ordering).get_next()
 
             # set stage to next tag after the commited one
             self.stage = max(tags, key=lambda t: t.ordering).get_next()
 
-        change = self.change_set.create(author=author,
-                    author_name=author_name,
-                    author_email=author_email,
-                    description=kwargs.get('description', ''),
-                    publishable=publishable,
-                    parent=parent)
+        change = self.change_set.create(
+            author=author,
+            author_name=author_name,
+            author_email=author_email,
+            description=kwargs.get('description', ''),
+            publishable=publishable,
+            parent=parent)
 
         change.tags = tags
         change.data.save('', ContentFile(text.encode('utf-8')))
 
         change.tags = tags
         change.data.save('', ContentFile(text.encode('utf-8')))
@@ -299,9 +300,10 @@ class Document(models.Model):
 
         if self.head:
             # merge new change as new head
 
         if self.head:
             # merge new change as new head
-            self.head = self.head.merge_with(change, author=author,
-                    author_name=author_name,
-                    author_email=author_email)
+            self.head = self.head.merge_with(
+                change, author=author,
+                author_name=author_name,
+                author_email=author_email)
         else:
             self.head = change
         self.save()
         else:
             self.head = change
         self.save()
index 5da075b..8aedb8c 100755 (executable)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from django.dispatch import Signal
 
 post_commit = Signal()
 from django.dispatch import Signal
 
 post_commit = Signal()
index 6bb5b59..1572439 100755 (executable)
@@ -1,6 +1,7 @@
+# -*- coding: utf-8 -*-
 from zlib import compress, decompress
 
 from zlib import compress, decompress
 
-from django.core.files.base import ContentFile, File
+from django.core.files.base import ContentFile
 from django.core.files.storage import FileSystemStorage
 
 
 from django.core.files.storage import FileSystemStorage
 
 
index 868f00a..64c074d 100755 (executable)
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
 from nose.tools import *
 from django.test import TestCase
 from dvcs.models import Document
 from nose.tools import *
 from django.test import TestCase
 from dvcs.models import Document
@@ -11,30 +13,30 @@ class ADocument(Document):
 class DocumentModelTests(TestCase):
 
     def assertTextEqual(self, given, expected):
 class DocumentModelTests(TestCase):
 
     def assertTextEqual(self, given, expected):
-        return self.assertEqual(given, expected,
-            "Expected '''%s'''\n differs from text: '''%s'''" % (expected, given)
-        )
+        return self.assertEqual(
+            given, expected,
+            "Expected '''%s'''\n differs from text: '''%s'''" % (expected, given))
 
     def test_empty_file(self):
         doc = ADocument.objects.create()
 
     def test_empty_file(self):
         doc = ADocument.objects.create()
-        self.assertTextEqual(doc.materialize(), u"")
+        self.assertTextEqual(doc.materialize(), "")
 
     def test_single_commit(self):
         doc = ADocument.objects.create()
 
     def test_single_commit(self):
         doc = ADocument.objects.create()
-        doc.commit(text=u"Ala ma kota", description="Commit #1")
-        self.assertTextEqual(doc.materialize(), u"Ala ma kota")
+        doc.commit(text="Ala ma kota", description="Commit #1")
+        self.assertTextEqual(doc.materialize(), "Ala ma kota")
 
     def test_chained_commits(self):
         doc = ADocument.objects.create()
 
     def test_chained_commits(self):
         doc = ADocument.objects.create()
-        text1 = u"""
+        text1 = """
             Line #1
             Line #2 is cool
         """
             Line #1
             Line #2 is cool
         """
-        text2 = u"""
+        text2 = """
             Line #1
             Line #2 is hot
         """
             Line #1
             Line #2 is hot
         """
-        text3 = u"""
+        text3 = """
             Line #1
             ... is hot
             Line #3 ate Line #2
             Line #1
             ... is hot
             Line #3 ate Line #2
@@ -51,20 +53,20 @@ class DocumentModelTests(TestCase):
 
     def test_parallel_commit_noconflict(self):
         doc = ADocument.objects.create()
 
     def test_parallel_commit_noconflict(self):
         doc = ADocument.objects.create()
-        text1 = u"""
+        text1 = """
             Line #1
             Line #2
         """
             Line #1
             Line #2
         """
-        text2 = u"""
+        text2 = """
             Line #1 is hot
             Line #2
         """
             Line #1 is hot
             Line #2
         """
-        text3 = u"""
+        text3 = """
             Line #1
             Line #2
             Line #3
         """
             Line #1
             Line #2
             Line #3
         """
-        text_merged = u"""
+        text_merged = """
             Line #1 is hot
             Line #2
             Line #3
             Line #1 is hot
             Line #2
             Line #3
@@ -74,28 +76,29 @@ class DocumentModelTests(TestCase):
         c1 = doc.commit(description="Commit #2", text=text2)
         commits = doc.change_set.count()
         c2 = doc.commit(description="Commit #3", text=text3, parent=base)
         c1 = doc.commit(description="Commit #2", text=text2)
         commits = doc.change_set.count()
         c2 = doc.commit(description="Commit #3", text=text3, parent=base)
-        self.assertEqual(doc.change_set.count(), commits + 2,
-            u"Parallel commits should create an additional merge commit")
+        self.assertEqual(
+            doc.change_set.count(), commits + 2,
+            "Parallel commits should create an additional merge commit")
         self.assertTextEqual(doc.materialize(), text_merged)
 
     def test_parallel_commit_conflict(self):
         doc = ADocument.objects.create()
         self.assertTextEqual(doc.materialize(), text_merged)
 
     def test_parallel_commit_conflict(self):
         doc = ADocument.objects.create()
-        text1 = u"""
+        text1 = """
             Line #1
             Line #2
             Line #3
         """
             Line #1
             Line #2
             Line #3
         """
-        text2 = u"""
+        text2 = """
             Line #1
             Line #2 is hot
             Line #3
         """
             Line #1
             Line #2 is hot
             Line #3
         """
-        text3 = u"""
+        text3 = """
             Line #1
             Line #2 is cool
             Line #3
         """
             Line #1
             Line #2 is cool
             Line #3
         """
-        text_merged = u"""
+        text_merged = """
             Line #1
 <<<<<<<
             Line #2 is hot
             Line #1
 <<<<<<<
             Line #2 is hot
@@ -108,41 +111,41 @@ class DocumentModelTests(TestCase):
         c1 = doc.commit(description="Commit #2", text=text2)
         commits = doc.change_set.count()
         c2 = doc.commit(description="Commit #3", text=text3, parent=base)
         c1 = doc.commit(description="Commit #2", text=text2)
         commits = doc.change_set.count()
         c2 = doc.commit(description="Commit #3", text=text3, parent=base)
-        self.assertEqual(doc.change_set.count(), commits + 2,
-            u"Parallel commits should create an additional merge commit")
+        self.assertEqual(
+            doc.change_set.count(), commits + 2,
+            "Parallel commits should create an additional merge commit")
         self.assertTextEqual(doc.materialize(), text_merged)
 
         self.assertTextEqual(doc.materialize(), text_merged)
 
-
     def test_multiple_parallel_commits(self):
     def test_multiple_parallel_commits(self):
-        text_a1 = u"""
+        text_a1 = """
             Line #1
 
             Line #2
 
             Line #3
             """
             Line #1
 
             Line #2
 
             Line #3
             """
-        text_a2 = u"""
+        text_a2 = """
             Line #1 *
 
             Line #2
 
             Line #3
             """
             Line #1 *
 
             Line #2
 
             Line #3
             """
-        text_b1 = u"""
+        text_b1 = """
             Line #1
 
             Line #2 **
 
             Line #3
             """
             Line #1
 
             Line #2 **
 
             Line #3
             """
-        text_c1 = u"""
+        text_c1 = """
             Line #1
 
             Line #2
 
             Line #3 ***
             """
             Line #1
 
             Line #2
 
             Line #3 ***
             """
-        text_merged = u"""
+        text_merged = """
             Line #1 *
 
             Line #2 **
             Line #1 *
 
             Line #2 **
@@ -150,7 +153,6 @@ class DocumentModelTests(TestCase):
             Line #3 ***
             """
 
             Line #3 ***
             """
 
-
         doc = ADocument.objects.create()
         c1 = doc.commit(description="Commit A1", text=text_a1)
         c2 = doc.commit(description="Commit A2", text=text_a2, parent=c1)
         doc = ADocument.objects.create()
         c1 = doc.commit(description="Commit A1", text=text_a1)
         c2 = doc.commit(description="Commit A2", text=text_a2, parent=c1)
@@ -158,7 +160,6 @@ class DocumentModelTests(TestCase):
         c4 = doc.commit(description="Commit C1", text=text_c1, parent=c1)
         self.assertTextEqual(doc.materialize(), text_merged)
 
         c4 = doc.commit(description="Commit C1", text=text_c1, parent=c1)
         self.assertTextEqual(doc.materialize(), text_merged)
 
-
     def test_prepend_history(self):
         doc1 = ADocument.objects.create()
         doc2 = ADocument.objects.create()
     def test_prepend_history(self):
         doc1 = ADocument.objects.create()
         doc2 = ADocument.objects.create()
@@ -175,4 +176,3 @@ class DocumentModelTests(TestCase):
         with self.assertRaises(AssertionError):
             doc.prepend_history(doc)
         self.assertTextEqual(doc.materialize(), 'Commit 1')
         with self.assertRaises(AssertionError):
             doc.prepend_history(doc)
         self.assertTextEqual(doc.materialize(), 'Commit 1')
-
index 376117a..b7233fb 100755 (executable)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from django.utils.html import escape
 from django.utils.safestring import mark_safe
 from django.utils.translation import ugettext as _
 from django.utils.html import escape
 from django.utils.safestring import mark_safe
 from django.utils.translation import ugettext as _
@@ -17,8 +18,8 @@ def email_link(email):
     at = escape(_('at'))
     dot = escape(_('dot'))
     mangled = "%s %s %s" % (name, at, (' %s ' % dot).join(domain.split('.')))
     at = escape(_('at'))
     dot = escape(_('dot'))
     mangled = "%s %s %s" % (name, at, (' %s ' % dot).join(domain.split('.')))
-    return mark_safe("<a class='mangled' data-addr1='%(name)s' "
-        "data-addr2='%(domain)s'>%(mangled)s</a>" % {
+    return mark_safe(
+        "<a class='mangled' data-addr1='%(name)s' data-addr2='%(domain)s'>%(mangled)s</a>" % {
             'name': name.encode('rot13'),
             'domain': domain.encode('rot13'),
             'mangled': mangled,
             'name': name.encode('rot13'),
             'domain': domain.encode('rot13'),
             'mangled': mangled,
index f5e1069..368c0ab 100644 (file)
@@ -1,4 +1,6 @@
+# -*- coding: utf-8 -*-
 from django import forms
 
 from django import forms
 
+
 class UploadForm(forms.Form):
     files = forms.FileField()
 class UploadForm(forms.Form):
     files = forms.FileField()
index aefce2e..a924a60 100644 (file)
@@ -1,7 +1,9 @@
+# -*- coding: utf-8 -*-
 from django import template
 
 register = template.Library()
 
 from django import template
 
 register = template.Library()
 
+
 @register.simple_tag
 def upload_js():
     return """
 @register.simple_tag
 def upload_js():
     return """
@@ -13,10 +15,15 @@ def upload_js():
         <td class="name"><span>{%=file.name%}</span></td>
         <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
         {% if (file.error) { %}
         <td class="name"><span>{%=file.name%}</span></td>
         <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
         {% if (file.error) { %}
-            <td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
+            <td class="error" colspan="2">
+                <span class="label label-important">{%=locale.fileupload.error%}</span>
+                {%=locale.fileupload.errors[file.error] || file.error%}
+            </td>
         {% } else if (o.files.valid && !i) { %}
             <td>
         {% } else if (o.files.valid && !i) { %}
             <td>
-                <div class="progress progress-success progress-striped active"><div class="bar" style="width:0%;"></div></div>
+                <div class="progress progress-success progress-striped active">
+                    <div class="bar" style="width:0%;"></div>
+                </div>
             </td>
             <td class="start">{% if (!o.options.autoUpload) { %}
                 <button class="btn btn-success">
             </td>
             <td class="start">{% if (!o.options.autoUpload) { %}
                 <button class="btn btn-success">
@@ -44,13 +51,19 @@ def upload_js():
             <td></td>
             <td class="name"><span>{%=file.name%}</span></td>
             <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
             <td></td>
             <td class="name"><span>{%=file.name%}</span></td>
             <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
-            <td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
+            <td class="error" colspan="2">
+                <span class="label label-important">{%=locale.fileupload.error%}</span>
+                {%=locale.fileupload.errors[file.error] || file.error%}
+            </td>
         {% } else { %}
             <td class="preview">{% if (file.thumbnail_url) { %}
         {% } else { %}
             <td class="preview">{% if (file.thumbnail_url) { %}
-                <a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
+                <a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}">
+                    <img src="{%=file.thumbnail_url%}">
+                </a>
             {% } %}</td>
             <td class="name">
             {% } %}</td>
             <td class="name">
-                <a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
+                <a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}"
+                   download="{%=file.name%}">{%=file.name%}</a>
             </td>
             <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
             <td colspan="2"></td>
             </td>
             <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
             <td colspan="2"></td>
index cd4f46c..0f239a2 100644 (file)
@@ -1,7 +1,8 @@
+# -*- coding: utf-8 -*-
 from django.conf.urls import patterns, url
 from fileupload.views import UploadView
 
 from django.conf.urls import patterns, url
 from fileupload.views import UploadView
 
-urlpatterns = patterns('',
+urlpatterns = patterns(
+    '',
     url(r'^(?P<path>(?:.*/)?)$', UploadView.as_view(), name='fileupload'),
 )
     url(r'^(?P<path>(?:.*/)?)$', UploadView.as_view(), name='fileupload'),
 )
-
index 5ee12b1..08aa323 100644 (file)
@@ -38,9 +38,9 @@ class JSONResponse(HttpResponse):
 class UploadViewMixin(object):
     def get_safe_path(self, filename=""):
         """Finds absolute filesystem path of the browsed dir of file.
 class UploadViewMixin(object):
     def get_safe_path(self, filename=""):
         """Finds absolute filesystem path of the browsed dir of file.
-        
+
         Makes sure it's inside MEDIA_ROOT.
         Makes sure it's inside MEDIA_ROOT.
-        
+
         """
         path = os.path.abspath(os.path.join(settings.MEDIA_ROOT, self.get_directory(), filename))
         # WTF how would that be possible?
         """
         path = os.path.abspath(os.path.join(settings.MEDIA_ROOT, self.get_directory(), filename))
         # WTF how would that be possible?
@@ -137,7 +137,7 @@ class UploadView(UploadViewMixin, FormView):
                 for chunk in f.chunks():
                     destination.write(chunk)
             data.append({
                 for chunk in f.chunks():
                     destination.write(chunk)
             data.append({
-                'name': f.name, 
+                'name': f.name,
                 'url': self.get_url(f.name),
                 'thumbnail_url': thumbnail(self.get_directory() + f.name),
                 'delete_url': "%s?file=%s" % (
                 'url': self.get_url(f.name),
                 'thumbnail_url': thumbnail(self.get_directory() + f.name),
                 'delete_url': "%s?file=%s" % (
index c53f0e7..9012566 100644 (file)
@@ -1 +1 @@
-  # pragma: no cover
+# pragma: no cover
index 283ab78..03437b6 100644 (file)
@@ -1,7 +1,7 @@
+# -*- coding: utf-8 -*-
 from django.contrib import admin
 from django.contrib import admin
-from django.utils.translation import ugettext_lazy as _
 from django import forms
 from django import forms
-from django.utils import simplejson as json
+import json
 
 from toolbar import models
 
 
 from toolbar import models
 
index ea797fc..79169d2 100644 (file)
@@ -7,7 +7,7 @@
 
 from django.core.management.base import NoArgsCommand
 from toolbar.models import Button, ButtonGroup
 
 from django.core.management.base import NoArgsCommand
 from toolbar.models import Button, ButtonGroup
-from django.utils import simplejson as json
+import json
 import re
 
 
 import re
 
 
@@ -27,7 +27,7 @@ class Command(NoArgsCommand):
                 if params[-1] == u')':
                     params = params[:-1]
                 try:
                 if params[-1] == u')':
                     params = params[:-1]
                 try:
-                    v = son.loads(re.sub(u'([\\w-]+)\\s*:', u'"\\1": ', params).encode('utf-8'))
+                    v = json.loads(re.sub(u'([\\w-]+)\\s*:', u'"\\1": ', params).encode('utf-8'))
                 except ValueError, e:
                     print "Unable to fix '%s' " % b.params
                     print "Try to fix this button manually and rerun the script."
                 except ValueError, e:
                     print "Unable to fix '%s' " % b.params
                     print "Try to fix this button manually and rerun the script."
index c53f0e7..9012566 100644 (file)
@@ -1 +1 @@
-  # pragma: no cover
+# pragma: no cover
index ae309a9..577fece 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from django.contrib import admin
 
 from wiki import models
 from django.contrib import admin
 
 from wiki import models
index c7da3af..010ad72 100644 (file)
@@ -15,8 +15,7 @@ class DocumentPubmarkForm(forms.Form):
     """
 
     id = forms.CharField(widget=forms.HiddenInput)
     """
 
     id = forms.CharField(widget=forms.HiddenInput)
-    publishable = forms.BooleanField(required=False, initial=True,
-            label=_('Publishable'))
+    publishable = forms.BooleanField(required=False, initial=True, label=_('Publishable'))
     revision = forms.IntegerField(widget=forms.HiddenInput)
 
 
     revision = forms.IntegerField(widget=forms.HiddenInput)
 
 
@@ -59,10 +58,10 @@ class DocumentTextSaveForm(forms.Form):
         help_text=_(u"If you completed a life cycle stage, select it."),
     )
 
         help_text=_(u"If you completed a life cycle stage, select it."),
     )
 
-    publishable = forms.BooleanField(required=False, initial=False,
+    publishable = forms.BooleanField(
+        required=False, initial=False,
         label=_('Publishable'),
         label=_('Publishable'),
-        help_text=_(u"Mark this revision as publishable.")
-    )
+        help_text=_(u"Mark this revision as publishable."))
 
     for_cybernauts = forms.BooleanField(
         required=False, initial=False,
 
     for_cybernauts = forms.BooleanField(
         required=False, initial=False,
index c539908..a66dc3d 100644 (file)
@@ -23,4 +23,3 @@ class Theme(models.Model):
 
     def __repr__(self):
         return "Theme(name=%r)" % self.name
 
     def __repr__(self):
         return "Theme(name=%r)" % self.name
-
index b228fad..19ad602 100644 (file)
@@ -19,11 +19,11 @@ def diff_replace(match):
 
 
 def filter_line(line):
 
 
 def filter_line(line):
-    return  DIFF_RE.sub(diff_replace, html_escape(line)).replace('\x01', '</span>')
+    return DIFF_RE.sub(diff_replace, html_escape(line)).replace('\x01', '</span>')
 
 
 def format_changeset(a, b, change):
 
 
 def format_changeset(a, b, change):
-    return (a[0], filter_line(a[1]), b[0], filter_line(b[1]), change)
+    return a[0], filter_line(a[1]), b[0], filter_line(b[1]), change
 
 
 def html_diff_table(la, lb, context=None):
 
 
 def html_diff_table(la, lb, context=None):
index 50f49d8..0f6d9bf 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from django.conf import settings
 
 GALLERY_URL = settings.MEDIA_URL + 'images/'
 from django.conf import settings
 
 GALLERY_URL = settings.MEDIA_URL + 'images/'
index 0c73aed..b4bd999 100644 (file)
@@ -2,7 +2,8 @@
 from django.conf.urls import patterns, url
 
 
 from django.conf.urls import patterns, url
 
 
-urlpatterns = patterns('wiki.views',
+urlpatterns = patterns(
+    'wiki.views',
     url(r'^edit/(?P<slug>[^/]+)/(?:(?P<chunk>[^/]+)/)?$',
         'editor', name="wiki_editor"),
 
     url(r'^edit/(?P<slug>[^/]+)/(?:(?P<chunk>[^/]+)/)?$',
         'editor', name="wiki_editor"),
 
index 20dca02..7101fc9 100644 (file)
@@ -1,7 +1,9 @@
+# -*- coding: utf-8 -*-
 from datetime import datetime
 import os
 import logging
 import urllib
 from datetime import datetime
 import os
 import logging
 import urllib
+import json
 
 from django.conf import settings
 from django.core.urlresolvers import reverse
 
 from django.conf import settings
 from django.core.urlresolvers import reverse
@@ -14,14 +16,11 @@ from django.utils.formats import localize
 from django.utils.translation import ugettext as _
 from django.views.decorators.http import require_POST, require_GET
 from django.shortcuts import get_object_or_404, render
 from django.utils.translation import ugettext as _
 from django.views.decorators.http import require_POST, require_GET
 from django.shortcuts import get_object_or_404, render
-from django.utils import simplejson
-from django.contrib.auth.decorators import login_required
 
 from catalogue.models import Book, Chunk, Template
 import nice_diff
 from wiki import forms
 
 from catalogue.models import Book, Chunk, Template
 import nice_diff
 from wiki import forms
-from wiki.helpers import (JSONResponse, JSONFormInvalid, JSONServerError,
-                ajax_require_permission)
+from wiki.helpers import JSONResponse, JSONFormInvalid, ajax_require_permission
 from wiki.models import Theme
 
 #
 from wiki.models import Theme
 
 #
@@ -44,9 +43,10 @@ def get_history(chunk):
                 "date": localize(change.created_at),
                 "publishable": _("Publishable") + "\n" if change.publishable else "",
                 "tag": ',\n'.join(unicode(tag) for tag in change.tags.all()),
                 "date": localize(change.created_at),
                 "publishable": _("Publishable") + "\n" if change.publishable else "",
                 "tag": ',\n'.join(unicode(tag) for tag in change.tags.all()),
-                "published": _("Published") + ": " + \
-                    localize(change.publish_log.order_by('-book_record__timestamp')[0].book_record.timestamp) \
-                    if change.publish_log.exists() else "",
+                "published": (
+                    _("Published") + ": " +
+                    localize(change.publish_log.order_by('-book_record__timestamp')[0].book_record.timestamp)
+                    if change.publish_log.exists() else ""),
             })
     return changes
 
             })
     return changes
 
@@ -92,7 +92,7 @@ def editor(request, slug, chunk=None, template_name='wiki/bootstrap.html'):
     else:
         text = chunk.materialize()
     return render(request, template_name, {
     else:
         text = chunk.materialize()
     return render(request, template_name, {
-        'serialized_document_data': simplejson.dumps({
+        'serialized_document_data': json.dumps({
             'document': text,
             'document_id': chunk.id,
             'title': chunk.book.title,
             'document': text,
             'document_id': chunk.id,
             'title': chunk.book.title,
@@ -101,7 +101,7 @@ def editor(request, slug, chunk=None, template_name='wiki/bootstrap.html'):
             'stage': chunk.stage.name if chunk.stage else None,
             'assignment': chunk.user.username if chunk.user else None
         }),
             'stage': chunk.stage.name if chunk.stage else None,
             'assignment': chunk.user.username if chunk.user else None
         }),
-        'serialized_templates': simplejson.dumps([
+        'serialized_templates': json.dumps([
             {'id': t.id, 'name': t.name, 'content': t.content} for t in Template.objects.filter(is_partial=True)
         ]),
         'forms': {
             {'id': t.id, 'name': t.name, 'content': t.content} for t in Template.objects.filter(is_partial=True)
         ]),
         'forms': {
@@ -166,8 +166,7 @@ def text(request, chunk_id):
                 parent = None
             stage = form.cleaned_data['stage_completed']
             tags = [stage] if stage else []
                 parent = None
             stage = form.cleaned_data['stage_completed']
             tags = [stage] if stage else []
-            publishable = (form.cleaned_data['publishable'] and
-                    request.user.has_perm('catalogue.can_pubmark'))
+            publishable = form.cleaned_data['publishable'] and request.user.has_perm('catalogue.can_pubmark')
             doc.commit(author=author,
                        text=text,
                        parent=parent,
             doc.commit(author=author,
                        text=text,
                        parent=parent,
@@ -190,7 +189,7 @@ def text(request, chunk_id):
             return JSONFormInvalid(form)
     else:
         revision = request.GET.get("revision", None)
             return JSONFormInvalid(form)
     else:
         revision = request.GET.get("revision", None)
-        
+
         try:
             revision = int(revision)
         except (ValueError, TypeError):
         try:
             revision = int(revision)
         except (ValueError, TypeError):
@@ -292,8 +291,7 @@ def diff(request, chunk_id):
         docA = ""
     docB = doc.at_revision(revB).materialize()
 
         docA = ""
     docB = doc.at_revision(revB).materialize()
 
-    return http.HttpResponse(nice_diff.html_diff_table(docA.splitlines(),
-                                         docB.splitlines(), context=3))
+    return http.HttpResponse(nice_diff.html_diff_table(docA.splitlines(), docB.splitlines(), context=3))
 
 
 @never_cache
 
 
 @never_cache
index 6a1fd55..0478f2e 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 import os
 
 from fabric.api import env, require
 import os
 
 from fabric.api import env, require
@@ -16,7 +17,7 @@ class Environment(Task):
     def run(self, *args, **kwargs):
         env.project_name = 'redakcja'
         env.hosts = [self.host]
     def run(self, *args, **kwargs):
         env.project_name = 'redakcja'
         env.hosts = [self.host]
-        for k,v in self.env_vars.items():
+        for k, v in self.env_vars.items():
             env[k] = v
 
         require('app_path')
             env[k] = v
 
         require('app_path')
index 581b45c..0ba081f 100644 (file)
@@ -1,14 +1,15 @@
+# -*- coding: utf-8 -*-
 from fnpdjango.deploy import DebianGunicorn
 from base import Environment
 
 
 env1 = Environment(
 from fnpdjango.deploy import DebianGunicorn
 from base import Environment
 
 
 env1 = Environment(
-    host = '',
-    user = '',
-    app_path = '',
-    services = [
+    host='',
+    user='',
+    app_path='',
+    services=[
         DebianGunicorn('')
     ],
         DebianGunicorn('')
     ],
-    node_bin_path = '/usr/bin',
-    npm_bin = 'npm',
-)
\ No newline at end of file
+    node_bin_path='/usr/bin',
+    npm_bin='npm',
+)
index d0475d3..3b0b984 160000 (submodule)
@@ -1 +1 @@
-Subproject commit d0475d381f12b2c89c7c514c4f7f7d2ebc421d0a
+Subproject commit 3b0b98465bc1862306b05bb8305a1abbf40ca310
index fe5c9e3..8909e30 100644 (file)
@@ -8,6 +8,7 @@ from django.template.defaultfilters import slugify
 char_map = {u'À': 'A', u'Á': 'A', u'Â': 'A', u'Ã': 'A', u'Ä': 'Ae', u'Å': 'A', u'Æ': 'A', u'Ā': 'A', u'Ą': 'A', u'Ă': 'A', u'Ç': 'C', u'Ć': 'C', u'Č': 'C', u'Ĉ': 'C', u'Ċ': 'C', u'Ď': 'D', u'Đ': 'D', u'È': 'E', u'É': 'E', u'Ê': 'E', u'Ë': 'E', u'Ē': 'E', u'Ę': 'E', u'Ě': 'E', u'Ĕ': 'E', u'Ė': 'E', u'Ĝ': 'G', u'Ğ': 'G', u'Ġ': 'G', u'Ģ': 'G', u'Ĥ': 'H', u'Ħ': 'H', u'Ì': 'I', u'Í': 'I', u'Î': 'I', u'Ï': 'I', u'Ī': 'I', u'Ĩ': 'I', u'Ĭ': 'I', u'Į': 'I', u'İ': 'I', u'IJ': 'IJ', u'Ĵ': 'J', u'Ķ': 'K', u'Ľ': 'K', u'Ĺ': 'K', u'Ļ': 'K', u'Ŀ': 'K', u'Ł': 'L', u'Ñ': 'N', u'Ń': 'N', u'Ň': 'N', u'Ņ': 'N', u'Ŋ': 'N', u'Ò': 'O', u'Ó': 'O', u'Ô': 'O', u'Õ': 'O', u'Ö': 'Oe', u'Ø': 'O', u'Ō': 'O', u'Ő': 'O', u'Ŏ': 'O', u'Œ': 'OE', u'Ŕ': 'R', u'Ř': 'R', u'Ŗ': 'R', u'Ś': 'S', u'Ş': 'S', u'Ŝ': 'S', u'Ș': 'S', u'Š': 'S', u'Ť': 'T', u'Ţ': 'T', u'Ŧ': 'T', u'Ț': 'T', u'Ù': 'U', u'Ú': 'U', u'Û': 'U', u'Ü': 'Ue', u'Ū': 'U', u'Ů': 'U', u'Ű': 'U', u'Ŭ': 'U', u'Ũ': 'U', u'Ų': 'U', u'Ŵ': 'W', u'Ŷ': 'Y', u'Ÿ': 'Y', u'Ý': 'Y', u'Ź': 'Z', u'Ż': 'Z', u'Ž': 'Z', u'à': 'a', u'á': 'a', u'â': 'a', u'ã': 'a', u'ä': 'ae', u'ā': 'a', u'ą': 'a', u'ă': 'a', u'å': 'a', u'æ': 'ae', u'ç': 'c', u'ć': 'c', u'č': 'c', u'ĉ': 'c', u'ċ': 'c', u'ď': 'd', u'đ': 'd', u'è': 'e', u'é': 'e', u'ê': 'e', u'ë': 'e', u'ē': 'e', u'ę': 'e', u'ě': 'e', u'ĕ': 'e', u'ė': 'e', u'ƒ': 'f', u'ĝ': 'g', u'ğ': 'g', u'ġ': 'g', u'ģ': 'g', u'ĥ': 'h', u'ħ': 'h', u'ì': 'i', u'í': 'i', u'î': 'i', u'ï': 'i', u'ī': 'i', u'ĩ': 'i', u'ĭ': 'i', u'į': 'i', u'ı': 'i', u'ij': 'ij', u'ĵ': 'j', u'ķ': 'k', u'ĸ': 'k', u'ł': 'l', u'ľ': 'l', u'ĺ': 'l', u'ļ': 'l', u'ŀ': 'l', u'ñ': 'n', u'ń': 'n', u'ň': 'n', u'ņ': 'n', u'ʼn': 'n', u'ŋ': 'n', u'ò': 'o', u'ó': 'o', u'ô': 'o', u'õ': 'o', u'ö': 'oe', u'ø': 'o', u'ō': 'o', u'ő': 'o', u'ŏ': 'o', u'œ': 'oe', u'ŕ': 'r', u'ř': 'r', u'ŗ': 'r', u'ś': 's', u'š': 's', u'ť': 't', u'ù': 'u', u'ú': 'u', u'û': 'u', u'ü': 'ue', u'ū': 'u', u'ů': 'u', u'ű': 'u', u'ŭ': 'u', u'ũ': 'u', u'ų': 'u', u'ŵ': 'w', u'ÿ': 'y', u'ý': 'y', u'ŷ': 'y', u'ż': 'z', u'ź': 'z', u'ž': 'z', u'ß': 'ss', u'ſ': 'ss', u'Α': 'A', u'Ά': 'A', u'Ἀ': 'A', u'Ἁ': 'A', u'Ἂ': 'A', u'Ἃ': 'A', u'Ἄ': 'A', u'Ἅ': 'A', u'Ἆ': 'A', u'Ἇ': 'A', u'ᾈ': 'A', u'ᾉ': 'A', u'ᾊ': 'A', u'ᾋ': 'A', u'ᾌ': 'A', u'ᾍ': 'A', u'ᾎ': 'A', u'ᾏ': 'A', u'Ᾰ': 'A', u'Ᾱ': 'A', u'Ὰ': 'A', u'Ά': 'A', u'ᾼ': 'A', u'Β': 'B', u'Γ': 'G', u'Δ': 'D', u'Ε': 'E', u'Έ': 'E', u'Ἐ': 'E', u'Ἑ': 'E', u'Ἒ': 'E', u'Ἓ': 'E', u'Ἔ': 'E', u'Ἕ': 'E', u'Έ': 'E', u'Ὲ': 'E', u'Ζ': 'Z', u'Η': 'I', u'Ή': 'I', u'Ἠ': 'I', u'Ἡ': 'I', u'Ἢ': 'I', u'Ἣ': 'I', u'Ἤ': 'I', u'Ἥ': 'I', u'Ἦ': 'I', u'Ἧ': 'I', u'ᾘ': 'I', u'ᾙ': 'I', u'ᾚ': 'I', u'ᾛ': 'I', u'ᾜ': 'I', u'ᾝ': 'I', u'ᾞ': 'I', u'ᾟ': 'I', u'Ὴ': 'I', u'Ή': 'I', u'ῌ': 'I', u'Θ': 'TH', u'Ι': 'I', u'Ί': 'I', u'Ϊ': 'I', u'Ἰ': 'I', u'Ἱ': 'I', u'Ἲ': 'I', u'Ἳ': 'I', u'Ἴ': 'I', u'Ἵ': 'I', u'Ἶ': 'I', u'Ἷ': 'I', u'Ῐ': 'I', u'Ῑ': 'I', u'Ὶ': 'I', u'Ί': 'I', u'Κ': 'K', u'Λ': 'L', u'Μ': 'M', u'Ν': 'N', u'Ξ': 'KS', u'Ο': 'O', u'Ό': 'O', u'Ὀ': 'O', u'Ὁ': 'O', u'Ὂ': 'O', u'Ὃ': 'O', u'Ὄ': 'O', u'Ὅ': 'O', u'Ὸ': 'O', u'Ό': 'O', u'Π': 'P', u'Ρ': 'R', u'Ῥ': 'R', u'Σ': 'S', u'Τ': 'T', u'Υ': 'Y', u'Ύ': 'Y', u'Ϋ': 'Y', u'Ὑ': 'Y', u'Ὓ': 'Y', u'Ὕ': 'Y', u'Ὗ': 'Y', u'Ῠ': 'Y', u'Ῡ': 'Y', u'Ὺ': 'Y', u'Ύ': 'Y', u'Φ': 'F', u'Χ': 'X', u'Ψ': 'PS', u'Ω': 'O', u'Ώ': 'O', u'Ὠ': 'O', u'Ὡ': 'O', u'Ὢ': 'O', u'Ὣ': 'O', u'Ὤ': 'O', u'Ὥ': 'O', u'Ὦ': 'O', u'Ὧ': 'O', u'ᾨ': 'O', u'ᾩ': 'O', u'ᾪ': 'O', u'ᾫ': 'O', u'ᾬ': 'O', u'ᾭ': 'O', u'ᾮ': 'O', u'ᾯ': 'O', u'Ὼ': 'O', u'Ώ': 'O', u'ῼ': 'O', u'α': 'a', u'ά': 'a', u'ἀ': 'a', u'ἁ': 'a', u'ἂ': 'a', u'ἃ': 'a', u'ἄ': 'a', u'ἅ': 'a', u'ἆ': 'a', u'ἇ': 'a', u'ᾀ': 'a', u'ᾁ': 'a', u'ᾂ': 'a', u'ᾃ': 'a', u'ᾄ': 'a', u'ᾅ': 'a', u'ᾆ': 'a', u'ᾇ': 'a', u'ὰ': 'a', u'ά': 'a', u'ᾰ': 'a', u'ᾱ': 'a', u'ᾲ': 'a', u'ᾳ': 'a', u'ᾴ': 'a', u'ᾶ': 'a', u'ᾷ': 'a', u'β': 'b', u'γ': 'g', u'δ': 'd', u'ε': 'e', u'έ': 'e', u'ἐ': 'e', u'ἑ': 'e', u'ἒ': 'e', u'ἓ': 'e', u'ἔ': 'e', u'ἕ': 'e', u'ὲ': 'e', u'έ': 'e', u'ζ': 'z', u'η': 'i', u'ή': 'i', u'ἠ': 'i', u'ἡ': 'i', u'ἢ': 'i', u'ἣ': 'i', u'ἤ': 'i', u'ἥ': 'i', u'ἦ': 'i', u'ἧ': 'i', u'ᾐ': 'i', u'ᾑ': 'i', u'ᾒ': 'i', u'ᾓ': 'i', u'ᾔ': 'i', u'ᾕ': 'i', u'ᾖ': 'i', u'ᾗ': 'i', u'ὴ': 'i', u'ή': 'i', u'ῂ': 'i', u'ῃ': 'i', u'ῄ': 'i', u'ῆ': 'i', u'ῇ': 'i', u'θ': 'th', u'ι': 'i', u'ί': 'i', u'ϊ': 'i', u'ΐ': 'i', u'ἰ': 'i', u'ἱ': 'i', u'ἲ': 'i', u'ἳ': 'i', u'ἴ': 'i', u'ἵ': 'i', u'ἶ': 'i', u'ἷ': 'i', u'ὶ': 'i', u'ί': 'i', u'ῐ': 'i', u'ῑ': 'i', u'ῒ': 'i', u'ΐ': 'i', u'ῖ': 'i', u'ῗ': 'i', u'κ': 'k', u'λ': 'l', u'μ': 'm', u'ν': 'n', u'ξ': 'ks', u'ο': 'o', u'ό': 'o', u'ὀ': 'o', u'ὁ': 'o', u'ὂ': 'o', u'ὃ': 'o', u'ὄ': 'o', u'ὅ': 'o', u'ὸ': 'o', u'ό': 'o', u'π': 'p', u'ρ': 'r', u'ῤ': 'r', u'ῥ': 'r', u'σ': 's', u'ς': 's', u'τ': 't', u'υ': 'y', u'ύ': 'y', u'ϋ': 'y', u'ΰ': 'y', u'ὐ': 'y', u'ὑ': 'y', u'ὒ': 'y', u'ὓ': 'y', u'ὔ': 'y', u'ὕ': 'y', u'ὖ': 'y', u'ὗ': 'y', u'ὺ': 'y', u'ύ': 'y', u'ῠ': 'y', u'ῡ': 'y', u'ῢ': 'y', u'ΰ': 'y', u'ῦ': 'y', u'ῧ': 'y', u'φ': 'f', u'χ': 'x', u'ψ': 'ps', u'ω': 'o', u'ώ': 'o', u'ὠ': 'o', u'ὡ': 'o', u'ὢ': 'o', u'ὣ': 'o', u'ὤ': 'o', u'ὥ': 'o', u'ὦ': 'o', u'ὧ': 'o', u'ᾠ': 'o', u'ᾡ': 'o', u'ᾢ': 'o', u'ᾣ': 'o', u'ᾤ': 'o', u'ᾥ': 'o', u'ᾦ': 'o', u'ᾧ': 'o', u'ὼ': 'o', u'ώ': 'o', u'ῲ': 'o', u'ῳ': 'o', u'ῴ': 'o', u'ῶ': 'o', u'ῷ': 'o', u'¨': '', u'΅': '', u'᾿': '', u'῾': '', u'῍': '', u'῝': '', u'῎': '', u'῞': '', u'῏': '', u'῟': '', u'῀': '', u'῁': '', u'΄': '', u'΅': '', u'`': '', u'῭': '', u'ͺ': '', u'᾽': '', u'А': 'A', u'Б': 'B', u'В': 'V', u'Г': 'G', u'Д': 'D', u'Е': 'E', u'Ё': 'E', u'Ж': 'ZH', u'З': 'Z', u'И': 'I', u'Й': 'I', u'К': 'K', u'Л': 'L', u'М': 'M', u'Н': 'N', u'О': 'O', u'П': 'P', u'Р': 'R', u'С': 'S', u'Т': 'T', u'У': 'U', u'Ф': 'F', u'Х': 'KH', u'Ц': 'TS', u'Ч': 'CH', u'Ш': 'SH', u'Щ': 'SHCH', u'Ы': 'Y', u'Э': 'E', u'Ю': 'YU', u'Я': 'YA', u'а': 'A', u'б': 'B', u'в': 'V', u'г': 'G', u'д': 'D', u'е': 'E', u'ё': 'E', u'ж': 'ZH', u'з': 'Z', u'и': 'I', u'й': 'I', u'к': 'K', u'л': 'L', u'м': 'M', u'н': 'N', u'о': 'O', u'п': 'P', u'р': 'R', u'с': 'S', u'т': 'T', u'у': 'U', u'ф': 'F', u'х': 'KH', u'ц': 'TS', u'ч': 'CH', u'ш': 'SH', u'щ': 'SHCH', u'ы': 'Y', u'э': 'E', u'ю': 'YU', u'я': 'YA', u'Ъ': '', u'ъ': '', u'Ь': '', u'ь': '', u'ð': 'd', u'Ð': 'D', u'þ': 'th', u'Þ': 'TH',
             u'ა': 'a', u'ბ': 'b', u'გ': 'g', u'დ': 'd', u'ე': 'e', u'ვ': 'v', u'ზ': 'z', u'თ': 't', u'ი': 'i', u'კ': 'k', u'ლ': 'l', u'მ': 'm', u'ნ': 'n', u'ო': 'o', u'პ': 'p', u'ჟ': 'zh', u'რ': 'r', u'ს': 's', u'ტ': 't', u'უ': 'u', u'ფ': 'p', u'ქ': 'k', u'ღ': 'gh', u'ყ': 'q', u'შ': 'sh', u'ჩ': 'ch', u'ც': 'ts', u'ძ': 'dz', u'წ': 'ts', u'ჭ': 'ch', u'ხ': 'kh', u'ჯ': 'j', u'ჰ': 'h' }
 
 char_map = {u'À': 'A', u'Á': 'A', u'Â': 'A', u'Ã': 'A', u'Ä': 'Ae', u'Å': 'A', u'Æ': 'A', u'Ā': 'A', u'Ą': 'A', u'Ă': 'A', u'Ç': 'C', u'Ć': 'C', u'Č': 'C', u'Ĉ': 'C', u'Ċ': 'C', u'Ď': 'D', u'Đ': 'D', u'È': 'E', u'É': 'E', u'Ê': 'E', u'Ë': 'E', u'Ē': 'E', u'Ę': 'E', u'Ě': 'E', u'Ĕ': 'E', u'Ė': 'E', u'Ĝ': 'G', u'Ğ': 'G', u'Ġ': 'G', u'Ģ': 'G', u'Ĥ': 'H', u'Ħ': 'H', u'Ì': 'I', u'Í': 'I', u'Î': 'I', u'Ï': 'I', u'Ī': 'I', u'Ĩ': 'I', u'Ĭ': 'I', u'Į': 'I', u'İ': 'I', u'IJ': 'IJ', u'Ĵ': 'J', u'Ķ': 'K', u'Ľ': 'K', u'Ĺ': 'K', u'Ļ': 'K', u'Ŀ': 'K', u'Ł': 'L', u'Ñ': 'N', u'Ń': 'N', u'Ň': 'N', u'Ņ': 'N', u'Ŋ': 'N', u'Ò': 'O', u'Ó': 'O', u'Ô': 'O', u'Õ': 'O', u'Ö': 'Oe', u'Ø': 'O', u'Ō': 'O', u'Ő': 'O', u'Ŏ': 'O', u'Œ': 'OE', u'Ŕ': 'R', u'Ř': 'R', u'Ŗ': 'R', u'Ś': 'S', u'Ş': 'S', u'Ŝ': 'S', u'Ș': 'S', u'Š': 'S', u'Ť': 'T', u'Ţ': 'T', u'Ŧ': 'T', u'Ț': 'T', u'Ù': 'U', u'Ú': 'U', u'Û': 'U', u'Ü': 'Ue', u'Ū': 'U', u'Ů': 'U', u'Ű': 'U', u'Ŭ': 'U', u'Ũ': 'U', u'Ų': 'U', u'Ŵ': 'W', u'Ŷ': 'Y', u'Ÿ': 'Y', u'Ý': 'Y', u'Ź': 'Z', u'Ż': 'Z', u'Ž': 'Z', u'à': 'a', u'á': 'a', u'â': 'a', u'ã': 'a', u'ä': 'ae', u'ā': 'a', u'ą': 'a', u'ă': 'a', u'å': 'a', u'æ': 'ae', u'ç': 'c', u'ć': 'c', u'č': 'c', u'ĉ': 'c', u'ċ': 'c', u'ď': 'd', u'đ': 'd', u'è': 'e', u'é': 'e', u'ê': 'e', u'ë': 'e', u'ē': 'e', u'ę': 'e', u'ě': 'e', u'ĕ': 'e', u'ė': 'e', u'ƒ': 'f', u'ĝ': 'g', u'ğ': 'g', u'ġ': 'g', u'ģ': 'g', u'ĥ': 'h', u'ħ': 'h', u'ì': 'i', u'í': 'i', u'î': 'i', u'ï': 'i', u'ī': 'i', u'ĩ': 'i', u'ĭ': 'i', u'į': 'i', u'ı': 'i', u'ij': 'ij', u'ĵ': 'j', u'ķ': 'k', u'ĸ': 'k', u'ł': 'l', u'ľ': 'l', u'ĺ': 'l', u'ļ': 'l', u'ŀ': 'l', u'ñ': 'n', u'ń': 'n', u'ň': 'n', u'ņ': 'n', u'ʼn': 'n', u'ŋ': 'n', u'ò': 'o', u'ó': 'o', u'ô': 'o', u'õ': 'o', u'ö': 'oe', u'ø': 'o', u'ō': 'o', u'ő': 'o', u'ŏ': 'o', u'œ': 'oe', u'ŕ': 'r', u'ř': 'r', u'ŗ': 'r', u'ś': 's', u'š': 's', u'ť': 't', u'ù': 'u', u'ú': 'u', u'û': 'u', u'ü': 'ue', u'ū': 'u', u'ů': 'u', u'ű': 'u', u'ŭ': 'u', u'ũ': 'u', u'ų': 'u', u'ŵ': 'w', u'ÿ': 'y', u'ý': 'y', u'ŷ': 'y', u'ż': 'z', u'ź': 'z', u'ž': 'z', u'ß': 'ss', u'ſ': 'ss', u'Α': 'A', u'Ά': 'A', u'Ἀ': 'A', u'Ἁ': 'A', u'Ἂ': 'A', u'Ἃ': 'A', u'Ἄ': 'A', u'Ἅ': 'A', u'Ἆ': 'A', u'Ἇ': 'A', u'ᾈ': 'A', u'ᾉ': 'A', u'ᾊ': 'A', u'ᾋ': 'A', u'ᾌ': 'A', u'ᾍ': 'A', u'ᾎ': 'A', u'ᾏ': 'A', u'Ᾰ': 'A', u'Ᾱ': 'A', u'Ὰ': 'A', u'Ά': 'A', u'ᾼ': 'A', u'Β': 'B', u'Γ': 'G', u'Δ': 'D', u'Ε': 'E', u'Έ': 'E', u'Ἐ': 'E', u'Ἑ': 'E', u'Ἒ': 'E', u'Ἓ': 'E', u'Ἔ': 'E', u'Ἕ': 'E', u'Έ': 'E', u'Ὲ': 'E', u'Ζ': 'Z', u'Η': 'I', u'Ή': 'I', u'Ἠ': 'I', u'Ἡ': 'I', u'Ἢ': 'I', u'Ἣ': 'I', u'Ἤ': 'I', u'Ἥ': 'I', u'Ἦ': 'I', u'Ἧ': 'I', u'ᾘ': 'I', u'ᾙ': 'I', u'ᾚ': 'I', u'ᾛ': 'I', u'ᾜ': 'I', u'ᾝ': 'I', u'ᾞ': 'I', u'ᾟ': 'I', u'Ὴ': 'I', u'Ή': 'I', u'ῌ': 'I', u'Θ': 'TH', u'Ι': 'I', u'Ί': 'I', u'Ϊ': 'I', u'Ἰ': 'I', u'Ἱ': 'I', u'Ἲ': 'I', u'Ἳ': 'I', u'Ἴ': 'I', u'Ἵ': 'I', u'Ἶ': 'I', u'Ἷ': 'I', u'Ῐ': 'I', u'Ῑ': 'I', u'Ὶ': 'I', u'Ί': 'I', u'Κ': 'K', u'Λ': 'L', u'Μ': 'M', u'Ν': 'N', u'Ξ': 'KS', u'Ο': 'O', u'Ό': 'O', u'Ὀ': 'O', u'Ὁ': 'O', u'Ὂ': 'O', u'Ὃ': 'O', u'Ὄ': 'O', u'Ὅ': 'O', u'Ὸ': 'O', u'Ό': 'O', u'Π': 'P', u'Ρ': 'R', u'Ῥ': 'R', u'Σ': 'S', u'Τ': 'T', u'Υ': 'Y', u'Ύ': 'Y', u'Ϋ': 'Y', u'Ὑ': 'Y', u'Ὓ': 'Y', u'Ὕ': 'Y', u'Ὗ': 'Y', u'Ῠ': 'Y', u'Ῡ': 'Y', u'Ὺ': 'Y', u'Ύ': 'Y', u'Φ': 'F', u'Χ': 'X', u'Ψ': 'PS', u'Ω': 'O', u'Ώ': 'O', u'Ὠ': 'O', u'Ὡ': 'O', u'Ὢ': 'O', u'Ὣ': 'O', u'Ὤ': 'O', u'Ὥ': 'O', u'Ὦ': 'O', u'Ὧ': 'O', u'ᾨ': 'O', u'ᾩ': 'O', u'ᾪ': 'O', u'ᾫ': 'O', u'ᾬ': 'O', u'ᾭ': 'O', u'ᾮ': 'O', u'ᾯ': 'O', u'Ὼ': 'O', u'Ώ': 'O', u'ῼ': 'O', u'α': 'a', u'ά': 'a', u'ἀ': 'a', u'ἁ': 'a', u'ἂ': 'a', u'ἃ': 'a', u'ἄ': 'a', u'ἅ': 'a', u'ἆ': 'a', u'ἇ': 'a', u'ᾀ': 'a', u'ᾁ': 'a', u'ᾂ': 'a', u'ᾃ': 'a', u'ᾄ': 'a', u'ᾅ': 'a', u'ᾆ': 'a', u'ᾇ': 'a', u'ὰ': 'a', u'ά': 'a', u'ᾰ': 'a', u'ᾱ': 'a', u'ᾲ': 'a', u'ᾳ': 'a', u'ᾴ': 'a', u'ᾶ': 'a', u'ᾷ': 'a', u'β': 'b', u'γ': 'g', u'δ': 'd', u'ε': 'e', u'έ': 'e', u'ἐ': 'e', u'ἑ': 'e', u'ἒ': 'e', u'ἓ': 'e', u'ἔ': 'e', u'ἕ': 'e', u'ὲ': 'e', u'έ': 'e', u'ζ': 'z', u'η': 'i', u'ή': 'i', u'ἠ': 'i', u'ἡ': 'i', u'ἢ': 'i', u'ἣ': 'i', u'ἤ': 'i', u'ἥ': 'i', u'ἦ': 'i', u'ἧ': 'i', u'ᾐ': 'i', u'ᾑ': 'i', u'ᾒ': 'i', u'ᾓ': 'i', u'ᾔ': 'i', u'ᾕ': 'i', u'ᾖ': 'i', u'ᾗ': 'i', u'ὴ': 'i', u'ή': 'i', u'ῂ': 'i', u'ῃ': 'i', u'ῄ': 'i', u'ῆ': 'i', u'ῇ': 'i', u'θ': 'th', u'ι': 'i', u'ί': 'i', u'ϊ': 'i', u'ΐ': 'i', u'ἰ': 'i', u'ἱ': 'i', u'ἲ': 'i', u'ἳ': 'i', u'ἴ': 'i', u'ἵ': 'i', u'ἶ': 'i', u'ἷ': 'i', u'ὶ': 'i', u'ί': 'i', u'ῐ': 'i', u'ῑ': 'i', u'ῒ': 'i', u'ΐ': 'i', u'ῖ': 'i', u'ῗ': 'i', u'κ': 'k', u'λ': 'l', u'μ': 'm', u'ν': 'n', u'ξ': 'ks', u'ο': 'o', u'ό': 'o', u'ὀ': 'o', u'ὁ': 'o', u'ὂ': 'o', u'ὃ': 'o', u'ὄ': 'o', u'ὅ': 'o', u'ὸ': 'o', u'ό': 'o', u'π': 'p', u'ρ': 'r', u'ῤ': 'r', u'ῥ': 'r', u'σ': 's', u'ς': 's', u'τ': 't', u'υ': 'y', u'ύ': 'y', u'ϋ': 'y', u'ΰ': 'y', u'ὐ': 'y', u'ὑ': 'y', u'ὒ': 'y', u'ὓ': 'y', u'ὔ': 'y', u'ὕ': 'y', u'ὖ': 'y', u'ὗ': 'y', u'ὺ': 'y', u'ύ': 'y', u'ῠ': 'y', u'ῡ': 'y', u'ῢ': 'y', u'ΰ': 'y', u'ῦ': 'y', u'ῧ': 'y', u'φ': 'f', u'χ': 'x', u'ψ': 'ps', u'ω': 'o', u'ώ': 'o', u'ὠ': 'o', u'ὡ': 'o', u'ὢ': 'o', u'ὣ': 'o', u'ὤ': 'o', u'ὥ': 'o', u'ὦ': 'o', u'ὧ': 'o', u'ᾠ': 'o', u'ᾡ': 'o', u'ᾢ': 'o', u'ᾣ': 'o', u'ᾤ': 'o', u'ᾥ': 'o', u'ᾦ': 'o', u'ᾧ': 'o', u'ὼ': 'o', u'ώ': 'o', u'ῲ': 'o', u'ῳ': 'o', u'ῴ': 'o', u'ῶ': 'o', u'ῷ': 'o', u'¨': '', u'΅': '', u'᾿': '', u'῾': '', u'῍': '', u'῝': '', u'῎': '', u'῞': '', u'῏': '', u'῟': '', u'῀': '', u'῁': '', u'΄': '', u'΅': '', u'`': '', u'῭': '', u'ͺ': '', u'᾽': '', u'А': 'A', u'Б': 'B', u'В': 'V', u'Г': 'G', u'Д': 'D', u'Е': 'E', u'Ё': 'E', u'Ж': 'ZH', u'З': 'Z', u'И': 'I', u'Й': 'I', u'К': 'K', u'Л': 'L', u'М': 'M', u'Н': 'N', u'О': 'O', u'П': 'P', u'Р': 'R', u'С': 'S', u'Т': 'T', u'У': 'U', u'Ф': 'F', u'Х': 'KH', u'Ц': 'TS', u'Ч': 'CH', u'Ш': 'SH', u'Щ': 'SHCH', u'Ы': 'Y', u'Э': 'E', u'Ю': 'YU', u'Я': 'YA', u'а': 'A', u'б': 'B', u'в': 'V', u'г': 'G', u'д': 'D', u'е': 'E', u'ё': 'E', u'ж': 'ZH', u'з': 'Z', u'и': 'I', u'й': 'I', u'к': 'K', u'л': 'L', u'м': 'M', u'н': 'N', u'о': 'O', u'п': 'P', u'р': 'R', u'с': 'S', u'т': 'T', u'у': 'U', u'ф': 'F', u'х': 'KH', u'ц': 'TS', u'ч': 'CH', u'ш': 'SH', u'щ': 'SHCH', u'ы': 'Y', u'э': 'E', u'ю': 'YU', u'я': 'YA', u'Ъ': '', u'ъ': '', u'Ь': '', u'ь': '', u'ð': 'd', u'Ð': 'D', u'þ': 'th', u'Þ': 'TH',
             u'ა': 'a', u'ბ': 'b', u'გ': 'g', u'დ': 'd', u'ე': 'e', u'ვ': 'v', u'ზ': 'z', u'თ': 't', u'ი': 'i', u'კ': 'k', u'ლ': 'l', u'მ': 'm', u'ნ': 'n', u'ო': 'o', u'პ': 'p', u'ჟ': 'zh', u'რ': 'r', u'ს': 's', u'ტ': 't', u'უ': 'u', u'ფ': 'p', u'ქ': 'k', u'ღ': 'gh', u'ყ': 'q', u'შ': 'sh', u'ჩ': 'ch', u'ც': 'ts', u'ძ': 'dz', u'წ': 'ts', u'ჭ': 'ch', u'ხ': 'kh', u'ჯ': 'j', u'ჰ': 'h' }
 
+
 def replace_char(m):
     char = m.group()
     if char_map.has_key(char):
 def replace_char(m):
     char = m.group()
     if char_map.has_key(char):
@@ -15,18 +16,19 @@ def replace_char(m):
     else:
         return char
 
     else:
         return char
 
-def slughifi(value, do_slugify=True, overwrite_char_map={}):
+
+def slughifi(value, do_slugify=True, overwrite_char_map=None):
     """
         High Fidelity slugify - slughifi.py, v 0.1
 
         Examples :
 
     """
         High Fidelity slugify - slughifi.py, v 0.1
 
         Examples :
 
-        >>> text = 'C\'est déjà l\'été.'
+        >>> text = "C'est déjà l'été."
 
         >>> slughifi(text)
         'cest-deja-lete'
 
 
         >>> slughifi(text)
         'cest-deja-lete'
 
-        >>> slughifi(text, overwrite_char_map={u'\'': '-',})
+        >>> slughifi(text, overwrite_char_map={u"'": '-',})
         'c-est-deja-l-ete'
 
         >>> slughifi(text, do_slugify=False)
         'c-est-deja-l-ete'
 
         >>> slughifi(text, do_slugify=False)
@@ -38,6 +40,9 @@ def slughifi(value, do_slugify=True, overwrite_char_map={}):
 
     """
 
 
     """
 
+    if not overwrite_char_map:
+        overwrite_char_map = {}
+
     # unicodification
     if type(value) != UnicodeType:
         value = unicode(value, 'utf-8', 'ignore')
     # unicodification
     if type(value) != UnicodeType:
         value = unicode(value, 'utf-8', 'ignore')
@@ -46,11 +51,10 @@ def slughifi(value, do_slugify=True, overwrite_char_map={}):
     char_map.update(overwrite_char_map)
 
     # try to replace chars
     char_map.update(overwrite_char_map)
 
     # try to replace chars
-    value = re.sub('[^a-zA-Z0-9\\s\\-]{1}', replace_char, value)
+    value = re.sub('[^a-zA-Z0-9\\s\\-]', replace_char, value)
 
     # apply django default slugify
     if do_slugify:
         value = slugify(value)
 
     return value.encode('ascii', 'ignore')
 
     # apply django default slugify
     if do_slugify:
         value = slugify(value)
 
     return value.encode('ascii', 'ignore')
-
index 2708ed7..bc66d50 100644 (file)
@@ -180,7 +180,8 @@ class VersionedStorage(object):
         self.repo.dirstate.setparents(parent_node)
         node = self._commit([repo_file], text, user)
 
         self.repo.dirstate.setparents(parent_node)
         node = self._commit([repo_file], text, user)
 
-        partial = lambda filename: repo_file == filename
+        def partial(filename):
+            return repo_file == filename
 
         # If p1 is equal to p2, there is no work to do. Even the dirstate is correct.
         p1, p2 = self.repo[None].parents()[0], self.repo[tip_node]
 
         # If p1 is equal to p2, there is no work to do. Even the dirstate is correct.
         p1, p2 = self.repo[None].parents()[0], self.repo[tip_node]
@@ -233,9 +234,9 @@ class VersionedStorage(object):
 
     def save_data(self, title, data, **kwargs):
         """Save data as specified page."""
 
     def save_data(self, title, data, **kwargs):
         """Save data as specified page."""
+        temp_path = tempfile.mkdtemp(dir=self.path)
+        file_path = os.path.join(temp_path, 'saved')
         try:
         try:
-            temp_path = tempfile.mkdtemp(dir=self.path)
-            file_path = os.path.join(temp_path, 'saved')
             f = open(file_path, "wb")
             f.write(data)
             f.close()
             f = open(file_path, "wb")
             f.write(data)
             f.close()
@@ -416,8 +417,7 @@ class VersionedStorage(object):
         tip = self.repo['tip']
         """Iterate over the titles of all pages in the wiki."""
         return [self._file_to_title(filename) for filename in tip
         tip = self.repo['tip']
         """Iterate over the titles of all pages in the wiki."""
         return [self._file_to_title(filename) for filename in tip
-                  if not filename.startswith('.')
-                    and filename.endswith(type) ]
+                if not filename.startswith('.') and filename.endswith(type)]
 
     def changed_since(self, rev):
         """Return all pages that changed since specified repository revision."""
 
     def changed_since(self, rev):
         """Return all pages that changed since specified repository revision."""
@@ -428,6 +428,7 @@ class VersionedStorage(object):
             for page in self.all_pages():
                 yield page
                 return
             for page in self.all_pages():
                 yield page
                 return
+            return
         current = self.repo.lookup('tip')
         status = self.repo.status(current, last)
         modified, added, removed, deleted, unknown, ignored, clean = status
         current = self.repo.lookup('tip')
         status = self.repo.status(current, last)
         modified, added, removed, deleted, unknown, ignored, clean = status
index 36c6e23..f84f5fb 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 """
     Mercurial ui module replacement.
 """
 """
     Mercurial ui module replacement.
 """
@@ -5,6 +6,7 @@
 import mercurial.ui
 import logging
 
 import mercurial.ui
 import logging
 
+
 class SilentUI(mercurial.ui.ui):
 
     def __init__(self, *args, **kwargs):
 class SilentUI(mercurial.ui.ui):
 
     def __init__(self, *args, **kwargs):
@@ -51,7 +53,8 @@ class SilentUI(mercurial.ui.ui):
         return text
 
     def traceback(self, exc=None):
         return text
 
     def traceback(self, exc=None):
-        if exc is not None: self.__logger.exception()
+        if exc is not None:
+            self.__logger.exception()
 
     def progress(self, *args, **kwargs):
         pass
 
     def progress(self, *args, **kwargs):
         pass
index 25e2b06..3ef8c4d 100644 (file)
@@ -8,10 +8,10 @@
 import os
 import tempfile
 from nose.tools import *
 import os
 import tempfile
 from nose.tools import *
-from nose.core import runmodule
 
 import vstorage
 
 
 import vstorage
 
+
 def clear_directory(top):
     for root, dirs, files in os.walk(top, topdown=False):
         for name in files:
 def clear_directory(top):
     for root, dirs, files in os.walk(top, topdown=False):
         for name in files:
@@ -56,10 +56,7 @@ class TestVersionedStorage(object):
         author = u"test author"
         comment = u"test comment"
 
         author = u"test author"
         comment = u"test comment"
 
-        self.repo.save_text(title=title,
-                    text=text, author=author,
-                    comment=comment, parent=None)
-
+        self.repo.save_text(title=title, text=text, author=author, comment=comment, parent=None)
 
         saved_text, rev = self.repo.page_text(title)
         assert_equal(saved_text, text)
 
         saved_text, rev = self.repo.page_text(title)
         assert_equal(saved_text, text)
@@ -70,12 +67,8 @@ class TestVersionedStorage(object):
         title = u"test title"
         author = u"test author"
         comment = u"test comment"
         title = u"test title"
         author = u"test author"
         comment = u"test comment"
-        self.repo.save_text(title=title,
-                    text=text, author=author,
-                    comment=comment, parent=None)
-        self.repo.save_text(title=title,
-                    text=text, author=author,
-                    comment=comment, parent=None)
+        self.repo.save_text(title=title, text=text, author=author, comment=comment, parent=None)
+        self.repo.save_text(title=title, text=text, author=author, comment=comment, parent=None)
 
         saved_text, rev = self.repo.page_text(title)
         assert_equal(saved_text, text)
 
         saved_text, rev = self.repo.page_text(title)
         assert_equal(saved_text, text)
@@ -89,25 +82,19 @@ class TestVersionedStorage(object):
         author = u"test author"
         comment = u"test comment"
 
         author = u"test author"
         comment = u"test comment"
 
-        self.repo.save_text(title=title,
-                    text=text, author=author,
-                    comment=comment, parent=None)
+        self.repo.save_text(title=title, text=text, author=author, comment=comment, parent=None)
 
         saved_text, rev = self.repo.page_text(title)
         assert_equal(saved_text, text)
         assert_equal(rev, 0)
 
 
         saved_text, rev = self.repo.page_text(title)
         assert_equal(saved_text, text)
         assert_equal(rev, 0)
 
-        self.repo.save_text(title=title,
-                    text=text1, author=author,
-                    comment=comment, parent=0)
+        self.repo.save_text(title=title, text=text1, author=author, comment=comment, parent=0)
 
         saved_text, rev = self.repo.page_text(title)
         assert_equal(saved_text, text1)
         assert_equal(rev, 1)
 
 
         saved_text, rev = self.repo.page_text(title)
         assert_equal(saved_text, text1)
         assert_equal(rev, 1)
 
-        self.repo.save_text(title=title,
-                    text=text2, author=author,
-                    comment=comment, parent=0)
+        self.repo.save_text(title=title, text=text2, author=author, comment=comment, parent=0)
 
         saved_text, rev = self.repo.page_text(title)
         # Other conflict markers placement can also be correct
 
         saved_text, rev = self.repo.page_text(title)
         # Other conflict markers placement can also be correct
@@ -125,9 +112,7 @@ text
         title = u"test title"
         author = u"test author"
         comment = u"test comment"
         title = u"test title"
         author = u"test author"
         comment = u"test comment"
-        self.repo.save_text(title=title,
-                    text=text, author=author,
-                    comment=comment, parent=None)
+        self.repo.save_text(title=title, text=text, author=author, comment=comment, parent=None)
 
         ok_(title in self.repo, "Document not in repository.")
 
 
         ok_(title in self.repo, "Document not in repository.")
 
@@ -147,10 +132,10 @@ text
 
     def test_history(self):
         COMMITS = [
 
     def test_history(self):
         COMMITS = [
-            {"author": "bunny", "text":"1", "comment": "Oh yeah!"},
-            {"author": "frank", "text":"2", "comment": "Second is the best!"},
-            {"text":"3", "comment": "Third"},
-            {"author": "welma", "text":"4", "comment": "Fourth"},
+            {"author": "bunny", "text": "1", "comment": "Oh yeah!"},
+            {"author": "frank", "text": "2", "comment": "Second is the best!"},
+            {"text": "3", "comment": "Third"},
+            {"author": "welma", "text": "4", "comment": "Fourth"},
         ]
 
         for commit in COMMITS:
         ]
 
         for commit in COMMITS:
@@ -164,10 +149,10 @@ text
 
     def test_data_revert(self):
         COMMITS = [
 
     def test_data_revert(self):
         COMMITS = [
-            {u"title": u"one", "author": "bunny", "text":"1.1", "comment": "1"},
-            {u"title": u"one", "author": "frank", "text":"1.2", "comment": "2"},
-            {u"title": u"two", "author": "bunny", "text":"2.1", "comment": "3"},
-            {u"title": u"one", "author": "frank", "text":"1.3", "comment": "4"},
+            {u"title": u"one", "author": "bunny", "text": "1.1", "comment": "1"},
+            {u"title": u"one", "author": "frank", "text": "1.2", "comment": "2"},
+            {u"title": u"two", "author": "bunny", "text": "2.1", "comment": "3"},
+            {u"title": u"one", "author": "frank", "text": "1.3", "comment": "4"},
         ]
 
         for commit in COMMITS:
         ]
 
         for commit in COMMITS:
@@ -181,15 +166,16 @@ text
         self.repo.revert(u"one", 2)
         assert_equal(self.repo.page_text(u"one"), (u"1.3", 4))
 
         self.repo.revert(u"one", 2)
         assert_equal(self.repo.page_text(u"one"), (u"1.3", 4))
 
+
 class TestVSTags(object):
 
     TITLE_1 = "Sample"
 
     COMMITS = [
 class TestVSTags(object):
 
     TITLE_1 = "Sample"
 
     COMMITS = [
-        {"author": "bunny", "text":"1", "comment": "Oh yeah!"},
-        {"author": "frank", "text":"2", "comment": "Second is the best!"},
-        {"text":"3", "comment": "Third"},
-        {"author": "welma", "text":"4", "comment": "Fourth"},
+        {"author": "bunny", "text": "1", "comment": "Oh yeah!"},
+        {"author": "frank", "text": "2", "comment": "Second is the best!"},
+        {"text": "3", "comment": "Third"},
+        {"author": "welma", "text": "4", "comment": "Fourth"},
     ]
 
     def setUp(self):
     ]
 
     def setUp(self):
@@ -224,7 +210,6 @@ class TestVSTags(object):
                 assert_equal(entry["tag"], [])
 
     def test_add_many_tags(self):
                 assert_equal(entry["tag"], [])
 
     def test_add_many_tags(self):
-        TAG_USER = "mike_the_tagger"
         tags = [
             (2, "production", "mike"),
             (2, "finished", "jeremy"),
         tags = [
             (2, "production", "mike"),
             (2, "finished", "jeremy"),
index 3284211..8491be2 100644 (file)
@@ -8,7 +8,7 @@
 """
 import urllib2
 import functools
 """
 import urllib2
 import functools
-import django.utils.simplejson as json
+import json
 import logging
 logger = logging.getLogger("fnp.lib.wlapi")
 
 import logging
 logger = logging.getLogger("fnp.lib.wlapi")
 
@@ -45,10 +45,11 @@ def api_call(path, format="json"):
 
             try:
                 anwser = json.load(self.opener.open(rq))
 
             try:
                 anwser = json.load(self.opener.open(rq))
-                return generator.send(anwser)
-            except StopIteration:
-                # by default, just return the anwser as a shorthand
-                return anwser
+                try:
+                    return generator.send(anwser)
+                except StopIteration:
+                    # by default, just return the anwser as a shorthand
+                    return anwser
             except urllib2.HTTPError, error:
                 return self._http_error(error)
             except Exception, error:
             except urllib2.HTTPError, error:
                 return self._http_error(error)
             except Exception, error:
index a12ab06..777be3d 100644 (file)
@@ -11,7 +11,7 @@ from nose.core import runmodule
 import wlapi
 
 
 import wlapi
 
 
-class FakeDocument():
+class FakeDocument:
 
     def __init__(self):
         self.text = "Some Text"
 
     def __init__(self):
         self.text = "Some Text"
index aec6df7..feba9e9 100644 (file)
@@ -1,4 +1,5 @@
-# -*- coding: utf-8
+# -*- coding: utf-8 -*-
+
 
 def settings(request):
     from django.conf import settings
 
 def settings(request):
     from django.conf import settings
@@ -7,7 +8,7 @@ def settings(request):
         import subprocess
         process = subprocess.Popen(["git", "show", "--oneline"], stdout=subprocess.PIPE)
         data, _err = process.communicate()
         import subprocess
         process = subprocess.Popen(["git", "show", "--oneline"], stdout=subprocess.PIPE)
         data, _err = process.communicate()
-        # get app version 
+        # get app version
         VERSION = data.splitlines()[0].split()[0]
     else:
         VERSION = ''
         VERSION = data.splitlines()[0].split()[0]
     else:
         VERSION = ''
index 4d4fe8f..61b064c 100644 (file)
@@ -1,11 +1,12 @@
+# -*- coding: utf-8 -*-
 from __future__ import absolute_import
 from os import path
 from redakcja.settings.common import *
 
 DATABASES = {
     'default': {
 from __future__ import absolute_import
 from os import path
 from redakcja.settings.common import *
 
 DATABASES = {
     'default': {
-        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
-        'NAME': path.join(PROJECT_ROOT, 'dev.sqlite'), # Or path to database file if using sqlite3.
+        'ENGINE': 'django.db.backends.sqlite3',
+        'NAME': path.join(PROJECT_ROOT, 'dev.sqlite'),
         'USER': '',                      # Not used with sqlite3.
         'PASSWORD': '',                  # Not used with sqlite3.
         'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
         'USER': '',                      # Not used with sqlite3.
         'PASSWORD': '',                  # Not used with sqlite3.
         'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
@@ -13,11 +14,7 @@ DATABASES = {
     }
 }
 
     }
 }
 
-try:
-    LOGGING_CONFIG_FILE
-except NameError:
-    LOGGING_CONFIG_FILE = os.path.join(PROJECT_ROOT, 'config',
-                                ('logging.cfg' if not DEBUG else 'logging.cfg.dev'))
+LOGGING_CONFIG_FILE = os.path.join(PROJECT_ROOT, 'config', ('logging.cfg' if not DEBUG else 'logging.cfg.dev'))
 try:
     import logging
 
 try:
     import logging
 
index 2fe69a1..993aa93 100644 (file)
@@ -26,8 +26,8 @@ TIME_ZONE = 'Europe/Warsaw'
 # http://www.i18nguy.com/unicode/language-identifiers.html
 LANGUAGE_CODE = 'pl'
 
 # http://www.i18nguy.com/unicode/language-identifiers.html
 LANGUAGE_CODE = 'pl'
 
-#import locale
-#locale.setlocale(locale.LC_ALL, '')
+# import locale
+# locale.setlocale(locale.LC_ALL, '')
 
 SITE_ID = 1
 
 
 SITE_ID = 1
 
@@ -64,7 +64,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
     "django.contrib.auth.context_processors.auth",
     "django.core.context_processors.debug",
     "django.core.context_processors.i18n",
     "django.contrib.auth.context_processors.auth",
     "django.core.context_processors.debug",
     "django.core.context_processors.i18n",
-    "redakcja.context_processors.settings", # this is instead of media
+    "redakcja.context_processors.settings",  # this is instead of media
     'django.core.context_processors.csrf',
     "django.core.context_processors.request",
 )
     'django.core.context_processors.csrf',
     "django.core.context_processors.request",
 )
@@ -136,9 +136,11 @@ CAS_USER_ATTRS_MAP = {
 
 IMAGE_DIR = 'images/'
 
 
 IMAGE_DIR = 'images/'
 
-
-import djcelery
-djcelery.setup_loader()
+try:
+    import djcelery
+    djcelery.setup_loader()
+except ImportError:
+    pass
 
 BROKER_BACKEND = "djkombu.transport.DatabaseTransport"
 BROKER_HOST = "localhost"
 
 BROKER_BACKEND = "djkombu.transport.DatabaseTransport"
 BROKER_HOST = "localhost"
@@ -153,4 +155,3 @@ try:
     from redakcja.settings.compress import *
 except ImportError:
     pass
     from redakcja.settings.compress import *
 except ImportError:
     pass
-
index 6143729..5cbee6d 100644 (file)
@@ -1,7 +1,9 @@
+# -*- coding: utf-8 -*-
+
 STATICFILES_FINDERS = (
     'django.contrib.staticfiles.finders.FileSystemFinder',
     'django.contrib.staticfiles.finders.AppDirectoriesFinder',
 STATICFILES_FINDERS = (
     'django.contrib.staticfiles.finders.FileSystemFinder',
     'django.contrib.staticfiles.finders.AppDirectoriesFinder',
-#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
+    # 'django.contrib.staticfiles.finders.DefaultStorageFinder',
 )
 
 
 )
 
 
@@ -14,7 +16,7 @@ PIPELINE_STORAGE = 'pipeline.storage.PipelineFinderStorage'
 # CSS and JS files to compress
 PIPELINE_CSS = {
     'detail': {
 # CSS and JS files to compress
 PIPELINE_CSS = {
     'detail': {
-         'source_filenames': (
+        'source_filenames': (
             'css/master.css',
             'css/toolbar.css',
             'css/gallery.css',
             'css/master.css',
             'css/toolbar.css',
             'css/gallery.css',
@@ -32,7 +34,7 @@ PIPELINE_CSS = {
         ),
         'output_filename': 'compressed/catalogue_styles.css',
      },
         ),
         'output_filename': 'compressed/catalogue_styles.css',
      },
-     'book': {
+    'book': {
         'source_filenames': (
             'css/book.css',
         ),
         'source_filenames': (
             'css/book.css',
         ),
@@ -92,7 +94,7 @@ PIPELINE_JS = {
         ),
         'output_filename': 'compressed/catalogue_scripts.js',
      },
         ),
         'output_filename': 'compressed/catalogue_scripts.js',
      },
-     'book': {
+    'book': {
         'source_filenames': (
             'js/book_text/jquery.eventdelegation.js',
             'js/book_text/jquery.scrollto.js',
         'source_filenames': (
             'js/book_text/jquery.eventdelegation.js',
             'js/book_text/jquery.scrollto.js',
index ba477bb..510f962 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 from redakcja.settings.test import *
 
 NOSE_ARGS = ()
 from redakcja.settings.test import *
 
 NOSE_ARGS = ()
index d667ddd..a14e974 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 #
 # Nose tests
 #
 #
 # Nose tests
 #
@@ -8,8 +9,8 @@ from redakcja.settings.common import *
 
 DATABASES = {
     'default': {
 
 DATABASES = {
     'default': {
-        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
-        'NAME': '', # Or path to database file if using sqlite3.
+        'ENGINE': 'django.db.backends.sqlite3',
+        'NAME': '',
         'USER': '',                      # Not used with sqlite3.
         'PASSWORD': '',                  # Not used with sqlite3.
         'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
         'USER': '',                      # Not used with sqlite3.
         'PASSWORD': '',                  # Not used with sqlite3.
         'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
index d9297e2..4388105 100644 (file)
@@ -10,7 +10,8 @@ from django.views.generic import RedirectView
 
 admin.autodiscover()
 
 
 admin.autodiscover()
 
-urlpatterns = patterns('',
+urlpatterns = patterns(
+    '',
     # Auth
     url(r'^accounts/login/$', 'django_cas.views.login', name='login'),
     url(r'^accounts/logout/$', 'django_cas.views.logout', name='logout'),
     # Auth
     url(r'^accounts/login/$', 'django_cas.views.login', name='login'),
     url(r'^accounts/logout/$', 'django_cas.views.logout', name='logout'),
@@ -23,13 +24,12 @@ urlpatterns = patterns('',
 
     (r'^comments/', include('django.contrib.comments.urls')),
 
 
     (r'^comments/', include('django.contrib.comments.urls')),
 
-    url(r'^$', RedirectView.as_view(url= '/documents/')),
+    url(r'^$', RedirectView.as_view(url='/documents/')),
     url(r'^documents/', include('catalogue.urls')),
     url(r'^apiclient/', include('apiclient.urls')),
     url(r'^editor/', include('wiki.urls')),
     url(r'^cover/', include('cover.urls')),
     (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', dict(packages=['wiki'])),
     url(r'^documents/', include('catalogue.urls')),
     url(r'^apiclient/', include('apiclient.urls')),
     url(r'^editor/', include('wiki.urls')),
     url(r'^cover/', include('cover.urls')),
     (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', dict(packages=['wiki'])),
-
 )
 
 if settings.DEBUG:
 )
 
 if settings.DEBUG:
@@ -37,7 +37,16 @@ if settings.DEBUG:
     urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
 
 if getattr(settings, 'SERVE_FILES_WITH_DEBUG_FALSE', False):
     urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
 
 if getattr(settings, 'SERVE_FILES_WITH_DEBUG_FALSE', False):
-    urlpatterns += patterns('',
-    (r'^%s(?P<path>.*)$' % settings.STATIC_URL[1:], 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
-    (r'^%s(?P<path>.*)$' % settings.MEDIA_URL[1:], 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
-)
+    urlpatterns += patterns(
+        '',
+        (
+            r'^%s(?P<path>.*)$' % settings.STATIC_URL[1:],
+            'django.views.static.serve',
+            {'document_root': settings.STATIC_ROOT}
+        ),
+        (
+            r'^%s(?P<path>.*)$' % settings.MEDIA_URL[1:],
+            'django.views.static.serve',
+            {'document_root': settings.MEDIA_ROOT}
+        ),
+    )
index cd69a92..9268f2f 100755 (executable)
@@ -1,5 +1,5 @@
+# -*- coding: utf-8 -*-
 import os
 import os
-import os.path
 import sys
 
 ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 import sys
 
 ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
index ce3795a..492176c 100644 (file)
@@ -9,9 +9,6 @@ oauth2
 httplib2 # oauth2 dependency
 texml
 
 httplib2 # oauth2 dependency
 texml
 
-## Book conversion library
-# git+git://github.com/fnp/librarian.git@master#egg=librarian
-
 ## Django
 Django>=1.5,<1.6
 django-pipeline>=1.2,<1.3
 ## Django
 Django>=1.5,<1.6
 django-pipeline>=1.2,<1.3
index 07f58e1..a937885 100755 (executable)
@@ -64,6 +64,3 @@ if dry_run:
     print "This is a dry run, to really change dates, run with --seriously"
 for b in Book.objects.all():
     fix(b, me, dry_run)
     print "This is a dry run, to really change dates, run with --seriously"
 for b in Book.objects.all():
     fix(b, me, dry_run)
-
-    
-    
index 5c572ea..f5c97ed 100644 (file)
@@ -1,5 +1,6 @@
+# -*- coding: utf-8 -*-\r
 import os\r
 from django.conf import settings\r
 \r
 if not os.path.exists(settings.STATIC_ROOT_SYMLINK):\r
 import os\r
 from django.conf import settings\r
 \r
 if not os.path.exists(settings.STATIC_ROOT_SYMLINK):\r
-    os.symlink(settings.STATIC_ROOT, settings.STATIC_ROOT_SYMLINK)
\ No newline at end of file
+    os.symlink(settings.STATIC_ROOT, settings.STATIC_ROOT_SYMLINK)\r
index c2774c9..cdd2f5a 100644 (file)
@@ -1,15 +1,14 @@
+# -*- coding: utf-8 -*-\r
 import os\r
 import inspect\r
 import os\r
 import inspect\r
-from urlparse import urlparse\r
 \r
 from django.test import LiveServerTestCase\r
 from django.test.client import Client\r
 from django.conf import settings\r
 \r
 from django.test import LiveServerTestCase\r
 from django.test.client import Client\r
 from django.conf import settings\r
-from django.contrib.auth.models import User, Permission\r
+from django.contrib.auth.models import User\r
 from django.utils.translation import ugettext as _\r
 \r
 from django.utils.translation import ugettext as _\r
 \r
-from selenium import webdriver, selenium\r
-from selenium.webdriver.support.wait import WebDriverWait\r
+from selenium import webdriver\r
 \r
 \r
 class SeleniumTestCase(LiveServerTestCase):\r
 \r
 \r
 class SeleniumTestCase(LiveServerTestCase):\r
@@ -19,107 +18,104 @@ class SeleniumTestCase(LiveServerTestCase):
         LiveServerTestCase.setUpClass()\r
         cls.browser = getattr(webdriver, os.environ.get('TEST_BROWSER', 'Firefox'))()\r
         cls.browser.implicitly_wait(5)\r
         LiveServerTestCase.setUpClass()\r
         cls.browser = getattr(webdriver, os.environ.get('TEST_BROWSER', 'Firefox'))()\r
         cls.browser.implicitly_wait(5)\r
-        \r
+\r
     @classmethod\r
     def tearDownClass(cls):\r
         LiveServerTestCase.tearDownClass()\r
         cls.browser.quit()\r
     @classmethod\r
     def tearDownClass(cls):\r
         LiveServerTestCase.tearDownClass()\r
         cls.browser.quit()\r
-        \r
+\r
     def setUp(self):\r
         self.browser.delete_all_cookies()\r
     def setUp(self):\r
         self.browser.delete_all_cookies()\r
-    \r
-    def create_user(self, username = 'testuser',  passwd = 'passwd', do_login = False):\r
+\r
+    def create_user(self, username='testuser',  passwd='passwd', do_login=False):\r
         user = User.objects.create_user(username, '', passwd)\r
         user._plain_passwd = passwd\r
         if do_login:\r
             self.login_user(user)\r
         return user\r
         user = User.objects.create_user(username, '', passwd)\r
         user._plain_passwd = passwd\r
         if do_login:\r
             self.login_user(user)\r
         return user\r
-    \r
+\r
     def create_super_user(self, *args, **kwargs):\r
         user = self.create_user(*args, **kwargs)\r
         user.is_superuser = True\r
         user.save()\r
         return user\r
     def create_super_user(self, *args, **kwargs):\r
         user = self.create_user(*args, **kwargs)\r
         user.is_superuser = True\r
         user.save()\r
         return user\r
-        \r
+\r
     def login_user(self, user):\r
         client = Client()\r
     def login_user(self, user):\r
         client = Client()\r
-        client.login(username = user.username, password = user._plain_passwd)\r
+        client.login(username=user.username, password=user._plain_passwd)\r
 \r
         if not self.browser.current_url.startswith(self.live_server_url):\r
             self.browser.get(self.live_server_url+'/not_existing_url')\r
 \r
         if not self.browser.current_url.startswith(self.live_server_url):\r
             self.browser.get(self.live_server_url+'/not_existing_url')\r
-            \r
-        self.browser.find_element_by_tag_name('body') # Make sure the page is actually loaded before setting the cookie\r
+\r
+        self.browser.find_element_by_tag_name('body')  # Make sure the page is actually loaded before setting the cookie\r
         self.browser.delete_cookie(settings.SESSION_COOKIE_NAME)\r
         self.browser.delete_cookie(settings.SESSION_COOKIE_NAME)\r
-        self.browser.add_cookie(dict(name = settings.SESSION_COOKIE_NAME, \r
-                                     value = client.cookies[settings.SESSION_COOKIE_NAME].value,\r
-                                     path = '/')\r
-                               )\r
-        \r
+        self.browser.add_cookie(dict(name=settings.SESSION_COOKIE_NAME,\r
+                                     value=client.cookies[settings.SESSION_COOKIE_NAME].value,\r
+                                     path='/'))\r
+\r
     def get_main_page(self):\r
         self.browser.get(self.live_server_url)\r
         self.browser.find_element_by_tag_name('body')\r
         return MainPage(self.browser)\r
 \r
     def get_main_page(self):\r
         self.browser.get(self.live_server_url)\r
         self.browser.find_element_by_tag_name('body')\r
         return MainPage(self.browser)\r
 \r
-        \r
+\r
 class Page(object):\r
     def __init__(self, browser):\r
         self.browser = browser\r
 class Page(object):\r
     def __init__(self, browser):\r
         self.browser = browser\r
-    \r
-    \r
+\r
+\r
 class MainPage(Page):\r
 \r
     def __init__(self, browser):\r
         Page.__init__(self, browser)\r
         self.tab = None\r
 class MainPage(Page):\r
 \r
     def __init__(self, browser):\r
         Page.__init__(self, browser)\r
         self.tab = None\r
-    \r
+\r
     @property\r
     def element(self):\r
         return self.browser.find_element_by_tag_name('body')\r
     @property\r
     def element(self):\r
         return self.browser.find_element_by_tag_name('body')\r
-    \r
+\r
     def select_tab(self, tab_title):\r
         for a in self.element.find_element_by_id('tabs-nav-left').find_elements_by_tag_name('a'):\r
             if a.text == tab_title:\r
                 a.click()\r
                 self.tab = find_tab_class(tab_title)(self.browser)\r
                 return\r
     def select_tab(self, tab_title):\r
         for a in self.element.find_element_by_id('tabs-nav-left').find_elements_by_tag_name('a'):\r
             if a.text == tab_title:\r
                 a.click()\r
                 self.tab = find_tab_class(tab_title)(self.browser)\r
                 return\r
-        raise Exception, 'Tab not found'\r
-        \r
-                \r
-def find_tab_class(tab_title):       \r
+        raise Exception('Tab not found')\r
+\r
+\r
+def find_tab_class(tab_title):\r
     for obj in globals().values():\r
         if inspect.isclass(obj) and issubclass(obj, MainPageTabBase) and getattr(obj, 'tab_title', None) == tab_title:\r
             return obj\r
     raise NotImplementedError\r
     for obj in globals().values():\r
         if inspect.isclass(obj) and issubclass(obj, MainPageTabBase) and getattr(obj, 'tab_title', None) == tab_title:\r
             return obj\r
     raise NotImplementedError\r
-                \r
+\r
 \r
 class MainPageTabBase(Page):\r
     def __init__(self, browser):\r
         Page.__init__(self, browser)\r
 \r
 class MainPageTabBase(Page):\r
     def __init__(self, browser):\r
         Page.__init__(self, browser)\r
-    \r
+\r
     @property\r
     def element(self):\r
         return self.browser.find_element_by_id('content')\r
     @property\r
     def element(self):\r
         return self.browser.find_element_by_id('content')\r
-        \r
+\r
 \r
 class AddBookPage(MainPageTabBase):\r
     tab_title = _('Add')\r
 \r
 class AddBookPage(MainPageTabBase):\r
     tab_title = _('Add')\r
-    \r
+\r
     def put_title(self, title):\r
         self.element.find_element_by_id('id_title').send_keys(title)\r
     def put_title(self, title):\r
         self.element.find_element_by_id('id_title').send_keys(title)\r
-        \r
+\r
     def put_text(self, text):\r
         self.element.find_element_by_id('id_text').send_keys(text)\r
     def put_text(self, text):\r
         self.element.find_element_by_id('id_text').send_keys(text)\r
-        \r
+\r
     def submit(self):\r
         self.browser.find_element_by_css_selector('table.editable button').click()\r
         return self.browser\r
     def submit(self):\r
         self.browser.find_element_by_css_selector('table.editable button').click()\r
         return self.browser\r
-        \r
-    \r
+\r
+\r
 class BooksListPage(MainPageTabBase):\r
     tab_title = _('All')\r
 class BooksListPage(MainPageTabBase):\r
     tab_title = _('All')\r
-    \r
+\r
     @property\r
     def visible_books_count(self):\r
         return len(self.element.find_element_by_id('file-list').find_elements_by_tag_name('tr')) - 2\r
     @property\r
     def visible_books_count(self):\r
         return len(self.element.find_element_by_id('file-list').find_elements_by_tag_name('tr')) - 2\r
-        \r
-        
\ No newline at end of file
index fb29a73..9538609 100644 (file)
@@ -1,18 +1,19 @@
-from tests.integration.base import SeleniumTestCase, MainPage, _\r
+# -*- coding: utf-8 -*-\r
+from tests.integration.base import SeleniumTestCase, _\r
+\r
 \r
 class SmokeTest(SeleniumTestCase):\r
 \r
     def test_add_book(self):\r
 \r
 class SmokeTest(SeleniumTestCase):\r
 \r
     def test_add_book(self):\r
-        user = self.create_super_user(do_login = True)\r
-        \r
+        user = self.create_super_user(do_login=True)\r
+\r
         page = self.get_main_page()\r
         page.select_tab(_('All'))\r
         assert page.tab.visible_books_count == 0\r
         page = self.get_main_page()\r
         page.select_tab(_('All'))\r
         assert page.tab.visible_books_count == 0\r
-        \r
+\r
         page.select_tab(_('Add'))\r
         page.tab.put_title('Test title')\r
         page.tab.put_text('Test text')\r
         page.tab.submit()\r
         page.select_tab(_('All'))\r
         assert page.tab.visible_books_count == 1\r
         page.select_tab(_('Add'))\r
         page.tab.put_title('Test title')\r
         page.tab.put_text('Test text')\r
         page.tab.submit()\r
         page.select_tab(_('All'))\r
         assert page.tab.visible_books_count == 1\r
-        
\ No newline at end of file