""" This module contains a set of functions that provide SQLAlchemy table interfaces to existing views in the database. Make sure these views have been synced after table creation. """ from retailtwin.models import Base from functools import lru_cache from sqlalchemy import Table, Column, Date, Integer, String, JSON # Decorate with a cache to prevent sqlalchemy to create the table definition # after multiple function calls. This is not an issue in production because # a whole new isntance will be created by the worker generated by gunicorn, # but this prevents errors during development. This is a way to create a # pythonic singleton. @lru_cache def get_inventory_view() -> Table: return Table( "inventory", Base.metadata, Column("upc", Integer), Column("batch", Integer), Column("name", String), Column("package", String), Column("received", Date), Column("best_until", Date), Column("quantity", Integer), Column("location", Integer), Column("discount_definition", JSON), ) @lru_cache def get_stores_view() -> Table: return Table("stores", Base.metadata, Column("id", Integer), Column("name", String))