added code for rendering simple blog entries

This commit is contained in:
lars 2010-05-31 12:02:38 +00:00
parent 0cf168b393
commit 57caa5d05e

View file

@ -8,6 +8,7 @@ BASE_DIR = os.path.dirname(os.path.abspath(os.path.join(__file__, os.path.pardir
import sys
sys.path.insert(0, os.path.join(BASE_DIR, "src"))
import tools
import bobo
import forms
import sqlobject
@ -34,6 +35,8 @@ db_uri = config.get("database", "uri")
sqlobject.sqlhub.processConnection = sqlobject.connectionForURI(db_uri)
loader = genshi.template.TemplateLoader(os.path.join(BASE_DIR, 'templates'), auto_reload=False)
BLOG_DIR = os.path.join(BASE_DIR, "blog")
BASE_DICT = {
"base_url": "/", # the trailing slash is necessary
@ -556,6 +559,61 @@ def admin_poll(cancel=False, submit=None, admin_hash_key=None, author=None,
else:
return render("poll_admin_edit.html", input_data=data, **value_dict)
def render_blog_entry(blog_id):
blog_info = get_blog_info(blog_id)
if blog_info is None:
return None
else:
value_dict = get_default_values()
value_dict["title"] = blog_info[0]
value_dict["date"] = blog_info[1]
value_dict["link"] = blog_info[2]
value_dict["body"] = blog_info[3]
return render("blog_entry.html", **value_dict)
def get_blog_info(blog_id):
blog_file = os.path.join(BLOG_DIR, blog_id)
try:
input = open(blog_file)
title = input.readline()
body = input.read()
input.close()
except IOError:
return None
date = "%s.%s.%s %s:%s" % (blog_id[6:8], blog_id[4:6], blog_id[0:4],
blog_id[8:10], blog_id[10:12])
link = "%sblog/%s" % (get_default_values()["base_url"], blog_id)
body = tools.creole2html(body.decode("utf-8"))
return title, date, link, body
def get_blog_ids():
def add_files_to_list(file_list, dirname, fnames):
for fname in fnames:
if re.match(r"^[0-9]{12}$", fname) \
and os.path.isfile(os.path.join(dirname, fname)):
file_list.append(fname)
# remove all entries (e.g. sub-directories)
while len(fnames) > 0:
del fnames[0]
file_list = []
os.path.walk(BLOG_DIR, add_files_to_list, file_list)
return file_list
@bobo.query('/blog')
@bobo.query('/blog/')
@bobo.query('/blog/:blog_id')
@bobo.query('/blog/:blog_id/')
def serve_blog(blog_id=None):
value_dict = get_default_values()
if blog_id and re.match(r"^[0-9]{12}$", blog_id):
# the blog_id should consist of 12 digits
result = render_blog_entry(blog_id)
if not result is None:
return result
# if anything fails: render the blog list
value_dict["blog_list"] = [get_blog_info(blog_id) for blog_id in get_blog_ids()]
return render("blog_list.html", **value_dict)
@bobo.query('')
def base():
return bobo.redirect(BASE_DICT["base_url"])