diff options
Diffstat (limited to '')
-rwxr-xr-x | index.py | 21 | ||||
-rw-r--r-- | model.py | 49 |
2 files changed, 70 insertions, 0 deletions
@@ -2,6 +2,7 @@ import web import controller +import model # # URL Mappings @@ -12,11 +13,31 @@ urls = ( ) # +# ORM +# +def handle_sql(handler): + web.ctx.orm = session = model.session + + try: + return handler() + except web.HTTPError: + session.commit() + raise + except: + session.rollback() + raise + else: + session.commit() + +# # The App # app = web.application(urls, globals()) app.notfound = controller.FourOhFour +# add orm processor +app.add_processor(handle_sql) + # debug for the moment web.config.debug = True diff --git a/model.py b/model.py new file mode 100644 index 0000000..903797b --- /dev/null +++ b/model.py @@ -0,0 +1,49 @@ +import elixir +from elixir import has_field, belongs_to, has_many, using_options, using_options_defaults +from sqlalchemy import types as T + +from functools import partial + +elixir.metadata.bind = "sqlite:///test.sqlite" +elixir.metadata.bind.echo = True + +has_req_field = partial(has_field, required = True) + +class Entity (elixir.Entity): + using_options(abstract = True) + + using_options_defaults(shortnames = True) + +class Category (Entity): + + has_field('name', T.String(50), unique = True) + + def __repr__ (self): + return '<Category "%s">' % self.name + +class Expense (Entity): + using_options(inheritance='multi') + + has_field('description', T.String(50)) + has_req_field('expense', T.Numeric(scale = 2)) + + belongs_to('category', of_kind = 'Category', required = True) + +class SingleExpense (Expense): + using_options(inheritance='multi') + + has_req_field('date', T.Date) + +class ConstExpense (Expense): + using_options(inheritance='multi') + + has_req_field('months', T.Integer) + has_req_field('start', T.Date) + has_req_field('end', T.Date) + +elixir.setup_all() + +session = elixir.session + +if __name__ == "__main__": + elixir.create_all() |