Skip to content

Commit 911c516

Browse files
committed
WIP: tuttle.app.App
1 parent f9f08dc commit 911c516

File tree

3 files changed

+32
-12
lines changed

3 files changed

+32
-12
lines changed

tuttle/app.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,13 @@ def __init__(self, debug_mode=False):
2020
self.db_path = self.home / "tuttle.db"
2121
self.db_engine = sqlmodel.create_engine(f"sqlite:///{self.db_path}", echo=True)
2222
sqlmodel.SQLModel.metadata.create_all(self.db_engine)
23+
self.db_session = self.get_session()
2324

2425
def get_session(self):
25-
return sqlmodel.Session(self.db_engine)
26+
return sqlmodel.Session(
27+
self.db_engine,
28+
expire_on_commit=False,
29+
)
2630

2731
def clear_database(self):
2832
"""
@@ -32,11 +36,6 @@ def clear_database(self):
3236
self.db_engine = sqlmodel.create_engine(f"sqlite:///{self.db_path}", echo=True)
3337
sqlmodel.SQLModel.metadata.create_all(self.db_engine)
3438

35-
def get_user(self):
36-
with self.get_session() as session:
37-
user = session.exec(sqlmodel.select(model.User)).one()
38-
return user
39-
4039
def store_all(self, entities):
4140
"""Store a collection of entities in the database."""
4241
with self.get_session() as session:
@@ -53,11 +52,19 @@ def retrieve_all(self, entity_type):
5352

5453
@property
5554
def contracts(self):
56-
with self.get_session() as session:
57-
contracts = session.exec(
58-
sqlmodel.select(model.Contract),
59-
).all()
60-
return contracts
55+
contracts = self.db_session.exec(
56+
sqlmodel.select(model.Contract),
57+
).all()
58+
return contracts
6159

60+
@property
61+
def projects(self):
62+
contracts = self.db_session.exec(
63+
sqlmodel.select(model.Project),
64+
).all()
65+
return contracts
6266

63-
the_app = App()
67+
@property
68+
def user(self):
69+
user = self.db_session.exec(sqlmodel.select(model.User)).one()
70+
return user

tuttle/model.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,10 @@ class Contract(SQLModel, table=True):
204204
invoices: List["Invoice"] = Relationship(back_populates="contract")
205205
# TODO: model contractual promises like "at least 2 days per week"
206206

207+
@property
208+
def volume_as_time(self):
209+
return self.volume * self.unit.to_timedelta()
210+
207211

208212
class Project(SQLModel, table=True):
209213
"""A project is a group of contract work for a client."""

tuttle/time.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import enum
2+
import datetime
23

34

45
class Cycle(enum.Enum):
@@ -14,3 +15,11 @@ class TimeUnit(enum.Enum):
1415
minute = 0
1516
hour = 1
1617
day = 2
18+
19+
def to_timedelta(self):
20+
if self == TimeUnit.minute:
21+
return datetime.timedelta(minutes=1)
22+
elif self == TimeUnit.hour:
23+
return datetime.timedelta(hours=1)
24+
elif self == TimeUnit.day:
25+
return datetime.timedelta(days=1)

0 commit comments

Comments
 (0)