1 from django
.template
import Context
, loader
2 from django
.http
import HttpResponse
3 from django
.http
import HttpResponseRedirect
6 from twitterlexer
import twitify
7 from encyclrcloud
import elc
, get_lc_key
8 from summarize
import lookup
10 def get_empty_contents(title
):
12 return lookup(title
)[:140]
17 t
= loader
.get_template('html/index.html')
18 c
= Context(request
.session
)
19 return HttpResponse(t
.render(c
))
21 def category(request
, title
):
22 articles
= [] #elc.list_get(get_lc_key('category', title))
23 t
= loader
.get_template('html/category.html')
24 c
= Context(request
.session
)
25 c
.update({ 'title': title
, 'articles': articles
})
26 return HttpResponse(t
.render(c
))
28 def authenticate(request
):
29 username
= request
.POST
["u"]
30 pword
= pwordhash(request
)
31 storedpword
= elc
.get(get_lc_key("user", username
))
32 if pword
!= storedpword
:
35 request
.session
["user"] = username
39 referer
= request
.META
.get('HTTP_REFERER', '/')
41 if not "u" in request
.POST
or not "p" in request
.POST
or not authenticate(request
):
42 request
.session
["loginfailed"] = True
43 elif "loginfailed" in request
.session
:
44 del request
.session
["loginfailed"]
46 return HttpResponseRedirect(referer
)
49 if 'user' in request
.session
:
50 del request
.session
['user']
51 referer
= request
.META
.get('HTTP_REFERER', '/')
52 return HttpResponseRedirect(referer
)
54 def pwordhash(request
):
55 username
= request
.POST
["u"]
56 pword
= request
.POST
["p"]
57 return hashlib
.sha224(pword
+ username
).hexdigest()
59 def createnewuser(request
):
61 if 'u' not in request
.POST
or request
.POST
['u'] == '':
62 errors
['nousername'] = True
64 username
= request
.POST
["u"]
65 if elc
.get(get_lc_key("user", username
)):
66 errors
["usernametaken"] = username
67 if 'p' not in request
.POST
or 'p2' not in request
.POST
or request
.POST
['p'] == '':
68 errors
['nopassword'] = True
70 pword
= request
.POST
["p"]
71 pword2
= request
.POST
["p2"]
73 errors
["passwordmismatch"] = True
76 elc
.set(get_lc_key("user", username
), pwordhash(request
))
82 if request
.method
== 'POST' or request
.method
== 'PUT':
83 errors
= createnewuser(request
)
86 return HttpResponseRedirect("/p")
87 t
= loader
.get_template('html/newuser.html')
88 c
= Context(request
.session
)
91 return HttpResponse(t
.render(c
))
93 def userprefs(request
):
94 return HttpResponse('user prefs?')
97 return HttpResponse('user info?')
99 def article(request
, title
):
100 if request
.method
== 'POST' or request
.method
== 'PUT':
101 return post(request
, title
)
103 contents
= elc
.get(get_lc_key('article', title
))
105 contents
= 'no contents: please create some'
107 t
= loader
.get_template('html/article.html')
109 c
= Context(request
.session
)
110 c
.update({ 'title': title
,
111 'contents': contents
})
113 return HttpResponse(t
.render(c
))
115 def edit(request
, title
):
116 if "user" not in request
.session
:
117 return HttpResponseRedirect("/a/%s" % title
)
119 contents
= elc
.get(get_lc_key('rawarticle', title
))
123 contents
= get_empty_contents(title
)
126 t
= loader
.get_template('html/edit.html')
127 c
= Context(request
.session
)
128 c
.update({ 'title': title
,
129 'contents': contents
.decode('utf8'),
132 return HttpResponse(t
.render(c
))
134 def post(request
, title
):
136 if "user" in request
.session
:
137 username
= request
.session
["user"]
139 return HttpResponseRedirect("/a/%s" % title
)
141 if "body" not in request
.POST
:
142 raise Exception("no body")
144 if len(request
.POST
["body"]) > 140:
145 raise Exception("contents too long (len = %s)" % (len(request
.POST
["body"])))
147 contents
= request
.POST
["body"].encode('utf8')
148 processed_contents
= twitify(contents
).encode('utf8')
150 success
= elc
.set(get_lc_key('article', title
), processed_contents
)
152 raise Exception('error writing to db')
154 success
= elc
.set(get_lc_key('rawarticle', title
), contents
)
156 raise Exception('error writing to db')
158 return HttpResponseRedirect("/a/%s" % title
)
161 if "s" in request
.POST
:
162 return HttpResponseRedirect("/a/%s" % request
.POST
["s"])
164 referer
= request
.META
.get('HTTP_REFERER', '/')
165 return HttpResponseRedirect(referer
)