X-Git-Url: https://apps.delaporte.us/gitweb/matrix-shop-bot.git/blobdiff_plain/050ee98fbbfea0a1cde53a5853e1da905f8cbb7b..bd322769fbd795e4cc1cb022a4af90d42911c1b3:/matrix_shop_bot/db.py diff --git a/matrix_shop_bot/db.py b/matrix_shop_bot/db.py index a225f3c..cf75f84 100644 --- a/matrix_shop_bot/db.py +++ b/matrix_shop_bot/db.py @@ -70,8 +70,9 @@ def _get_pretty_shopping_list(store_id, session) -> List[str]: zone = str(_get_item_zone(item.name, session)).title() # Title Case if not zone in zones: zones[zone] = [] - zones[zone].append(str(item)) + zones[zone].append(str(item).title()) for zone in zones: + zones[zone].sort() results.append(f' ### {zone}') for item in zones[zone]: results.append(item) @@ -104,6 +105,12 @@ def _get_with_id(cls, item_id): def _get_with_name(cls, name): return select(cls).where(func.lower(cls.name) == func.lower(name)) +def _rename(cls, session, old, new) -> bool: + with session: + record = session.exec(_get_with_name(cls, old)).first() + record.name = new + session.commit() + return True class Data(): def __init__(self, db_file=None): @@ -115,6 +122,14 @@ class Data(): self.engine = self.get_engine() self.last_store_id = None + def rename_store(self, old, new): + with Session(self.engine) as session: + return _rename(Store, session, old, new) + + def rename_item(self, old, new): + with Session(self.engine) as session: + return _rename(Item, session, old, new) + def _set_pref_store_id(self, store_id): with Session(self.engine) as session: prefs = session.exec(select(PreferStore)).all() @@ -296,6 +311,34 @@ class Data(): def setup(self): SQLModel.metadata.create_all(self.engine) + with Session(self.engine) as session: + # Add some obvious store zones by default + DEFAULT_ZONES = { + 'Bakery': ['bread', 'cake', 'cookie', 'muffin', 'pie'], + 'Baking': ['flour', 'sugar'], + 'Books': ['book'], + 'Clothes': ['bra', 'coat', 'jacket', 'panties', 'pants', 'shirt', 'shorts', 'socks', 'sweater', 'underwear'], + 'Cooler': ['butter', 'cream', 'eggs', 'juice', 'milk', 'tea'], + 'Deli': ['beef', 'chicken', 'salmon', 'steak', 'turkey'], + 'Movies': ['movie', 'DVD'], + 'Music': ['cd', 'album'], + 'Produce': ['carrot', 'cucumber', 'greens', 'lettuce'], + 'Shoes': ['shoe'], + 'Television': ['tv', 'season'], + } + for zone in DEFAULT_ZONES: + logging.debug(f'Adding default items for {zone}') + for item in DEFAULT_ZONES[zone]: + try: + logging.debug(f'Attempt adding {item} to {zone}...') + new = ItemZone(name=item, zone=zone) + session.add(new) + session.commit() + logging.debug(f'Success adding {item} to {zone}...') + except Exception as ex: + session.rollback() + logging.debug(f'Failed adding {item} to {zone}: {ex}') + return 'Success'