53 lines
1.5 KiB
Python

from peewee import *
db = DatabaseProxy()
class BaseModel(Model):
class Meta:
database = db
class ListModel(BaseModel):
name = CharField(default="")
chat_id = IntegerField()
@property
def content(self) -> dict:
return {e.id: e.entry for e in self.entries}
@content.setter
def content(self, new_content: dict):
old_content = self.content
if len(old_content) < len(new_content):
# we assume: only 1 item added (last item)
new_item = list(new_content.values())[-1]
ListEntryModel.create(list_model=self, entry = new_item)
elif len(old_content) > len(new_content):
to_delete_ids = set(old_content.keys()) - set(new_content.keys())
ListEntryModel.delete().where(ListEntryModel.id.in_(list(to_delete_ids))).execute()
@property
def done_dict(self):
return {e.id: e.done for e in self.entries}
@done_dict.setter
def done_dict(self, new_done: dict):
old_done_dict = self.done_dict
for k,d in new_done.items():
if d != old_done_dict[k]:
ListEntryModel.update(done = d).where(ListEntryModel.id == k).execute()
class ListEntryModel(BaseModel):
list_model = ForeignKeyField(ListModel, backref="entries", on_delete="CASCADE")
entry = TextField(default="")
done = BooleanField(default=None, null=True)
def set_db(db_path):
db.initialize(SqliteDatabase(db_path))
with db:
db.create_tables([ListModel, ListEntryModel], safe=True)