summaryrefslogtreecommitdiff
path: root/model.py
blob: 45e9296782ea3f2e39ff3a23bb395262504b1a91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import elixir
from elixir import Field, ManyToOne, ColumnProperty, 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

ReqField = partial(Field, required = True)

class Entity (elixir.Entity):
    using_options(abstract = True)

    using_options_defaults(shortnames = True)

class Category (Entity):
    
    name = Field(T.String(50), unique = True)

    def __repr__ (self):
        return '<Category "%s">' % self.name

class Expense (Entity):
    using_options(abstract = True)

    description = Field(T.String(50))
    expense     = ReqField(T.Numeric(scale = 2))
    category    = ManyToOne('Category', required = True, innerjoin = True)

class SingleExpense (Expense):
    date = ReqField(T.Date)

class ConstExpense (Expense):
    months  = ReqField(T.Integer)
    start   = ReqField(T.Date)
    end     = ReqField(T.Date)

    monthly = ColumnProperty(lambda c: c.expense / c.months)

elixir.setup_all()

session = elixir.session

if __name__ == "__main__":
    elixir.create_all()