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 '' % 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()