__all__ = ['getobj', 'clear_table', 'dumprow', 'dumpquery', 'template', 'template_file', 'Storage', 'Form', 'HTTP_REDIRECT', 'HTTP_ERROR', 'render_template', 'process_error', 'template_out', 'user', 'username', 'adminuser', 'button_preview_submit_reset', 'button_submit_reset', 'send_mail'] import os from simpletemplate import template, template_file from google.appengine.api import users from storage import Storage import Form from dbutils import * TEMPLATE_PATH = ['templates'] TEMPLATE_ENV = {} class HTTP_REDIRECT(Exception): pass class HTTP_ERROR(Exception): def __init__(self, e, error_template='', obj=None): self.e = e self.obj = obj self.error_template = error_template or 'error.html' def __str__(self): return self.e def render_template(self, templatefilename, vars=None, env=None): vars = vars or {} env = env or get_env() self.response.out.write( template_file(templatefilename, vars, env, dirs=TEMPLATE_PATH) ) def process_error(func): def f(self): try: vars = func(self) except HTTP_ERROR, e: render_template(self, e.error_template, {'message':str(e), 'obj':e.obj, 'link':self.request.path_qs}, get_env()) return f def template_out(templatefilename, env=None, error_template='error.html'): def _f(func): def f(self=None): v = env or get_env() try: vars = func(self) render_template(self, templatefilename, vars, v) except HTTP_REDIRECT, e: self.redirect(str(e)) except HTTP_ERROR, e: render_template(self, e.error_template, {'message':str(e), 'obj':e.obj, 'link':self.request.path_qs}, v) except Exception, e: import traceback traceback.print_exc() render_template(self, error_template, {'message':str(e), 'trace':traceback.format_exc(), 'link':self.request.path_qs}, v) return f return _f #process GAE user def user(): return users.get_current_user() def adminuser(): if users.is_current_user_admin(): adminuser = user else: adminuser = None return adminuser def username(): if user(): username = user().nickname() else: username = 'Anonymous' return username #buttons button_preview_submit_reset = Form.Buf() button_preview_submit_reset << [Form.SubmitInput(name='action', value='Preview'), Form.SubmitInput(name='action', value='Submit'), Form.ResetInput(value='Reset')] button_submit_reset = Form.Buf() button_submit_reset << [Form.SubmitInput(name='action', value='Submit'), Form.ResetInput(value='Reset')] def get_env(): env = TEMPLATE_ENV.copy() from textconvert import text2html from rst import to_html env['text2html'] = text2html env['rst2html'] = to_html env['user'] = user() env['username'] = username() env['adminuser'] = adminuser() env['login_url'] = users.create_login_url("/") env['logout_url'] = users.create_logout_url("/") return env from google.appengine.api.mail import send_mail