Add basic login.
[wolnelektury.git] / src / lesmianator / models.py
index 0595810..fbcee04 100644 (file)
@@ -1,7 +1,7 @@
-# -*- coding: utf-8 -*-
-# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
-# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+# This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
 #
 #
+from functools import reduce
 import pickle
 from pickle import PickleError
 from datetime import datetime
 import pickle
 from pickle import PickleError
 from datetime import datetime
@@ -10,28 +10,26 @@ from random import randint
 from django.core.files.base import ContentFile
 from django.db import models
 from django.utils.timezone import utc
 from django.core.files.base import ContentFile
 from django.db import models
 from django.utils.timezone import utc
-from django.utils.translation import ugettext_lazy as _
-from django.core.urlresolvers import reverse
 from django.contrib.auth.models import User
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.fields import GenericForeignKey
 from django.conf import settings
 from django.contrib.auth.models import User
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.fields import GenericForeignKey
 from django.conf import settings
+from django.urls import reverse
 
 
-from jsonfield import JSONField
 from catalogue.models import Book, Tag
 
 
 class Poem(models.Model):
 from catalogue.models import Book, Tag
 
 
 class Poem(models.Model):
-    slug = models.SlugField(_('slug'), max_length=120, db_index=True)
-    text = models.TextField(_('text'))
-    created_by = models.ForeignKey(User, null=True)
-    created_from = JSONField(_('extra information'), null=True, blank=True)
-    created_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False)
-    seen_at = models.DateTimeField(_('last view date'), auto_now_add=True, editable=False)
-    view_count = models.IntegerField(_('view count'), default=1)
+    slug = models.SlugField('slug', max_length=120, db_index=True)
+    text = models.TextField('tekst')
+    created_by = models.ForeignKey(User, models.SET_NULL, null=True)
+    created_from = models.TextField('dodatkowe informacje', null=True, blank=True)
+    created_at = models.DateTimeField('data utworzenia', auto_now_add=True, editable=False)
+    seen_at = models.DateTimeField('data ostatniego obejrzenia', auto_now_add=True, editable=False)
+    view_count = models.IntegerField('licznik obejrzeń', default=1)
 
     try:
 
     try:
-        f = open(settings.LESMIANATOR_PICKLE)
+        f = open(settings.LESMIANATOR_PICKLE, 'rb')
         global_dictionary = pickle.load(f)
         f.close()
     except (IOError, AttributeError, PickleError):
         global_dictionary = pickle.load(f)
         f.close()
     except (IOError, AttributeError, PickleError):
@@ -48,7 +46,7 @@ class Poem(models.Model):
     @staticmethod
     def choose_letter(word, continuations):
         if word not in continuations:
     @staticmethod
     def choose_letter(word, continuations):
         if word not in continuations:
-            return u'\n'
+            return '\n'
 
         choices = sum((continuations[word][letter]
                        for letter in continuations[word]))
 
         choices = sum((continuations[word][letter]
                        for letter in continuations[word]))
@@ -67,7 +65,7 @@ class Poem(models.Model):
             return ''
 
         letters = []
             return ''
 
         letters = []
-        word = u''
+        word = ''
 
         finished_stanza_verses = 0
         current_stanza_verses = 0
 
         finished_stanza_verses = 0
         current_stanza_verses = 0
@@ -83,7 +81,7 @@ class Poem(models.Model):
             word = word[-length + 1:] + letter
             char_count += 1
 
             word = word[-length + 1:] + letter
             char_count += 1
 
-            if letter == u'\n':
+            if letter == '\n':
                 if verse_start:
                     finished_stanza_verses += current_stanza_verses
                     current_stanza_verses = 0
                 if verse_start:
                     finished_stanza_verses += current_stanza_verses
                     current_stanza_verses = 0
@@ -100,8 +98,8 @@ class Poem(models.Model):
 
 
 class Continuations(models.Model):
 
 
 class Continuations(models.Model):
-    pickle = models.FileField(_('Continuations file'), upload_to='lesmianator')
-    content_type = models.ForeignKey(ContentType)
+    pickle = models.FileField('plik kontynuacji', upload_to='lesmianator')
+    content_type = models.ForeignKey(ContentType, models.CASCADE)
     object_id = models.PositiveIntegerField()
     content_object = GenericForeignKey('content_type', 'object_id')
 
     object_id = models.PositiveIntegerField()
     content_object = GenericForeignKey('content_type', 'object_id')
 
@@ -155,7 +153,7 @@ class Continuations(models.Model):
             obj = cls.objects.get(content_type=object_type, object_id=sth.id)
             if not obj.pickle:
                 raise cls.DoesNotExist
             obj = cls.objects.get(content_type=object_type, object_id=sth.id)
             if not obj.pickle:
                 raise cls.DoesNotExist
-            f = open(obj.pickle.path)
+            f = open(obj.pickle.path, 'rb')
             keys, conts = pickle.load(f)
             f.close()
             if set(keys) != should_keys:
             keys, conts = pickle.load(f)
             f.close()
             if set(keys) != should_keys: