X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/c33d271961f93aecf731282303af150a556cb48b..4ca553d8a656c29444c0b54f9f2e33ad7f8f1cc1:/apps/lesmianator/views.py diff --git a/apps/lesmianator/views.py b/apps/lesmianator/views.py index 231ab5c96..7b289b7b6 100644 --- a/apps/lesmianator/views.py +++ b/apps/lesmianator/views.py @@ -1,52 +1,78 @@ # Create your views here. -import pickle -from django.shortcuts import render_to_response +from django.http import Http404 +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 - if not _dictionary: - left = 0 - while empty != 3 and left: - letter = _choose_word(word) - letters.append(letter) - word = word[-2:] + letter - if letter == u'\n': - empty += 1 - else: - empty = 0 - left -= 1 - - poem = ''.join(letters).strip() +from django.contrib.auth.decorators import login_required +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', - {"object": poem}, + {"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)) + +