From e978e2978bdd04b5d6264c53021029876836856f Mon Sep 17 00:00:00 2001 From: Hayden Date: Tue, 12 Jan 2021 21:59:40 -0900 Subject: [PATCH] sqlalchemy models --- .vscode/settings.json | 2 +- mealie/db/sql/_all_models.py | 1 + mealie/db/sql/db_session.py | 24 ++++++++++++++++ mealie/db/sql/meal_models.py | 0 mealie/db/sql/model_base.py | 3 ++ mealie/db/sql/recipe_models.py | 49 ++++++++++++++++++++++++++++++++ mealie/db/sql/settings_models.py | 0 7 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 mealie/db/sql/_all_models.py create mode 100644 mealie/db/sql/db_session.py create mode 100644 mealie/db/sql/meal_models.py create mode 100644 mealie/db/sql/model_base.py create mode 100644 mealie/db/sql/recipe_models.py create mode 100644 mealie/db/sql/settings_models.py diff --git a/.vscode/settings.json b/.vscode/settings.json index 9b5db65cf..3a918bca1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,6 @@ { "python.formatting.provider": "black", - "python.pythonPath": "/home/hayden/Projects/mealie/.venv/bin/python3", + "python.pythonPath": "venv/bin/python3.8", "python.linting.pylintEnabled": true, "python.linting.enabled": true, "python.autoComplete.extraPaths": ["mealie", "mealie/mealie"], diff --git a/mealie/db/sql/_all_models.py b/mealie/db/sql/_all_models.py new file mode 100644 index 000000000..34d6dff85 --- /dev/null +++ b/mealie/db/sql/_all_models.py @@ -0,0 +1 @@ +from db.sql.recipe_models import RecipeModel \ No newline at end of file diff --git a/mealie/db/sql/db_session.py b/mealie/db/sql/db_session.py new file mode 100644 index 000000000..6e99eb286 --- /dev/null +++ b/mealie/db/sql/db_session.py @@ -0,0 +1,24 @@ +from pathlib import Path + +import sqlalchemy as sa +import sqlalchemy.orm as orm +from db.sql.model_base import SqlAlchemyBase + +factory = None + + +def globa_init(db_file: Path): + global factory + + if factory: + return + + conn_str = "sqlite:///" + db_file.absolute() + + engine = sa.create_engine(conn_str, echo=False) + + factory = orm.sessionmaker(bind=engine) + + import db.sql._all_models + + SqlAlchemyBase.metadata.create_all(engine) diff --git a/mealie/db/sql/meal_models.py b/mealie/db/sql/meal_models.py new file mode 100644 index 000000000..e69de29bb diff --git a/mealie/db/sql/model_base.py b/mealie/db/sql/model_base.py new file mode 100644 index 000000000..94d0abcff --- /dev/null +++ b/mealie/db/sql/model_base.py @@ -0,0 +1,3 @@ +import sqlalchemy.ext.declarative as dec + +SqlAlchemyBase = dec.declarative_base() \ No newline at end of file diff --git a/mealie/db/sql/recipe_models.py b/mealie/db/sql/recipe_models.py new file mode 100644 index 000000000..402e106a9 --- /dev/null +++ b/mealie/db/sql/recipe_models.py @@ -0,0 +1,49 @@ +from datetime import date + +import sqlalchemy as sa +import sqlalchemy.orm as orm +from db.sql.model_base import SqlAlchemyBase + + +class RecipeModel(SqlAlchemyBase): + __tablename__ = 'recipes' + # id = mongoengine.UUIDField(primary_key=True) + name = sa.Column(sa.String) + description = sa.Column(sa.String) + image = sa.Column(sa.String) + recipeYield = sa.Column(sa.String) + recipeIngredient = orm.relation("RecipeIngredient") + recipeInstructions = orm.relation("RecipeInstruction") + totalTime = sa.Column(sa.String) + + # Mealie Specific + slug = sa.Column(sa.String, primary_key=True, index=True, unique=True) + categories = orm.relation("Category") + tags = orm.relation("Tag") + dateAdded = sa.Column(sa.Date, default=date.today()) + notes = orm.relation("Note") + rating = sa.Column(sa.Integer) + orgURL = sa.Column(sa.String) + # extras = + + +class Category(SqlAlchemyBase): + name = sa.Column(sa.String, index=True) + + +class Tag(SqlAlchemyBase): + name = sa.Column(sa.String, index=True) + + +class Note(SqlAlchemyBase): + title = sa.Column(sa.String) + text = sa.Column(sa.String) + + +class RecipeIngredient(SqlAlchemyBase): + ingredient: sa.Column(sa.String) + + +class RecipeInstruction(SqlAlchemyBase): + type = sa.Column(sa.String) + text = sa.Column(sa.String) diff --git a/mealie/db/sql/settings_models.py b/mealie/db/sql/settings_models.py new file mode 100644 index 000000000..e69de29bb