]>
apps.delaporte.us Git - matrix-fridge-bot.git/blob - matrix_fridge_bot/db.py
3 from datetime
import datetime
as dt
5 from sqlmodel
import Field
, Session
, SQLModel
, create_engine
, select
, text
9 # - [ ] reminder to eat recent food
10 # - [ ] reminder to toss old food
12 DATE_FORMAT
= '%A, %Y-%m-%d'
18 return dt
.now().strftime(DATE_FORMAT
)
20 logger
= logging
.getLogger(__name__
)
21 logging
.basicConfig(filename
=f
'{MODULE}.log', encoding
='utf-8', level
=logging
.DEBUG
)
23 class Food(SQLModel
, table
=True):
24 id: int |
None = Field(default
=None, primary_key
=True)
25 name
: str = Field(default
=None, unique
=True)
26 added_date
: dt
= Field(default_factory
=lambda: dt
.now())
29 added
= self
.added_date
.strftime(DATE_FORMAT
)
30 return f
'{self.name} ({added})'
33 def __init__(self
, db_file
):
36 self
.engine
= self
.get_engine()
38 def get_db_file(self
):
42 return create_engine(f
"sqlite:///{self.file}")
45 SQLModel
.metadata
.create_all(self
.engine
)
49 return dt
.now() - dt
.timedelta(STALE_DAYS
)
53 with Session(self
.engine
) as session
:
54 stale_dt
= Data
.get_stale()
55 cmd
= select(Food
).where(Food
.added_date
< stale_dt
)
56 results
= session
.exec(cmd
).all()
58 results
.append('Nothing Found')
64 with Session(self
.engine
) as session
:
65 stale_dt
= Data
.get_stale()
66 cmd
= select(Food
).where(Food
.added_date
>= stale_dt
)
67 results
= session
.exec(cmd
).all()
69 results
.append('Nothing Found')
74 def filter(self
, term
):
76 for item
in self
.list():
84 with Session(self
.engine
) as session
:
88 return f
'Added {name}.'
90 return f
'Unable to add {name}. May be duplicate.'
93 def get_food(session
, food
):
94 cmd
= select(Food
).filter(Food
.name
.ilike(f
'%{food}%'))
95 return session
.exec(cmd
).one()
97 def remove(self
, name
):
98 # TODO: Tag as tossed or eaten
99 with Session(self
.engine
) as session
:
100 item
= Data
.get_food(session
, name
)
102 return f
'Not found: {name}'
108 return f
'Removed item {name}'
109 except Exception as ex
:
110 return f
'Unable to remove item mark chore as done: {ex}'