]>
apps.delaporte.us Git - matrix-goal-bot.git/blob - goals/db.py
0a1d16c51bd4047aca443476292dc20068185252
3 from datetime
import datetime
as dt
5 from sqlmodel
import Field
, Session
, SQLModel
, create_engine
, select
, text
8 # - [ ] goal / vision / task
10 DB_FILE
= os
.path
.join(os
.environ
.get('DATA_DIR'), 'goals.db')
12 DATE_FORMAT
= '%Y-%m-%d'
15 return dt
.now().strftime(DATE_FORMAT
)
18 logger
= logging
.getLogger(__name__
)
19 logging
.basicConfig(filename
='chore.log', encoding
='utf-8', level
=logging
.DEBUG
)
22 class Vision(SQLModel
, table
=True):
23 id: int |
None = Field(default
=None, primary_key
=True)
24 name
: str = Field(default
=None, unique
=True)
25 complete_date
: dt |
None = Field(default
=None)
27 return f
'{self.name} ({self.id})'
30 class Goal(SQLModel
, table
=True):
31 id: int |
None = Field(default
=None, primary_key
=True)
32 name
: str = Field(default
=None, unique
=True)
33 complete_date
: dt |
None = Field(default
=None)
34 vision_id
: int |
None = Field(default
=None, foreign_key
="vision.id")
35 notes
: str |
None = Field(default
=None)
37 return f
'{self.name} ({self.id})'
39 class Task(SQLModel
, table
=True):
40 id: int |
None = Field(default
=None, primary_key
=True)
41 name
: str = Field(default
=None, unique
=True)
42 goal_id
: int |
None = Field(default
=None, foreign_key
="goal.id")
43 complete_date
: dt |
None = Field(default
=None)
46 def __init__(self
, db_file
= DB_FILE
):
48 self
.engine
= self
.get_engine()
51 return create_engine(f
"sqlite:///{self.file}")
54 SQLModel
.metadata
.create_all(self
.engine
)
58 def print_all_visions(self
):
61 def print_all_goals(self
):
64 def print_ophan_tasks(self
):
69 with Session(self
.engine
) as session
:
70 cmd
= select(Goal
).where(Goal
.complete_date
== None)
71 return session
.exec(cmd
).all()
74 def print_goal(self
, id, include_finished
=False):
78 def complete_vision(self
, id):
81 def complete_goal(self
, id):
84 def complete_task(self
, id):
87 def add_with_name(self
, cls
, name
):
89 with Session(self
.engine
) as session
:
96 def add_vision(self
, name
):
97 return self
.add_with_name(Vision
, name
)
99 def add_goal(self
, name
):
100 return self
.add_with_name(Goal
, name
)
102 def add_task(self
, goal_id
, name
):
103 result
= self
.add_with_name(Task
, name
)
104 with Session(self
.engine
) as session
:
105 cmd
= select(Task
).where(Task
.name
== name
)
106 new
= session
.exec(cmd
).first()
107 new
.goal_id
= goal_id
111 def assign_vision(self
, goal_id
, vision_id
):
112 '''Goals may move between visions'''
113 with Session(self
.engine
) as session
:
114 cmd
= select(Goal
).where(Goal
.id == goal_id
)
115 new
= session
.exec(cmd
).first()
116 new
.vision_id
= vision_id
119 def add_note(self
, note
, goal
):
120 '''Notes print with the goal.'''
123 # Someday: Notes on each
127 with Session(self
.engine
) as session
:
129 chores
= session
.exec(cmd
).all()
131 retuls
.append('None Found')
134 results
.append(Data
.check_chore(session
, chore
.id))