#! /usr/bin/python
import sys
sys.path.append('/var/www/cgi')
from mx.DateTime import *
from cgi import escape
import re
import MySQLdb, MySQLdb.cursors
from mod_python import apache, util
db = MySQLdb.connect(
user = "root",
passwd = "xxx", db = "test",
cursorclass = MySQLdb.cursors.DictCursor
)
c = db.cursor()
block = {}
template = '/var/www/site/template'
password = 'xxxx'
for name in ('head', 'tail', 'entry', 'edit', 'comment', 'newcomment'):
f = open(template + name + '.html')
block[name] = f.read()
f.close()
def renderentry (entry):
ticks = int(entry['created'].ticks())
entry['permilink'] = '/~edward/archives.py/' + `ticks`
entry['edit'] = '/~edward/edit.py/' + `ticks`
entry['created'] = ARPA.str(entry['created'])
entry['updated'] = ''
return block['entry'] % entry
def renderedit (entry, uri):
entry['updated'] = ''
entry['created'] = ARPA.str(entry['created'])
entry['uri'] = uri
return block['edit'] % entry
def rendercomment (comment):
comment['content'] = "<p>" + escape(comment['content']).replace("\n", "<br />") + "</p>"
comment['created'] = ARPA.str(comment['created'])
return block['comment'] % comment
def head(req):
req.content_type = 'text/html'
req.send_http_header()
req.write(block['head'])
def tail(req):
req.write('<strong>time taken</strong> %f, <strong>uri</strong> %s'
% (now().ticks() - req.request_time, req.uri))
req.write(block['tail'])
def indexpage(req):
head(req)
c.execute("""
select entries.title, entries.created, entries.content,
count(comments.created) as comments
from entries left join comments on entries.created = comments.entry
group by entries.created
order by created desc""")
for entry in c.fetchall():
req.write(renderentry(entry))
tail(req)
return apache.OK
def addentrypage(req):
fs = util.FieldStorage(req, 1)
if fs.has_key('submit'):
if fs['password'] == password:
c.execute("""
insert into entries set title=%s, content=%s, created = %s""", (fs['title'], fs['content'], now()))
return redirect(req)
else:
head(req)
req.write('<p>wrong password</p>')
req.write(block['edit'] % {'title': fs['title'],
'content': fs['content'],
'uri': req.uri,
'created': '', 'updated': ''
})
tail(req)
else:
head(req)
req.write(block['edit'] % {
'title': '',
'content': '<p></p>',
'uri': req.uri,
'created': '', 'updated': ''
})
tail(req)
return apache.OK
def redirect(req):
req.headers_out['location'] = '/~edward/'
req.status = apache.HTTP_MOVED_TEMPORARILY
return ""
def editpage(req, created):
fs = util.FieldStorage(req, 1)
created = localtime(created)
if fs.has_key('submit'):
if fs['password'] == password:
c.execute("""
update entries set title=%s, content=%s
where created = %s""", (fs['title'], fs['content'], created))
return redirect(req)
else:
head(req)
req.write('<p>wrong password</p>')
req.write(renderedit({
'title': fs['title'],
'content': fs['content'],
'created': created,
'updated': ''}, req.uri))
tail(req)
elif fs.has_key('delete'):
if fs['password'] == password:
c.execute("delete from entries where created = %s", created)
return redirect(req)
else:
head(req)
c.execute("""
select title, created, content
from entries
where created = %s""", created)
req.write(renderedit(c.fetchone(), req.uri))
tail(req)
return apache.OK
def archivepage(req, created):
fs = util.FieldStorage(req, 1)
created = localtime(created)
if fs.has_key('submit'):
c.execute("""insert into comments set title=%s, entry=%s, content=%s, created = %s""",
(fs['title'], created, fs['content'], now()))
req.headers_out['location'] = req.uri
req.status = apache.HTTP_MOVED_TEMPORARILY
return ""
head(req)
c.execute("""
select entries.title, entries.created, entries.content,
count(comments.created) as comments
from entries left join comments on entries.created = comments.entry
where entries.created = %s
group by entries.created""", created)
req.write(renderentry(c.fetchone()))
req.write("<p>comments</p>")
c.execute("""
select title, created, content
from comments
where entry = %s
order by created desc""", created)
for comment in c.fetchall():
req.write(rendercomment(comment))
req.write(block['newcomment'] % {'title': '', 'content': '', 'uri': req.uri})
tail(req)
return apache.OK
dispatchre = re.compile('^/~edward/(archives|edit).py/(\d+)$')
def handler(req):
m = dispatchre.match(req.uri)
if m:
return dispatch[m.group(1)](req, m.group(2))
elif req.uri == '/~edward/add.py/' or req.uri == '/~edward/add.py':
return addentrypage(req)
else:
return indexpage(req)
dispatch = {
'add' : addentrypage,
'archives' : archivepage,
'edit' : editpage,
# 'comments' : comments
}