Giter VIP home page Giter VIP logo

mealie-recipes / mealie Goto Github PK

View Code? Open in Web Editor NEW
5.3K 5.3K 579.0 384.07 MB

Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and mealie will automatically import the relevant data or add a family recipe with the UI editor

Home Page: https://docs.mealie.io

License: GNU Affero General Public License v3.0

Dockerfile 0.23% Python 58.80% Shell 0.05% JavaScript 0.79% Vue 30.88% Jinja 0.02% Mako 0.02% TypeScript 9.19% SCSS 0.01%
hacktoberfest hacktoberfest2022 meal-plans recipe-manager self-hosted

mealie's People

Contributors

bentipa avatar boc-the-git avatar cmboii avatar cmintey avatar dependabot[bot] avatar dmarcoux avatar dorj222 avatar drumstickx avatar fleshgolem avatar grssmnn avatar hay-kot avatar jackbailey avatar jecorn avatar kuchenpirat avatar lindell avatar michael-genson avatar miroito avatar mtoohey31 avatar p0lycarpio avatar pfischbeck avatar rastacalavera avatar realfoxie avatar renovate[bot] avatar richardmitic avatar sephrat avatar tommatheussen avatar wengtad avatar xarantolus avatar zackbcom avatar zierbeek avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mealie's Issues

[Feature] Flavor Profile

I realize this would probably be a bit down the line from where the project is right now, but the below comment made me think of the ability to create a flavor profile for a particular recipe as part of a rating system. So the ability to rate it on Umami / Temperature / Sweet / Bitter / Salty / Sour / Texture / Spicy.

Maybe the ratings show up in a Radar Chart. This is probably not something that would be printed normally. Maybe have an option on the print screen whether to include or not.

It would be nice if we could have our own "fields" (fields could just be tags/labels with values). Cook time and prep time are common in cooking (obviously) but some of us might have needs to track other items and search on it. A few examples could be sodium, or level of spicy/heat.
Originally posted by @mrherman in #63 (comment)

Images saved with no way to delete when add recipe via URL fails

When adding a recipe via URL and it fails the image still gets saved to /data/img, with no way to delete or clean up the directory without manually deleting the file.

Expected behavior: If the import via URL fails then the image should never be saved (or deleted if previously saved).

It's probably worth checking if other things get saved/changed before an import fails and not cleaned up, database entries perhaps? I didn't check.

New Logo

Currently the "Logo" for the site is a Font Awesome Icon. I'd love to have a legit "logo" If anyone wants to submit a logo please do.

Feature: Crosslink ingredients to Recipe's

e.g. have an ingredient be a link to another recipe within mealie (or maybe any link?).

An example of this would be a Jam filled Pastry. You'd make a recipe for the jam, the pastry dough, and then link those in the ingredient list of the Pastry ingredient. This is really useful for ingredients that are used across many recipes. Instead of copying that portion of the recipe to each thing that contains it. you can have a single recipe for it and just link to the rest.

I'm not sure the best way for this to be done, but I imagine a URL field below the ingredient name field would suffice as a start.

Improved Logging

Currently, back end response processing are wrapped in a try/except block providing pretty much no useful information to log and troubleshoot issues. This should be refactored using the logger to include details messages for what went wrong.

Feature: Version Control

Beyond the category and tagging system, in cooking, recipes go through renditions, especially when scale is involved or individual tastes change. With physical cookbooks, people tend to take an existing recipe and tweak it, thereby creating a different version that may be used for certain occasions, or in place of a previous rendition.

Some sort of light-weight version control system could be added that applied to recipes imported or created manually.

  • Upon creation/import, recipe tagged as main or v1.0
  • Edits to the recipe and saves would roll a new version. Could prompt for major/minor changes to determine if major or dot release version change

Add from URL

I don't see a way to add a recipe form a URL on mobile, since the URL option only seems to appear on mouse over? Unless i;m missing something. Otherwise, looks awesome so far!

[Feature] Auto-generated shopping list based on Meal Plan

After creating a meal plan, it would be great to have a shopping list generated which aggregates ingredients from all recipes within the plan. This way you don't need to dig through each recipe to figure out what to buy for the week.

Internal error when adding URL

