lesmianator: use cPickle, change main
[wolnelektury.git] / apps / lesmianator / views.py
1 # Create your views here.
2
3 import cPickle
4 from django.shortcuts import render_to_response
5 from django.template import RequestContext
6 from random import randint
7
8 import os.path
9
10
11 def _choose_word(word):
12     try:
13         choices = sum((_dictionary[word][post] for post in _dictionary[word]))
14         r = randint(0, choices - 1)
15
16         for post in _dictionary[word]:
17             r -= _dictionary[word][post]
18             if r < 0:
19                 return post
20     except KeyError:
21         return ''
22
23 # load dictionary on start, it won't change
24 try:
25     f = open(os.path.join(os.path.dirname(__file__), 'dictionary.p'))
26     _dictionary = cPickle.load(f)
27 except:
28     _dictionary = {}
29
30
31 def poem(request):
32     letters = []
33     word = u''
34     empty = -10
35     left = 1000
36     lines = 0
37     if not _dictionary:
38         left = 0
39     # want at least two lines, but let Lesmianator end his stanzas
40     while (empty < 2 or lines < 2) and left:
41         letter = _choose_word(word)
42         letters.append(letter)
43         word = word[-2:] + letter
44         if letter == u'\n':
45             # count non-empty lines
46             if empty == 0:
47                 lines += 1
48             # 
49             if lines >= 2:
50                 empty += 1
51             lines += 1
52         else:
53             empty = 0
54         left -= 1
55
56     poem = ''.join(letters).strip()
57
58     return render_to_response('lesmianator/poem.html', 
59                 {"object": poem},
60                 context_instance=RequestContext(request))