]>
apps.delaporte.us Git - matrix-fridge-bot.git/blob - matrix_fridge_bot/db.py
3 from datetime
import datetime
as dt
4 from datetime
import timedelta
6 from sqlmodel
import Field
, Session
, SQLModel
, create_engine
, select
, text
10 # - [ ] reminder to eat recent food
11 # - [ ] reminder to toss old food
13 DATE_FORMAT
= '%A, %Y-%m-%d'
19 return dt
.now().strftime(DATE_FORMAT
)
21 logger
= logging
.getLogger(__name__
)
22 logging
.basicConfig(filename
=f
'matrix-{MODULE}-bot.log', encoding
='utf-8', level
=logging
.DEBUG
)
24 class Food(SQLModel
, table
=True):
25 id: int |
None = Field(default
=None, primary_key
=True)
26 name
: str = Field(default
=None, unique
=True)
27 added_date
: dt
= Field(default_factory
=lambda: dt
.now())
30 added
= self
.added_date
.strftime(DATE_FORMAT
)
31 return f
'{self.name} ({added})'
34 def __init__(self
, db_file
):
37 self
.engine
= self
.get_engine()
39 def get_db_file(self
):
43 return create_engine(f
"sqlite:///{self.file}")
46 SQLModel
.metadata
.create_all(self
.engine
)
50 stale
= dt
.now() - timedelta(STALE_DAYS
)
51 logger
.debug(f
'Stale date is {stale}')
56 with Session(self
.engine
) as session
:
57 stale_dt
= Data
.get_stale()
58 cmd
= select(Food
).where(Food
.added_date
> stale_dt
)
59 results
= session
.exec(cmd
).all()
60 logger
.debug(f
'List restuls are {str(results)}')
62 results
.append('Nothing Found')
68 with Session(self
.engine
) as session
:
69 stale_dt
= Data
.get_stale()
70 cmd
= select(Food
).where(Food
.added_date
<= stale_dt
)
71 results
= session
.exec(cmd
).all()
73 results
.append('Nothing Found')
78 def filter(self
, term
):
80 for item
in self
.list():
88 with Session(self
.engine
) as session
:
92 return f
'Added {name}.'
94 return f
'Unable to add {name}. May be duplicate.'
97 def get_food(session
, food
):
98 cmd
= select(Food
).filter(Food
.name
.ilike(f
'%{food}%'))
99 return session
.exec(cmd
).one()
101 def remove(self
, name
):
102 # TODO: Tag as tossed or eaten
103 with Session(self
.engine
) as session
:
104 item
= Data
.get_food(session
, name
)
106 return f
'Not found: {name}'
112 return f
'Removed item {name}'
113 except Exception as ex
:
114 return f
'Unable to remove item mark chore as done: {ex}'