--- /dev/null
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import web
+import db
+
+urls = ('/reset', 'view.reset.Reset',
+ '/(.*)', 'view.index.Index')
+
+app = web.application(urls, globals())
+
+# templates
+render = web.template.render('templates', base='layout')
+
+# session with reloader
+if web.config.get('_session') is None:
+ store = web.session.DiskStore('sessions')
+ session = web.session.Session(app, store, {'count': 0})
+ web.config._session = session
+else:
+ session = web.config._session
+
+def session_hook():
+ web.ctx.session = session
+ web.ctx.render = render
+app.add_processor(web.loadhook(session_hook))
+
+# Sqlalchemy processor
+def load_sqla(handler):
+ web.ctx.orm = db.connect()
+ try:
+ return handler()
+ except web.HTTPError:
+ web.ctx.orm.commit()
+ raise
+ except:
+ web.ctx.orm.rollback()
+ raise
+ finally:
+ web.ctx.orm.commit()
+
+app.add_processor(load_sqla)
+
+if __name__ == '__main__':
+ app.run()
+
--- /dev/null
+from sqlalchemy import *
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import sessionmaker, scoped_session
+
+Base = declarative_base()
+metadata = Base.metadata
+
+class Test(Base):
+ __tablename__ = 'test'
+
+ id = Column(Integer, primary_key=True)
+ test = Column(String(128))
+ atime = Column(DateTime(), nullable=False, server_default=text('current_timestamp'))
+
+ def __init__(self, test):
+ self.test = test
+
+def connect(database='sqlite:///database.sqlite'):
+ db = create_engine(database, echo=False)
+ session = scoped_session(sessionmaker(bind=db))
+ return session
+
+def create(database='sqlite:///database.sqlite'):
+ db = create_engine(database, echo=False)
+ metadata.create_all(db)
+
+if __name__ == '__main__':
+ create()
+
--- /dev/null
+body{ background-color: #eee; }
--- /dev/null
+$def with (testlist)
+
+$var title: Index
+$var cssfiles: /static/css/index.css
+
+<ol>
+$for test in testlist
+ <li>$test.test</li>
+</ol>
--- /dev/null
+$def with (content)
+
+<html>
+ <head>
+ <title>$content.title</title>
+
+ $if content.get('cssfiles', ''):
+ $for f in content.cssfiles.split():
+ <link rel="stylesheet" href="$f" type="text/css" media="screen" charset="utf-8"/>
+ </head>
+
+ <body>
+ $:content
+ </body>
+</html>
--- /dev/null
+import web
+import db
+
+class Index:
+ def GET(self, *args):
+ orm = web.ctx.orm
+ session = web.ctx.session
+
+ session.count += 1
+
+ test = db.Test(args[0])
+ orm.add(test)
+
+ all = orm.query(db.Test).all()
+
+ return web.ctx.render.index(all)
+
--- /dev/null
+import web
+import db
+
+class Reset:
+ def GET(self):
+ session = web.ctx.session
+ orm = web.ctx.orm
+ all = orm.query(db.Test).all()
+ # deleting all
+ [orm.delete(a) for a in all]
+ session.kill()
+ raise web.redirect("/")
+