When adding a random recipe URL (https://www.chefkoch.de/rezepte/2235331358009600/Pizza-Knoblauch-Champignon-Paprika-vegan.html) this error occurs:

mealie           | INFO:     172.18.0.1:56506 - "POST /api/recipe/create-url/ HTTP/1.1" 500 Internal Server Error
mealie           | ERROR:    Exception in ASGI application
mealie           | Traceback (most recent call last):
mealie           |   File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi
mealie           |     result = await app(self.scope, self.receive, self.send)
mealie           |   File "/usr/local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in __call__
mealie           |     return await self.app(scope, receive, send)
mealie           |   File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 179, in __call__
mealie           |     await super().__call__(scope, receive, send)
mealie           |   File "/usr/local/lib/python3.8/site-packages/starlette/applications.py", line 111, in __call__
mealie           |     await self.middleware_stack(scope, receive, send)
mealie           |   File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in __call__
mealie           |     raise exc from None
mealie           |   File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in __call__
mealie           |     await self.app(scope, receive, _send)
mealie           |   File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in __call__
mealie           |     raise exc from None
mealie           |   File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in __call__
mealie           |     await self.app(scope, receive, sender)
mealie           |   File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 566, in __call__
mealie           |     await route.handle(scope, receive, send)
mealie           |   File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle
mealie           |     await self.app(scope, receive, send)
mealie           |   File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 41, in app
mealie           |     response = await func(request)
mealie           |   File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 182, in app
mealie           |     raw_response = await run_endpoint_function(
mealie           |   File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 133, in run_endpoint_function
mealie           |     return await dependant.call(**values)
mealie           |   File "./routes/recipe_routes.py", line 45, in get_recipe_url
mealie           |     slug = create_from_url(url)
mealie           |   File "./services/scrape_services.py", line 29, in create_from_url
mealie           |     recipe = Recipe(**recipe_data)
mealie           |   File "pydantic/main.py", line 346, in pydantic.main.BaseModel.__init__
mealie           | pydantic.error_wrappers.ValidationError: 1 validation error for Recipe
mealie           | recipeInstructions
mealie           |   value is not a valid list (type=type_error.list)

I started Mealie using the Docker Compose file from the docs.

Dockerfile has no defined volumes

The volumes mapped in docker-compose.yml should also be added as VOLUME tags in the docker file.

At the time of writing those would be:
VOLUME ["/app/data/img", "/app/data/backups"]

add to unraid app store

would be cool if you could have this published in the unraid app store, id buy you a couple coffees. :-)

Suggestion: individual and multi/shareable user recipes

I know there is no user implementation right now but maby something to think about:

I'm personally going to serve (pun intended) this application to my girlfriend, her mom, my mom and her sister to create a database of all family recipes and favorites.

What I would suggest is using per user recipes which are group shareable with a checkbox from the recipe edit page.

example mealie

The cleanest method would be a separate tab with shared recipes, preventing clutter on your personal recipe page/list.

EDIT:
Maby add a group model: friends, family

Possibilities to create meal plan based on rules

Hello,

First of all, I would like to say thank you for this project .
I just discovered this project on Reddit, installed on podman in 5m and I already have 10 recipes imported.

I would like to know ( already search though all open issue and didn't find one related to this demand ) if you plan to improve the meal plan generator ?

What do you think about the abilities to add some basic rules based on tags like :

  • Min/Max Tags / week or month ( For example, min 1 * fish, max 2 * meat, at least 1 soup , max 2 * pizza / month etc .. )
  • Season recipe ( based on ingredient ? or tag ? ), Maybe with a "Season score" based on all parsed ingredient or at least, be able to only select some tags for the meal plan ( "January" tags for example )
  • Always take the oldest recipe done to avoid same plan two week consecutive

Thx a lot for all your work

Empty line in "Notes" crashing

Hi,
first of all.. great! thanks for this.
I think it's not a big deal to fix this but when a recipe is saved by empty note line (by mistake) FastAPI is throwing an error and not loading the recipe. and backs to normal once the empty entry deleted from mongodb

notes: [
{
title: 'OK',
text: 'This is ok.'
},
{
text: ''
}

here is the logs, if that helps:

mealie | ERROR: Exception in ASGI application
mealie | Traceback (most recent call last):
mealie | File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi
mealie | result = await app(self.scope, self.receive, self.send)
mealie | File "/usr/local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in call
mealie | return await self.app(scope, receive, send)
mealie | File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 179, in call
mealie | await super().call(scope, receive, send)
mealie | File "/usr/local/lib/python3.8/site-packages/starlette/applications.py", line 111, in call
mealie | await self.middleware_stack(scope, receive, send)
mealie | File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in call
mealie | raise exc from None
mealie | File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in call
mealie | await self.app(scope, receive, _send)
mealie | File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in call
mealie | raise exc from None
mealie | File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in call
mealie | await self.app(scope, receive, sender)
mealie | File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 566, in call
mealie | await route.handle(scope, receive, send)
mealie | File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle
mealie | await self.app(scope, receive, send)
mealie | File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 41, in app
mealie | response = await func(request)
mealie | File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 182, in app
mealie | raw_response = await run_endpoint_function(
mealie | File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 133, in run_endpoint_function
mealie | return await dependant.call(**values)
mealie | File "./routes/recipe_routes.py", line 26, in get_recipe
mealie | recipe = Recipe.get_by_slug(recipe_slug)
mealie | File "./services/recipe_services.py", line 99, in get_by_slug
mealie | return Recipe._unpack_doc(document)
mealie | File "./services/recipe_services.py", line 91, in _unpack_doc
mealie | return cls(**document)
mealie | File "pydantic/main.py", line 346, in pydantic.main.BaseModel.init
mealie | pydantic.error_wrappers.ValidationError: 1 validation error for Recipe
mealie | notes -> 1 -> title
mealie | field required (type=value_error.missing)

When manually adding recipe without image, no error is thrown, and loading bar shown forever

Apparently a recipe cannot be saved without selecting an image. (This might be the actual bug, or desired functionality, I'm not a 100% certain).

However, when trying to manually add a recipe with no selected image, a progress bar appears, but nothing further happens. Upon inspecting the console, I saw that an error being thrown: TypeError: null is not an object (evaluating 'e.fileObject.name').

To fix this bug: either allow creation without image, or show an error dialog when saving fails. I think that in general, error handling might be missing from the dialog, but it behaves in a different manner when other data is missing.

Feature: Search using tags and/or categories

I have imported a couple of reciepes, added them to categories (e.g. Fish, Salad), and applied a few labels (e.g. "meal prep", "breakfast"). When I attempt to search using any of those values, nothing is found. Ideally the search system should provide the results of those recipes that contain the values.

json editor has no save button

Standard docker-compose using provided .yml file

When adding a recipe and clicking the {} icon to bring up the json editor, there is no option to save or otherwise close the editor. I see a small icon for fullscreen, but that's it.

Please advise.

Thanks

Error importing

I get the following error when I try ti import from a URL. I am using your basic docker-compose.
2021-01-03T00:14:14.494770224Z INFO: 192.168.2.202:36156 - "POST /api/recipe/create-url/ HTTP/1.1" 400 Bad Request

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: redacted  # Change!
      MONGO_INITDB_ROOT_PASSWORD: redacted   # Change!

  mongo-express: # Optional Mongo GUI
    image: mongo-express
    restart: always
    ports:
      - 9091:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: redacted
      ME_CONFIG_MONGODB_ADMINPASSWORD: redacted
  mealie:
    container_name: mealie
    image: hkotel/mealie:latest
    restart: always
    ports:
      - 9002:9000
    environment:
      db_username: redacted     # Your Mongo DB Username - Please Change
      db_password: redacted  # Your Mongo DB Password - Please Change
      db_host: mongo
      db_port: 27017    # The Default port for Mongo DB
    volumes:
      - ./data/img:/app/data/img
      - ./data/backups:/app/data/backups      

cannot add linefeed \n in recipe editor

When manually adding a recipe (edit) linefeeds are shown in the input boxes.
when rendering the recipe (view) these are removed.

is there a way to force a linefeed ?

Multilanguage support possible?

Hello,

i would like to know if multiple languages are (or will be) supported? I would like to use this for our cooking-club with some friends, but i would like to know if this application can be set to another language (dutch for example) because some of them have limited knowlegde of english. I would gladly like to help with the translations...

keep up the great work!

Internal Server Error when adding new recipe

Hey, first of all thanks for all your work.

I tried to use the app for the first time, but when i manually create a recipe, it will not get created. Instead i get a 500 Internal Server Error.

Here are my logs:
`INFO: Started server process [1]

INFO: Waiting for application startup.

INFO: Application startup complete.

INFO: Uvicorn running on http://0.0.0.0:9000 (Press CTRL+C to quit)

Jobstore default:

webhooks (trigger: cron[hour='0', minute='0'], next run at: 2021-01-17 00:00:00 UTC)


auto_backup_job (trigger: cron[hour='3'], next run at: 2021-01-17 03:00:00 UTC)

INFO: 172.18.0.5:38854 - "GET / HTTP/1.1" 200 OK

INFO: 172.18.0.5:38854 - "GET /static/css/app.953f74d2.css HTTP/1.1" 200 OK

INFO: 172.18.0.5:38858 - "GET /static/js/chunk-vendors.c635b5be.js HTTP/1.1" 200 OK

INFO: 172.18.0.5:38856 - "GET /static/css/chunk-vendors.2af56a54.css HTTP/1.1" 200 OK

INFO: 172.18.0.5:38860 - "GET /static/js/app.61726b16.js HTTP/1.1" 200 OK

INFO: 172.18.0.5:38858 - "GET /api/site-settings/themes/default/ HTTP/1.1" 200 OK

INFO: 172.18.0.5:38856 - "GET /api/all-recipes/?keys=name&keys=slug&keys=image&keys=description&keys=dateAdded&keys=rating&num=100 HTTP/1.1" 200 OK

INFO: 172.18.0.5:38940 - "GET / HTTP/1.1" 200 OK

INFO: 172.18.0.5:38940 - "GET /static/css/app.953f74d2.css HTTP/1.1" 200 OK

INFO: 172.18.0.5:38944 - "GET /static/js/app.61726b16.js HTTP/1.1" 200 OK

INFO: 172.18.0.5:38942 - "GET /static/css/chunk-vendors.2af56a54.css HTTP/1.1" 200 OK

INFO: 172.18.0.5:38946 - "GET /static/js/chunk-vendors.c635b5be.js HTTP/1.1" 200 OK

INFO: 172.18.0.5:38946 - "GET /api/site-settings/themes/default/ HTTP/1.1" 200 OK

INFO: 172.18.0.5:38942 - "GET /api/all-recipes/?keys=name&keys=slug&keys=image&keys=description&keys=dateAdded&keys=rating&num=100 HTTP/1.1" 200 OK

INFO: 172.18.0.5:38942 - "GET /static/favicon.ico HTTP/1.1" 200 OK

INFO: 172.18.0.5:38982 - "POST /api/recipe/create-url/ HTTP/1.1" 500 Internal Server Error

ERROR: Exception in ASGI application

Traceback (most recent call last):

File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi

result = await app(self.scope, self.receive, self.send)

File "/usr/local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in call

return await self.app(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 179, in call

await super().__call__(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/applications.py", line 111, in call

await self.middleware_stack(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in call

raise exc from None

File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in call

await self.app(scope, receive, _send)

File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in call

raise exc from None

File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in call

await self.app(scope, receive, sender)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 566, in call

await route.handle(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle

await self.app(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 41, in app

response = await func(request)

File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 182, in app

raw_response = await run_endpoint_function(

File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 133, in run_endpoint_function

return await dependant.call(**values)

File "./routes/recipe_routes.py", line 75, in parse_recipe_url

slug = create_from_url(url.url)

File "./services/scrape_services.py", line 66, in create_from_url

recipe_data = process_recipe_url(url)

File "./services/scrape_services.py", line 95, in process_recipe_url

new_recipe: dict = scrape_url(url, python_objects=True)[0]

IndexError: list index out of range

INFO: 172.18.0.5:38988 - "GET /api/all-recipes/?keys=name&keys=slug&keys=image&keys=description&keys=dateAdded&keys=rating&num=100 HTTP/1.1" 200 OK

[]

INFO: 172.18.0.5:40110 - "GET /api/meal-plan/all/ HTTP/1.1" 200 OK

INFO: 172.18.0.5:40112 - "GET /static/favicon.ico HTTP/1.1" 304 Not Modified

INFO: 172.18.0.5:40112 - "GET /api/meal-plan/this-week/ HTTP/1.1" 500 Internal Server Error

ERROR: Exception in ASGI application

Traceback (most recent call last):

File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi

result = await app(self.scope, self.receive, self.send)

File "/usr/local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in call

return await self.app(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 179, in call

await super().__call__(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/applications.py", line 111, in call

await self.middleware_stack(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in call

raise exc from None

File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in call

await self.app(scope, receive, _send)

File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in call

raise exc from None

File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in call

await self.app(scope, receive, sender)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 566, in call

await route.handle(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle

await self.app(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 41, in app

response = await func(request)

File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 182, in app

raw_response = await run_endpoint_function(

File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 133, in run_endpoint_function

return await dependant.call(**values)

File "./routes/meal_routes.py", line 74, in get_this_week

return MealPlan.this_week()

File "./services/meal_services.py", line 158, in this_week

meal_plan = MealPlan._unpack_doc(meal_plan[0])

File "/usr/local/lib/python3.8/site-packages/mongoengine/queryset/base.py", line 200, in getitem

queryset._cursor[key], _auto_dereference=self._auto_dereference,

File "/usr/local/lib/python3.8/site-packages/pymongo/cursor.py", line 649, in getitem

raise IndexError("no such item for Cursor instance")

IndexError: no such item for Cursor instance

INFO: 172.18.0.5:40140 - "POST /api/recipe/create-url/ HTTP/1.1" 500 Internal Server Error

ERROR: Exception in ASGI application

Traceback (most recent call last):

File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi

result = await app(self.scope, self.receive, self.send)

File "/usr/local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in call

return await self.app(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 179, in call

await super().__call__(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/applications.py", line 111, in call

await self.middleware_stack(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in call

raise exc from None

File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in call

await self.app(scope, receive, _send)

File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in call

raise exc from None

File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in call

await self.app(scope, receive, sender)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 566, in call

await route.handle(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle

await self.app(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 41, in app

response = await func(request)

File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 182, in app

raw_response = await run_endpoint_function(

File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 133, in run_endpoint_function

return await dependant.call(**values)

File "./routes/recipe_routes.py", line 75, in parse_recipe_url

slug = create_from_url(url.url)

File "./services/scrape_services.py", line 66, in create_from_url

recipe_data = process_recipe_url(url)

File "./services/scrape_services.py", line 95, in process_recipe_url

new_recipe: dict = scrape_url(url, python_objects=True)[0]

IndexError: list index out of range

INFO: 172.18.0.5:40146 - "GET /api/all-recipes/?keys=name&keys=slug&keys=image&keys=description&keys=dateAdded&keys=rating&num=100 HTTP/1.1" 200 OK

INFO: 172.18.0.5:40186 - "POST /api/recipe/create/ HTTP/1.1" 200 OK

INFO: 172.18.0.5:40246 - "POST /api/recipe/create/ HTTP/1.1" 200 OK

INFO: 172.18.0.5:40246 - "GET /api/recipe/tuna-sandwich/ HTTP/1.1" 200 OK

INFO: 172.18.0.5:40248 - "GET /static/favicon.ico HTTP/1.1" 304 Not Modified

INFO: 172.18.0.5:40248 - "GET /api/recipe/image/tuna-sandwich/?rnd=1 HTTP/1.1" 500 Internal Server Error

ERROR: Exception in ASGI application

Traceback (most recent call last):

File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi

result = await app(self.scope, self.receive, self.send)

File "/usr/local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in call

return await self.app(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 179, in call

await super().__call__(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/applications.py", line 111, in call

await self.middleware_stack(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in call

raise exc from None

File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in call

await self.app(scope, receive, _send)

File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in call

raise exc from None

File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in call

await self.app(scope, receive, sender)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 566, in call

await route.handle(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle

await self.app(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 41, in app

response = await func(request)

File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 182, in app

raw_response = await run_endpoint_function(

File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 133, in run_endpoint_function

return await dependant.call(**values)

File "./routes/recipe_routes.py", line 62, in get_recipe_img

return FileResponse(recipe_image)

File "/usr/local/lib/python3.8/site-packages/starlette/responses.py", line 257, in init

media_type = guess_type(filename or path)[0] or "text/plain"

File "/usr/local/lib/python3.8/mimetypes.py", line 292, in guess_type

return _db.guess_type(url, strict)

File "/usr/local/lib/python3.8/mimetypes.py", line 116, in guess_type

url = os.fspath(url)

TypeError: expected str, bytes or os.PathLike object, not NoneType

INFO: 172.18.0.5:40264 - "GET /api/recipe/null/ HTTP/1.1" 500 Internal Server Error

ERROR: Exception in ASGI application

Traceback (most recent call last):

File "/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi

result = await app(self.scope, self.receive, self.send)

File "/usr/local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in call

return await self.app(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/fastapi/applications.py", line 179, in call

await super().__call__(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/applications.py", line 111, in call

await self.middleware_stack(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 181, in call

raise exc from None

File "/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py", line 159, in call

await self.app(scope, receive, _send)

File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 82, in call

raise exc from None

File "/usr/local/lib/python3.8/site-packages/starlette/exceptions.py", line 71, in call

await self.app(scope, receive, sender)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 566, in call

await route.handle(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 227, in handle

await self.app(scope, receive, send)

File "/usr/local/lib/python3.8/site-packages/starlette/routing.py", line 41, in app

response = await func(request)

File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 182, in app

raw_response = await run_endpoint_function(

File "/usr/local/lib/python3.8/site-packages/fastapi/routing.py", line 133, in run_endpoint_function

return await dependant.call(**values)

File "./routes/recipe_routes.py", line 52, in get_recipe

recipe = Recipe.get_by_slug(recipe_slug)

File "./services/recipe_services.py", line 100, in get_by_slug

document = RecipeDocument.objects.get(slug=slug)

File "/usr/local/lib/python3.8/site-packages/mongoengine/queryset/base.py", line 270, in get

raise queryset._document.DoesNotExist(msg)

db.recipe_models.DoesNotExist: RecipeDocument matching query does not exist.`

No confirmation on delete

Just accidentally learned the hard way that there's no confirmation dialog that pops up when you click delete. Having delete immediately beside edit, it would be helpful for those of us with fat fingers to confirm before a recipe disappears lol

Feature: Allow saving incomplete meal plans

Hi, not sure if this is a bug, but I'm guessing this might be by design, so logging it as a feature request. I tried to save a meal plan where I only selected recipes on some of the days and where the other ones are blank, but it looks like the meal plan won't save unless all of the days have a recipe selected. It would be awesome if I could still save an incomplete meal plan and go back and edit it once I decide on meals for those days.

Can't save recipe

Hi,

for testing purposes ive spun this up in a brand new vps. installed Docker and docker-compose. Used your exact docker-compose from the website without changing anything. It doesnt seem to work though. I can't save Recipes. It just gets stuck in the saving animation.

this is the EXACT code i was using, because its on a vps just for testing this. Anything wrong with it?

version: "3.1"
services:
  mealie:
    container_name: mealie
    image: hkotel/mealie:latest
    restart: always
    ports:
      - 9000:9000
    environment:
      db_username: root     # Your Mongo DB Username - Please Change
      db_password: example  # Your Mongo DB Password - Please Change
      db_host: mongo
      db_port: 27017    # The Default port for Mongo DB
      TZ: America/Anchorage
    volumes:
      - ./data/img:/app/data/img
      - ./data/backups:/app/data/backups

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root  # Change!
      MONGO_INITDB_ROOT_PASSWORD: example   # Change!

  mongo-express: # Optional Mongo GUI
    image: mongo-express
    restart: always
    ports:
      - 9091:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example

Can't delete recipe after changing name

After importing a recipe via URL, then changing the name of the recipe via the edit I can not delete the recipe via the edit->trash can. It asks for confirm, and acts like it works but the recipe is still there after refreshing the page.

Steps to reproduce:
Import a recipe, I used: https://steamykitchen.com/10989-indian-dal-nirvana.html
Edit the recipe and change the name: I removed the "(Dal Makhani)" part of the title.
Save the recipe
Edit recipe again, and delete.
Refresh home page and see recipe still there.

I was on version v0.0.2

sample docker-compose under getting-started doesn't persist mongo db

On the Mealie website under getting started it gives a docker-compose file. It doesn't persist the directory /data/db in the mongo container. It also doesn't allow the user to access the logs easilt in the mealier container. Suggest changing it to show

Under Mongo -
volumes:
- ./mongo_data:/data/db

Under Mealie -
volumes:
- ./mealie_data:/app/data

Or whatever host subdirectory you think is appropriate.

Dockerfile exposes port 80, but runs on port 9000

The Dockerfile exposes port 80 (Inherited from tiangolo/uvicorn-gunicorn-fastapi which in turn inherits it from tiangolo/uvicorn-gunicorn), but the cmd in the dockerfile runs uvicorn on port 9000. I don't think there's any problem in running on port 80 in docker, since nothing else will run on the containers port 80 - and users can map the port however they like (The docker-compose.yml already maps to a different port than 9000).

Separate units and ingredients, add scaling

There could be a scale option, default to 1x, that could change how much of each ingredient is needed. For example, instead of

Ingredients:
"1 cup flour",
"1/2 cup butter"

It could be

Scale: 1.0
Ingredients: [
  {  Name: "butter",
      Amount: 0.5,
      Unit: "cup",
      Plural: "cups",
      Extra: "melted"
  },
Etc
] 

Which displays as

{{Scale*amount}} {{unit(if >=2, plural}} {{name}} ({{extra}})
i.e.
1/2 cup butter (melted)

Tab title and favicon

This isn't a major concern, more of an observation. When I visit my installation in a browser on a computer, the title on the tab just says "frontend" and the favicon is a green V. I would have expected the Mealie icon (I do inderstand this is still a work in progress as well lol) and the title to be Mealie so we can tell what the tab is properly. Is this expected, or something I can change on my end?

Can't remove tags/categories

Hi,

Just deployed Mealie on Docker Swarm using the exact docker compose found on your site, only changed the volumes and DB password. Added a recipe from Bonappetit and played around with it, but after adding a tag or category, I'm unable to remove it.

Tested it on Firefox, Opera and Edge. Don't get any error logs either.

Feature: Plugin Framework

Oddly enough, I've been planning/designing something very similar to mealie for months but never managed to get it off of the ground.

One of the thoughts behind my implementation was what about all of the other sites that don't adhere to to the recipe schema that scrape-schema-recipe can parse. For example, one of my favorite recipe sites, https://thesaltymarshmallow.com/, has their own templating system. Many of their recipes don't seem to be syndicated to other sites as well.

For this reason, I was working on building a plugin framework to solve that problem. Mealie could benefit from it tremendously by allowing the community to supply their own plugins for additional sites who don't store recipes in a standard format. This could be done through a framework implementing just requests and bs4 and allowing people to specify logic to parse into the format required by the app.

Of course, the challenge would be allowing such a framework while maintaining speed -- you could use something like Celery or another job queueing system in order to offload imports from the main thread (which is something else you might want to look into, just in general).

Love the work you've done so far, can't wait to see where this leads.

Feature: multiple recipes per day in meal plans

Hi, thanks for releasing this--I've been searching for something like this for a while and even in its early state it's looking great. One feature that would be nice to have is support for selecting multiple recipes for a given day in a meal plan (for example, a side dish and a main course).

Request: Delete Confirmation

The option to delete a recipe can easily be hit in error being next to other icons and no text. I recommend a confirmation prompt to delete a recipe when editing.

Dark Mode: Color issues

What a great app. Whole family loves it. Found one issue with the dark mode.
I saw that the colors are randomized. Maybe it would be good to set a default set of colors that are accessible, following the WCAG 2.1 Guidelines.

I'm currently working on updating our application at work, I might have some free time to work on some enhancements.

Saw some issues with the generated colors and the text.
image

Scraper not working with recipe containing HowToSection

The scraper is not working with some recipes, such as this one.

As far as I can tell, it seems to be related to the fact that these recipes uses HowToSection in the recipeInstructions. This is valid according to schema.org, but is not being parsed correctly.

Importing recipes from some sites does not properly create recipeInstructions

In some cases (so far I have only seen from thescramble), recipeInstructions is added as an array of strings in the json as opposed to the expected array of json objects ( in the format of { "text" : "step_instructions" } for anyone else who hits this ) which the viewer does not show.

Relatively easy to modify, so not a huge deal, but probably worth fixing.
Thank you for all your work on this!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.