From ca1ab33291713eb40156264020c3be2cf602b4dc Mon Sep 17 00:00:00 2001 From: Elijah Mock <28277163+ekcom@users.noreply.github.com> Date: Sun, 7 Jul 2024 19:11:53 -0500 Subject: [PATCH 1/2] docs: Fix FAQ typos (#3866) --- .../docs/documentation/getting-started/faq.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/docs/documentation/getting-started/faq.md b/docs/docs/documentation/getting-started/faq.md index 0716d9b48a0..9da52d40351 100644 --- a/docs/docs/documentation/getting-started/faq.md +++ b/docs/docs/documentation/getting-started/faq.md @@ -2,14 +2,14 @@ ## How do I enable "smart" ingredient handling? -You might have noticed that scaling up a recipe or making a shopping list doesn't by default handle the ingredients in a way you might expect. Depending on your settings, scaling up might yield things like `2 1 cup broth` instead of `2 cup broth`. And making shopping lists from reciepes that have shared ingredients can yield multiple lines of the same ingredient. **But**, mealie has a mechanism to intelligently handle ingredients and make your day better. How? +You might have noticed that scaling up a recipe or making a shopping list doesn't by default handle the ingredients in a way you might expect. Depending on your settings, scaling up might yield things like `2 1 cup broth` instead of `2 cup broth`. And, making shopping lists from recipes that have shared ingredients can yield multiple lines of the same ingredient. **But**, Mealie has a mechanism to intelligently handle ingredients and make your day better. How? ### Set up your Foods and Units Do the following just **once**. Doing this applies to your whole group, so be careful. 1. Click on your name in the upper left corner to get to your settings 2. In the bottom right, select `Manage Data` 3. In the Management page, make sure that a little orange button says `Foods` -4. If your Foods database is empty, click `Seed` and choose your language. You should end up with a list of foods. (Wait bit for seeding to happen, and try not to seed more than once or you will have duplicates) +4. If your Foods database is empty, click `Seed` and choose your language. You should end up with a list of foods. (Wait a bit for seeding to happen, and try not to seed more than once or you will have duplicates) 5. Click the little orange `Foods` button and now choose `Units`. 6. Click `Seed` and choose your language. You should end up with a list of units (e.g. `tablespoon`) @@ -33,9 +33,9 @@ Do the following for each recipe you want to intelligently handle ingredients. Scaling up this recipe or adding it to a Shopping List will now smartly take care of ingredient amounts and duplicate combinations. -## Is it Safe to Upgrade Mealie? +## Is it safe to upgrade Mealie? -Yes. If you are using the v1 branches (including beta), you can upgrade to the latest version of Mealie without performing a site Export/Restore. This process was required in previous versions of Mealie, however we've automated the database migration process to make it easier to upgrade. Not that if you were using the v0.5.x version, you CANNOT upgrade to the latest version automatically. You must follow the migration instructions in the documentation. +Yes. If you are using the v1 branches (including beta), you can upgrade to the latest version of Mealie without performing a site Export/Restore. This process was required in previous versions of Mealie, however we've automated the database migration process to make it easier to upgrade. Note that if you were using the v0.5.x version, you CANNOT upgrade to the latest version automatically. You must follow the migration instructions in the documentation. - [Migration From v0.5.x](./migrating-to-mealie-v1.md) @@ -45,7 +45,7 @@ You can change the theme by settings the environment variables. - [Backend Config - Themeing](./installation/backend-config.md#themeing) -## How can I change the Login Session Timeout? +## How can I change the login session timeout? Login session can be configured by setting the `TOKEN_TIME` variable on the backend container. @@ -53,7 +53,7 @@ Login session can be configured by setting the `TOKEN_TIME` variable on the back ## Can I serve Mealie on a subpath? -No. Due to limitations from the Javascript Framework, mealie doesn't support serving Mealie on a subpath. +No. Due to limitations from the JavaScript Framework, Mealie doesn't support serving Mealie on a subpath. ## Can I install Mealie without docker? @@ -130,8 +130,8 @@ stateDiagram-v2 For more information, check out the [Permissions and Public Access guide](./usage/permissions-and-public-access.md). -## Can I use fail2ban with mealie? -Yes, mealie is configured to properly forward external IP addresses into the `mealie.log` logfile. Note that due to restrictions in docker, IP address forwarding only works on Linux. +## Can I use fail2ban with Mealie? +Yes, Mealie is configured to properly forward external IP addresses into the `mealie.log` logfile. Note that due to restrictions in docker, IP address forwarding only works on Linux. Your fail2ban usage should look like the following: ``` @@ -139,11 +139,11 @@ Use datepattern : %d-%b-%y %H:%M:%S : Day-MON-Year2 24hour:Minute:Second Use failregex line : ^ERROR:\s+Incorrect username or password from ``` -## Why An API? -An API allows integration into applications like [Home Assistant](https://www.home-assistant.io/) that can act as notification engines to provide custom notifications based on Meal Plan data to remind you to defrost the chicken, marinade the steak, or start the CrockPot. Additionally, you can access nearly any backend service via the API giving you total control to extend the application. To explore the API spin up your server and navigate to http://yourserver.com/docs for interactive API documentation. +## Why an API? +An API allows integration into applications like [Home Assistant](https://www.home-assistant.io/) that can act as notification engines to provide custom notifications based on Meal Plan data to remind you to defrost the chicken, marinate the steak, or start the CrockPot. Additionally, you can access nearly any backend service via the API giving you total control to extend the application. To explore the API spin up your server and navigate to http://yourserver.com/docs for interactive API documentation. -## Why a Database? -Some users of static-site generator applications like ChowDown have expressed concerns about their data being stuck in a database. Considering this is a new project, it is a valid concern to be worried about your data. Mealie specifically addresses this concern by provided automatic daily backups that export your data in json, plain-text markdown files, and/or custom Jinja2 templates. **This puts you in control of how your data is represented** when exported from Mealie, which means you can easily migrate to any other service provided Mealie doesn't work for you. +## Why a database? +Some users of static-site generator applications like ChowDown have expressed concerns about their data being stuck in a database. Considering this is a new project, it is a valid concern to be worried about your data. Mealie specifically addresses this concern by providing automatic daily backups that export your data in json, plain-text markdown files, and/or custom Jinja2 templates. **This puts you in control of how your data is represented** when exported from Mealie, which means you can easily migrate to any other service provided Mealie doesn't work for you. As to why we need a database? From 17f9eef5516776d7df77a5094dd94a0a915f1ed9 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Mon, 8 Jul 2024 05:01:31 -0500 Subject: [PATCH 2/2] docs: Update API Docs (#3856) --- mealie/app.py | 11 +++-------- mealie/routes/_base/base_controllers.py | 2 +- mealie/routes/admin/admin_analytics.py | 2 +- .../routes/groups/controller_group_notifications.py | 2 +- mealie/routes/spa/__init__.py | 4 ++-- mealie/routes/users/registration.py | 2 +- mealie/routes/validators/__init__.py | 2 +- .../services/event_bus_service/event_bus_service.py | 10 ++++++++-- 8 files changed, 18 insertions(+), 17 deletions(-) diff --git a/mealie/app.py b/mealie/app.py index 63434b445ec..069d0f7e316 100644 --- a/mealie/app.py +++ b/mealie/app.py @@ -17,18 +17,14 @@ settings = get_app_settings() -description = f""" +description = """ Mealie is a web application for managing your recipes, meal plans, and shopping lists. This is the Restful API interactive documentation that can be used to explore the API. If you're justing getting started with the API and want to get started quickly, you can use the -[API Usage | Mealie Docs](https://nightly.mealie.io/documentation/getting-started/api-usage/) +[API Usage | Mealie Docs](https://docs.mealie.io/documentation/getting-started/api-usage/) as a reference for how to get started. -As of this release {APP_VERSION}, Mealie is still in rapid development and therefore some of these APIs may -change from version to version. - - If you have any questions or comments about mealie, please use the discord server to talk to the developers or other community members. If you'd like to file an issue, please use the [GitHub Issue Tracker | Mealie](https://github.com/mealie-recipes/mealie/issues/new/choose) @@ -36,10 +32,9 @@ ## Helpful Links - [Home Page](https://mealie.io) -- [Documentation](https://nightly.mealie.io) +- [Documentation](https://docs.mealie.io) - [Discord](https://discord.gg/QuStdQGSGK) - [Demo](https://demo.mealie.io) -- [Beta](https://demo.mealie.io) """ logger = get_logger() diff --git a/mealie/routes/_base/base_controllers.py b/mealie/routes/_base/base_controllers.py index b0420870257..5ef1678cd38 100644 --- a/mealie/routes/_base/base_controllers.py +++ b/mealie/routes/_base/base_controllers.py @@ -131,7 +131,7 @@ class BaseCrudController(BaseUserController): Base class for all CRUD controllers to facilitate common CRUD functions. """ - event_bus: EventBusService = Depends(EventBusService.create) + event_bus: EventBusService = Depends(EventBusService.as_dependency) def publish_event(self, event_type: EventTypes, document_data: EventDocumentDataBase, message: str = "") -> None: self.event_bus.dispatch( diff --git a/mealie/routes/admin/admin_analytics.py b/mealie/routes/admin/admin_analytics.py index 14691d5be6e..f9b571f792b 100644 --- a/mealie/routes/admin/admin_analytics.py +++ b/mealie/routes/admin/admin_analytics.py @@ -6,7 +6,7 @@ from mealie.schema.analytics.analytics import MealieAnalytics from mealie.services.analytics.service_analytics import AnalyticsService -router = APIRouter(prefix="/analytics") +router = APIRouter(prefix="/analytics", include_in_schema=False) # deprecated - use statistics route instead @controller(router) diff --git a/mealie/routes/groups/controller_group_notifications.py b/mealie/routes/groups/controller_group_notifications.py index fe3576ed6b4..1162f925047 100644 --- a/mealie/routes/groups/controller_group_notifications.py +++ b/mealie/routes/groups/controller_group_notifications.py @@ -35,7 +35,7 @@ @controller(router) class GroupEventsNotifierController(BaseUserController): - event_bus: EventBusService = Depends(EventBusService.create) + event_bus: EventBusService = Depends(EventBusService.as_dependency) @cached_property def repo(self): diff --git a/mealie/routes/spa/__init__.py b/mealie/routes/spa/__init__.py index 3ec82eaea24..9ce813c1d04 100644 --- a/mealie/routes/spa/__init__.py +++ b/mealie/routes/spa/__init__.py @@ -221,6 +221,6 @@ def mount_spa(app: FastAPI): global __contents __contents = pathlib.Path(__app_settings.STATIC_FILES).joinpath("index.html").read_text() - app.get("/g/{group_slug}/r/{recipe_slug}")(serve_recipe_with_meta) - app.get("/g/{group_slug}/shared/r/{token_id}")(serve_shared_recipe_with_meta) + app.get("/g/{group_slug}/r/{recipe_slug}", include_in_schema=False)(serve_recipe_with_meta) + app.get("/g/{group_slug}/shared/r/{token_id}", include_in_schema=False)(serve_shared_recipe_with_meta) app.mount("/", SPAStaticFiles(directory=__app_settings.STATIC_FILES, html=True), name="spa") diff --git a/mealie/routes/users/registration.py b/mealie/routes/users/registration.py index dd30684edc9..4d66b55e3b8 100644 --- a/mealie/routes/users/registration.py +++ b/mealie/routes/users/registration.py @@ -15,7 +15,7 @@ @controller(router) class RegistrationController(BasePublicController): - event_bus: EventBusService = Depends(EventBusService.create) + event_bus: EventBusService = Depends(EventBusService.as_dependency) @router.post("", response_model=UserOut, status_code=status.HTTP_201_CREATED) def register_new_user(self, data: CreateUserRegistration): diff --git a/mealie/routes/validators/__init__.py b/mealie/routes/validators/__init__.py index a133c15a713..b90243b152f 100644 --- a/mealie/routes/validators/__init__.py +++ b/mealie/routes/validators/__init__.py @@ -6,4 +6,4 @@ router = APIRouter() -router.include_router(validators.router, prefix=prefix, tags=["Validators"]) +router.include_router(validators.router, prefix=prefix, tags=["Validators"], include_in_schema=False) diff --git a/mealie/services/event_bus_service/event_bus_service.py b/mealie/services/event_bus_service/event_bus_service.py index c97d73952ba..d37d3ce090c 100644 --- a/mealie/services/event_bus_service/event_bus_service.py +++ b/mealie/services/event_bus_service/event_bus_service.py @@ -1,4 +1,4 @@ -from fastapi import BackgroundTasks, Depends +from fastapi import BackgroundTasks, Depends, Query from pydantic import UUID4 from sqlalchemy.orm.session import Session @@ -84,5 +84,11 @@ def publish_event(self, event: Event) -> None: listener.publish_to_subscribers(event, subscribers) @classmethod - def create(cls, bg: BackgroundTasks, session=Depends(generate_session), group_id: UUID4 | None = None): + def as_dependency( + cls, + bg: BackgroundTasks, + session=Depends(generate_session), + group_id: UUID4 | None = Query(None, include_in_schema=False), + ): + """Convenience method to use as a dependency in FastAPI routes""" return cls(bg, session, group_id)