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)
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):
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()
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'