improve backend performance with caching

This commit is contained in:
hay-kot
2021-08-07 11:28:40 -08:00
parent c13fb6743c
commit 51876508f3
5 changed files with 86 additions and 16 deletions

View File

@@ -1,5 +1,6 @@
from logging import getLogger
from random import randint
from typing import Callable
from mealie.db.db_base import BaseDocument
from mealie.db.models.event import Event, EventNotification
@@ -20,11 +21,15 @@ from mealie.schema.admin import SiteTheme
from mealie.schema.events import Event as EventSchema
from mealie.schema.events import EventNotificationIn
from mealie.schema.meal_plan import MealPlanOut, ShoppingListOut
from mealie.schema.recipe import (CommentOut, Recipe, RecipeCategoryResponse,
RecipeIngredientFood, RecipeIngredientUnit,
RecipeTagResponse)
from mealie.schema.user import (GroupInDB, LongLiveTokenInDB, SignUpOut,
UserInDB)
from mealie.schema.recipe import (
CommentOut,
Recipe,
RecipeCategoryResponse,
RecipeIngredientFood,
RecipeIngredientUnit,
RecipeTagResponse,
)
from mealie.schema.user import GroupInDB, LongLiveTokenInDB, SignUpOut, UserInDB
from sqlalchemy.orm.session import Session
logger = getLogger()
@@ -36,9 +41,9 @@ class _Recipes(BaseDocument):
self.sql_model: RecipeModel = RecipeModel
self.schema: Recipe = Recipe
def get_all_not_private(
self, session: Session, limit: int = None, order_by: str = None, start=0, override_schema=None
):
self.observers = []
def get_all_public(self, session: Session, limit: int = None, order_by: str = None, start=0, override_schema=None):
eff_schema = override_schema or self.schema
if order_by:
@@ -86,6 +91,15 @@ class _Recipes(BaseDocument):
session, attribute_name=RecipeModel.tags, attr_match=None, count=count, override_schema=override_schema
)
def subscribe(self, func: Callable) -> None:
print("Subscripe", func)
self.observers.append(func)
def update_observers(self) -> None:
print("Updating Observers", self.observers)
for observer in self.observers:
observer()
class _IngredientFoods(BaseDocument):
def __init__(self) -> None:

View File

@@ -16,20 +16,24 @@ class BaseDocument:
self.store: str
self.sql_model: SqlAlchemyBase
self.schema: BaseModel
self.observers: list = None
def get_all(
self, session: Session, limit: int = None, order_by: str = None, start=0, end=9999, override_schema=None
) -> list[dict]:
logger.info("Starting Query")
eff_schema = override_schema or self.schema
if order_by:
order_attr = getattr(self.sql_model, str(order_by))
logger.info("Ending Query")
return [
eff_schema.from_orm(x)
for x in session.query(self.sql_model).order_by(order_attr.desc()).offset(start).limit(limit).all()
]
logger.info("Ending Query")
return [eff_schema.from_orm(x) for x in session.query(self.sql_model).offset(start).limit(limit).all()]
def get_all_limit_columns(self, session: Session, fields: list[str], limit: int = None) -> list[SqlAlchemyBase]:
@@ -129,6 +133,9 @@ class BaseDocument:
session.add(new_document)
session.commit()
if hasattr(self, "update_observers"):
self.update_observers()
return self.schema.from_orm(new_document)
def update(self, session: Session, match_value: str, new_data: dict) -> BaseModel:
@@ -146,6 +153,9 @@ class BaseDocument:
entry = self._query_one(session=session, match_value=match_value)
entry.update(session=session, **new_data)
if hasattr(self, "update_observers"):
self.update_observers()
session.commit()
return self.schema.from_orm(entry)
@@ -169,12 +179,18 @@ class BaseDocument:
session.delete(result)
session.commit()
if hasattr(self, "update_observers"):
self.update_observers()
return results_as_model
def delete_all(self, session: Session) -> None:
session.query(self.sql_model).delete()
session.commit()
if hasattr(self, "update_observers"):
self.update_observers()
def count_all(self, session: Session, match_key=None, match_value=None) -> int:
if None in [match_key, match_value]:
return session.query(self.sql_model).count()