mirror of
https://github.com/hay-kot/mealie.git
synced 2025-08-22 06:23:34 -07:00
Refactor/response models (#169)
* cleanup
* split app/db versioning
* async file response
* refactor/recipe viewer + minor ui improvements
* auto grow size
* added async file responses
* docs/changelog
* "/" to open search bar
* docs/changelog
* change imports to use @/ for imports
* cleanup
* cleanup
* db to session
* theme + settings refactor
* bug/image save fix
* fixed failing tests
* fix last json bug - #155
* fix settings import
* fixed router link for site title
* add version tag
* v0.2.1 (#157)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
* Dropping Mongo From Dev Branch (#89)
* Fix link to Docker Hub
Found an extra s. DESTROYED it.
* initial pass
* second pass cleanup
* backup card framework
* backup card functionality
* translation
* upload button vile creation
* Release v0.1.0 Candidate (#85)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* build container
* webscraper hotfix
* dev bug: change data location to prevent reloads
* api docs
* api docs bug
* workflow update
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* Add French Translation (#93)
* New tests (#94)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
Co-authored-by: Hayden <hay-kot@pm.me>
* Mealplan CRUD Tests (#95)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix typos (#96)
* Settings, Themes and Migration Route Tests (#100)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
Co-authored-by: Hayden <hay-kot@pm.me>
* Refactor + New Docker File (#105)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
* docker-file shrink
* rebuild
* refactor: moving directories around
* adding funding
Co-authored-by: Hayden <hay-kot@pm.me>
* Meal planner improvements (#107)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
* docker-file shrink
* rebuild
* refactor: moving directories around
* adding funding
* mealplan redesign
Co-authored-by: Hayden <hay-kot@pm.me>
* Upload component (#108)
* unified upload button + download backups
* javascript toolings
* fix vuetur config
* fixed type check error
* refactor: clean up bag javascript
Co-authored-by: Hayden <hay-kot@pm.me>
* Upload component (#113)
* unified upload button + download backups
* javascript toolings
* fix vuetur config
* fixed type check error
* refactor: clean up bag javascript
* UI updates + name validation
* docs: changelog + sp
* fixed route links
* changelog
Co-authored-by: Hayden <hay-kot@pm.me>
* fixed menu links
* fixed poetry install on docker.dev build
* Migration redesign (#119)
* migration redesign init
* new color picker
* changelog
* added UI language selection
* fix layout issue on recipe editor
* remove git as dependency
* added UI editor for original URL
* CI/CD Tests
* test: fixed migration routes
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix link to dev-notes.md (#110)
* translation: add swedish (#128)
* language: da is Danish
* translations: add swedish
* scraper: unescape html in instructions (#129)
Some urls erroneously deliver escaped html their instructions,
sometimes they are even escaped on multiple levels like here:
https://www.ica.se/recept/kladdig-kladdkaka-722982/
```
>>> normalize_instruction("S&auml;tt ugnen p&aring; 200&deg;C.")
'Sätt ugnen på 200°C.'
```
* v0.2.0 Updates (#130)
* migration redesign init
* new color picker
* changelog
* added UI language selection
* fix layout issue on recipe editor
* remove git as dependency
* added UI editor for original URL
* CI/CD Tests
* test: fixed migration routes
* test todos
* bug/added docker volume
* chowdow test data
* partial image recipe image testing
* added card section card
* settings form
* homepage cetegory ui
* frontend category placeholder
* fixed broken scheduler
* remove old files
* removed temp test
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix missing translations key (#133)
* translation: add simplified & traditional chinese
* Fix missing translations
* fix chinese translations
* v0.2.0 Release Candidate (#141)
* Fix link to Docker Hub
Found an extra s. DESTROYED it.
* Release v0.1.0 Candidate (#85)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* build container
* webscraper hotfix
* notes hot fix
* bug: mongo updates fail #99
* Fix error message (#101)
* gh funding
* Create Issue Templates (#125)
* Create bug_report.md
* Create config.yml
Included a link to feature requests.
* Update config.yml
Fixed link I had for testing to the actual link
* Update bug_report.md
fix capitalization
* Update .github/ISSUE_TEMPLATE/bug_report.md
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* merge kentors changes
* refactor/recipe routers
* category/tag database relationship and endpoints
* frontend category management
* update branch todos
* bug/normalize recipe steps html
* remove console.log + refactor categories
* fix categories database errors
* refactor/ router endpoint
* refactor/ remove old code
* drag and drop ingredients
* general cleanup
* route refactoring
* changelog
* api refactoring + random cleanup
* fixed backwards sort
* Update mkdocs.yml (#137)
Fix warning from Deploy Docs github action
* fixed navigate on enter in search
* refactor/create global css
* added category scroll
* cleanup todos
* debug routes
* docs/new gifs & general updates
* cleanup
* fix list test
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* fix build
* fix duplicate editor
* fixed docker mount problem
* python 3.9
* added tasks for non-docker development
* remove old scripts
* dev updates
* fixed no image upload option
* get version from backend
* final docs pass
* .gitignore
* feature/markdown support for description and steps
* package-lock
* rename production task
* category import errors on import (#150)
Co-authored-by: hay-kot <hay-kot@pm.me>
* Feature/improved notifications (#152)
* category import errors on import
* Import Error Hotfix (#148)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
* Dropping Mongo From Dev Branch (#89)
* Fix link to Docker Hub
Found an extra s. DESTROYED it.
* initial pass
* second pass cleanup
* backup card framework
* backup card functionality
* translation
* upload button vile creation
* Release v0.1.0 Candidate (#85)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* build container
* webscraper hotfix
* dev bug: change data location to prevent reloads
* api docs
* api docs bug
* workflow update
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* Add French Translation (#93)
* New tests (#94)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
Co-authored-by: Hayden <hay-kot@pm.me>
* Mealplan CRUD Tests (#95)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix typos (#96)
* Settings, Themes and Migration Route Tests (#100)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
Co-authored-by: Hayden <hay-kot@pm.me>
* Refactor + New Docker File (#105)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
* docker-file shrink
* rebuild
* refactor: moving directories around
* adding funding
Co-authored-by: Hayden <hay-kot@pm.me>
* Meal planner improvements (#107)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
* docker-file shrink
* rebuild
* refactor: moving directories around
* adding funding
* mealplan redesign
Co-authored-by: Hayden <hay-kot@pm.me>
* Upload component (#108)
* unified upload button + download backups
* javascript toolings
* fix vuetur config
* fixed type check error
* refactor: clean up bag javascript
Co-authored-by: Hayden <hay-kot@pm.me>
* Upload component (#113)
* unified upload button + download backups
* javascript toolings
* fix vuetur config
* fixed type check error
* refactor: clean up bag javascript
* UI updates + name validation
* docs: changelog + sp
* fixed route links
* changelog
Co-authored-by: Hayden <hay-kot@pm.me>
* fixed menu links
* fixed poetry install on docker.dev build
* Migration redesign (#119)
* migration redesign init
* new color picker
* changelog
* added UI language selection
* fix layout issue on recipe editor
* remove git as dependency
* added UI editor for original URL
* CI/CD Tests
* test: fixed migration routes
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix link to dev-notes.md (#110)
* translation: add swedish (#128)
* language: da is Danish
* translations: add swedish
* scraper: unescape html in instructions (#129)
Some urls erroneously deliver escaped html their instructions,
sometimes they are even escaped on multiple levels like here:
https://www.ica.se/recept/kladdig-kladdkaka-722982/
```
>>> normalize_instruction("S&auml;tt ugnen p&aring; 200&deg;C.")
'Sätt ugnen på 200°C.'
```
* v0.2.0 Updates (#130)
* migration redesign init
* new color picker
* changelog
* added UI language selection
* fix layout issue on recipe editor
* remove git as dependency
* added UI editor for original URL
* CI/CD Tests
* test: fixed migration routes
* test todos
* bug/added docker volume
* chowdow test data
* partial image recipe image testing
* added card section card
* settings form
* homepage cetegory ui
* frontend category placeholder
* fixed broken scheduler
* remove old files
* removed temp test
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix missing translations key (#133)
* translation: add simplified & traditional chinese
* Fix missing translations
* fix chinese translations
* v0.2.0 Release Candidate (#141)
* Fix link to Docker Hub
Found an extra s. DESTROYED it.
* Release v0.1.0 Candidate (#85)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* build container
* webscraper hotfix
* notes hot fix
* bug: mongo updates fail #99
* Fix error message (#101)
* gh funding
* Create Issue Templates (#125)
* Create bug_report.md
* Create config.yml
Included a link to feature requests.
* Update config.yml
Fixed link I had for testing to the actual link
* Update bug_report.md
fix capitalization
* Update .github/ISSUE_TEMPLATE/bug_report.md
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* merge kentors changes
* refactor/recipe routers
* category/tag database relationship and endpoints
* frontend category management
* update branch todos
* bug/normalize recipe steps html
* remove console.log + refactor categories
* fix categories database errors
* refactor/ router endpoint
* refactor/ remove old code
* drag and drop ingredients
* general cleanup
* route refactoring
* changelog
* api refactoring + random cleanup
* fixed backwards sort
* Update mkdocs.yml (#137)
Fix warning from Deploy Docs github action
* fixed navigate on enter in search
* refactor/create global css
* added category scroll
* cleanup todos
* debug routes
* docs/new gifs & general updates
* cleanup
* fix list test
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* fix build
* fix duplicate editor
* fixed docker mount problem
* python 3.9
* added tasks for non-docker development
* remove old scripts
* dev updates
* fixed no image upload option
* get version from backend
* final docs pass
* .gitignore
* feature/markdown support for description and steps
* package-lock
* rename production task
* category import errors on import
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Bastien <43323819+Batgame@users.noreply.github.com>
Co-authored-by: sephrat <34862846+sephrat@users.noreply.github.com>
Co-authored-by: Nick CJ <17556895+nickcj931@users.noreply.github.com>
Co-authored-by: dekvall <dkvldev@gmail.com>
Co-authored-by: wengtad <wengtad93@gmail.com>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* test notifications
* unified notifications
* docs/changelog
Co-authored-by: hay-kot <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Bastien <43323819+Batgame@users.noreply.github.com>
Co-authored-by: sephrat <34862846+sephrat@users.noreply.github.com>
Co-authored-by: Nick CJ <17556895+nickcj931@users.noreply.github.com>
Co-authored-by: dekvall <dkvldev@gmail.com>
Co-authored-by: wengtad <wengtad93@gmail.com>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* Refactor/response models (#156) - First Pass
* cleanup
* split app/db versioning
* async file response
* refactor/recipe viewer + minor ui improvements
* auto grow size
* added async file responses
* docs/changelog
* "/" to open search bar
* docs/changelog
* change imports to use @/ for imports
* cleanup
* cleanup
* db to session
* theme + settings refactor
* bug/image save fix
* fixed failing tests
* fix last json bug - #155
* fix settings import
* fixed router link for site title
Co-authored-by: hay-kot <hay-kot@pm.me>
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Bastien <43323819+Batgame@users.noreply.github.com>
Co-authored-by: sephrat <34862846+sephrat@users.noreply.github.com>
Co-authored-by: Nick CJ <17556895+nickcj931@users.noreply.github.com>
Co-authored-by: dekvall <dkvldev@gmail.com>
Co-authored-by: wengtad <wengtad93@gmail.com>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* Revert "v0.2.1 (#157)" (#158)
This reverts commit a899f46464
.
* v0.2.1 (#159)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
* Dropping Mongo From Dev Branch (#89)
* Fix link to Docker Hub
Found an extra s. DESTROYED it.
* initial pass
* second pass cleanup
* backup card framework
* backup card functionality
* translation
* upload button vile creation
* Release v0.1.0 Candidate (#85)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* build container
* webscraper hotfix
* dev bug: change data location to prevent reloads
* api docs
* api docs bug
* workflow update
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* Add French Translation (#93)
* New tests (#94)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
Co-authored-by: Hayden <hay-kot@pm.me>
* Mealplan CRUD Tests (#95)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix typos (#96)
* Settings, Themes and Migration Route Tests (#100)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
Co-authored-by: Hayden <hay-kot@pm.me>
* Refactor + New Docker File (#105)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
* docker-file shrink
* rebuild
* refactor: moving directories around
* adding funding
Co-authored-by: Hayden <hay-kot@pm.me>
* Meal planner improvements (#107)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
* docker-file shrink
* rebuild
* refactor: moving directories around
* adding funding
* mealplan redesign
Co-authored-by: Hayden <hay-kot@pm.me>
* Upload component (#108)
* unified upload button + download backups
* javascript toolings
* fix vuetur config
* fixed type check error
* refactor: clean up bag javascript
Co-authored-by: Hayden <hay-kot@pm.me>
* Upload component (#113)
* unified upload button + download backups
* javascript toolings
* fix vuetur config
* fixed type check error
* refactor: clean up bag javascript
* UI updates + name validation
* docs: changelog + sp
* fixed route links
* changelog
Co-authored-by: Hayden <hay-kot@pm.me>
* fixed menu links
* fixed poetry install on docker.dev build
* Migration redesign (#119)
* migration redesign init
* new color picker
* changelog
* added UI language selection
* fix layout issue on recipe editor
* remove git as dependency
* added UI editor for original URL
* CI/CD Tests
* test: fixed migration routes
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix link to dev-notes.md (#110)
* translation: add swedish (#128)
* language: da is Danish
* translations: add swedish
* scraper: unescape html in instructions (#129)
Some urls erroneously deliver escaped html their instructions,
sometimes they are even escaped on multiple levels like here:
https://www.ica.se/recept/kladdig-kladdkaka-722982/
```
>>> normalize_instruction("S&auml;tt ugnen p&aring; 200&deg;C.")
'Sätt ugnen på 200°C.'
```
* v0.2.0 Updates (#130)
* migration redesign init
* new color picker
* changelog
* added UI language selection
* fix layout issue on recipe editor
* remove git as dependency
* added UI editor for original URL
* CI/CD Tests
* test: fixed migration routes
* test todos
* bug/added docker volume
* chowdow test data
* partial image recipe image testing
* added card section card
* settings form
* homepage cetegory ui
* frontend category placeholder
* fixed broken scheduler
* remove old files
* removed temp test
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix missing translations key (#133)
* translation: add simplified & traditional chinese
* Fix missing translations
* fix chinese translations
* v0.2.0 Release Candidate (#141)
* Fix link to Docker Hub
Found an extra s. DESTROYED it.
* Release v0.1.0 Candidate (#85)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* build container
* webscraper hotfix
* notes hot fix
* bug: mongo updates fail #99
* Fix error message (#101)
* gh funding
* Create Issue Templates (#125)
* Create bug_report.md
* Create config.yml
Included a link to feature requests.
* Update config.yml
Fixed link I had for testing to the actual link
* Update bug_report.md
fix capitalization
* Update .github/ISSUE_TEMPLATE/bug_report.md
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* merge kentors changes
* refactor/recipe routers
* category/tag database relationship and endpoints
* frontend category management
* update branch todos
* bug/normalize recipe steps html
* remove console.log + refactor categories
* fix categories database errors
* refactor/ router endpoint
* refactor/ remove old code
* drag and drop ingredients
* general cleanup
* route refactoring
* changelog
* api refactoring + random cleanup
* fixed backwards sort
* Update mkdocs.yml (#137)
Fix warning from Deploy Docs github action
* fixed navigate on enter in search
* refactor/create global css
* added category scroll
* cleanup todos
* debug routes
* docs/new gifs & general updates
* cleanup
* fix list test
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* fix build
* fix duplicate editor
* fixed docker mount problem
* python 3.9
* added tasks for non-docker development
* remove old scripts
* dev updates
* fixed no image upload option
* get version from backend
* final docs pass
* .gitignore
* feature/markdown support for description and steps
* package-lock
* rename production task
* category import errors on import (#150)
Co-authored-by: hay-kot <hay-kot@pm.me>
* Feature/improved notifications (#152)
* category import errors on import
* Import Error Hotfix (#148)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
* Dropping Mongo From Dev Branch (#89)
* Fix link to Docker Hub
Found an extra s. DESTROYED it.
* initial pass
* second pass cleanup
* backup card framework
* backup card functionality
* translation
* upload button vile creation
* Release v0.1.0 Candidate (#85)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* build container
* webscraper hotfix
* dev bug: change data location to prevent reloads
* api docs
* api docs bug
* workflow update
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* Add French Translation (#93)
* New tests (#94)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
Co-authored-by: Hayden <hay-kot@pm.me>
* Mealplan CRUD Tests (#95)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix typos (#96)
* Settings, Themes and Migration Route Tests (#100)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
Co-authored-by: Hayden <hay-kot@pm.me>
* Refactor + New Docker File (#105)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
* docker-file shrink
* rebuild
* refactor: moving directories around
* adding funding
Co-authored-by: Hayden <hay-kot@pm.me>
* Meal planner improvements (#107)
* dev-bug: fixed vscode freezes
* test: refactor database init to support tests
* mealplan CRUD testing
* restructure test folder
* git attributes
* tests: migration, settings, theme routes testing
* docker-file shrink
* rebuild
* refactor: moving directories around
* adding funding
* mealplan redesign
Co-authored-by: Hayden <hay-kot@pm.me>
* Upload component (#108)
* unified upload button + download backups
* javascript toolings
* fix vuetur config
* fixed type check error
* refactor: clean up bag javascript
Co-authored-by: Hayden <hay-kot@pm.me>
* Upload component (#113)
* unified upload button + download backups
* javascript toolings
* fix vuetur config
* fixed type check error
* refactor: clean up bag javascript
* UI updates + name validation
* docs: changelog + sp
* fixed route links
* changelog
Co-authored-by: Hayden <hay-kot@pm.me>
* fixed menu links
* fixed poetry install on docker.dev build
* Migration redesign (#119)
* migration redesign init
* new color picker
* changelog
* added UI language selection
* fix layout issue on recipe editor
* remove git as dependency
* added UI editor for original URL
* CI/CD Tests
* test: fixed migration routes
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix link to dev-notes.md (#110)
* translation: add swedish (#128)
* language: da is Danish
* translations: add swedish
* scraper: unescape html in instructions (#129)
Some urls erroneously deliver escaped html their instructions,
sometimes they are even escaped on multiple levels like here:
https://www.ica.se/recept/kladdig-kladdkaka-722982/
```
>>> normalize_instruction("S&auml;tt ugnen p&aring; 200&deg;C.")
'Sätt ugnen på 200°C.'
```
* v0.2.0 Updates (#130)
* migration redesign init
* new color picker
* changelog
* added UI language selection
* fix layout issue on recipe editor
* remove git as dependency
* added UI editor for original URL
* CI/CD Tests
* test: fixed migration routes
* test todos
* bug/added docker volume
* chowdow test data
* partial image recipe image testing
* added card section card
* settings form
* homepage cetegory ui
* frontend category placeholder
* fixed broken scheduler
* remove old files
* removed temp test
Co-authored-by: Hayden <hay-kot@pm.me>
* Fix missing translations key (#133)
* translation: add simplified & traditional chinese
* Fix missing translations
* fix chinese translations
* v0.2.0 Release Candidate (#141)
* Fix link to Docker Hub
Found an extra s. DESTROYED it.
* Release v0.1.0 Candidate (#85)
* Changed uvicorn port to 80
* Changed port in docker-compose to match dockerfile
* Readded environment variables in docker-compose
* production image rework
* Use opengraph metadata to make basic recipe cards when full recipe metadata is not available
* fixed instrucitons on parse
* add last_recipe
* automated testing
* roadmap update
* Sqlite (#75)
* file structure
* auto-test
* take 2
* refactor ap scheduler and startup process
* fixed scraper error
* database abstraction
* database abstraction
* port recipes over to new schema
* meal migration
* start settings migration
* finale mongo port
* backup improvements
* migration imports to new DB structure
* unused import cleanup
* docs strings
* settings and theme import logic
* cleanup
* fixed tinydb error
* requirements
* fuzzy search
* remove scratch file
* sqlalchemy models
* improved search ui
* recipe models almost done
* sql modal population
* del scratch
* rewrite database model mixins
* mostly grabage
* recipe updates
* working sqllite
* remove old files and reorganize
* final cleanup
Co-authored-by: Hayden <hay-kot@pm.me>
* Backup card (#78)
* backup / import dialog
* upgrade to new tag method
* New import card
* rename settings.py to app_config.py
* migrate to poetry for development
* fix failing test
Co-authored-by: Hayden <hay-kot@pm.me>
* added mkdocs to docker-compose
* Translations (#72)
* Translations + danish
* changed back proxy target to use ENV
* Resolved more merge conflicts
* Removed test in translation
* Documentation of translations
* Updated translations
* removed old packages
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* fail to start bug fixes
* feature: prep/cook/total time slots (#80)
Co-authored-by: Hayden <hay-kot@pm.me>
* missing bind attributes
* Bug fixes (#81)
* fix: url remains after succesful import
* docs: changelog + update todos
* arm image
* arm compose
* compose updates
* update poetry
* arm support
Co-authored-by: Hayden <hay-kot@pm.me>
* dockerfile hotfix
* dockerfile hotfix
* Version Release Final Touches (#84)
* Remove slim
* bug: opacity issues
* bug: startup failure with no database
* ci/cd on dev branch
* formatting
* v0.1.0 documentation
Co-authored-by: Hayden <hay-kot@pm.me>
* db init hotfix
* bug: fix crash in mongo
* fix mongo bug
* fixed version notifier
* finale changelog
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
* build container
* webscraper hotfix
* notes hot fix
* bug: mongo updates fail #99
* Fix error message (#101)
* gh funding
* Create Issue Templates (#125)
* Create bug_report.md
* Create config.yml
Included a link to feature requests.
* Update config.yml
Fixed link I had for testing to the actual link
* Update bug_report.md
fix capitalization
* Update .github/ISSUE_TEMPLATE/bug_report.md
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* merge kentors changes
* refactor/recipe routers
* category/tag database relationship and endpoints
* frontend category management
* update branch todos
* bug/normalize recipe steps html
* remove console.log + refactor categories
* fix categories database errors
* refactor/ router endpoint
* refactor/ remove old code
* drag and drop ingredients
* general cleanup
* route refactoring
* changelog
* api refactoring + random cleanup
* fixed backwards sort
* Update mkdocs.yml (#137)
Fix warning from Deploy Docs github action
* fixed navigate on enter in search
* refactor/create global css
* added category scroll
* cleanup todos
* debug routes
* docs/new gifs & general updates
* cleanup
* fix list test
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* fix build
* fix duplicate editor
* fixed docker mount problem
* python 3.9
* added tasks for non-docker development
* remove old scripts
* dev updates
* fixed no image upload option
* get version from backend
* final docs pass
* .gitignore
* feature/markdown support for description and steps
* package-lock
* rename production task
* category import errors on import
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Bastien <43323819+Batgame@users.noreply.github.com>
Co-authored-by: sephrat <34862846+sephrat@users.noreply.github.com>
Co-authored-by: Nick CJ <17556895+nickcj931@users.noreply.github.com>
Co-authored-by: dekvall <dkvldev@gmail.com>
Co-authored-by: wengtad <wengtad93@gmail.com>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* test notifications
* unified notifications
* docs/changelog
Co-authored-by: hay-kot <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Bastien <43323819+Batgame@users.noreply.github.com>
Co-authored-by: sephrat <34862846+sephrat@users.noreply.github.com>
Co-authored-by: Nick CJ <17556895+nickcj931@users.noreply.github.com>
Co-authored-by: dekvall <dkvldev@gmail.com>
Co-authored-by: wengtad <wengtad93@gmail.com>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* Refactor/response models (#156) - First Pass
* cleanup
* split app/db versioning
* async file response
* refactor/recipe viewer + minor ui improvements
* auto grow size
* added async file responses
* docs/changelog
* "/" to open search bar
* docs/changelog
* change imports to use @/ for imports
* cleanup
* cleanup
* db to session
* theme + settings refactor
* bug/image save fix
* fixed failing tests
* fix last json bug - #155
* fix settings import
* fixed router link for site title
Co-authored-by: hay-kot <hay-kot@pm.me>
* version update
Co-authored-by: kentora <=>
Co-authored-by: Hayden <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Bastien <43323819+Batgame@users.noreply.github.com>
Co-authored-by: sephrat <34862846+sephrat@users.noreply.github.com>
Co-authored-by: Nick CJ <17556895+nickcj931@users.noreply.github.com>
Co-authored-by: dekvall <dkvldev@gmail.com>
Co-authored-by: wengtad <wengtad93@gmail.com>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
* debug page starter
* version docker releases
* test caddy web server
* run to start
* path
* roll back docker
* caddy take 2
* fix static path
* remove static files from FastAPI
* dockerfile cleanup
* Update fr.json (#146)
* Update language.js (#168)
Added German Language Support
* add base for meal-plan categories
* fixed response error
* new dev data w/ categories
* fix scroll bar import
* ui improvements + mealplanner search
* changelog
* remove /all
* docs update
* fix tests
* update python version
Co-authored-by: hay-kot <hay-kot@pm.me>
Co-authored-by: Richard Mitic <richard.h.mitic@gmail.com>
Co-authored-by: kentora <kentora@kentora.dk>
Co-authored-by: David Young <davidy@funkypenguin.co.nz>
Co-authored-by: Bastien <43323819+Batgame@users.noreply.github.com>
Co-authored-by: sephrat <34862846+sephrat@users.noreply.github.com>
Co-authored-by: Nick CJ <17556895+nickcj931@users.noreply.github.com>
Co-authored-by: dekvall <dkvldev@gmail.com>
Co-authored-by: wengtad <wengtad93@gmail.com>
Co-authored-by: Alexei Pesic <pesic.alexei@gmail.com>
Co-authored-by: Andrew <dpieski@gmail.com>
Co-authored-by: Stephen Brown II <Stephen.Brown2@gmail.com>
Co-authored-by: Raghnarok05 <77641728+Raghnarok05@users.noreply.github.com>
Co-authored-by: mindesbunister <32161838+mindesbunister@users.noreply.github.com>
This commit is contained in:
parent
0dc9665f09
commit
a6678c1712
42 changed files with 342 additions and 106 deletions
|
@ -1,3 +1,5 @@
|
|||
*/node_modules
|
||||
*/dist
|
||||
*/data/db
|
||||
*/data/db
|
||||
*/mealie/test
|
||||
*/mealie/.temp
|
2
.github/workflows/pytest.yml
vendored
2
.github/workflows/pytest.yml
vendored
|
@ -21,7 +21,7 @@ jobs:
|
|||
- name: Set up python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.8
|
||||
python-version: 3.9
|
||||
#----------------------------------------------
|
||||
# ----- install & configure poetry -----
|
||||
#----------------------------------------------
|
||||
|
|
|
@ -31,11 +31,10 @@ RUN apk add --update --no-cache --virtual .build-deps \
|
|||
|
||||
COPY ./mealie /app
|
||||
COPY ./Caddyfile /app
|
||||
COPY ./app_data/templates /app/data/templates
|
||||
RUN rm -rf /app/tests /app/.temp
|
||||
COPY --from=build-stage /app/dist /app/dist
|
||||
RUN rm -rf /app/test /app/.temp
|
||||
|
||||
VOLUME [ "/app/data/" ]
|
||||
RUN chmod +x /app/run.sh
|
||||
CMD /app/run.sh
|
||||
|
||||
# CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "80"]
|
||||
CMD /app/run.sh
|
Binary file not shown.
|
@ -3,14 +3,32 @@
|
|||
## v0.3.0 - Draft!
|
||||
|
||||
### Features and Improvements
|
||||
- Improved Nextcloud Imports
|
||||
- Improved Recipe Parser
|
||||
- Open search with `/` hotkey!
|
||||
- Unified and improved snackbar notifications
|
||||
- Recipe Viewer
|
||||
- Categories, Tags, and Notes will not be displayed below the steps on smaller screens
|
||||
- Recipe Editor
|
||||
- New Category/Tag endpoints to filter all recipes by Category or Tag
|
||||
- **Meal Planner**
|
||||
- You can now restrict recipe categories used for random meal-plan creation in the settings menu
|
||||
- Recipe picker dialog will now display recipes when the search bar is empty
|
||||
- Minor UI improvements
|
||||
- **Recipe Viewer**
|
||||
- Categories, Tags, and Notes will now be displayed below the steps on smaller screens
|
||||
- **Recipe Editor**
|
||||
- Text areas now auto grow to fit content
|
||||
- Description, Steps, and Notes support Markdown! This includes inline html in Markdown.
|
||||
|
||||
## v0.2.1 - Hot Fixes!
|
||||
|
||||
### Features and Improvements
|
||||
- Fixes upload image error when no photo was scrapped
|
||||
- Fixes no last_recipe.json not updating
|
||||
- Added markdown rendering for notes
|
||||
- New notifications
|
||||
- Minor UI improvements
|
||||
- Recipe editor refactor
|
||||
- Settings/Theme models refactor
|
||||
|
||||
### Development / Misc
|
||||
- Added async file response for images, downloading files.
|
||||
- Breakup recipe view component
|
||||
|
|
|
@ -19,7 +19,9 @@ Color themes can be created and set from the UI in the settings page. You can se
|
|||
## Backups
|
||||
Site backups can easily be taken and download from the UI. To import, simply select the backup you'd like to restore and check which items you'd like to import.
|
||||
|
||||
## Meal Planner Webhooks
|
||||
## Meal Planner
|
||||
In the meal planner section you can select categories to be used as apart of the random recipe selector in the meal plan creator.
|
||||
|
||||
Meal planner webhooks are post requests sent from Mealie to an external endpoint. The body of the message is the Recipe JSON of the scheduled meal. If no meal is schedule, no request is sent. The webhook functionality can be enabled or disabled as well as scheduled. Note that you must "Save Webhooks" prior to any changes taking affect server side.
|
||||
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
<title> Mealie </title>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css">
|
||||
<link rel="stylesheet" href="./styles/global.css">
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
*::-webkit-scrollbar {
|
||||
width: 0.25rem;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-track {
|
||||
background: lightgray;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-thumb {
|
||||
background: grey;
|
||||
}
|
|
@ -138,4 +138,17 @@ export default {
|
|||
margin-bottom: -5px;
|
||||
opacity: 0.9 !important;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar {
|
||||
width: 0.25rem;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-track {
|
||||
background: lightgray;
|
||||
}
|
||||
|
||||
*::-webkit-scrollbar-thumb {
|
||||
background: grey;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
@ -8,13 +8,14 @@ const prefix = baseURL + "recipes/";
|
|||
|
||||
const recipeURLs = {
|
||||
allRecipes: baseURL + "recipes",
|
||||
allRecipesByCategory: prefix + "category",
|
||||
create: prefix + "create",
|
||||
createByURL: prefix + "create-url",
|
||||
recipe: (slug) => prefix + slug,
|
||||
update: (slug) => prefix + slug,
|
||||
delete: (slug) => prefix + slug,
|
||||
recipeImage: (slug) => `${prefix}${slug}/image`,
|
||||
updateImage: (slug) => `${prefix}${slug}/image`,
|
||||
recipe: slug => prefix + slug,
|
||||
update: slug => prefix + slug,
|
||||
delete: slug => prefix + slug,
|
||||
recipeImage: slug => `${prefix}${slug}/image`,
|
||||
updateImage: slug => `${prefix}${slug}/image`,
|
||||
};
|
||||
|
||||
export default {
|
||||
|
@ -27,6 +28,14 @@ export default {
|
|||
return response;
|
||||
},
|
||||
|
||||
async getAllByCategory(categories) {
|
||||
let response = await apiReq.post(
|
||||
recipeURLs.allRecipesByCategory,
|
||||
categories
|
||||
);
|
||||
return response.data;
|
||||
},
|
||||
|
||||
async create(recipeData) {
|
||||
let response = await apiReq.post(recipeURLs.create, recipeData);
|
||||
return response.data;
|
||||
|
@ -67,7 +76,7 @@ export default {
|
|||
keys: recipeKeys,
|
||||
num: num,
|
||||
},
|
||||
paramsSerializer: (params) => {
|
||||
paramsSerializer: params => {
|
||||
return qs.stringify(params, { arrayFormat: "repeat" });
|
||||
},
|
||||
});
|
||||
|
|
|
@ -96,6 +96,7 @@ export default {
|
|||
return {
|
||||
isLoading: false,
|
||||
meals: [],
|
||||
items: [],
|
||||
|
||||
// Dates
|
||||
startDate: null,
|
||||
|
@ -117,11 +118,13 @@ export default {
|
|||
}
|
||||
},
|
||||
},
|
||||
async mounted() {
|
||||
let settings = await api.settings.requestAll();
|
||||
console.log(settings);
|
||||
this.items = await api.recipes.getAllByCategory(settings.planCategories);
|
||||
},
|
||||
|
||||
computed: {
|
||||
items() {
|
||||
return this.$store.getters.getRecentRecipes;
|
||||
},
|
||||
actualStartDate() {
|
||||
return Date.parse(this.startDate);
|
||||
},
|
||||
|
|
|
@ -11,8 +11,6 @@
|
|||
</span>
|
||||
</v-card-title>
|
||||
<v-divider></v-divider>
|
||||
<HomePageSettings />
|
||||
<v-divider></v-divider>
|
||||
<v-card-text>
|
||||
<h2 class="mt-1 mb-4">{{ $t("settings.language") }}</h2>
|
||||
<v-row>
|
||||
|
@ -30,6 +28,8 @@
|
|||
</v-row>
|
||||
</v-card-text>
|
||||
<v-divider></v-divider>
|
||||
<HomePageSettings />
|
||||
<v-divider></v-divider>
|
||||
</v-card>
|
||||
</template>
|
||||
|
||||
|
@ -59,6 +59,9 @@ export default {
|
|||
this.langOptions = this.$store.getters.getAllLangs;
|
||||
this.selectedLang = this.$store.getters.getActiveLang;
|
||||
},
|
||||
removeCategory(index) {
|
||||
this.value.categories.splice(index, 1);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -1,9 +1,45 @@
|
|||
<template>
|
||||
<v-card>
|
||||
<v-card-title class="headline">
|
||||
{{ $t("settings.webhooks.meal-planner-webhooks") }}
|
||||
{{ $t("meal-plan.meal-planner") }}
|
||||
</v-card-title>
|
||||
<v-divider></v-divider>
|
||||
<v-card-text>
|
||||
<h2 class="mt-1">{{ $t("recipe.categories") }}</h2>
|
||||
|
||||
<v-row>
|
||||
<v-col sm="12" md="6">
|
||||
<v-select
|
||||
v-model="planCategories"
|
||||
:items="categories"
|
||||
item-text="name"
|
||||
item-value="name"
|
||||
label="Allowed Categories"
|
||||
multiple
|
||||
chips
|
||||
hint="Only recipes with these categories will be used in Meal Plans"
|
||||
persistent-hint
|
||||
>
|
||||
<template v-slot:selection="data">
|
||||
<v-chip
|
||||
:input-value="data.selected"
|
||||
close
|
||||
@click:close="removeCategory(data.index)"
|
||||
color="secondary"
|
||||
dark
|
||||
>
|
||||
{{ data.item.name }}
|
||||
</v-chip>
|
||||
</template>
|
||||
</v-select>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-card-text>
|
||||
<v-divider> </v-divider>
|
||||
<v-card-text>
|
||||
<h2 class="mt-1 mb-4">
|
||||
{{ $t("settings.webhooks.meal-planner-webhooks") }}
|
||||
</h2>
|
||||
<p>
|
||||
{{
|
||||
$t(
|
||||
|
@ -68,21 +104,29 @@ export default {
|
|||
webhooks: [],
|
||||
enabled: false,
|
||||
time: "",
|
||||
planCategories: [],
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getSiteSettings();
|
||||
},
|
||||
computed: {
|
||||
categories() {
|
||||
return this.$store.getters.getCategories;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
saveTime(value) {
|
||||
this.time = value;
|
||||
},
|
||||
async getSiteSettings() {
|
||||
let settings = await api.settings.requestAll();
|
||||
console.log(settings);
|
||||
this.webhooks = settings.webhooks.webhookURLs;
|
||||
this.name = settings.name;
|
||||
this.time = settings.webhooks.webhookTime;
|
||||
this.enabled = settings.webhooks.enabled;
|
||||
this.planCategories = settings.planCategories;
|
||||
},
|
||||
addWebhook() {
|
||||
this.webhooks.push(" ");
|
||||
|
@ -93,6 +137,7 @@ export default {
|
|||
saveWebhooks() {
|
||||
const body = {
|
||||
name: this.name,
|
||||
planCategories: this.planCategories,
|
||||
webhooks: {
|
||||
webhookURLs: this.webhooks,
|
||||
webhookTime: this.time,
|
||||
|
@ -104,6 +149,9 @@ export default {
|
|||
testWebhooks() {
|
||||
api.settings.testWebhooks();
|
||||
},
|
||||
removeCategory(index) {
|
||||
this.planCategories.splice(index, 1);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -6,7 +6,19 @@
|
|||
:to="route ? `/recipe/${slug}` : ''"
|
||||
@click="$emit('click')"
|
||||
>
|
||||
<v-img height="200" :src="getImage(image)"></v-img>
|
||||
<v-img height="200" :src="getImage(image)">
|
||||
<v-expand-transition v-if="description">
|
||||
<div
|
||||
v-if="hover"
|
||||
class="d-flex transition-fast-in-fast-out secondary v-card--reveal "
|
||||
style="height: 100%;"
|
||||
>
|
||||
<v-card-text class="v-card--text-show white--text">
|
||||
{{ description }}
|
||||
</v-card-text>
|
||||
</div>
|
||||
</v-expand-transition>
|
||||
</v-img>
|
||||
<v-card-title class="my-n3 mb-n6">{{ name | truncate(30) }}</v-card-title>
|
||||
|
||||
<v-card-actions class="">
|
||||
|
@ -23,16 +35,7 @@
|
|||
></v-rating>
|
||||
</v-col>
|
||||
<v-col></v-col>
|
||||
<v-col align="end">
|
||||
<v-tooltip top color="secondary" max-width="400" open-delay="50">
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn color="secondary" v-on="on" v-bind="attrs" text>{{
|
||||
$t("recipe.description")
|
||||
}}</v-btn>
|
||||
</template>
|
||||
<span>{{ description }}</span>
|
||||
</v-tooltip>
|
||||
</v-col>
|
||||
<v-col align="end"> </v-col>
|
||||
</v-row>
|
||||
</v-card-actions>
|
||||
</v-card>
|
||||
|
@ -61,4 +64,15 @@ export default {
|
|||
</script>
|
||||
|
||||
<style>
|
||||
.v-card--reveal {
|
||||
align-items: center;
|
||||
bottom: 0;
|
||||
justify-content: center;
|
||||
opacity: 0.8;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
}
|
||||
.v-card--text-show {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
</style>
|
|
@ -57,6 +57,7 @@ export default {
|
|||
return {
|
||||
searchSlug: "",
|
||||
search: " ",
|
||||
data: [],
|
||||
result: [],
|
||||
autoResults: [],
|
||||
isDark: false,
|
||||
|
@ -67,27 +68,31 @@ export default {
|
|||
distance: 100,
|
||||
maxPatternLength: 32,
|
||||
minMatchCharLength: 1,
|
||||
keys: ["name", "slug"],
|
||||
keys: ["name", "slug", "description"],
|
||||
},
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.isDark = this.$store.getters.getIsDark;
|
||||
this.data = this.$store.getters.getRecentRecipes;
|
||||
},
|
||||
computed: {
|
||||
data() {
|
||||
return this.$store.getters.getRecentRecipes;
|
||||
},
|
||||
fuse() {
|
||||
return new Fuse(this.data, this.options);
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
search() {
|
||||
if (this.search.trim() === "") this.result = this.list;
|
||||
else this.result = this.fuse.search(this.search.trim());
|
||||
|
||||
try {
|
||||
this.result = this.fuse.search(this.search.trim());
|
||||
} catch {
|
||||
this.result = this.data
|
||||
.map(x => ({ item: x }))
|
||||
.sort((a, b) => (a.name > b.name ? 1 : -1));
|
||||
}
|
||||
console.log(this.result);
|
||||
this.$emit("results", this.result);
|
||||
|
||||
if (this.showResults === true) {
|
||||
this.autoResults = this.result;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div class="text-center">
|
||||
<v-dialog v-model="dialog" min-height="700" max-width="1000">
|
||||
<v-dialog v-model="dialog" height="100%" max-width="1200">
|
||||
<v-card min-height="725" height="100%">
|
||||
<v-card-text>
|
||||
<v-card-title></v-card-title>
|
||||
|
@ -22,7 +22,7 @@
|
|||
:md="6"
|
||||
:lg="4"
|
||||
:xl="3"
|
||||
v-for="item in searchResults.slice(0, 10)"
|
||||
v-for="item in searchResults.slice(0, 24)"
|
||||
:key="item.item.name"
|
||||
>
|
||||
<RecipeCard
|
||||
|
@ -58,6 +58,7 @@ export default {
|
|||
},
|
||||
methods: {
|
||||
updateResults(results) {
|
||||
console.log(results);
|
||||
this.searchResults = results;
|
||||
},
|
||||
emitSelect(name, slug) {
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
},
|
||||
"meal-plan": {
|
||||
"dinner-this-week": "Dinner This Week",
|
||||
"meal-planner": "Meal Planner",
|
||||
"dinner-today": "Dinner Today",
|
||||
"planner": "Planner",
|
||||
"edit-meal-plan": "Edit Meal Plan",
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
"paste-in-your-recipe-data-each-line-will-be-treated-as-an-item-in-a-list": "Copiez votre recette ici. Chaque ligne sera traitée comme un objet de la liste."
|
||||
},
|
||||
"general": {
|
||||
"upload": "Téléverser",
|
||||
"submit": "Soumettre",
|
||||
"name": "Nom",
|
||||
"settings": "Options",
|
||||
|
@ -28,7 +29,12 @@
|
|||
"ok": "OK",
|
||||
"enabled": "Activé",
|
||||
"download": "Télécharger",
|
||||
"import": "Importer"
|
||||
"import": "Importer",
|
||||
"options": "Options",
|
||||
"templates": "Modèles",
|
||||
"recipes": "Recettes",
|
||||
"themes": "Thèmes",
|
||||
"confirm": "Confirmer"
|
||||
},
|
||||
"login": {
|
||||
"stay-logged-in": "Rester connecté(e) ?",
|
||||
|
@ -60,21 +66,39 @@
|
|||
"notes": "Notes",
|
||||
"note": "Note",
|
||||
"original-url": "Recette originale",
|
||||
"view-recipe": "Voir la recette"
|
||||
"view-recipe": "Voir la recette",
|
||||
"title": "Titre",
|
||||
"total-time": "Temps total",
|
||||
"prep-time": "Temps de préparation",
|
||||
"perform-time": "Temps de cuisson",
|
||||
"api-extras": "Extras API",
|
||||
"object-key": "Clé d'objet",
|
||||
"object-value": "Valeur d'objet",
|
||||
"new-key-name": "Nouveau nom de clé",
|
||||
"add-key": "Ajouter une clé",
|
||||
"key-name-required": "Un nom de clé est requis",
|
||||
"no-white-space-allowed": "Aucun espace blanc autorisé",
|
||||
"delete-recipe": "Supprimer la recette",
|
||||
"delete-confirmation": "Êtes-vous sûr(e) de vouloir supprimer cette recette ?"
|
||||
},
|
||||
"search": {
|
||||
"search-mealie": "Search Mealie"
|
||||
"search-mealie": "Rechercher dans Mealie"
|
||||
},
|
||||
"settings": {
|
||||
"general-settings": "Paramètres généraux",
|
||||
"local-api": "API local",
|
||||
"language": "Langue",
|
||||
"add-a-new-theme": "Ajouter un nouveau thème",
|
||||
"set-new-time": "Définir une nouvelle heure d'exécution",
|
||||
"set-new-time": "Indiquer un nouveau temps",
|
||||
"current": "Version :",
|
||||
"latest": "Dernière",
|
||||
"explore-the-docs": "Parcourir la documentation",
|
||||
"contribute": "Contribuer",
|
||||
"backup-and-exports": "Sauver et exporter",
|
||||
"backup-info": "Les sauvegardes sont exportées en format JSON standard, ainsi que toutes les images stockées sur le système. Dans votre dossier de sauvegarde, vous trouverez un dossier .zip qui contient toutes les recettes en JSON et les images de la base de données. De plus, si vous avez sélectionné le format de fichier markdown, il sera sauvegardé dans le même dossier .zip. Pour importer une sauvegarde, celle-ci doit être enregistrée dans votre dossier de sauvegardes. Une sauvegarde automatique est effectuée quotidiennement à 03h00.",
|
||||
"available-backups": "Sauvegardes disponibles",
|
||||
"theme": {
|
||||
"theme-name": "Nom du thème",
|
||||
"theme-settings": "Paramètres du thème",
|
||||
"select-a-theme-from-the-dropdown-or-create-a-new-theme-note-that-the-default-theme-will-be-served-to-all-users-who-have-not-set-a-theme-preference": "Sélectionnez un thème depuis la liste ou créez-en un nouveau. Le thème par défaut sera utilisé pour tous les utilisateurs qui n'ont pas choisi de thème personnalisé.",
|
||||
"dark-mode": "Mode sombre",
|
||||
|
@ -86,13 +110,15 @@
|
|||
"info": "Information",
|
||||
"warning": "Avertissement",
|
||||
"error": "Erreur",
|
||||
"default-to-system": "Identique au système",
|
||||
"light": "Clair",
|
||||
"dark": "Sombre",
|
||||
"theme": "Thème",
|
||||
"saved-color-theme": "Thèmes sauvegardés",
|
||||
"delete-theme": "Supprimer le thème",
|
||||
"are-you-sure-you-want-to-delete-this-theme": "Etes-vous sûr(e) de vouloir supprimer ce thème ?",
|
||||
"choose-how-mealie-looks-to-you-set-your-theme-preference-to-follow-your-system-settings-or-choose-to-use-the-light-or-dark-theme": "Personnalisez l'apparence de Mealie. Utilisez le thème par défaut de votre système ou choisissez manuellement entre le thème clair ou sombre."
|
||||
"choose-how-mealie-looks-to-you-set-your-theme-preference-to-follow-your-system-settings-or-choose-to-use-the-light-or-dark-theme": "Personnalisez l'apparence de Mealie. Utilisez le thème par défaut de votre système ou choisissez manuellement entre le thème clair ou sombre.",
|
||||
"theme-name-is-required": "Un nom de thème est requis."
|
||||
},
|
||||
"webhooks": {
|
||||
"meal-planner-webhooks": "Webhooks du planificateur de repas",
|
||||
|
@ -104,11 +130,29 @@
|
|||
"backup": {
|
||||
"import-recipes": "Importer des recettes",
|
||||
"import-themes": "Importer des thèmes",
|
||||
"import-settings": "Importer des paramètres"
|
||||
"import-settings": "Importer des paramètres",
|
||||
"create-heading": "Créer une sauvegarde",
|
||||
"backup-tag": "Tag de la sauvegarde",
|
||||
"full-backup": "Sauvegarde complète",
|
||||
"partial-backup": "Sauvegarde partielle",
|
||||
"backup-restore-report": "Rapport de la restauration de la sauvegarde",
|
||||
"successfully-imported": "Importé avec succès",
|
||||
"failed-imports": "Importations échouées"
|
||||
}
|
||||
},
|
||||
"migration": {
|
||||
"recipe-migration": "Migrer les recettes",
|
||||
"failed-imports": "Importations échouées"
|
||||
"failed-imports": "Importations échouées",
|
||||
"migration-report": "Rapport de migration",
|
||||
"successful-imports": "Importations réussies",
|
||||
"no-migration-data-available": "Aucune donnée d'importation n'est disponible",
|
||||
"nextcloud": {
|
||||
"title": "Livre de recettes Nextcloud (Cookbook)",
|
||||
"description": "Importer des recettes depuis un livre de recettes Nextcloud existant"
|
||||
},
|
||||
"chowdown": {
|
||||
"title": "Chowdown",
|
||||
"description": "Importer des recettes depuis Chowdown"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -16,7 +16,7 @@
|
|||
<General />
|
||||
<Theme class="mt-2" />
|
||||
<Backup class="mt-2" />
|
||||
<Webhooks class="mt-2" />
|
||||
<MealPlanner class="mt-2" />
|
||||
<Migration class="mt-2" />
|
||||
<p class="text-center my-2">
|
||||
{{ $t("settings.current") }}
|
||||
|
@ -41,7 +41,7 @@
|
|||
<script>
|
||||
import Backup from "../components/Settings/Backup";
|
||||
import General from "../components/Settings/General";
|
||||
import Webhooks from "../components/Settings/Webhook";
|
||||
import MealPlanner from "../components/Settings/MealPlanner";
|
||||
import Theme from "../components/Settings/Theme";
|
||||
import Migration from "../components/Settings/Migration";
|
||||
import api from "@/api";
|
||||
|
@ -50,7 +50,7 @@ import axios from "axios";
|
|||
export default {
|
||||
components: {
|
||||
Backup,
|
||||
Webhooks,
|
||||
MealPlanner,
|
||||
Theme,
|
||||
Migration,
|
||||
General,
|
||||
|
|
|
@ -15,7 +15,7 @@ const mutations = {
|
|||
state.showLimit = payload;
|
||||
},
|
||||
setCategories(state, payload) {
|
||||
state.categories = payload;
|
||||
state.categories = payload.sort((a, b) => (a.name > b.name ? 1 : -1));
|
||||
},
|
||||
setHomeCategories(state, payload) {
|
||||
state.homeCategories = payload;
|
||||
|
|
|
@ -31,6 +31,10 @@ const state = {
|
|||
name: "繁體中文",
|
||||
value: "zh-TW",
|
||||
},
|
||||
{
|
||||
name: "German",
|
||||
value: "de",
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ const store = new Vuex.Store({
|
|||
// All Recipe Data Store
|
||||
recentRecipes: [],
|
||||
allRecipes: [],
|
||||
mealPlanCategories: [],
|
||||
},
|
||||
|
||||
mutations: {
|
||||
|
@ -44,6 +45,10 @@ const store = new Vuex.Store({
|
|||
setRecentRecipes(state, payload) {
|
||||
state.recentRecipes = payload;
|
||||
},
|
||||
|
||||
setMealPlanCategories(state, payload) {
|
||||
state.mealPlanCategories = payload;
|
||||
},
|
||||
},
|
||||
|
||||
actions: {
|
||||
|
@ -69,6 +74,7 @@ const store = new Vuex.Store({
|
|||
getSnackType: state => state.snackType,
|
||||
|
||||
getRecentRecipes: state => state.recentRecipes,
|
||||
getMealPlanCategories: state => state.mealPlanCategories,
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ dotenv.load_dotenv(ENV)
|
|||
|
||||
# General
|
||||
APP_VERSION = "v0.2.1"
|
||||
DB_VERSION = "v0.2.0"
|
||||
DB_VERSION = "v0.2.1"
|
||||
PRODUCTION = os.environ.get("ENV")
|
||||
PORT = int(os.getenv("mealie_port", 9000))
|
||||
API = os.getenv("api_docs", True)
|
||||
|
|
|
@ -15,7 +15,7 @@ from db.sql.theme_models import SiteThemeModel
|
|||
class _Recipes(BaseDocument):
|
||||
def __init__(self) -> None:
|
||||
self.primary_key = "slug"
|
||||
self.sql_model = RecipeModel
|
||||
self.sql_model: RecipeModel = RecipeModel
|
||||
|
||||
def update_image(self, session: Session, slug: str, extension: str = None) -> str:
|
||||
entry: RecipeModel = self._query_one(session, match_value=slug)
|
||||
|
@ -48,15 +48,6 @@ class _Settings(BaseDocument):
|
|||
self.primary_key = "name"
|
||||
self.sql_model = SiteSettingsModel
|
||||
|
||||
def create(self, session: Session, main: dict, webhooks: dict) -> str:
|
||||
new_settings = self.sql_model(main.get("name"), webhooks)
|
||||
|
||||
session.add(new_settings)
|
||||
return_data = new_settings.dict()
|
||||
session.commit()
|
||||
|
||||
return return_data
|
||||
|
||||
|
||||
class _Themes(BaseDocument):
|
||||
def __init__(self) -> None:
|
||||
|
|
|
@ -100,11 +100,17 @@ class BaseDocument:
|
|||
match_key = self.primary_key
|
||||
|
||||
result = (
|
||||
session.query(self.sql_model).filter_by(**{match_key: match_value}).one()
|
||||
session.query(self.sql_model)
|
||||
.filter_by(**{match_key: match_value})
|
||||
.limit(limit)
|
||||
.all()
|
||||
)
|
||||
db_entry = result.dict()
|
||||
db_entries = [x.dict() for x in result]
|
||||
|
||||
return db_entry
|
||||
if limit == 1:
|
||||
return db_entries[0]
|
||||
|
||||
return db_entries
|
||||
|
||||
def create(self, session: Session, document: dict) -> dict:
|
||||
"""Creates a new database entry for the given SQL Alchemy Model.
|
||||
|
|
|
@ -85,6 +85,13 @@ class Category(SqlAlchemyBase):
|
|||
"recipes": [x.dict() for x in self.recipes],
|
||||
}
|
||||
|
||||
def dict_no_recipes(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"slug": self.slug,
|
||||
"name": self.name,
|
||||
}
|
||||
|
||||
|
||||
class Tag(SqlAlchemyBase):
|
||||
__tablename__ = "tags"
|
||||
|
|
|
@ -1,27 +1,54 @@
|
|||
import sqlalchemy as sa
|
||||
import sqlalchemy.orm as orm
|
||||
from db.sql.model_base import BaseMixins, SqlAlchemyBase
|
||||
from db.sql.recipe_models import Category
|
||||
|
||||
|
||||
class SiteSettingsModel(SqlAlchemyBase):
|
||||
class SiteSettingsModel(SqlAlchemyBase, BaseMixins):
|
||||
__tablename__ = "site_settings"
|
||||
name = sa.Column(sa.String, primary_key=True)
|
||||
planCategories = orm.relationship(
|
||||
"MealCategory", uselist=True, cascade="all, delete"
|
||||
)
|
||||
webhooks = orm.relationship("WebHookModel", uselist=False, cascade="all, delete")
|
||||
|
||||
def __init__(self, name: str = None, webhooks: dict = None, session=None) -> None:
|
||||
def __init__(
|
||||
self, name: str = None, webhooks: dict = None, planCategories=[], session=None
|
||||
) -> None:
|
||||
self.name = name
|
||||
self.planCategories = [MealCategory(cat) for cat in planCategories]
|
||||
self.webhooks = WebHookModel(**webhooks)
|
||||
|
||||
def update(self, session, name, webhooks: dict) -> dict:
|
||||
def update(self, session, name, webhooks: dict, planCategories=[]) -> dict:
|
||||
|
||||
self._sql_remove_list(session, [MealCategory], self.name)
|
||||
self.name = name
|
||||
self.planCategories = [MealCategory(x) for x in planCategories]
|
||||
self.webhooks.update(session=session, **webhooks)
|
||||
return
|
||||
|
||||
def dict(self):
|
||||
data = {"name": self.name, "webhooks": self.webhooks.dict()}
|
||||
data = {
|
||||
"name": self.name,
|
||||
"planCategories": [cat.to_str() for cat in self.planCategories],
|
||||
"webhooks": self.webhooks.dict(),
|
||||
}
|
||||
return data
|
||||
|
||||
|
||||
class MealCategory(SqlAlchemyBase):
|
||||
__tablename__ = "meal_plan_categories"
|
||||
id = sa.Column(sa.Integer, primary_key=True)
|
||||
name = sa.Column(sa.String)
|
||||
parent_id = sa.Column(sa.Integer, sa.ForeignKey("site_settings.name"))
|
||||
|
||||
def __init__(self, name) -> None:
|
||||
self.name = name
|
||||
|
||||
def to_str(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class WebHookModel(SqlAlchemyBase, BaseMixins):
|
||||
__tablename__ = "webhook_settings"
|
||||
id = sa.Column(sa.Integer, primary_key=True)
|
||||
|
|
0
mealie/dist/.gitkeep
vendored
0
mealie/dist/.gitkeep
vendored
|
@ -1,4 +1,4 @@
|
|||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic.main import BaseModel
|
||||
from services.recipe_services import Recipe
|
||||
|
@ -8,7 +8,7 @@ class RecipeCategoryResponse(BaseModel):
|
|||
id: int
|
||||
name: str
|
||||
slug: str
|
||||
recipes: List[Recipe]
|
||||
recipes: Optional[List[Recipe]]
|
||||
|
||||
class Config:
|
||||
schema_extra = {"example": {"id": 1, "name": "dinner", "recipes": [{}]}}
|
||||
|
|
|
@ -3,6 +3,7 @@ from typing import List, Optional
|
|||
from pydantic import BaseModel
|
||||
|
||||
|
||||
|
||||
class Webhooks(BaseModel):
|
||||
webhookTime: str = "00:00"
|
||||
webhookURLs: Optional[List[str]] = []
|
||||
|
@ -11,12 +12,14 @@ class Webhooks(BaseModel):
|
|||
|
||||
class SiteSettings(BaseModel):
|
||||
name: str = "main"
|
||||
planCategories: list[str] = []
|
||||
webhooks: Webhooks
|
||||
|
||||
class Config:
|
||||
schema_extra = {
|
||||
"example": {
|
||||
"name": "main",
|
||||
"planCategories": ["dinner", "lunch"],
|
||||
"webhooks": {
|
||||
"webhookTime": "00:00",
|
||||
"webhookURLs": ["https://mywebhookurl.com/webhook"],
|
||||
|
|
|
@ -4,6 +4,7 @@ from db.database import db
|
|||
from db.db_setup import generate_session
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from models.recipe_models import AllRecipeRequest
|
||||
from slugify import slugify
|
||||
from sqlalchemy.orm.session import Session
|
||||
|
||||
router = APIRouter(tags=["Query All Recipes"])
|
||||
|
@ -69,3 +70,25 @@ def get_all_recipes_post(
|
|||
"""
|
||||
|
||||
return db.recipes.get_all_limit_columns(session, body.properties, body.limit)
|
||||
|
||||
|
||||
@router.post("/api/recipes/category")
|
||||
def filter_by_category(categories: list, session: Session = Depends(generate_session)):
|
||||
""" pass a list of categories and get a list of recipes associated with those categories """
|
||||
#! This should be refactored into a single database call, but I couldn't figure it out
|
||||
in_category = [
|
||||
db.categories.get(session, slugify(cat), limit=1) for cat in categories
|
||||
]
|
||||
in_category = [cat.get("recipes") for cat in in_category]
|
||||
in_category = [item for sublist in in_category for item in sublist]
|
||||
return in_category
|
||||
|
||||
|
||||
@router.post("/api/recipes/tag")
|
||||
async def filter_by_tags(tags: list, session: Session = Depends(generate_session)):
|
||||
""" pass a list of tags and get a list of recipes associated with those tags"""
|
||||
#! This should be refactored into a single database call, but I couldn't figure it out
|
||||
in_tags = [db.tags.get(session, slugify(tag), limit=1) for tag in tags]
|
||||
in_tags = [tag.get("recipes") for tag in in_tags]
|
||||
in_tags = [item for sublist in in_tags for item in sublist]
|
||||
return in_tags
|
||||
|
|
|
@ -3,7 +3,6 @@ from db.db_setup import generate_session
|
|||
from fastapi import APIRouter, Depends
|
||||
from models.category_models import RecipeCategoryResponse
|
||||
from sqlalchemy.orm.session import Session
|
||||
|
||||
from utils.snackbar import SnackResponse
|
||||
|
||||
router = APIRouter(
|
||||
|
@ -26,14 +25,15 @@ def get_all_recipes_by_category(
|
|||
return db.categories.get(session, category)
|
||||
|
||||
|
||||
|
||||
@router.delete("/{category}")
|
||||
async def delete_recipe_category(
|
||||
category: str, session: Session = Depends(generate_session)
|
||||
):
|
||||
""" Removes a recipe category from the database. Deleting a
|
||||
"""Removes a recipe category from the database. Deleting a
|
||||
category does not impact a recipe. The category will be removed
|
||||
from any recipes that contain it """
|
||||
from any recipes that contain it"""
|
||||
|
||||
db.categories.delete(session, category)
|
||||
|
||||
return SnackResponse(f"Category Deleted: {category}")
|
||||
return SnackResponse.error(f"Category Deleted: {category}")
|
||||
|
|
|
@ -69,8 +69,10 @@ def delete_recipe(recipe_slug: str, db: Session = Depends(generate_session)):
|
|||
async def get_recipe_img(recipe_slug: str):
|
||||
""" Takes in a recipe slug, returns the static image """
|
||||
recipe_image = read_image(recipe_slug)
|
||||
|
||||
return FileResponse(recipe_image)
|
||||
if recipe_image:
|
||||
return FileResponse(recipe_image)
|
||||
else:
|
||||
return
|
||||
|
||||
|
||||
@router.put("/{recipe_slug}/image")
|
||||
|
|
|
@ -2,7 +2,6 @@ from db.database import db
|
|||
from db.db_setup import generate_session
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.orm.session import Session
|
||||
|
||||
from utils.snackbar import SnackResponse
|
||||
|
||||
router = APIRouter(tags=["Recipes"])
|
||||
|
@ -13,7 +12,7 @@ router = APIRouter(
|
|||
)
|
||||
|
||||
|
||||
@router.get("/all")
|
||||
@router.get("/")
|
||||
async def get_all_recipe_tags(session: Session = Depends(generate_session)):
|
||||
""" Returns a list of available tags in the database """
|
||||
return db.tags.get_all_primary_keys(session)
|
||||
|
|
|
@ -19,13 +19,14 @@ def get_main_settings(session: Session = Depends(generate_session)):
|
|||
except:
|
||||
default_settings_init(session)
|
||||
data = db.settings.get(session, "main")
|
||||
|
||||
print(data)
|
||||
return data
|
||||
|
||||
|
||||
@router.put("")
|
||||
def update_settings(data: SiteSettings, session: Session = Depends(generate_session)):
|
||||
""" Returns Site Settings """
|
||||
print("Categories", data.planCategories)
|
||||
db.settings.update(session, "main", data.dict())
|
||||
|
||||
return SnackResponse.success("Settings Updated")
|
||||
|
|
|
@ -3,6 +3,7 @@ from pathlib import Path
|
|||
|
||||
import requests
|
||||
from app_config import IMG_DIR
|
||||
from utils.logger import logger
|
||||
|
||||
|
||||
def read_image(recipe_slug: str) -> Path:
|
||||
|
@ -48,6 +49,7 @@ def scrape_image(image_url: str, slug: str) -> Path:
|
|||
try:
|
||||
r = requests.get(image_url, stream=True)
|
||||
except:
|
||||
logger.exception("Fatal Image Request Exception")
|
||||
return None
|
||||
|
||||
if r.status_code == 200:
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from datetime import date, timedelta
|
||||
from pathlib import Path
|
||||
from typing import List, Optional
|
||||
|
||||
from db.database import db
|
||||
|
|
|
@ -40,7 +40,11 @@ def normalize_instructions(instructions) -> List[dict]:
|
|||
|
||||
# One long string split by (possibly multiple) new lines
|
||||
if type(instructions) == str:
|
||||
return [{"text": normalize_instruction(line)} for line in instructions.splitlines() if line]
|
||||
return [
|
||||
{"text": normalize_instruction(line)}
|
||||
for line in instructions.splitlines()
|
||||
if line
|
||||
]
|
||||
|
||||
# Plain strings in a list
|
||||
elif type(instructions) == list and type(instructions[0]) == str:
|
||||
|
@ -64,7 +68,9 @@ def normalize_instructions(instructions) -> List[dict]:
|
|||
]
|
||||
|
||||
return [
|
||||
{"text": normalize_instruction(step["text"])} for step in instructions if step["@type"] == "HowToStep"
|
||||
{"text": normalize_instruction(step["text"])}
|
||||
for step in instructions
|
||||
if step["@type"] == "HowToStep"
|
||||
]
|
||||
except Exception as e:
|
||||
# Not "@type", try "type"
|
||||
|
@ -111,8 +117,12 @@ def normalize_data(recipe_data: dict) -> dict:
|
|||
recipe_data["prepTime"] = normalize_time(recipe_data.get("prepTime"))
|
||||
recipe_data["performTime"] = normalize_time(recipe_data.get("performTime"))
|
||||
recipe_data["recipeYield"] = normalize_yield(recipe_data.get("recipeYield"))
|
||||
recipe_data["recipeIngredient"] = normalize_ingredient(recipe_data.get("recipeIngredient"))
|
||||
recipe_data["recipeInstructions"] = normalize_instructions(recipe_data["recipeInstructions"])
|
||||
recipe_data["recipeIngredient"] = normalize_ingredient(
|
||||
recipe_data.get("recipeIngredient")
|
||||
)
|
||||
recipe_data["recipeInstructions"] = normalize_instructions(
|
||||
recipe_data["recipeInstructions"]
|
||||
)
|
||||
recipe_data["image"] = normalize_image_url(recipe_data["image"])
|
||||
return recipe_data
|
||||
|
||||
|
@ -136,11 +146,15 @@ def process_recipe_data(new_recipe: dict, url=None) -> dict:
|
|||
|
||||
def extract_recipe_from_html(html: str, url: str) -> dict:
|
||||
try:
|
||||
scraped_recipes: List[dict] = scrape_schema_recipe.loads(html, python_objects=True)
|
||||
scraped_recipes: List[dict] = scrape_schema_recipe.loads(
|
||||
html, python_objects=True
|
||||
)
|
||||
dump_last_json(scraped_recipes)
|
||||
|
||||
if not scraped_recipes:
|
||||
scraped_recipes: List[dict] = scrape_schema_recipe.scrape_url(url, python_objects=True)
|
||||
scraped_recipes: List[dict] = scrape_schema_recipe.scrape_url(
|
||||
url, python_objects=True
|
||||
)
|
||||
except Exception as e:
|
||||
# trying without python_objects
|
||||
scraped_recipes: List[dict] = scrape_schema_recipe.loads(html)
|
||||
|
@ -170,7 +184,7 @@ def download_image_for_recipe(recipe: dict) -> dict:
|
|||
img_path = scrape_image(recipe.get("image"), recipe.get("slug"))
|
||||
recipe["image"] = img_path.name
|
||||
except:
|
||||
recipe["image"] = None
|
||||
recipe["image"] = "no image"
|
||||
|
||||
return recipe
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
from db.database import db
|
||||
from db.db_setup import create_session, sql_exists
|
||||
from db.db_setup import create_session
|
||||
from models.settings_models import SiteSettings, Webhooks
|
||||
from sqlalchemy.orm.session import Session
|
||||
from utils.logger import logger
|
||||
|
||||
|
||||
def default_settings_init(session: Session = None):
|
||||
|
@ -10,7 +11,7 @@ def default_settings_init(session: Session = None):
|
|||
try:
|
||||
webhooks = Webhooks()
|
||||
default_entry = SiteSettings(name="main", webhooks=webhooks)
|
||||
document = db.settings.create(session, default_entry.dict(), webhooks.dict())
|
||||
document = db.settings.create(session, default_entry.dict())
|
||||
logger.info(f"Created Site Settings: \n {document}")
|
||||
except:
|
||||
pass
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ from tests.utils.routes import (
|
|||
def default_settings():
|
||||
return {
|
||||
"name": "main",
|
||||
"planCategories": [],
|
||||
"webhooks": {"webhookTime": "00:00", "webhookURLs": [], "enabled": False},
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue