-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 = cPickle.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()
+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, book):
+ kwargs = Book.split_urlid(book)
+ if kwargs is None:
+ raise Http404
+ book = get_object_or_404(Book, **kwargs)
+ 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.set_created_from_value([book.id])
+ p.save()