X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/968cb1f19a746aed062a8ee64f6d0f0dd5969e23..013ec8a416d4ff1ea3e1f2fa9ee2935623197ecd:/apps/lesmianator/views.py diff --git a/apps/lesmianator/views.py b/apps/lesmianator/views.py index 2761ae5ab..1ef4397b3 100644 --- a/apps/lesmianator/views.py +++ b/apps/lesmianator/views.py @@ -1,60 +1,78 @@ -# Create your views here. - -import pickle -from django.shortcuts import render_to_response +# -*- coding: utf-8 -*- +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# +from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext -from random import randint - -import os.path - - -def _choose_word(word): - try: - choices = sum((_dictionary[word][post] for post in _dictionary[word])) - r = randint(0, choices - 1) - - for post in _dictionary[word]: - r -= _dictionary[word][post] - if r < 0: - return post - except KeyError: - return '' - -# load dictionary on start, it won't change -try: - f = open(os.path.join(os.path.dirname(__file__), 'dictionary.p')) - _dictionary = pickle.load(f) -except: - _dictionary = {} - - -def poem(request): - letters = [] - word = u'' - empty = -10 - left = 1000 - lines = 0 - if not _dictionary: - left = 0 - # want at least two lines, but let Lesmianator end his stanzas - while (empty < 2 or lines < 2) and left: - letter = _choose_word(word) - letters.append(letter) - word = word[-2:] + letter - if letter == u'\n': - # count non-empty lines - if empty == 0: - lines += 1 - # - if lines >= 2: - empty += 1 - lines += 1 - else: - empty = 0 - left -= 1 - - poem = ''.join(letters).strip() - - return render_to_response('lesmianator/poem.html', - {"object": poem}, +from django.views.decorators import cache + +from catalogue.utils import get_random_hash +from catalogue.models import Book, Tag +from lesmianator.models import Poem, Continuations + + +def main_page(request): + last = Poem.objects.all().order_by('-created_at')[:10] + shelves = Tag.objects.filter(user__username='lesmianator') + + return render_to_response('lesmianator/lesmianator.html', + {"last": last, "shelves": shelves}, + context_instance=RequestContext(request)) + + +@cache.never_cache +def new_poem(request): + user = request.user if request.user.is_authenticated() else None + text = Poem.write() + p = Poem(slug=get_random_hash(text), text=text, created_by=user) + p.save() + + return render_to_response('lesmianator/poem.html', + {"poem": p}, context_instance=RequestContext(request)) + + +@cache.never_cache +def poem_from_book(request, slug): + book = get_object_or_404(Book, slug=slug) + user = request.user if request.user.is_authenticated() else None + text = Poem.write(Continuations.get(book)) + p = Poem(slug=get_random_hash(text), text=text, created_by=user) + p.created_from = [book.id] + p.save() + + return render_to_response('lesmianator/poem.html', + {"poem": p, "books": [book], "book": book}, + context_instance=RequestContext(request)) + + +@cache.never_cache +def poem_from_set(request, shelf): + user = request.user if request.user.is_authenticated() else None + tag = get_object_or_404(Tag, category='set', slug=shelf) + text = Poem.write(Continuations.get(tag)) + p = Poem(slug=get_random_hash(text), text=text, created_by=user) + books = Book.tagged.with_any((tag,)) + p.created_from = [b.id for b in books] + p.save() + + book = books[0] if len(books) == 1 else None + + return render_to_response('lesmianator/poem.html', + {"poem": p, "shelf": tag, "books": books, "book": book}, + context_instance=RequestContext(request)) + +def get_poem(request, poem): + p = get_object_or_404(Poem, slug=poem) + p.visit() + if p.created_from: + books = Book.objects.filter(id__in=p.created_from) + book = books[0] if len(books) == 1 else None + else: + books = book = None + + return render_to_response('lesmianator/poem.html', + {"poem": p, "books": books, "book": book}, + context_instance=RequestContext(request)) + +