Compare commits

...

1566 Commits
1.2.2 ... 1.5.8

Author SHA1 Message Date
vabene1111
d7017902ab Merge branch 'develop' 2023-11-27 22:56:13 +01:00
vabene1111
35743e8be9 fixed constraint 2023-11-27 22:47:56 +01:00
vabene1111
75523c06f6 Merge branch 'develop' 2023-11-27 22:34:02 +01:00
vabene1111
7e2aee53db fixed import ingredient edit modal cleanup 2023-11-27 22:33:48 +01:00
vabene1111
9c74730461 added first draft of property editor 2023-11-27 22:20:09 +01:00
vabene1111
977d2822bc added ability to set custom logo in navbar 2023-11-27 20:29:01 +01:00
vabene1111
31f93285d8 Merge branch 'feature/space-icon' into develop 2023-11-27 20:23:45 +01:00
vabene1111
da9002a7fd Revert "WIP"
This reverts commit 58e70c982e.
2023-11-27 20:23:36 +01:00
vabene1111
1bf7af7027 hide properties if none are present in recipe 2023-11-27 20:21:18 +01:00
vabene1111
1145a8cf26 fixed PR 2693 2023-11-27 20:15:41 +01:00
vabene1111
5e918297f8 Merge pull request #2693 from blowk/develop
Update to import tags on mealie and chowdown recipes
2023-11-27 20:07:09 +01:00
vabene1111
69adad70c8 Merge pull request #2727 from jrester/dark-theme-fixes
Improve dark theme
2023-11-27 20:05:30 +01:00
vabene1111
d3905f1e80 Merge pull request #2709 from TandoorRecipes/dependabot/pip/markdown-3.5.1
Bump markdown from 3.4.3 to 3.5.1
2023-11-27 20:01:49 +01:00
vabene1111
1a1ff52725 Merge pull request #2707 from TandoorRecipes/dependabot/pip/boto3-1.28.75
Bump boto3 from 1.28.57 to 1.28.75
2023-11-27 20:01:24 +01:00
vabene1111
731958fdaa Merge pull request #2708 from TandoorRecipes/dependabot/pip/recipe-scrapers-14.52.0
Bump recipe-scrapers from 14.36.1 to 14.52.0
2023-11-27 20:01:07 +01:00
vabene1111
8a19c8eeb0 Merge pull request #2711 from TandoorRecipes/dependabot/pip/whitenoise-6.6.0
Bump whitenoise from 6.5.0 to 6.6.0
2023-11-27 20:00:53 +01:00
vabene1111
4e7368f7b6 Merge pull request #2710 from TandoorRecipes/dependabot/pip/pytest-django-4.6.0
Bump pytest-django from 4.5.2 to 4.6.0
2023-11-27 20:00:46 +01:00
vabene1111
b00f1009a6 Merge pull request #2731 from TandoorRecipes/dependabot/npm_and_yarn/vue/axios-1.6.0
Bump axios from 1.5.0 to 1.6.0 in /vue
2023-11-27 20:00:00 +01:00
vabene1111
2d3ecaaf3c Merge pull request #2700 from TandoorRecipes/dependabot/npm_and_yarn/vue/browserify-sign-4.2.2
Bump browserify-sign from 4.2.1 to 4.2.2 in /vue
2023-11-27 19:59:44 +01:00
vabene1111
339049c785 Merge branch 'develop' of https://github.com/TandoorRecipes/recipes into develop 2023-11-27 19:59:14 +01:00
vabene1111
d0481ed18c fixed recipe card description overlay 2023-11-27 19:59:06 +01:00
vabene1111
bcee66c7a4 fixed mela recipes importer 2023-11-27 19:58:56 +01:00
vabene1111
7e993ca50e Merge pull request #2686 from TandoorRecipes/dependabot/npm_and_yarn/vue/babel/traverse-7.23.2
Bump @babel/traverse from 7.22.17 to 7.23.2 in /vue
2023-11-27 19:58:35 +01:00
vabene1111
638dc845c0 Merge pull request #2682 from djstini/fix-import
open-data-import further duplicate handling
2023-11-27 19:56:19 +01:00
vabene1111
4aea0fea8c Merge pull request #2685 from harry48225/delete-confirmation
Increase specificity of the delete confirmation dialog
2023-11-27 19:50:26 +01:00
vabene1111
2ba94df9a8 Merge pull request #2691 from gorrilla10101/patch-1
Update authentication.md
2023-11-27 19:45:25 +01:00
Spreez
5723d87768 Translated using Weblate (German)
Currently translated at 100.0% (534 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-11-22 18:19:57 +00:00
Thomas
24b1f4028f Translated using Weblate (German)
Currently translated at 100.0% (534 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-11-22 18:19:57 +00:00
Spreez
984c863ff6 Translated using Weblate (German)
Currently translated at 100.0% (490 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2023-11-22 18:19:57 +00:00
vabene1111
0f207c2fa7 Merge pull request #2718 from TandoorRecipes/dependabot/pip/django-4.2.7
Bump django from 4.2.5 to 4.2.7
2023-11-22 09:15:55 +01:00
vabene1111
58e70c982e WIP 2023-11-21 22:34:17 +01:00
blowk
4cb94a1759 Update chowdown.py 2023-11-17 19:34:36 +01:00
blowk
3e568f7bb5 Merge branch 'TandoorRecipes:develop' into develop 2023-11-17 16:16:51 +01:00
Jan-Niklas Weghorn
b69c6bc97a fix placeholder text 2023-11-15 09:52:16 +01:00
avi meyer
9132ab8f33 Translated using Weblate (Hebrew)
Currently translated at 0.9% (5 of 508 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/he/
2023-11-15 08:20:01 +00:00
avi meyer
45858d5107 Translated using Weblate (Hebrew)
Currently translated at 93.2% (498 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/he/
2023-11-15 08:19:56 +00:00
avi meyer
1e332977c5 Added translation using Weblate (Hebrew) 2023-11-14 07:56:00 +00:00
dependabot[bot]
7b70ffab5f Bump axios from 1.5.0 to 1.6.0 in /vue
Bumps [axios](https://github.com/axios/axios) from 1.5.0 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.5.0...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-11 15:26:26 +00:00
Jan-Niklas Weghorn
9b367e5d08 fix bottom navigation bar 2023-11-10 14:09:24 +01:00
Jan-Niklas Weghorn
243cac0389 cleanup 2023-11-10 12:16:43 +01:00
Jan-Niklas Weghorn
8205812c84 fix markdown editor and sidebar 2023-11-10 11:52:26 +01:00
Jan-Niklas Weghorn
94279b74c9 improve dark theme 2023-11-10 11:17:20 +01:00
noobdog
8a588db429 Translated using Weblate (Lithuanian)
Currently translated at 13.4% (72 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/lt/
2023-11-06 08:03:51 +00:00
dependabot[bot]
5150807ab7 Bump django from 4.2.5 to 4.2.7
Bumps [django](https://github.com/django/django) from 4.2.5 to 4.2.7.
- [Commits](https://github.com/django/django/compare/4.2.5...4.2.7)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-02 21:55:41 +00:00
smilerz
225ddc8eeb Update boot.sh
updated to handle postgres defined in database_url
2023-11-01 07:49:07 -05:00
dependabot[bot]
a6965fb3c4 Bump whitenoise from 6.5.0 to 6.6.0
Bumps [whitenoise](https://github.com/evansd/whitenoise) from 6.5.0 to 6.6.0.
- [Changelog](https://github.com/evansd/whitenoise/blob/main/docs/changelog.rst)
- [Commits](https://github.com/evansd/whitenoise/compare/6.5.0...6.6.0)

---
updated-dependencies:
- dependency-name: whitenoise
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-01 00:16:11 +00:00
dependabot[bot]
90354305c4 Bump pytest-django from 4.5.2 to 4.6.0
Bumps [pytest-django](https://github.com/pytest-dev/pytest-django) from 4.5.2 to 4.6.0.
- [Release notes](https://github.com/pytest-dev/pytest-django/releases)
- [Changelog](https://github.com/pytest-dev/pytest-django/blob/master/docs/changelog.rst)
- [Commits](https://github.com/pytest-dev/pytest-django/compare/v4.5.2...v4.6.0)

---
updated-dependencies:
- dependency-name: pytest-django
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-01 00:16:09 +00:00
dependabot[bot]
220d98a85c Bump markdown from 3.4.3 to 3.5.1
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.4.3 to 3.5.1.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.4.3...3.5.1)

---
updated-dependencies:
- dependency-name: markdown
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-01 00:16:05 +00:00
dependabot[bot]
7fb4155ebe Bump recipe-scrapers from 14.36.1 to 14.52.0
Bumps [recipe-scrapers](https://github.com/hhursev/recipe-scrapers) from 14.36.1 to 14.52.0.
- [Release notes](https://github.com/hhursev/recipe-scrapers/releases)
- [Commits](https://github.com/hhursev/recipe-scrapers/compare/14.36.1...14.52.0)

---
updated-dependencies:
- dependency-name: recipe-scrapers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-01 00:16:01 +00:00
dependabot[bot]
a39e6e8a6a Bump boto3 from 1.28.57 to 1.28.75
Bumps [boto3](https://github.com/boto/boto3) from 1.28.57 to 1.28.75.
- [Release notes](https://github.com/boto/boto3/releases)
- [Changelog](https://github.com/boto/boto3/blob/develop/CHANGELOG.rst)
- [Commits](https://github.com/boto/boto3/compare/1.28.57...1.28.75)

---
updated-dependencies:
- dependency-name: boto3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-01 00:15:57 +00:00
smilerz
97fc15ded3 Merge pull request #2705 from smilerz/move_sqlite
better support for sqlite
2023-10-30 22:12:55 -05:00
smilerz
8bee2e3976 allow arbitrary path for sqlite using DATABASE_URL 2023-10-30 21:54:25 -05:00
smilerz
e89c1742fb remove deprecated django.db.backends.postgresql_psycopg2 2023-10-30 21:42:57 -05:00
smilerz
6680fbb644 changes to enable sqlite3 in docker container 2023-10-30 21:37:45 -05:00
smilerz
4cec643e08 Update ExportResponseView.vue 2023-10-29 16:33:22 -05:00
dependabot[bot]
03bd51893e Bump browserify-sign from 4.2.1 to 4.2.2 in /vue
Bumps [browserify-sign](https://github.com/crypto-browserify/browserify-sign) from 4.2.1 to 4.2.2.
- [Changelog](https://github.com/browserify/browserify-sign/blob/main/CHANGELOG.md)
- [Commits](https://github.com/crypto-browserify/browserify-sign/compare/v4.2.1...v4.2.2)

---
updated-dependencies:
- dependency-name: browserify-sign
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-27 22:30:06 +00:00
smilerz
66b0e381ec Merge pull request #2699 from smilerz/fix_export
fixes recipe export
2023-10-27 14:45:03 -05:00
smilerz
fd70adf19d fixes recipe export 2023-10-27 14:43:48 -05:00
blowk
eb8422cb51 Import tags on mealie recipes 2023-10-22 20:09:27 +02:00
gorrilla10101
1008d880c9 Update authentication.md
Changed provider list url because existing one doesn't work anymore.
2023-10-21 06:07:37 -05:00
Ferenc
9cb1c21cd8 Translated using Weblate (Hungarian)
Currently translated at 81.4% (435 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/hu/
2023-10-20 14:05:55 +00:00
Boris Holowka
5149cb0609 Translated using Weblate (German)
Currently translated at 96.6% (516 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-10-20 14:05:55 +00:00
Ferenc
08adf4eb6f Translated using Weblate (Hungarian)
Currently translated at 97.7% (479 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hu/
2023-10-20 14:05:55 +00:00
dependabot[bot]
62f38d00f3 Bump @babel/traverse from 7.22.17 to 7.23.2 in /vue
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.17 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-19 06:30:23 +00:00
harry
43a55c8c82 Fix bug when ingredients have no name 2023-10-18 21:46:07 +01:00
harry
d09eb64a41 Change step deletion confirmation 2023-10-18 21:30:17 +01:00
harry
8bbbc1b9ef Change remove ingredient confirmation 2023-10-18 21:09:33 +01:00
Jonas
cc367bfed2 Translated using Weblate (Lithuanian)
Currently translated at 4.6% (25 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/lt/
2023-10-15 14:19:56 +00:00
Ferenc
b18aa831ac Translated using Weblate (Hungarian)
Currently translated at 81.2% (434 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/hu/
2023-10-15 14:19:55 +00:00
Ferenc
6205fbe1c4 Translated using Weblate (Hungarian)
Currently translated at 97.7% (479 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hu/
2023-10-15 14:19:55 +00:00
Jonas
879a54524c Added translation using Weblate (Lithuanian) 2023-10-14 21:14:27 +00:00
Ferenc
36678692be Translated using Weblate (Hungarian)
Currently translated at 73.7% (394 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/hu/
2023-10-14 12:14:48 +00:00
Tomasz Klimczak
de6285e5f8 Translated using Weblate (Polish)
Currently translated at 100.0% (534 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2023-10-14 12:14:48 +00:00
Guilherme Roda
7ff7409f56 Translated using Weblate (Portuguese (Brazil))
Currently translated at 89.8% (480 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2023-10-13 14:18:58 +00:00
Ferenc
50b3636c86 Translated using Weblate (Hungarian)
Currently translated at 63.8% (341 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/hu/
2023-10-13 11:43:22 +00:00
dennisstinauer
1f72a3f62f open-data-import further duplicate handling 2023-10-13 12:50:59 +02:00
Ferenc
aea796bd6d Translated using Weblate (Hungarian)
Currently translated at 51.4% (275 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/hu/
2023-10-12 22:10:32 +00:00
Ferenc
edcddc3183 Translated using Weblate (Hungarian)
Currently translated at 41.0% (219 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/hu/
2023-10-12 20:19:57 +00:00
pharok
45a24a4720 Translated using Weblate (French)
Currently translated at 91.0% (486 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2023-10-12 20:19:57 +00:00
Charles Pare
bed95105f3 Translated using Weblate (French)
Currently translated at 91.0% (486 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2023-10-12 20:19:57 +00:00
pharok
a39fdb4226 Translated using Weblate (French)
Currently translated at 92.8% (455 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-10-12 20:19:57 +00:00
smilerz
9d629b03b3 Update __init__.py 2023-10-12 10:44:59 -05:00
Ferenc
4eeb87cb95 Translated using Weblate (Hungarian)
Currently translated at 37.0% (198 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/hu/
2023-10-11 18:33:38 +00:00
Ferenc
3ce7e43b46 Translated using Weblate (Hungarian)
Currently translated at 29.0% (155 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/hu/
2023-10-10 11:19:55 +00:00
Ferenc
a3a995ef77 Translated using Weblate (Hungarian)
Currently translated at 97.5% (478 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hu/
2023-10-10 11:19:55 +00:00
Ferenc
a386b45a03 Translated using Weblate (Hungarian)
Currently translated at 2.6% (14 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/hu/
2023-10-09 01:54:03 +00:00
Guilherme Roda
74bd2ba2c0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 59.6% (335 of 562 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2023-10-09 01:54:03 +00:00
Guilherme Roda
695f467126 Translated using Weblate (Portuguese (Brazil))
Currently translated at 89.3% (477 of 534 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2023-10-09 01:54:03 +00:00
Ferenc
6270b46951 Translated using Weblate (Hungarian)
Currently translated at 89.5% (439 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hu/
2023-10-09 01:54:03 +00:00
vabene1111
a3ad131e6a Merge pull request #2672 from harry48225/Improve-App-Import-Layout
Make import list layout responsive
2023-10-08 11:55:02 +02:00
Guilherme Roda
e2d5287cc6 Translated using Weblate (Portuguese (Brazil))
Currently translated at 51.0% (287 of 562 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2023-10-07 18:02:02 +00:00
Guilherme Roda
1c39d8089c Translated using Weblate (Portuguese (Brazil))
Currently translated at 87.0% (464 of 533 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2023-10-07 18:02:02 +00:00
Guilherme Roda
2230b9e9ab Translated using Weblate (Portuguese)
Currently translated at 35.7% (175 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt/
2023-10-07 18:02:02 +00:00
harry
339d7b1c96 Make import list layout responsive 2023-10-07 17:09:53 +01:00
vabene1111
4e8c955555 fixed width recipe card skeleton 2023-10-07 08:37:53 +02:00
vabene1111
221c466c18 fixed recipe sage import and image procssing with pillow 10 2023-10-07 08:11:50 +02:00
vabene1111
2c8e029811 Merge pull request #2656 from TandoorRecipes/dependabot/github_actions/docker/metadata-action-5
Bump docker/metadata-action from 4 to 5
2023-10-05 21:14:24 +02:00
vabene1111
019825bfcb Merge pull request #2655 from TandoorRecipes/dependabot/github_actions/docker/login-action-3
Bump docker/login-action from 2 to 3
2023-10-05 21:14:13 +02:00
vabene1111
8e5ea47d5e Merge pull request #2654 from TandoorRecipes/dependabot/github_actions/docker/setup-qemu-action-3
Bump docker/setup-qemu-action from 2 to 3
2023-10-05 21:14:04 +02:00
vabene1111
425ac7f379 Merge pull request #2653 from TandoorRecipes/dependabot/github_actions/docker/setup-buildx-action-3
Bump docker/setup-buildx-action from 2 to 3
2023-10-05 21:13:57 +02:00
vabene1111
f0caef4759 Merge pull request #2652 from TandoorRecipes/dependabot/github_actions/docker/build-push-action-5
Bump docker/build-push-action from 4 to 5
2023-10-05 21:13:40 +02:00
vabene1111
c56a76f264 Merge pull request #2404 from ignas2526/feature/2402-make-now-count
Add ability to set maximum missing ingredient count
2023-10-05 19:01:48 +02:00
vabene1111
429886e6a6 Merge branch 'develop' into feature/2402-make-now-count 2023-10-05 19:01:33 +02:00
vabene1111
339ab57df7 Merge pull request #2647 from JohnTheNerd/develop
Added support for keeping SECRET_KEY and POSTGRES_PASSWORD in a file
2023-10-05 18:59:24 +02:00
vabene1111
cb6d98a357 fixed system page permission 2023-10-05 18:58:38 +02:00
vabene1111
e746b44f3b Merge pull request #2632 from smilerz/unique_name
updates to multiple models uniqueness capabilities
2023-10-05 18:57:08 +02:00
vabene1111
bc63ba6713 Merge pull request #2630 from smilerz/imports_cleanup
Imports cleanup
2023-10-05 18:55:32 +02:00
vabene1111
ea8661ab03 fixed property view roundign 2023-10-05 18:50:47 +02:00
vabene1111
bc9a5c9435 Merge pull request #2651 from TandoorRecipes/dependabot/pip/beautifulsoup4-4.12.2
Bump beautifulsoup4 from 4.11.1 to 4.12.2
2023-10-05 18:35:47 +02:00
vabene1111
365ffa29fa Merge pull request #2650 from TandoorRecipes/dependabot/pip/django-cors-headers-4.2.0
Bump django-cors-headers from 3.13.0 to 4.2.0
2023-10-05 18:35:41 +02:00
vabene1111
b3aeee6a63 Merge pull request #2648 from TandoorRecipes/dependabot/pip/boto3-1.28.57
Bump boto3 from 1.26.41 to 1.28.57
2023-10-05 18:35:32 +02:00
vabene1111
d503dc77c3 Merge pull request #2649 from TandoorRecipes/dependabot/pip/python-dotenv-1.0.0
Bump python-dotenv from 0.21.0 to 1.0.0
2023-10-05 18:35:04 +02:00
dependabot[bot]
fee364ee4a Bump python-dotenv from 0.21.0 to 1.0.0
Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.21.0 to 1.0.0.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.21.0...v1.0.0)

---
updated-dependencies:
- dependency-name: python-dotenv
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-05 16:32:22 +00:00
vabene1111
680a8d0fce Merge pull request #2639 from TandoorRecipes/dependabot/pip/cryptography-41.0.4
Bump cryptography from 41.0.3 to 41.0.4
2023-10-05 18:31:55 +02:00
vabene1111
0944d72e32 Merge pull request #2664 from TandoorRecipes/dependabot/pip/pillow-10.0.1
Bump pillow from 9.4.0 to 10.0.1
2023-10-05 18:31:32 +02:00
vabene1111
6809ded468 Merge pull request #2659 from nabim777/add-step-on-docs-for-manually-installation
add step on docs for manual installation
2023-10-05 18:30:13 +02:00
dependabot[bot]
64d07a65dc Bump pillow from 9.4.0 to 10.0.1
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.4.0 to 10.0.1.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.4.0...10.0.1)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-04 01:12:50 +00:00
Samuel
745abb57a8 Translated using Weblate (Portuguese (Brazil))
Currently translated at 36.9% (197 of 533 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2023-10-02 20:19:56 +00:00
nabim777
dfe5083451 add step on docs for manual installation 2023-10-01 10:18:43 +05:45
dependabot[bot]
9377e208e8 Bump docker/metadata-action from 4 to 5
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4 to 5.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](https://github.com/docker/metadata-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-01 00:40:41 +00:00
dependabot[bot]
40f38e6c6d Bump docker/login-action from 2 to 3
Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-01 00:40:37 +00:00
dependabot[bot]
3ee0717d84 Bump docker/setup-qemu-action from 2 to 3
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-01 00:40:33 +00:00
dependabot[bot]
47155ce338 Bump docker/setup-buildx-action from 2 to 3
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-01 00:40:28 +00:00
dependabot[bot]
611080b739 Bump docker/build-push-action from 4 to 5
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4 to 5.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-01 00:40:24 +00:00
dependabot[bot]
416d1badda Bump beautifulsoup4 from 4.11.1 to 4.12.2
Bumps [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) from 4.11.1 to 4.12.2.

---
updated-dependencies:
- dependency-name: beautifulsoup4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-01 00:20:58 +00:00
dependabot[bot]
0ef5d3ad92 Bump django-cors-headers from 3.13.0 to 4.2.0
Bumps [django-cors-headers](https://github.com/adamchainz/django-cors-headers) from 3.13.0 to 4.2.0.
- [Changelog](https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/adamchainz/django-cors-headers/compare/3.13.0...4.2.0)

---
updated-dependencies:
- dependency-name: django-cors-headers
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-01 00:20:55 +00:00
dependabot[bot]
efb8784b91 Bump boto3 from 1.26.41 to 1.28.57
Bumps [boto3](https://github.com/boto/boto3) from 1.26.41 to 1.28.57.
- [Release notes](https://github.com/boto/boto3/releases)
- [Changelog](https://github.com/boto/boto3/blob/develop/CHANGELOG.rst)
- [Commits](https://github.com/boto/boto3/compare/1.26.41...1.28.57)

---
updated-dependencies:
- dependency-name: boto3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-01 00:20:46 +00:00
Tomasz Klimczak
a1a6f476e0 Translated using Weblate (Polish)
Currently translated at 100.0% (533 of 533 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2023-09-30 22:19:56 +00:00
John Karabudak
ccd0667f04 Added support for keeping SECRET_KEY and POSTGRES_PASSWORD in a file
This commit adds two optional environment variables:

- SECRET_KEY_FILE
- POSTGRES_PASSWORD_FILE

This change allows mounting secret data when running this in Docker Swarm, instead of having to hard-code it in our docker-compose file or provide it alongside all other environment variables.
2023-09-30 01:12:30 -02:30
Henrique Nepomuceno
38cf825816 Translated using Weblate (Portuguese (Brazil))
Currently translated at 32.2% (172 of 533 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2023-09-29 20:19:56 +00:00
Leo Mu
a8dc8e7190 Translated using Weblate (Italian)
Currently translated at 87.2% (465 of 533 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2023-09-29 20:19:56 +00:00
Luis Cacho
76aca6cf38 Translated using Weblate (Spanish)
Currently translated at 68.2% (361 of 529 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2023-09-25 09:59:47 +00:00
Matias Laporte
89c31a018f Translated using Weblate (Spanish)
Currently translated at 68.2% (361 of 529 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2023-09-25 09:59:47 +00:00
Leo Mu
e54f55b6d0 Translated using Weblate (Italian)
Currently translated at 88.0% (466 of 529 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2023-09-25 09:59:47 +00:00
Matias Laporte
fff7cb607c Translated using Weblate (Spanish)
Currently translated at 61.4% (301 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2023-09-25 09:59:47 +00:00
dependabot[bot]
54c2478869 Bump cryptography from 41.0.3 to 41.0.4
Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.3 to 41.0.4.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/41.0.3...41.0.4)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-21 21:06:20 +00:00
smilerz
a7795092b3 make 'name' unique in space for MealType
make MealType, Unit, Supermarket, Supermarket Category, PropoertyType
case insenstive for get_or_create
convert unit conversion create serializer to get_or_create behavior
enable create duplicate tests for unitconversion and mealtype api
2023-09-14 14:46:37 -05:00
smilerz
538fb8b42e remove unused imports, vairables and commented code
from views, and base cookbook and recipes modules
2023-09-13 13:31:53 -05:00
smilerz
1f0cd58d7d remove unused imports, variables and commented code
from tests
2023-09-13 13:08:26 -05:00
smilerz
78b1386a1c remove unused imports, variables and commented code
from integrations and templatetags
2023-09-13 09:35:22 -05:00
smilerz
aba7f8db5c remove unused imports, variables and commented code in helpers 2023-09-13 09:29:48 -05:00
vabene1111
d7fadffbfd date format in meal plan simple grid 2023-09-13 16:17:02 +02:00
vabene1111
22c7f5d85d changed date label format 2023-09-13 16:16:38 +02:00
vabene1111
c18d8daece fixed meal plan simple grid on search view after merge 2023-09-13 16:08:56 +02:00
smilerz
d91c4b33f3 Merge pull request #2609 from smilerz/automation_tests
Automation Refactor and Tests
2023-09-12 15:07:18 -05:00
smilerz
2ad6f21b9c Merge pull request #2611 from smilerz/export_fix
fix custom_filter exports and errors on Download link
2023-09-12 15:06:31 -05:00
smilerz
554170a84e Merge pull request #2615 from smilerz/clear_food_after_add
clears search on food in shopping form
2023-09-12 15:06:23 -05:00
smilerz
d43a6e551d Merge pull request #2617 from smilerz/ignore_shopping_fix
respect ignore_shopping flag
2023-09-12 15:06:13 -05:00
smilerz
02cb6d1be7 Merge pull request #2619 from smilerz/meal_plan_date
update Meal Plan grid to respect localization on date format
2023-09-12 15:05:58 -05:00
smilerz
45b1eca48b Merge pull request #2621 from smilerz/fix_recipe_count
fix recipe counting issue on extended mixin
2023-09-12 15:05:30 -05:00
smilerz
6dacd44f1f regenerate openapi 2023-09-12 09:53:59 -05:00
smilerz
1b97472368 Squashed commit of the following:
commit 52909e8117
Author: smilerz <smilerz@gmail.com>
Date:   Wed Sep 6 15:54:23 2023 -0500

    fix recipe counting issue on extended mixin
2023-09-12 09:48:41 -05:00
smilerz
d467352029 Squashed commit of the following:
commit c8fc6b5237
Author: smilerz <smilerz@gmail.com>
Date:   Wed Sep 6 14:01:27 2023 -0500

    update Meal Plan grid to respect localization on date format
2023-09-12 09:48:22 -05:00
smilerz
a0256b607e Squashed commit of the following:
commit f8f08ae337
Author: smilerz <smilerz@gmail.com>
Date:   Wed Sep 6 10:27:43 2023 -0500

    respect ignore_shopping flag
2023-09-12 09:47:55 -05:00
smilerz
847fceaf10 Squashed commit of the following:
commit 4aa3e04df0
Author: smilerz <smilerz@gmail.com>
Date:   Wed Sep 6 09:01:07 2023 -0500

    clears search on food in shopping form
2023-09-12 09:47:07 -05:00
smilerz
9e831a22df Squashed commit of the following:
commit bcfe6ca707
Author: smilerz <smilerz@gmail.com>
Date:   Fri Sep 1 11:36:10 2023 -0500

    fix custom_filter exports and errors on Download link
2023-09-12 09:46:42 -05:00
smilerz
768a5ea237 Squashed commit of the following:
commit 36403ecbae
Author: smilerz <smilerz@gmail.com>
Date:   Fri Sep 1 12:04:04 2023 -0500

    update migration for new Automation Types

commit 4620ebaf30
Author: smilerz <smilerz@gmail.com>
Date:   Fri Sep 1 07:49:10 2023 -0500

    add Name and Instruction automation to YouTube importer

commit c907da84c1
Author: smilerz <smilerz@gmail.com>
Date:   Fri Sep 1 07:45:32 2023 -0500

    remove old commented automation code

commit 9b5e39415e
Author: smilerz <smilerz@gmail.com>
Date:   Fri Sep 1 07:37:36 2023 -0500

    test for automations applied during url import
    renamed TITLE_REPLACE to NAME_REPLACE

commit 2679a22464
Author: smilerz <smilerz@gmail.com>
Date:   Thu Aug 31 15:29:59 2023 -0500

    added tests for regex_replace

commit 8bae21025b
Author: smilerz <smilerz@gmail.com>
Date:   Thu Aug 31 13:51:46 2023 -0500

    updated Automation Modal and translations

commit 4120adc546
Author: smilerz <smilerz@gmail.com>
Date:   Thu Aug 31 13:12:41 2023 -0500

    applied regex_replace automation to food and unit automations
    updated automation documentation

commit 30c891abfc
Author: smilerz <smilerz@gmail.com>
Date:   Thu Aug 31 12:46:34 2023 -0500

    migrate regex_replace functions to AutomationEngine
    create TITLE_REPLACE, UNIT_REPLACE and FOOD REPLACE automation types
    create migration for new types

commit b8317c2c29
Author: smilerz <smilerz@gmail.com>
Date:   Wed Aug 30 20:44:40 2023 -0500

    move transpose words to AutomationEngine
    create tests for transpose words

commit 39253cfd02
Author: smilerz <smilerz@gmail.com>
Date:   Wed Aug 30 17:03:29 2023 -0500

    refactor never_unit automation to AutomationEngine
    create tests for never_unit

commit 7c0b8b151c
Author: smilerz <smilerz@gmail.com>
Date:   Wed Aug 30 11:21:06 2023 -0500

    update ingredient parser to use AutomationEngine for unt, keyword, food
    update test_ingredient_parser tests to accomodate changes

commit 8e1b8923af
Author: smilerz <smilerz@gmail.com>
Date:   Mon Aug 28 16:44:35 2023 -0500

    keyword and unit Automtations refactored to Automation Engine
    keyword and unit automation tests added

commit 52eb876a08
Author: smilerz <smilerz@gmail.com>
Date:   Mon Aug 28 15:03:19 2023 -0500

    food_alias tests added

commit a820b9c09e
Author: smilerz <smilerz@gmail.com>
Date:   Sat Aug 26 12:37:16 2023 -0500

    create AutomationEngine class
    create food_automation method
    refactor food automations to use AutomationEngine
2023-09-12 09:46:08 -05:00
smilerz
36403ecbae update migration for new Automation Types 2023-09-12 09:42:09 -05:00
smilerz
4620ebaf30 add Name and Instruction automation to YouTube importer 2023-09-12 09:42:09 -05:00
smilerz
c907da84c1 remove old commented automation code 2023-09-12 09:42:08 -05:00
smilerz
9b5e39415e test for automations applied during url import
renamed TITLE_REPLACE to NAME_REPLACE
2023-09-12 09:42:08 -05:00
smilerz
2679a22464 added tests for regex_replace 2023-09-12 09:42:07 -05:00
smilerz
8bae21025b updated Automation Modal and translations 2023-09-12 09:42:07 -05:00
smilerz
4120adc546 applied regex_replace automation to food and unit automations
updated automation documentation
2023-09-12 09:41:49 -05:00
smilerz
30c891abfc migrate regex_replace functions to AutomationEngine
create TITLE_REPLACE, UNIT_REPLACE and FOOD REPLACE automation types
create migration for new types
2023-09-12 09:41:49 -05:00
smilerz
b8317c2c29 move transpose words to AutomationEngine
create tests for transpose words
2023-09-12 09:40:17 -05:00
smilerz
39253cfd02 refactor never_unit automation to AutomationEngine
create tests for never_unit
2023-09-12 09:40:17 -05:00
smilerz
7c0b8b151c update ingredient parser to use AutomationEngine for unt, keyword, food
update test_ingredient_parser tests to accomodate changes
2023-09-12 09:40:17 -05:00
smilerz
8e1b8923af keyword and unit Automtations refactored to Automation Engine
keyword and unit automation tests added
2023-09-12 09:40:16 -05:00
smilerz
52eb876a08 food_alias tests added 2023-09-12 09:39:45 -05:00
smilerz
a820b9c09e create AutomationEngine class
create food_automation method
refactor food automations to use AutomationEngine
2023-09-12 09:39:45 -05:00
smilerz
bcfe6ca707 fix custom_filter exports and errors on Download link 2023-09-12 09:36:44 -05:00
smilerz
4aa3e04df0 clears search on food in shopping form 2023-09-12 09:30:47 -05:00
smilerz
f8f08ae337 respect ignore_shopping flag 2023-09-12 09:29:11 -05:00
smilerz
c8fc6b5237 update Meal Plan grid to respect localization on date format 2023-09-12 09:25:42 -05:00
smilerz
52909e8117 fix recipe counting issue on extended mixin 2023-09-12 09:21:18 -05:00
vabene1111
c72bf57ccb Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2023-09-12 16:08:33 +02:00
vabene1111
d3c21cf97f updated django 2023-09-12 16:08:28 +02:00
vabene1111
942edd9336 Merge pull request #2604 from TandoorRecipes/dependabot/pip/icalendar-5.0.7
Bump icalendar from 5.0.4 to 5.0.7
2023-09-12 16:07:35 +02:00
vabene1111
8fa6c98254 updated crispy forms 2023-09-12 16:07:16 +02:00
vabene1111
73c6bfce44 Merge pull request #2595 from djstini/develop
#2514 Importing a community curated list leads to an error
2023-09-12 16:00:25 +02:00
vabene1111
c105909933 Merge pull request #2603 from TandoorRecipes/dependabot/pip/django-oauth-toolkit-2.3.0
Bump django-oauth-toolkit from 2.2.0 to 2.3.0
2023-09-12 15:57:57 +02:00
vabene1111
13baf4f30a Merge pull request #2605 from TandoorRecipes/dependabot/pip/django-scopes-2.0.0
Bump django-scopes from 1.2.0.post1 to 2.0.0
2023-09-12 15:56:52 +02:00
vabene1111
da5fd16338 fixed lockfile 2023-09-12 15:56:28 +02:00
vabene1111
83a52bd204 Merge pull request #2593 from BrainWart/issue-2261
allow signup for social accounts when the provider is set up
2023-09-12 15:50:32 +02:00
vabene1111
fe4bd6a127 Merge pull request #2624 from WoosterInitiative/Update-settings
Update and add settings
2023-09-12 15:43:41 +02:00
vabene1111
d193d91e6a fixed migration 2023-09-12 15:41:38 +02:00
vabene1111
a2f9ef2e74 Merge pull request #2623 from smilerz/remove_facets
remove facets and treeselect
2023-09-12 15:36:24 +02:00
vabene1111
3f63eab68c Merge branch 'develop' into remove_facets 2023-09-12 15:36:14 +02:00
Karl
9b6ed7a63a Update .env.template
Add option for CSRF_TRUSTED_ORIGINS for better discoverability.

Add options for newly added CORS_ALLOW_ALL_ORIGINS for discoverability as well as flexibility.
2023-09-08 12:31:46 -07:00
Karl
e2f8efb521 Update settings.py
Add deprecation notice for `CORS_ORIGIN_ALLOW_ALL` and auto switch to `CORS_ALLOW_ALL_ORIGINS`
2023-09-08 12:29:06 -07:00
vabene1111
ce29283a52 fixed auto meal plan 2023-09-08 17:05:35 +02:00
vabene1111
dcf9d59b06 add more height to meal plan 2023-09-08 16:59:52 +02:00
vabene1111
794f9cf5b9 fixed meal plan factory 2023-09-08 16:38:38 +02:00
vabene1111
9954bb9410 fixed test and added meal plan client settings load save 2023-09-08 16:27:39 +02:00
vabene1111
e57be4a704 fixed lockfile 2023-09-08 15:47:08 +02:00
vabene1111
ffaecc066f improved search page meal plan style 2023-09-08 15:36:59 +02:00
vabene1111
94f398a7f6 added multi day meal planning 2023-09-08 15:31:42 +02:00
vabene1111
65d670a995 improved meal plan UI 2023-09-08 14:13:27 +02:00
dao cat
15ed040533 Translated using Weblate (Chinese (Simplified))
Currently translated at 90.5% (479 of 529 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/zh_Hans/
2023-09-08 05:19:56 +00:00
smilerz
5d3f44ffee missing caches import 2023-09-07 13:53:30 -05:00
smilerz
9ee4be621b remove facets and treeselect 2023-09-07 13:20:51 -05:00
vabene1111
d33b0d2254 added meal type settings to meal plan settings component 2023-09-06 16:27:36 +02:00
vabene1111
1a20c4bef5 fixed syntax server 2023-09-05 16:48:59 +02:00
AJ
b350ab1b59 Translated using Weblate (French)
Currently translated at 91.6% (449 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-09-02 20:25:29 +00:00
dependabot[bot]
687e8a1f6a Bump django-scopes from 1.2.0.post1 to 2.0.0
Bumps [django-scopes](https://github.com/raphaelm/django-scopes) from 1.2.0.post1 to 2.0.0.
- [Commits](https://github.com/raphaelm/django-scopes/commits/2.0.0)

---
updated-dependencies:
- dependency-name: django-scopes
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 00:48:41 +00:00
dependabot[bot]
64b9605871 Bump icalendar from 5.0.4 to 5.0.7
Bumps [icalendar](https://github.com/collective/icalendar) from 5.0.4 to 5.0.7.
- [Changelog](https://github.com/collective/icalendar/blob/master/CHANGES.rst)
- [Commits](https://github.com/collective/icalendar/compare/v5.0.4...v5.0.7)

---
updated-dependencies:
- dependency-name: icalendar
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 00:48:38 +00:00
dependabot[bot]
8320473606 Bump django-oauth-toolkit from 2.2.0 to 2.3.0
Bumps [django-oauth-toolkit](https://github.com/jazzband/django-oauth-toolkit) from 2.2.0 to 2.3.0.
- [Release notes](https://github.com/jazzband/django-oauth-toolkit/releases)
- [Changelog](https://github.com/jazzband/django-oauth-toolkit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jazzband/django-oauth-toolkit/compare/2.2.0...2.3.0)

---
updated-dependencies:
- dependency-name: django-oauth-toolkit
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 00:48:33 +00:00
NeoID
88228ab853 Translated using Weblate (Norwegian Bokmål)
Currently translated at 70.5% (373 of 529 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nb_NO/
2023-08-31 11:37:04 +00:00
vabene1111
dcfb269909 meal plan stuff 2023-08-30 10:30:12 +02:00
vabene1111
4a1ec5adf7 fixed icon issues 2023-08-30 09:05:24 +02:00
Cody McGinnis
56cdc14cc1 docs: explain social authentication auto sign up
Attempt to explain to the user that social auth with automatically allow
users to sign up for social accounts. `ALLOW_SIGNUP` now applies to
local account sign up only.
2023-08-29 20:28:30 -04:00
Cody McGinnis
b8959036bf allow signup for social accounts when the provider is set up
When a social provider is set up, the social account signup view is enabled. This seems to cover issue #2261, but it needs further testing.
2023-08-29 20:28:30 -04:00
djstini
ab24177c89 Merge branch 'TandoorRecipes:develop' into develop 2023-08-29 19:26:40 +02:00
vabene1111
4ffc9cc72f removed icons 2023-08-29 15:58:57 +02:00
vabene1111
7f62ec28e3 WIP meal plan and icon stuff 2023-08-29 14:36:57 +02:00
vabene1111
d42d784aeb Merge branch 'develop' 2023-08-29 13:09:38 +02:00
vabene1111
ce84b3b385 updated translations 2023-08-29 13:09:32 +02:00
vabene1111
74fbcb03a1 Merge pull request #2592 from WoosterInitiative/develop
Update en.json
2023-08-29 13:05:54 +02:00
dennisstinauer
b1aa70787c #2514 Importing a community curated list leads to an error 2023-08-28 22:06:49 +02:00
Karl
8675143cc1 Update en.json
Correct "loosing" to "losing."
2023-08-27 14:22:26 -07:00
Étienne
75e23106fc Translated using Weblate (French)
Currently translated at 88.6% (461 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2023-08-27 11:20:01 +00:00
Matias Laporte
2ad89b5b22 Translated using Weblate (Spanish)
Currently translated at 61.4% (301 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2023-08-27 11:20:01 +00:00
vabene1111
36074c9c35 added apple header 2023-08-27 08:42:11 +02:00
vabene1111
05560c5730 improved user agent for url image import 2023-08-26 07:54:19 +02:00
vabene1111
6ba4db6ff9 Merge pull request #2432 from smilerz/new_automations
add NEVER_UNIT automation
2023-08-26 07:41:27 +02:00
smilerz
6353885f9c update migrations after rebase 2023-08-25 08:10:21 -05:00
smilerz
833ebf8c0c Merge branch 'new_automations' of github.com:smilerz/recipes into new_automations 2023-08-25 08:04:30 -05:00
smilerz
0662255b27 update migrations 2023-08-25 08:03:07 -05:00
smilerz
fde4ea8c4c filtered automations to tokens present 2023-08-25 08:01:56 -05:00
smilerz
132815496c create Transpose Words automation 2023-08-25 08:01:26 -05:00
smilerz
a7a6abe3d2 add NEVER_UNIT automation 2023-08-25 07:57:56 -05:00
smilerz
2f617aa40f fix incorrect variable in apply_transpose_words_automations 2023-08-25 07:54:07 -05:00
smilerz
9b50ea4c22 make automation parameters case insensitive on search 2023-08-25 07:54:06 -05:00
smilerz
cde8dd8b53 fixed defect in NEVER_UNIT automation 2023-08-25 07:54:06 -05:00
smilerz
8411537f87 filtered automations to tokens present 2023-08-25 07:54:05 -05:00
smilerz
479cf1a042 create Transpose Words automation 2023-08-25 07:54:05 -05:00
smilerz
8fa00972bd add NEVER_UNIT automation 2023-08-25 07:53:53 -05:00
vabene1111
5d5eb45b5a also accept text as a parameter for import url 2023-08-25 12:15:58 +02:00
vabene1111
87beed48c9 testing share targets 2023-08-25 11:05:51 +02:00
vabene1111
cf7cc6c637 only url on share target 2023-08-25 10:56:15 +02:00
vabene1111
3d45a068e4 added share target to web manifest 2023-08-25 09:45:31 +02:00
vabene1111
01ce658883 fixed step factory 2023-08-25 09:12:58 +02:00
vabene1111
92d648c3a3 added ability to order property types 2023-08-24 12:50:17 +02:00
vabene1111
17fa3c8d7c fixed serving property calculation 2023-08-24 11:20:43 +02:00
vabene1111
c1ae4e3905 added migration for step ingredient showing 2023-08-24 11:20:31 +02:00
vabene1111
d819cbc20e Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2023-08-24 10:34:31 +02:00
vabene1111
f255397bbd added translation 2023-08-24 10:34:30 +02:00
vabene1111
2f0929e90e Merge pull request #2539 from srwareham/hide-step-ingredients
Added option: Hide step ingredients
2023-08-24 10:33:57 +02:00
srwareham
6785033a21 Add step-level configuration whether an ingredients table should be shown. User-level default added to settings 2023-08-23 21:46:09 -07:00
vabene1111
0345b7720c Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2023-08-23 13:17:48 +02:00
vabene1111
7163c33b2a fixed food edit merge/move/automate not working 2023-08-23 13:05:07 +02:00
vabene1111
934df3c5f7 Merge pull request from GHSA-66qh-qh47-9w6p
Changed remote auth var-name in env, info in docs and processing in settings
2023-08-23 11:24:29 +02:00
Theodoros Grammenos
2888b18819 Translated using Weblate (Greek)
Currently translated at 100.0% (520 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/el/
2023-08-22 21:19:55 +00:00
Theodoros Grammenos
c01081255b Translated using Weblate (Greek)
Currently translated at 62.5% (325 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/el/
2023-08-21 09:19:56 +00:00
Theodoros Grammenos
2e606dc166 Translated using Weblate (Greek)
Currently translated at 54.9% (288 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/el/
2023-08-21 09:19:55 +00:00
Theodoros Grammenos
835c5a1d3a Translated using Weblate (Greek)
Currently translated at 13.4% (70 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/el/
2023-08-19 21:36:10 +00:00
NeoID
8580aea43f Translated using Weblate (Norwegian Bokmål)
Currently translated at 71.4% (265 of 371 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nb_NO/
2023-08-19 21:36:10 +00:00
Alexandre Braure
db4f2db236 Translated using Weblate (French)
Currently translated at 88.6% (461 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2023-08-16 21:19:58 +00:00
Bastian
7e9cef6075 Translated using Weblate (German)
Currently translated at 98.0% (510 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-08-16 21:19:58 +00:00
Alexandre Braure
75612781da Translated using Weblate (French)
Currently translated at 90.6% (444 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-08-16 21:19:58 +00:00
Henning Bopp
f5fb4e563d Changed var-name in env, info in docs and processing in settings
Also added a deprecation warning and changed the structure of the authentication.md

Signed-off-by: Henning Bopp <henning.bopp@gmail.com>
2023-08-16 21:19:38 +02:00
vabene1111
1ecb57e795 removed dependency and upgraded bleach clean 2023-08-16 07:22:09 +02:00
vabene1111
c4a0df26fc Merge pull request #2446 from TandoorRecipes/dependabot/pip/bleach-6.0.0
Bump bleach from 5.0.1 to 6.0.0
2023-08-16 07:14:36 +02:00
vabene1111
8ff5142149 auto meal plan tweaks and improvements 2023-08-16 07:10:24 +02:00
vabene1111
716976453a fixed pycharm file 2023-08-16 06:20:43 +02:00
vabene1111
f07dec6062 Merge pull request #2468 from AquaticLava/Auto-Planner
Auto meal plan
2023-08-16 06:18:43 +02:00
vabene1111
ffc96890ac Delete recipes.iml 2023-08-16 06:18:02 +02:00
vabene1111
a8fd703d1d Merge pull request #2529 from TandoorRecipes/dependabot/npm_and_yarn/vue/typescript-5.1.6
Bump typescript from 4.9.5 to 5.1.6 in /vue
2023-08-16 06:06:28 +02:00
vabene1111
4592cc85a5 Merge pull request #2566 from TandoorRecipes/dependabot/npm_and_yarn/vue/eslint-8.46.0
Bump eslint from 7.32.0 to 8.46.0 in /vue
2023-08-16 06:06:17 +02:00
vabene1111
4a835c38d8 Merge pull request #2567 from TandoorRecipes/dependabot/pip/django-cleanup-8.0.0
Bump django-cleanup from 7.0.0 to 8.0.0
2023-08-16 06:06:03 +02:00
vabene1111
ef72a07acb Merge pull request #2568 from TandoorRecipes/dependabot/pip/lxml-4.9.3
Bump lxml from 4.9.2 to 4.9.3
2023-08-16 06:05:50 +02:00
vabene1111
246b9c4a02 Merge pull request #2569 from TandoorRecipes/dependabot/pip/django-auth-ldap-4.4.0
Bump django-auth-ldap from 4.2.0 to 4.4.0
2023-08-16 06:05:35 +02:00
Jochum van der Heide
c18a77bc9b Translated using Weblate (Dutch)
Currently translated at 99.8% (519 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nl/
2023-08-15 19:19:56 +00:00
Jochum van der Heide
3d7e2b1aa5 Translated using Weblate (Dutch)
Currently translated at 100.0% (490 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nl/
2023-08-15 19:19:55 +00:00
vabene1111
28f18fbc42 Merge branch 'develop' 2023-08-14 06:26:25 +02:00
Miha Perpar
ba361a8a27 Translated using Weblate (Slovenian)
Currently translated at 59.0% (307 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/sl/
2023-08-13 08:19:59 +00:00
Miha Perpar
fc2ce6e488 Translated using Weblate (Slovenian)
Currently translated at 15.9% (81 of 509 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/sl/
2023-08-13 08:19:59 +00:00
Tomasz Klimczak
d7f77a572a Translated using Weblate (Polish)
Currently translated at 100.0% (520 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2023-08-13 08:19:58 +00:00
Fabian Flodman
64e28fd01a Translated using Weblate (German)
Currently translated at 97.3% (506 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-08-13 08:19:58 +00:00
Thomas
714d5e5184 Translated using Weblate (German)
Currently translated at 97.3% (506 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-08-13 08:19:58 +00:00
Fabian Flodman
640500c82d Translated using Weblate (German)
Currently translated at 100.0% (490 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2023-08-13 08:19:58 +00:00
smilerz
8bf661c1ab update migrations 2023-08-10 09:06:41 -05:00
smilerz
1d29e435d5 Merge branch 'new_automations' of github.com:smilerz/recipes into new_automations 2023-08-10 08:55:14 -05:00
smilerz
6eac48633b fix incorrect variable in apply_transpose_words_automations 2023-08-10 08:54:44 -05:00
smilerz
743fae1ba7 make automation parameters case insensitive on search 2023-08-10 08:54:44 -05:00
smilerz
b3565451ff fixed defect in NEVER_UNIT automation 2023-08-10 08:54:44 -05:00
smilerz
4a93681870 filtered automations to tokens present 2023-08-10 08:54:43 -05:00
smilerz
d83b0484d8 create Transpose Words automation 2023-08-10 08:54:43 -05:00
smilerz
c0d67dbc58 add NEVER_UNIT automation 2023-08-10 08:54:33 -05:00
smilerz
3a8ea4b4c9 fix incorrect variable in apply_transpose_words_automations 2023-08-10 08:33:02 -05:00
vabene1111
4b14a099df better logging 2023-08-05 12:00:03 +02:00
vabene1111
dae7cbfb85 version script updates and system page fix 2023-08-05 10:56:27 +02:00
vabene1111
0c62b80e3a Merge branch 'develop' of https://github.com/TandoorRecipes/recipes into develop 2023-08-05 10:28:44 +02:00
vabene1111
678963e6dd more debug in version script 2023-08-05 10:28:39 +02:00
dependabot[bot]
6d84c718fd Bump django-cleanup from 7.0.0 to 8.0.0
Bumps [django-cleanup](https://github.com/un1t/django-cleanup) from 7.0.0 to 8.0.0.
- [Changelog](https://github.com/un1t/django-cleanup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/un1t/django-cleanup/compare/7.0.0...8.0.0)

---
updated-dependencies:
- dependency-name: django-cleanup
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-05 07:46:02 +00:00
vabene1111
b8e1ed8967 Merge pull request #2570 from TandoorRecipes/dependabot/pip/cryptography-41.0.3
Bump cryptography from 41.0.2 to 41.0.3
2023-08-05 09:45:13 +02:00
Chen
d87633433a Translated using Weblate (Hebrew)
Currently translated at 90.5% (471 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/he/
2023-08-03 22:19:55 +00:00
Chen
fe33adbba0 Translated using Weblate (Hebrew)
Currently translated at 25.7% (134 of 520 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/he/
2023-08-02 15:51:50 +00:00
Chen
baa84cf481 Added translation using Weblate (Hebrew) 2023-08-02 15:26:57 +00:00
AquaticLava
ecd828008e added auto shopping functionality. fixed bug when there are no matching recipes 2023-08-01 21:52:59 -06:00
dependabot[bot]
2b8c607b78 Bump cryptography from 41.0.2 to 41.0.3
Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.2 to 41.0.3.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/41.0.2...41.0.3)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-02 02:23:22 +00:00
AquaticLava
df684f591a added share functionality. changed random recipe selection to prevent repeating duplicate choices. 2023-08-01 17:02:05 -06:00
dependabot[bot]
cb5b51bde3 Bump django-auth-ldap from 4.2.0 to 4.4.0
Bumps [django-auth-ldap](https://github.com/django-auth-ldap/django-auth-ldap) from 4.2.0 to 4.4.0.
- [Release notes](https://github.com/django-auth-ldap/django-auth-ldap/releases)
- [Changelog](https://github.com/django-auth-ldap/django-auth-ldap/blob/master/docs/changes.rst)
- [Commits](https://github.com/django-auth-ldap/django-auth-ldap/compare/4.2.0...4.4.0)

---
updated-dependencies:
- dependency-name: django-auth-ldap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 00:28:49 +00:00
dependabot[bot]
7f27419215 Bump lxml from 4.9.2 to 4.9.3
Bumps [lxml](https://github.com/lxml/lxml) from 4.9.2 to 4.9.3.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.9.2...lxml-4.9.3)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 00:28:28 +00:00
dependabot[bot]
312cd077d0 Bump eslint from 7.32.0 to 8.46.0 in /vue
Bumps [eslint](https://github.com/eslint/eslint) from 7.32.0 to 8.46.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.32.0...v8.46.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-01 00:15:02 +00:00
Mára Štěpánek
eac059ca85 Translated using Weblate (Czech)
Currently translated at 100.0% (362 of 362 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/cs/
2023-07-31 14:19:56 +00:00
vabene1111
782dd4cb17 build stuff 2023-07-29 11:24:11 +02:00
vabene1111
f7b60f2c52 version script improvements 2023-07-29 10:55:18 +02:00
vabene1111
ca28e52698 keep git installed 2023-07-29 10:06:51 +02:00
vabene1111
0c2c12d536 improved version script 2023-07-29 08:43:17 +02:00
vabene1111
113c40c243 changed version command order 2023-07-29 08:38:13 +02:00
vabene1111
0688f46d8b new version script 2023-07-29 08:32:10 +02:00
vabene1111
2fdcdba889 base pasth pdf viewer 2023-07-29 07:48:27 +02:00
vabene1111
6a39148e5f fixed try catch and added git to permanent dependency 2023-07-28 15:59:48 +02:00
vabene1111
22dfb40fd5 improved system info even more 2023-07-27 20:48:51 +02:00
vabene1111
2b5a86ce53 improved system page 2023-07-27 20:40:25 +02:00
vabene1111
e77016ea9b playing around 2023-07-27 18:49:39 +02:00
vabene1111
9988a61da7 added version number to system screen 2023-07-27 18:39:21 +02:00
vabene1111
f34fb8eec3 Merge pull request #2563 from smilerz/test_fixes
fixed rating sort order and updated tests
2023-07-26 06:21:54 +02:00
smilerz
7853357065 fix error when filtering on rating in saved filters 2023-07-25 17:48:19 -05:00
smilerz
6f1befc43c fixed rating sort order and updated tests 2023-07-25 11:37:48 -05:00
vabene1111
c18386b9b5 fixed copied ingredients being linked together 2023-07-22 12:59:31 +02:00
vabene1111
d5ba2e6716 improved multi url import 2023-07-22 11:18:06 +02:00
vabene1111
b30f8c245e added option to set URL on food 2023-07-22 09:12:45 +02:00
vabene1111
74c86f1b6b Merge pull request #2541 from titilambert/patch-1
Expose food description in food form
2023-07-22 08:28:39 +02:00
smilerz
cf9d599536 fixed sort by rating so that unrated are always last 2023-07-20 15:39:35 -05:00
vabene1111
14a67fd6c2 improved spinner rendering 2023-07-20 16:24:25 +02:00
smilerz
19f1225249 make automation parameters case insensitive on search 2023-07-19 16:43:39 -05:00
smilerz
7f33f82b60 fixed defect in NEVER_UNIT automation 2023-07-19 16:42:37 -05:00
smilerz
6880c0a967 filtered automations to tokens present 2023-07-19 16:42:37 -05:00
smilerz
814f4157db create Transpose Words automation 2023-07-19 16:42:36 -05:00
smilerz
0f5e53526e add NEVER_UNIT automation 2023-07-19 16:42:04 -05:00
vabene1111
413da01c5c Merge pull request #2554 from TandoorRecipes/dependabot/npm_and_yarn/vue/word-wrap-1.2.4
Bump word-wrap from 1.2.3 to 1.2.4 in /vue
2023-07-19 09:05:55 +02:00
dependabot[bot]
a73d231bd4 Bump word-wrap from 1.2.3 to 1.2.4 in /vue
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-19 07:05:07 +00:00
vabene1111
4f2392faac updated pyyaml to be compatible with cython 3 2023-07-19 09:04:01 +02:00
vabene1111
2321dcec6c Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2023-07-18 16:40:42 +02:00
vabene1111
c2cf7ba758 fixed test 2023-07-18 16:40:38 +02:00
vabene1111
239dd4aa60 Merge pull request #2481 from TandoorRecipes/dependabot/pip/pytube-15.0.0
Bump pytube from 12.1.0 to 15.0.0
2023-07-18 15:35:04 +02:00
vabene1111
a653b2e777 Merge pull request #2525 from TandoorRecipes/dependabot/pip/whitenoise-6.5.0
Bump whitenoise from 6.2.0 to 6.5.0
2023-07-18 15:34:52 +02:00
vabene1111
d8faee7e93 Merge pull request #2545 from TandoorRecipes/dependabot/pip/cryptography-41.0.2
Bump cryptography from 41.0.0 to 41.0.2
2023-07-18 15:32:29 +02:00
vabene1111
69417425e9 Merge branch 'develop' into dependabot/pip/cryptography-41.0.2 2023-07-18 15:32:23 +02:00
vabene1111
e8574a49a7 Merge pull request #2544 from TandoorRecipes/dependabot/npm_and_yarn/vue/semver-5.7.2
Bump semver from 5.7.1 to 5.7.2 in /vue
2023-07-18 15:31:59 +02:00
vabene1111
fe624cd218 Merge pull request #2536 from TandoorRecipes/dependabot/pip/django-4.1.10
Bump django from 4.1.9 to 4.1.10
2023-07-18 15:31:34 +02:00
vabene1111
1f10a66c74 added base unit to unit editor 2023-07-18 13:54:35 +02:00
vabene1111
a8f1cd26cd change guest recipe permission 2023-07-18 10:54:20 +02:00
vabene1111
a497a6b7f5 space api read for all users in space 2023-07-15 13:57:25 +02:00
dependabot[bot]
9dc144f2b5 Bump cryptography from 41.0.0 to 41.0.2
Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.0 to 41.0.2.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/41.0.0...41.0.2)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-15 01:23:46 +00:00
Eirik Skarding
7d50f3cf21 Translated using Weblate (Norwegian Bokmål)
Currently translated at 68.9% (344 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nb_NO/
2023-07-12 21:19:57 +00:00
dependabot[bot]
315af4911c Bump semver from 5.7.1 to 5.7.2 in /vue
Bumps [semver](https://github.com/npm/node-semver) from 5.7.1 to 5.7.2.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v5.7.2/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v5.7.1...v5.7.2)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-11 17:57:36 +00:00
vabene1111
35704c69c7 added option to pass recipe to recipe view 2023-07-11 17:50:48 +02:00
vabene1111
a24628c771 fixed userspace tetsts 2023-07-11 17:25:43 +02:00
vabene1111
e9748a160a addded paginated user space endpoint 2023-07-11 17:01:56 +02:00
Thibault Cohen
7bc78e104f Expose food description in food form 2023-07-10 21:26:26 -04:00
Mára Štěpánek
6f0dccfec9 Translated using Weblate (Czech)
Currently translated at 97.5% (487 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/cs/
2023-07-06 21:19:59 +00:00
Rubens
76d6981dab Translated using Weblate (Catalan)
Currently translated at 85.1% (417 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2023-07-06 21:19:59 +00:00
dependabot[bot]
5df37c52dd Bump django from 4.1.9 to 4.1.10
Bumps [django](https://github.com/django/django) from 4.1.9 to 4.1.10.
- [Commits](https://github.com/django/django/compare/4.1.9...4.1.10)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-06 00:10:14 +00:00
vabene1111
c78b7a6928 Merge branch 'develop' 2023-07-05 16:33:51 +02:00
vabene1111
7a2ccc075c improved shopping entry api endpoint performance 2023-07-04 16:49:56 +02:00
vabene1111
237054c23e improved commonly used administrative admin fields 2023-07-03 22:30:27 +02:00
vabene1111
ac1d641bd5 added RO DRF permission and internal_note filters for invite/userspace 2023-07-03 21:59:15 +02:00
vabene1111
3545b6e98a plugin loader improvements 2023-07-03 17:56:05 +02:00
vabene1111
d3a56e00ea allow disabling plugins 2023-07-03 07:41:56 +02:00
vabene1111
e9f8578c25 re added path to plugin check 2023-07-03 07:02:56 +02:00
vabene1111
dccfc436be Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2023-07-03 05:55:17 +02:00
vabene1111
1e85c8587b fixed plugin error message 2023-07-03 05:55:12 +02:00
vabene1111
b8f92ab054 Merge pull request #2531 from michael-genson/feature/add-source-url-to-recipe-export
Add source URL to recipe export
2023-07-03 05:47:31 +02:00
Mára Štěpánek
766ed31f8e Translated using Weblate (Czech)
Currently translated at 79.7% (398 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/cs/
2023-07-02 21:19:57 +00:00
Michael Genson
cad78e115d added source url to recipe export 2023-07-02 10:42:41 -05:00
dependabot[bot]
c2def3eb9d Bump typescript from 4.9.5 to 5.1.6 in /vue
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.9.5 to 5.1.6.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/commits)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-01 00:09:18 +00:00
dependabot[bot]
ad7ebf1cd5 Bump whitenoise from 6.2.0 to 6.5.0
Bumps [whitenoise](https://github.com/evansd/whitenoise) from 6.2.0 to 6.5.0.
- [Changelog](https://github.com/evansd/whitenoise/blob/main/docs/changelog.rst)
- [Commits](https://github.com/evansd/whitenoise/compare/6.2.0...6.5.0)

---
updated-dependencies:
- dependency-name: whitenoise
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-01 00:03:23 +00:00
vabene1111
b599c4f6a9 added internal notes and improved invite link form 2023-06-30 23:09:22 +02:00
vabene1111
439539f56d show optional fields in generic forms 2023-06-30 23:09:01 +02:00
vabene1111
237bcb92c9 fixed food editor default properties unit 2023-06-29 17:26:49 +02:00
vabene1111
ce02a23dbb fixed quick ingredient import in recipe editor 2023-06-29 17:13:53 +02:00
vabene1111
8e81512735 Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2023-06-29 17:05:37 +02:00
vabene1111
c69f0394a8 possibly fixed bug with food editor ingredient delete page reload 2023-06-29 17:05:32 +02:00
vabene1111
d7ca9e05de Merge pull request #2521 from gloriousDan/improve-docs
add note to docker-compose files and update postgres tag
2023-06-29 17:04:31 +02:00
vabene1111
64534ff810 fixed navbar color for non logged in users 2023-06-29 17:03:05 +02:00
vabene1111
d0164a6c28 Merge pull request #2522 from gloriousDan/fix-raspi
Fix Raspi build and consolidate with normal build and image
2023-06-27 16:10:39 +02:00
Daniel Schulz
0f898ddf4a unify raspi and normal build again 2023-06-27 00:51:55 +02:00
Daniel Schulz
e903382034 update alpine to v3.18 2023-06-27 00:51:22 +02:00
Daniel Schulz
0d225450da add note to docker-compose files and update postgres tag 2023-06-27 00:33:29 +02:00
vabene1111
c077a64484 further improvements 2023-06-26 20:57:51 +02:00
vabene1111
6c16094b42 added initial version of tandoor dark theme 2023-06-26 20:43:50 +02:00
vabene1111
5aa80746f9 Merge branch 'develop' 2023-06-26 20:25:58 +02:00
vabene1111
cc64717818 auto add schema attrs in json importer 2023-06-26 20:22:59 +02:00
vabene1111
6acd892116 fixed broken image would fail default importer 2023-06-26 20:18:36 +02:00
vabene1111
3955408aa4 dont show properties view if no properties are present in DB 2023-06-26 20:03:25 +02:00
vabene1111
3de2468df3 fixed to light nav color in some themes 2023-06-26 19:57:38 +02:00
vabene1111
b1d983fbc3 fixed required field in food 2023-06-26 17:08:45 +02:00
vabene1111
5f443d2593 fixed issue when creating food with properties 2023-06-26 16:48:50 +02:00
vabene1111
436158f596 fixed allow decimals in food property amount 2023-06-26 15:47:44 +02:00
vabene1111
dcc56fc138 added new docs entry to nav 2023-06-26 15:21:05 +02:00
vabene1111
0eef10079b Merge pull request #2517 from 16cdlogan/patch-1
Create Truenas-Portainer
2023-06-26 15:19:03 +02:00
16cdlogan
2b839dfb19 Create Truenas-Portainer
Install Tandoor Recipes on TrueNAS Core and Portainer
2023-06-25 21:32:54 -04:00
sweeney
491b678d6e Translated using Weblate (Greek)
Currently translated at 1.4% (7 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/el/
2023-06-25 14:19:55 +00:00
sweeney
151dce006d Translated using Weblate (Greek)
Currently translated at 54.7% (287 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/el/
2023-06-25 14:19:55 +00:00
sweeney
d4f538b4aa Translated using Weblate (Greek)
Currently translated at 35.4% (186 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/el/
2023-06-24 13:32:57 +00:00
sweeney
a727439c57 Added translation using Weblate (Greek) 2023-06-24 13:32:57 +00:00
vabene1111
f779107749 Merge branch 'develop' 2023-06-24 12:17:48 +02:00
vabene1111
4a5c8f41fa fixed open data slug uniqueness check 2023-06-24 12:15:47 +02:00
vabene1111
bf458e22e8 fixed merging deleting food properties 2023-06-24 11:52:42 +02:00
sweeney
9b8088fca2 Translated using Weblate (Greek)
Currently translated at 25.5% (134 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/el/
2023-06-23 09:19:56 +00:00
Thomas
68435aa335 Translated using Weblate (German)
Currently translated at 99.7% (498 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-06-23 09:19:56 +00:00
vabene1111
afe5465044 added styling options to several components 2023-06-22 15:58:32 +02:00
vabene1111
9decf3cf14 Merge branch 'develop' 2023-06-22 11:30:19 +02:00
vabene1111
b31c3cfd2f updated CI node version 2023-06-22 10:15:45 +02:00
vabene1111
1306c7381c fixed keyword import error 2023-06-22 10:11:00 +02:00
vabene1111
dbd2025e71 updated lock file 2023-06-22 08:55:31 +02:00
AquaticLava
ac17b84a7a updated auto meal plan to start at the current day, and exclude a meal plan if it has no keywords. Added debug buttons to help with testing. 2023-06-21 19:35:48 -06:00
AquaticLava
9756b7b653 regenerated open api file 2023-06-21 19:32:54 -06:00
AquaticLava
ee38d93e3b Created auto meal plan api endpoint. 2023-06-21 19:31:49 -06:00
AquaticLava
ee5c7d0ef4 Merge branch 'TandoorRecipes:develop' into Auto-Planner 2023-06-21 19:16:49 -06:00
vabene1111
f19f4abe0c fixed yarn lock? 2023-06-21 21:41:27 +02:00
vabene1111
7c4a854bfd update lock file
might still be broken because the stupid build does not work
2023-06-21 21:21:15 +02:00
vabene1111
04322b56a4 fixed recipe view component 2023-06-21 21:12:14 +02:00
vabene1111
45b4ac3e9e fixed broken mealplan 2023-06-21 21:06:19 +02:00
vabene1111
362ed9b088 Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2023-06-21 17:06:06 +02:00
vabene1111
8bf347dd09 moved recipe view to component (currently broken) 2023-06-21 17:05:59 +02:00
John Doe
d449f0c2fc Translated using Weblate (Czech)
Currently translated at 10.8% (54 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/cs/
2023-06-21 14:20:01 +00:00
Tobias Huppertz
6dab514817 Translated using Weblate (German)
Currently translated at 99.5% (497 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-06-21 14:20:01 +00:00
Tobias Huppertz
8ce0d416c2 Translated using Weblate (German)
Currently translated at 100.0% (490 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2023-06-21 14:20:01 +00:00
vabene1111
dd88641763 improved plugin nav capabilities 2023-06-21 16:07:32 +02:00
vabene1111
fb52f34ef9 Merge branch 'master' into develop 2023-06-21 14:52:39 +02:00
vabene1111
561c2f2d1f Merge branch 'develop' 2023-06-21 14:48:11 +02:00
vabene1111
4b48c1046e rezeptsuite enhancements 2023-06-20 16:49:00 +02:00
vabene1111
3e0f2fbddc fixed recipesage servings and time 2023-06-20 16:31:40 +02:00
vabene1111
c5eb025186 fixed nextcloud import how to step 2023-06-20 16:22:02 +02:00
vabene1111
23bfc3c3b0 re-added property imports for open data importer 2023-06-20 15:42:25 +02:00
vabene1111
813c7a46f1 added additonal verification of imported images 2023-06-20 13:35:34 +02:00
vabene1111
6b475468fc added some more validation 2023-06-20 13:22:44 +02:00
vabene1111
053ff9506a fixed open data import store error 2023-06-20 13:03:18 +02:00
John Doe
11a699ed47 Translated using Weblate (Czech)
Currently translated at 7.0% (35 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/cs/
2023-06-19 10:16:11 +00:00
vabene1111
b3c6cacdad added better edge case handling to recipe card 2023-06-13 17:33:12 +02:00
vabene1111
4875b158fd fixed open data importer 2023-06-13 13:23:57 +02:00
vabene1111
6bb04dc56d improved property functions 2023-06-12 17:20:00 +02:00
vabene1111
2dc038edc7 fixed url import array in name 2023-06-12 16:18:24 +02:00
vabene1111
8597c3e95d Merge pull request #2489 from TandoorRecipes/dependabot/pip/cryptography-41.0.0
Bump cryptography from 39.0.1 to 41.0.0
2023-06-08 16:30:20 +02:00
vabene1111
5c0094fd43 Merge pull request #2478 from jwr1/develop
Fix bottom navigation not hiding in print mode
2023-06-08 14:43:51 +02:00
vabene1111
23d67a5bd3 compile messages and added norwegian to language option 2023-06-08 14:40:55 +02:00
vabene1111
3a26f09307 Merge pull request #2488 from smilerz/delete_empty
add admin command to delete unattached ingredients and steps
2023-06-08 14:38:34 +02:00
Eirik Skarding
2592e606cc Translated using Weblate (Norwegian Bokmål)
Currently translated at 44.0% (220 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nb_NO/
2023-06-08 00:19:55 +00:00
Eirik Skarding
11f2b95b4d Translated using Weblate (Norwegian Bokmål)
Currently translated at 35.8% (179 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nb_NO/
2023-06-06 12:19:55 +00:00
Eirik Skarding
c171a01b7d Translated using Weblate (Norwegian Bokmål)
Currently translated at 33.8% (169 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nb_NO/
2023-06-03 14:19:56 +00:00
dependabot[bot]
2671519386 Bump cryptography from 39.0.1 to 41.0.0
Bumps [cryptography](https://github.com/pyca/cryptography) from 39.0.1 to 41.0.0.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/39.0.1...41.0.0)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-02 20:15:48 +00:00
smilerz
19750cf499 add admin command to delete unattached ingredients and steps 2023-06-02 08:58:08 -05:00
vabene1111
711f80b1fb Merge branch 'develop' of https://github.com/TandoorRecipes/recipes into develop 2023-06-01 21:44:48 +02:00
vabene1111
1ffa0f396a fixed fuzzy filter mixing not working without login 2023-06-01 21:44:44 +02:00
dependabot[bot]
991a51d55e Bump pytube from 12.1.0 to 15.0.0
Bumps [pytube](https://github.com/pytube/pytube) from 12.1.0 to 15.0.0.
- [Release notes](https://github.com/pytube/pytube/releases)
- [Commits](https://github.com/pytube/pytube/compare/v12.1.0...v15.0.0)

---
updated-dependencies:
- dependency-name: pytube
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-01 00:57:43 +00:00
sweeney
e052a7869d Translated using Weblate (Greek)
Currently translated at 11.0% (58 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/el/
2023-05-31 17:19:57 +00:00
Tomasz Klimczak
d57f35e4e8 Translated using Weblate (Polish)
Currently translated at 100.0% (499 of 499 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2023-05-31 17:19:57 +00:00
John Wesley
2cb7030b04 Fix bottom navigation not hiding in print mode 2023-05-29 11:46:07 -04:00
vabene1111
a53f17c1b9 default properties food unit 2023-05-29 17:37:09 +02:00
vabene1111
326549568f added unit conversion editor to food editor 2023-05-29 17:16:22 +02:00
vabene1111
c0577abb89 fixed generic modal form error (merge conflict) 2023-05-29 15:40:25 +02:00
vabene1111
a65e93a9b3 fixed property helper bug with non food ingredients 2023-05-29 12:43:14 +02:00
Luis Cacho
cadf14c338 Translated using Weblate (Spanish)
Currently translated at 74.3% (357 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2023-05-26 16:19:57 +00:00
Luis Cacho
7b49f1f437 Translated using Weblate (Spanish)
Currently translated at 56.1% (275 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2023-05-26 16:19:57 +00:00
vabene1111
2214540a51 Merge branch 'feature/unit-conversion' into develop 2023-05-26 16:11:20 +02:00
vabene1111
256b7b1543 Merge branch 'develop' into feature/unit-conversion
# Conflicts:
#	cookbook/helper/recipe_url_import.py
2023-05-26 16:11:11 +02:00
vabene1111
ebc213395d added property api test 2023-05-26 16:06:49 +02:00
vabene1111
7af581f0ff allow users to choose between food and recipe properties 2023-05-26 15:59:49 +02:00
vabene1111
aeb944b281 dont show properties if no reference amout is given 2023-05-26 15:32:55 +02:00
vabene1111
43105ddd2f fixed onhand test (cache) and fixed shared recipe properties 2023-05-26 10:57:08 +02:00
vabene1111
f2b3cfb8f0 Merge branch 'develop' 2023-05-26 09:56:17 +02:00
vabene1111
3302dacdc3 properties structure imporioved 2023-05-25 16:13:16 +02:00
sardigital
5f07ef04d2 Translated using Weblate (Russian)
Currently translated at 71.6% (344 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ru/
2023-05-25 06:19:56 +00:00
vabene1111
4c69a0b721 fixed json import missing source url attribute 2023-05-24 20:32:47 +02:00
vabene1111
2a538abf80 test work 2023-05-24 15:59:25 +02:00
vabene1111
3236b65d9e food editor and property view improvements 2023-05-24 13:49:29 +02:00
vabene1111
79cd17a5ba Merge branch 'develop' into feature/unit-conversion
# Conflicts:
#	vue/src/components/Modals/GenericModalForm.vue
2023-05-24 08:53:49 +02:00
vabene1111
06a08dcf6e allow plugins to add navs 2023-05-23 16:05:12 +02:00
vabene1111
de29b44c0d Merge branch 'develop' 2023-05-23 15:32:57 +02:00
vabene1111
dc4ca81270 updated generic modal form to always show errors 2023-05-23 15:32:53 +02:00
vabene1111
dd3dc0a058 Merge branch 'develop' 2023-05-23 14:49:06 +02:00
vabene1111
30c6389382 added force show error parameter to standard toast 2023-05-23 14:18:59 +02:00
vabene1111
45effbbcde Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2023-05-23 13:35:11 +02:00
vabene1111
ffa06ca75e emit additonal hidden event from generic modal form 2023-05-23 13:35:06 +02:00
vabene1111
903a4c93eb Merge pull request #2470 from gloriousDan/enable_gunicorn_debug_log
Enable gunicorn debug log
2023-05-23 13:13:21 +02:00
vabene1111
a8ae6c86e2 Merge pull request #2474 from TandoorRecipes/dependabot/pip/requests-2.31.0
Bump requests from 2.28.2 to 2.31.0
2023-05-23 13:12:25 +02:00
vabene1111
976445c1f0 Merge pull request #2435 from screendriver/noindex
Prevent indexing content by search engines
2023-05-23 13:11:12 +02:00
dependabot[bot]
9cf1141794 Bump requests from 2.28.2 to 2.31.0
Bumps [requests](https://github.com/psf/requests) from 2.28.2 to 2.31.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.28.2...v2.31.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-23 06:26:41 +00:00
vabene1111
b095bee229 added FDA key .env (temporarily) and plugin loader catch block 2023-05-22 17:47:13 +02:00
vabene1111
3c3ecc5342 comonent in generic form trial
# Conflicts:
#	vue/src/components/FoodEditor.vue
#	vue/src/components/Modals/GenericModalForm.vue
#	vue/src/utils/models.js
2023-05-21 20:26:00 +02:00
Daniel Schulz
8b50b99977 make gunicorn log level setting available 2023-05-21 14:06:54 +02:00
vabene1111
f369b74c94 fixed plugin bundle path 2023-05-21 12:00:20 +02:00
vabene1111
7b11f276a8 added - before prefix 2023-05-21 11:39:04 +02:00
vabene1111
fe35173ab5 open data tag suffix 2023-05-21 11:05:59 +02:00
vabene1111
4bd879c787 added link creation to open data workflow 2023-05-21 10:57:47 +02:00
vabene1111
fcbc5ed5d0 changed sub repo path 2023-05-21 10:55:07 +02:00
vabene1111
2bdc541183 fixed repo install 2023-05-21 10:52:12 +02:00
vabene1111
4b08eea39d test plugin container release 2023-05-21 10:47:42 +02:00
vabene1111
c777cfe5b9 improved plugin functionality
- added abiulity to extend default api router from plugion
- added dability to pass custom model definition to generic model/api functions
- added ability to pass custom API clients to generic API function
2023-05-20 12:53:14 +02:00
AquaticLava
6c9227faac fixed formatting and minor bug causeing the start of the period to always be the current day. 2023-05-18 11:14:59 -06:00
vabene1111
e860d0aa83 Merge branch 'develop' into feature/unit-conversion 2023-05-18 14:29:39 +02:00
vabene1111
b5681a0255 Merge branch 'develop' 2023-05-18 14:29:31 +02:00
vabene1111
ddd2f96b85 updated translations 2023-05-18 14:29:19 +02:00
vabene1111
b56b778573 Merge pull request #2458 from ambroisie/fix-multiple-files-field
Fix multiple file field
2023-05-18 14:26:41 +02:00
vabene1111
cf7fc906bb Merge pull request #2463 from TandoorRecipes/dependabot/pip/django-4.1.9
Bump django from 4.1.7 to 4.1.9
2023-05-18 14:26:25 +02:00
AquaticLava
693b43af2e Merge remote-tracking branch 'origin/develop' into Auto-Planner
# Conflicts:
#	vue/src/apps/MealPlanView/MealPlanView.vue
2023-05-17 21:22:26 -06:00
vabene1111
0539e1ea15 food edit modal done 2023-05-11 17:13:35 +02:00
dependabot[bot]
c5c37296e9 Bump django from 4.1.7 to 4.1.9
Bumps [django](https://github.com/django/django) from 4.1.7 to 4.1.9.
- [Commits](https://github.com/django/django/compare/4.1.7...4.1.9)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-09 22:47:01 +00:00
vabene1111
6030fa1d68 property scaling and ui 2023-05-08 12:09:55 +02:00
vabene1111
2a5cba0178 improvements to property calculation 2023-05-07 00:30:32 +02:00
vabene1111
9a77089c6d improved unit conversion and tests 2023-05-06 23:57:45 +02:00
vabene1111
5f79895a97 added migration for existing nutrition information 2023-05-06 23:21:09 +02:00
vabene1111
19f5da77b2 cleanup migrations, remove pint to speed up base conversion and calculate properties on converted ingredients 2023-05-06 22:21:27 +02:00
vabene1111
2cc7278865 extremly innefficent WIP 2023-05-06 20:54:36 +02:00
vabene1111
60f31608b9 added recipe properties 2023-05-06 19:14:25 +02:00
vabene1111
763f71a05c cleanup views 2023-05-06 17:40:39 +02:00
vabene1111
e3921cd6a8 Merge branch 'develop' into feature/unit-conversion 2023-05-06 17:01:06 +02:00
vabene1111
54a5c145cc comonent in generic form trial 2023-05-05 17:04:20 +02:00
vabene1111
86fd0dcab1 made the open data importer its own component 2023-05-05 16:33:30 +02:00
Bruno BELANYI
6b04c92297 Fix multiple file field
Due to [1], the previous solution does not work on recent Django releases.

See [2] for the documented work-around, as applied in this commit.

Closes #2457.

[1]: https://docs.djangoproject.com/en/4.2/releases/4.2.1/
[2]: https://docs.djangoproject.com/en/4.2/topics/http/file-uploads/#uploading-multiple-files
2023-05-04 22:41:19 +01:00
vabene1111
12da77f037 beser response and stuff 2023-05-04 17:12:49 +02:00
vabene1111
071926aada improved importer merging behavior 2023-05-04 15:29:06 +02:00
vabene1111
33d048e623 improve importer 2023-05-04 08:43:36 +02:00
vabene1111
135640dd58 Merge pull request #2454 from smilerz/pytest_fixes
reload food objects to resolve inconsistent behavior
2023-05-03 19:24:46 +02:00
smilerz
d8ddf66921 reload food objects to resolve inconsistent behavior 2023-05-03 10:17:59 -05:00
vabene1111
274fce5236 fixed importer 2023-05-02 16:27:03 +02:00
vabene1111
1046065f46 fixed load bulk 2023-05-01 22:36:39 +02:00
vabene1111
60243ad901 load bulk 2023-05-01 13:39:09 +02:00
vabene1111
d62c49eb2f not yet fully working food import 2023-05-01 13:29:14 +02:00
vabene1111
7e3313f48c added automation to docs TOC 2023-05-01 12:59:55 +02:00
axeron2036
ea4c16cc2a Translated using Weblate (Russian)
Currently translated at 9.6% (48 of 496 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ru/
2023-05-01 07:55:47 +00:00
dependabot[bot]
4fb5ce550e Bump bleach from 5.0.1 to 6.0.0
Bumps [bleach](https://github.com/mozilla/bleach) from 5.0.1 to 6.0.0.
- [Release notes](https://github.com/mozilla/bleach/releases)
- [Changelog](https://github.com/mozilla/bleach/blob/main/CHANGES)
- [Commits](https://github.com/mozilla/bleach/compare/v5.0.1...v6.0.0)

---
updated-dependencies:
- dependency-name: bleach
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-01 00:58:35 +00:00
vabene1111
1bb6eb7141 import open data content 2023-04-30 22:30:56 +02:00
vabene1111
89e3e85d1e Merge branch 'develop' into feature/unit-conversion
# Conflicts:
#	requirements.txt
2023-04-30 21:51:56 +02:00
vabene1111
dfde340447 basic import working 2023-04-30 21:51:28 +02:00
Oliver Cervera
e7239c7c68 Translated using Weblate (Italian)
Currently translated at 91.4% (448 of 490 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2023-04-29 07:55:49 +00:00
vabene1111
f7ef2ed4f5 Merge pull request #2437 from gabe565/ci-fix-stable-notify
Fix stable release Discord notification
2023-04-27 13:18:59 +02:00
noxonad
56f6de3510 Translated using Weblate (Romanian)
Currently translated at 100.0% (480 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ro/
2023-04-27 08:55:57 +00:00
noxonad
cf86af7a23 Translated using Weblate (Romanian)
Currently translated at 100.0% (509 of 509 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ro/
2023-04-27 08:55:57 +00:00
Mike Miller
fe32a743db Translated using Weblate (German)
Currently translated at 100.0% (480 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-04-27 08:55:57 +00:00
Sebastian Krug
93b750dbf1 Translated using Weblate (German)
Currently translated at 100.0% (480 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-04-27 08:55:57 +00:00
Sebastian Krug
4337f594f6 Translated using Weblate (German)
Currently translated at 100.0% (489 of 489 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2023-04-27 08:55:57 +00:00
Gabe Cook
17fc24fc1b Fix stable release Discord notification 2023-04-26 11:19:38 -05:00
Christian Rackerseder
44771bde71 Prevent indexing content by search engines 2023-04-26 12:19:30 +02:00
vabene1111
018e9ef88f Merge branch 'develop' 2023-04-26 09:04:16 +02:00
vabene1111
7d99a9a9c3 updated translation files 2023-04-26 07:46:48 +02:00
vabene1111
c4078800e3 Merge pull request #2434 from ssams/ldap-auth-starttls
ldap auth: allow connecting using StartTLS
2023-04-26 07:43:44 +02:00
ssams
d87f0f3c15 ldap auth: allow connecting using StartTLS 2023-04-25 21:30:47 +02:00
vabene1111
6e9b504a9d Merge pull request #2407 from TandoorRecipes/dependabot/pip/django-allauth-0.54.0
Bump django-allauth from 0.52.0 to 0.54.0
2023-04-25 16:03:14 +02:00
dependabot[bot]
7397210729 Bump django-allauth from 0.52.0 to 0.54.0
Bumps [django-allauth](https://github.com/pennersr/django-allauth) from 0.52.0 to 0.54.0.
- [Release notes](https://github.com/pennersr/django-allauth/releases)
- [Changelog](https://github.com/pennersr/django-allauth/blob/master/ChangeLog.rst)
- [Commits](https://github.com/pennersr/django-allauth/compare/0.52.0...0.54.0)

---
updated-dependencies:
- dependency-name: django-allauth
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-25 13:59:53 +00:00
vabene1111
7830ddd4e9 Merge pull request #2431 from smilerz/pytest_fixes
Pytest fixes
2023-04-25 15:59:15 +02:00
smilerz
b711ee5257 update User factory to make username unique 2023-04-24 07:33:47 -05:00
smilerz
c7b6253e04 fixed food tree search filter tests 2023-04-24 07:01:28 -05:00
Michael
85dcb6c61f Translated using Weblate (German)
Currently translated at 99.5% (478 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-04-23 15:55:48 +00:00
smilerz
323ded1814 fix touchable 2023-04-22 17:57:15 -05:00
smilerz
595de0c5a1 fixed pytests 2023-04-22 17:56:01 -05:00
smilerz
8c3195937b fix food tests 2023-04-21 13:14:23 -05:00
Espen Sellevåg
8a8be7fb2d Translated using Weblate (Norwegian Bokmål)
Currently translated at 16.6% (80 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nb_NO/
2023-04-17 20:55:48 +00:00
axeron2036
ec68da051d Translated using Weblate (Russian)
Currently translated at 71.6% (344 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ru/
2023-04-17 20:55:48 +00:00
Espen Sellevåg
29f13d687c Translated using Weblate (Norwegian Bokmål)
Currently translated at 52.8% (196 of 371 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nb_NO/
2023-04-17 20:55:47 +00:00
Espen Sellevåg
980e83b23c Translated using Weblate (Norwegian Bokmål)
Currently translated at 7.9% (38 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nb_NO/
2023-04-15 22:55:48 +00:00
Espen Sellevåg
668ccf89fd Translated using Weblate (Norwegian Bokmål)
Currently translated at 28.8% (107 of 371 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nb_NO/
2023-04-15 22:55:47 +00:00
vabene1111
3ec02db2f6 working food property editor 2023-04-15 11:19:20 +02:00
Espen Sellevåg
93f7da3ed9 Added translation using Weblate (Norwegian Bokmål) 2023-04-14 21:41:01 +00:00
vabene1111
3f88778013 Merge pull request #2421 from noxonad/patch-2
Fixed another typo
2023-04-13 13:44:22 +02:00
vabene1111
499d026b5c Merge pull request #2422 from noxonad/patch-3
Fixed typo in json
2023-04-13 13:43:56 +02:00
noxonad
e0a1189430 Translated using Weblate (Ukrainian)
Currently translated at 0.3% (2 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/uk/
2023-04-12 11:55:59 +00:00
noxonad
e2905eb999 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (528 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/bg/
2023-04-12 11:55:59 +00:00
noxonad
8b6f2c1e70 Translated using Weblate (Danish)
Currently translated at 100.0% (528 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/da/
2023-04-12 11:55:59 +00:00
noxonad
b7e4e53519 Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.8% (33 of 562 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2023-04-12 11:55:59 +00:00
noxonad
80eee255f7 Translated using Weblate (Slovenian)
Currently translated at 15.5% (79 of 509 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/sl/
2023-04-12 11:55:59 +00:00
noxonad
60a4a63f56 Translated using Weblate (Romanian)
Currently translated at 100.0% (480 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ro/
2023-04-12 11:55:59 +00:00
noxonad
82b80e60e6 Translated using Weblate (Romanian)
Currently translated at 100.0% (509 of 509 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ro/
2023-04-12 11:55:59 +00:00
noxonad
915d0359bf Translated using Weblate (Russian)
Currently translated at 9.4% (47 of 496 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ru/
2023-04-12 11:55:59 +00:00
noxonad
10f1a77c1c Translated using Weblate (Russian)
Currently translated at 71.0% (341 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ru/
2023-04-12 11:55:59 +00:00
noxonad
ea141577d0 Translated using Weblate (Italian)
Currently translated at 92.1% (444 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2023-04-12 11:55:59 +00:00
noxonad
d0a1151a33 Translated using Weblate (Hungarian)
Currently translated at 87.5% (422 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hu/
2023-04-12 11:55:59 +00:00
noxonad
bc461997f8 Translated using Weblate (French)
Currently translated at 91.9% (443 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-04-12 11:55:59 +00:00
noxonad
d8051203c1 Translated using Weblate (German)
Currently translated at 99.5% (487 of 489 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2023-04-12 11:55:59 +00:00
noxonad
af71407ca6 Translated using Weblate (Catalan)
Currently translated at 86.3% (416 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2023-04-12 11:55:58 +00:00
vabene1111
b275c53e5a first ideas of property editor 2023-04-11 17:27:10 +02:00
vabene1111
7d9fcac0c7 basic food property viewer in recipe view 2023-04-11 16:48:38 +02:00
noxonad
cb9a90d1e7 Fixed typo in json 2023-04-11 16:40:16 +03:00
vabene1111
ec083214ef Merge branch 'develop' into feature/unit-conversion 2023-04-11 14:46:58 +02:00
noxonad
4a4e4719b3 Fixed another typo 2023-04-11 14:25:29 +03:00
vabene1111
a0ff489be0 Merge pull request #2415 from smilerz/import_automation
added keyword automation to url import
2023-04-08 12:01:08 +02:00
vabene1111
147aae318a Merge pull request #2416 from dnlmlr/patch-1
Small fix for german language
2023-04-08 11:59:40 +02:00
dnlmlr
d8e61a485e Small fix for german language 2023-04-06 17:43:02 +02:00
vabene1111
c2be329495 Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2023-04-06 17:22:06 +02:00
vabene1111
2552d27f6f added plugin architecture 2023-04-06 17:22:02 +02:00
smilerz
9db5e45c26 added keyword automation to url import 2023-04-05 15:46:10 -05:00
Ignas Poklad
497321799c Add ability to set maximum missing ingredient count 2023-04-04 18:35:32 +02:00
vabene1111
2a6fc723d0 first food property UI prototype 2023-04-04 13:13:51 +02:00
vabene1111
74f88eb952 Merge pull request #2414 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue-cli-plugin-i18n-2.3.2
Bump vue-cli-plugin-i18n from 2.3.1 to 2.3.2 in /vue
2023-04-03 02:09:34 +02:00
vabene1111
9a0a99a21f Merge pull request #2413 from TandoorRecipes/dependabot/npm_and_yarn/vue/typescript-eslint/parser-5.57.0
Bump @typescript-eslint/parser from 5.56.0 to 5.57.0 in /vue
2023-04-03 02:09:18 +02:00
vabene1111
b35b731b6d Merge pull request #2412 from TandoorRecipes/dependabot/npm_and_yarn/vue/popperjs/core-2.11.7
Bump @popperjs/core from 2.11.6 to 2.11.7 in /vue
2023-04-03 02:09:06 +02:00
vabene1111
e8d2b95aaa Merge pull request #2409 from TandoorRecipes/dependabot/pip/markdown-3.4.3
Bump markdown from 3.4.1 to 3.4.3
2023-04-03 02:08:43 +02:00
vabene1111
6be1ddfe87 Merge pull request #2406 from TandoorRecipes/dependabot/pip/django-auth-ldap-4.2.0
Bump django-auth-ldap from 4.1.0 to 4.2.0
2023-04-03 02:08:14 +02:00
vabene1111
5b518d4a4c Merge pull request #2408 from TandoorRecipes/dependabot/pip/recipe-scrapers-14.35.0
Bump recipe-scrapers from 14.30.0 to 14.35.0
2023-04-03 02:07:42 +02:00
vabene1111
1c6db468e1 Merge pull request #2410 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue-cookies-1.8.3
Bump vue-cookies from 1.8.2 to 1.8.3 in /vue
2023-04-03 02:07:11 +02:00
vabene1111
25c914606e improved converters and helpers 2023-04-02 10:54:57 +02:00
vabene1111
44cb2d9807 improved tests and limited conversion to existing units 2023-04-02 10:05:28 +02:00
vabene1111
f90a66af1e Merge branch 'develop' into feature/unit-conversion 2023-04-02 09:17:38 +02:00
dependabot[bot]
519e36379b Bump vue-cli-plugin-i18n from 2.3.1 to 2.3.2 in /vue
Bumps [vue-cli-plugin-i18n](https://github.com/intlify/vue-cli-plugin-i18n) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/intlify/vue-cli-plugin-i18n/releases)
- [Changelog](https://github.com/intlify/vue-cli-plugin-i18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/intlify/vue-cli-plugin-i18n/compare/v2.3.1...v2.3.2)

---
updated-dependencies:
- dependency-name: vue-cli-plugin-i18n
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-01 00:59:18 +00:00
dependabot[bot]
4726598deb Bump @typescript-eslint/parser from 5.56.0 to 5.57.0 in /vue
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.56.0 to 5.57.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.57.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-01 00:58:57 +00:00
dependabot[bot]
1e57e7e70b Bump @popperjs/core from 2.11.6 to 2.11.7 in /vue
Bumps [@popperjs/core](https://github.com/popperjs/popper-core) from 2.11.6 to 2.11.7.
- [Release notes](https://github.com/popperjs/popper-core/releases)
- [Commits](https://github.com/popperjs/popper-core/compare/v2.11.6...v2.11.7)

---
updated-dependencies:
- dependency-name: "@popperjs/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-01 00:58:33 +00:00
dependabot[bot]
6f1777d37d Bump vue-cookies from 1.8.2 to 1.8.3 in /vue
Bumps [vue-cookies](https://github.com/cmp-cc/vue-cookies) from 1.8.2 to 1.8.3.
- [Release notes](https://github.com/cmp-cc/vue-cookies/releases)
- [Commits](https://github.com/cmp-cc/vue-cookies/compare/v1.8.2...v1.8.3)

---
updated-dependencies:
- dependency-name: vue-cookies
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-01 00:57:53 +00:00
dependabot[bot]
d6d9066eea Bump markdown from 3.4.1 to 3.4.3
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.4.1 to 3.4.3.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/change_log/release-2.6.md)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.4.1...3.4.3)

---
updated-dependencies:
- dependency-name: markdown
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-01 00:57:13 +00:00
dependabot[bot]
2c7e7f859b Bump recipe-scrapers from 14.30.0 to 14.35.0
Bumps [recipe-scrapers](https://github.com/hhursev/recipe-scrapers) from 14.30.0 to 14.35.0.
- [Release notes](https://github.com/hhursev/recipe-scrapers/releases)
- [Commits](https://github.com/hhursev/recipe-scrapers/compare/14.30.0...14.35.0)

---
updated-dependencies:
- dependency-name: recipe-scrapers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-01 00:57:06 +00:00
dependabot[bot]
97e5d23d98 Bump django-auth-ldap from 4.1.0 to 4.2.0
Bumps [django-auth-ldap](https://github.com/django-auth-ldap/django-auth-ldap) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/django-auth-ldap/django-auth-ldap/releases)
- [Changelog](https://github.com/django-auth-ldap/django-auth-ldap/blob/master/docs/changes.rst)
- [Commits](https://github.com/django-auth-ldap/django-auth-ldap/compare/4.1.0...4.2.0)

---
updated-dependencies:
- dependency-name: django-auth-ldap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-01 00:56:58 +00:00
vabene1111
a8cbef7bd4 Merge pull request #2403 from smilerz/debug_toolbar
enable toolbar seperate from debug logging
2023-03-30 07:37:56 +02:00
Ignas Poklad
78f1ee175b Add ability to set maximum missing ingredient count 2023-03-30 00:47:21 +02:00
smilerz
569143a7ee enable toolbar seperate from debug logging 2023-03-29 15:52:46 -05:00
vabene1111
3e8f0c3aae Merge pull request #2379 from thomaspreece/develop
Improve parsing of OpenEats imports
2023-03-29 16:04:07 +02:00
vabene1111
11620ba2b6 Update openeats.py 2023-03-29 16:03:33 +02:00
vabene1111
073ee7e963 Update openeats.py 2023-03-29 16:03:08 +02:00
vabene1111
9620689bd0 disable space creation for demo user on hosted instance 2023-03-28 23:22:14 +02:00
vabene1111
b8cbda10f1 disable space creation for demo user on hosted instance 2023-03-28 23:21:57 +02:00
Thomas Preece
5a145d7f8e PR feedback changes 2023-03-28 17:30:58 +01:00
vabene1111
0ba2fa296a added token auth for share link endpoint 2023-03-28 15:42:34 +02:00
Matěj Kubla
2a5fc22dd7 Translated using Weblate (Czech)
Currently translated at 100.0% (362 of 362 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/cs/
2023-03-25 11:32:52 +00:00
Matěj Kubla
e739c4d627 Added translation using Weblate (Czech) 2023-03-25 11:32:51 +00:00
vabene1111
7e350b2f90 improved property calculator 2023-03-25 07:59:07 +01:00
vabene1111
6d5592c1be basic food property calculation 2023-03-25 07:46:06 +01:00
vabene1111
87066c5d93 Merge pull request #2397 from gabe565/ci-skip-push-dependabot
Skip Docker push for Dependabot PRs
2023-03-25 07:22:43 +01:00
Gabe Cook
39ab2eb10f Skip Docker push for Dependabot PRs 2023-03-25 01:02:28 -05:00
vabene1111
9241638686 Merge branch 'develop' into feature/unit-conversion 2023-03-25 06:23:56 +01:00
vabene1111
048f12948d added WSL docs to docs nav 2023-03-25 06:23:48 +01:00
vabene1111
ed4a46d585 Merge pull request #2372 from nco34/patch-1
Create WSL-Docker-Installation.md
2023-03-25 05:56:16 +01:00
vabene1111
4857a853b3 Merge pull request #2351 from ocnattie/develop
added a couple of typo corrections
2023-03-25 05:54:27 +01:00
vabene1111
cfda0a17b1 Merge pull request #2326 from alexbarcelo/k8s_update
Updating/improving kubernetes deployment and its documentation
2023-03-25 05:52:13 +01:00
vabene1111
84a1c560cc Merge pull request #2270 from MarcusWolschon/features/upstream/1552_Import_Recipes_from_Cookidoo
#1552 import recipes from cookidoo
2023-03-25 05:51:18 +01:00
vabene1111
cf8e130bb8 Merge pull request #2394 from TandoorRecipes/dependabot/npm_and_yarn/vue/typescript-eslint/parser-5.56.0
Bump @typescript-eslint/parser from 5.51.0 to 5.56.0 in /vue
2023-03-25 05:50:38 +01:00
vabene1111
33070e3c51 Merge pull request #2297 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue-template-compiler-2.7.14
Bump vue-template-compiler from 2.6.14 to 2.7.14 in /vue
2023-03-25 05:50:30 +01:00
dependabot[bot]
d4a646c973 Bump @typescript-eslint/parser from 5.51.0 to 5.56.0 in /vue
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.51.0 to 5.56.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.56.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-25 04:49:53 +00:00
vabene1111
38ad546634 Merge pull request #2340 from TandoorRecipes/dependabot/pip/django-cleanup-7.0.0
Bump django-cleanup from 6.0.0 to 7.0.0
2023-03-25 05:49:32 +01:00
vabene1111
001094afa5 Merge pull request #2341 from TandoorRecipes/dependabot/pip/requests-2.28.2
Bump requests from 2.28.1 to 2.28.2
2023-03-25 05:49:26 +01:00
vabene1111
dd4e170fb0 Merge pull request #2342 from TandoorRecipes/dependabot/pip/django-webpack-loader-1.8.1
Bump django-webpack-loader from 1.8.0 to 1.8.1
2023-03-25 05:49:15 +01:00
vabene1111
10b3b6fe1e Merge pull request #2347 from TandoorRecipes/dependabot/npm_and_yarn/vue/webpack-bundle-tracker-1.8.1
Bump webpack-bundle-tracker from 1.8.0 to 1.8.1 in /vue
2023-03-25 05:49:09 +01:00
vabene1111
c15e88a3d3 Merge pull request #2395 from TandoorRecipes/dependabot/npm_and_yarn/vue/babel/eslint-parser-7.21.3
Bump @babel/eslint-parser from 7.19.1 to 7.21.3 in /vue
2023-03-25 05:48:44 +01:00
vabene1111
673ccb5024 Merge pull request #2393 from TandoorRecipes/dependabot/npm_and_yarn/vue/typescript-eslint/eslint-plugin-5.56.0
Bump @typescript-eslint/eslint-plugin from 4.33.0 to 5.56.0 in /vue
2023-03-25 05:48:35 +01:00
vabene1111
7297cb5c3f Merge pull request #2388 from TandoorRecipes/dependabot/github_actions/actions/setup-python-4
Bump actions/setup-python from 2 to 4
2023-03-25 05:48:28 +01:00
dependabot[bot]
f995c44d0b Bump django-cleanup from 6.0.0 to 7.0.0
Bumps [django-cleanup](https://github.com/un1t/django-cleanup) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/un1t/django-cleanup/releases)
- [Changelog](https://github.com/un1t/django-cleanup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/un1t/django-cleanup/compare/6.0.0...7.0.0)

---
updated-dependencies:
- dependency-name: django-cleanup
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-24 07:04:18 +00:00
dependabot[bot]
f81a7479c7 Bump @babel/eslint-parser from 7.19.1 to 7.21.3 in /vue
Bumps [@babel/eslint-parser](https://github.com/babel/babel/tree/HEAD/eslint/babel-eslint-parser) from 7.19.1 to 7.21.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.21.3/eslint/babel-eslint-parser)

---
updated-dependencies:
- dependency-name: "@babel/eslint-parser"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-24 07:00:46 +00:00
dependabot[bot]
f5ab723ac2 Bump actions/setup-python from 2 to 4
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 2 to 4.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v2...v4)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-24 06:59:24 +00:00
dependabot[bot]
2dddc79a47 Bump @typescript-eslint/eslint-plugin from 4.33.0 to 5.56.0 in /vue
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 4.33.0 to 5.56.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.56.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-24 06:59:04 +00:00
vabene1111
b28cd881de Merge pull request #2392 from TandoorRecipes/dependabot/npm_and_yarn/vue/core-js-3.29.1
Bump core-js from 3.27.2 to 3.29.1 in /vue
2023-03-24 07:58:51 +01:00
vabene1111
b013efadda Merge pull request #2391 from TandoorRecipes/dependabot/pip/pytest-7.2.2
Bump pytest from 7.2.0 to 7.2.2
2023-03-24 07:58:42 +01:00
vabene1111
a61566063b Merge pull request #2390 from TandoorRecipes/dependabot/github_actions/github/codeql-action-2
Bump github/codeql-action from 1 to 2
2023-03-24 07:58:26 +01:00
vabene1111
9f6ec38ac5 Merge pull request #2389 from TandoorRecipes/dependabot/pip/django-tables2-2.5.3
Bump django-tables2 from 2.4.1 to 2.5.3
2023-03-24 07:58:18 +01:00
vabene1111
5110b975e9 Merge pull request #2387 from TandoorRecipes/dependabot/github_actions/actions/checkout-3
Bump actions/checkout from 1 to 3
2023-03-24 07:58:09 +01:00
dependabot[bot]
56ad93cdb3 Bump core-js from 3.27.2 to 3.29.1 in /vue
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.27.2 to 3.29.1.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.29.1/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-24 06:56:02 +00:00
dependabot[bot]
fb7d1d94ab Bump pytest from 7.2.0 to 7.2.2
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.2.0 to 7.2.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.2.0...7.2.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-24 06:55:06 +00:00
dependabot[bot]
78de1c2bc2 Bump github/codeql-action from 1 to 2
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-24 06:54:44 +00:00
dependabot[bot]
8ad21b68ef Bump django-tables2 from 2.4.1 to 2.5.3
Bumps [django-tables2](https://github.com/jieter/django-tables2) from 2.4.1 to 2.5.3.
- [Release notes](https://github.com/jieter/django-tables2/releases)
- [Changelog](https://github.com/jieter/django-tables2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jieter/django-tables2/compare/v2.4.1...v2.5.3)

---
updated-dependencies:
- dependency-name: django-tables2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-24 06:54:40 +00:00
dependabot[bot]
58f7d02460 Bump actions/checkout from 1 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 1 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v1...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-24 06:54:35 +00:00
vabene1111
7c641af280 Merge pull request #2377 from gabe565/enable-dependabot-gha
Enable Dependabot updates for GitHub Actions
2023-03-24 07:54:12 +01:00
vabene1111
8ebb62188b Merge pull request #2376 from gabe565/refactor-ci
Refactor Docker CI: Consolidate, add cache, GHCR Repository, major/minor tags
2023-03-24 07:53:38 +01:00
Thomas Preece
a1b8f736c2 Improve parsing of OpenEats imports 2023-03-20 18:18:43 +00:00
Gabe Cook
0347ff5304 Enable Dependabot updates for GitHub Actions 2023-03-17 17:15:06 -05:00
Gabe Cook
037f38ac6b Add GHCR repository 2023-03-17 16:12:23 -05:00
Gabe Cook
5370e67444 Consolidate Docker build CI workflows 2023-03-17 14:02:45 -05:00
vabene1111
cb518a0cca many more unit conversions 2023-03-16 17:07:46 +01:00
Diogo Cardoso
87db9124d0 Translated using Weblate (Portuguese)
Currently translated at 63.5% (305 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt/
2023-03-16 11:55:48 +00:00
vabene1111
6efe4ab08d base unit conversions 2023-03-15 17:30:23 +01:00
vabene1111
8476b5e01f added Hungarian langauge to language switcher 2023-03-15 14:59:30 +01:00
vabene1111
27c5749b21 Merge branch 'develop' into feature/unit-conversion 2023-03-15 14:57:00 +01:00
nco34
f1eb553487 Create WSL-Docker-Installation.md 2023-03-15 01:25:53 -04:00
vabene1111
4378a6b0c7 Merge branch 'develop' 2023-03-14 23:10:37 +01:00
vabene1111
d5ca8e9c96 add FAQ manual setup 2023-03-14 23:05:09 +01:00
vabene1111
bbcf7ba8a7 fixed mealie import no steps but ingredients 2023-03-14 22:58:35 +01:00
vabene1111
f29f77a1d5 fixed ingredient to string plural 2023-03-14 22:50:33 +01:00
vabene1111
a3f8b2272c added notes, yields, times and source url to mealie import 2023-03-14 22:46:50 +01:00
vabene1111
008a61823d added origianl image import to paprika 2023-03-14 22:34:09 +01:00
vabene1111
a60f1a3e92 added section headers to bottom nav create 2023-03-14 22:12:39 +01:00
Amara Ude
ebb6e669e2 Translated using Weblate (Spanish)
Currently translated at 74.1% (356 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2023-03-13 06:55:47 +00:00
Amara Ude
fdd61d3caf Translated using Weblate (French)
Currently translated at 95.6% (459 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2023-03-13 06:55:47 +00:00
Jin Zhang
72ac272962 Translated using Weblate (French)
Currently translated at 91.9% (443 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-03-13 06:55:47 +00:00
Amara Ude
4395737cc5 Translated using Weblate (French)
Currently translated at 91.9% (443 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-03-13 06:55:47 +00:00
Amara Ude
f3aef2c10b Translated using Weblate (Spanish)
Currently translated at 56.8% (274 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2023-03-13 06:55:47 +00:00
Jin Zhang
df1b75d88a Translated using Weblate (French)
Currently translated at 95.0% (456 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2023-03-12 02:55:53 +00:00
Feng Zhong
0b5fb69664 Translated using Weblate (Chinese (Traditional))
Currently translated at 17.1% (81 of 471 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/zh_Hant/
2023-03-12 02:55:47 +00:00
Jin Zhang
ff2a75476b Translated using Weblate (French)
Currently translated at 89.8% (433 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-03-12 02:55:47 +00:00
Tomasz Klimczak
ea515c199c Translated using Weblate (Polish)
Currently translated at 100.0% (480 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2023-03-09 20:55:47 +00:00
Feng Zhong
12f0cdb484 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (480 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/zh_Hans/
2023-03-08 04:55:47 +00:00
Feng Zhong
f2cd220e22 Translated using Weblate (Chinese (Traditional))
Currently translated at 5.7% (27 of 471 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/zh_Hant/
2023-03-08 04:55:47 +00:00
liimee
a0a3629e4c Translated using Weblate (Indonesian)
Currently translated at 30.0% (144 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/id/
2023-03-06 10:55:48 +00:00
Anders Obro
8263c6b725 Translated using Weblate (Danish)
Currently translated at 100.0% (480 of 480 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/da/
2023-03-06 10:55:48 +00:00
Anders Obro
b8b3620ade Translated using Weblate (Danish)
Currently translated at 100.0% (528 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/da/
2023-03-06 10:55:48 +00:00
vabene1111
e55faa02d5 recipe view padding without comments 2023-03-02 16:59:45 +01:00
Ohaneje Natalie
99fc0d1f81 added a couple of typo corrections 2023-03-02 11:39:04 +01:00
dependabot[bot]
19fe7ce214 Bump webpack-bundle-tracker from 1.8.0 to 1.8.1 in /vue
Bumps [webpack-bundle-tracker](https://github.com/django-webpack/webpack-bundle-tracker) from 1.8.0 to 1.8.1.
- [Release notes](https://github.com/django-webpack/webpack-bundle-tracker/releases)
- [Commits](https://github.com/django-webpack/webpack-bundle-tracker/compare/1.8.0...1.8.1)

---
updated-dependencies:
- dependency-name: webpack-bundle-tracker
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 01:04:03 +00:00
dependabot[bot]
ca26588c32 Bump django-webpack-loader from 1.8.0 to 1.8.1
Bumps [django-webpack-loader](https://github.com/django-webpack/django-webpack-loader) from 1.8.0 to 1.8.1.
- [Release notes](https://github.com/django-webpack/django-webpack-loader/releases)
- [Changelog](https://github.com/django-webpack/django-webpack-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/django-webpack/django-webpack-loader/compare/1.8.0...1.8.1)

---
updated-dependencies:
- dependency-name: django-webpack-loader
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 00:57:46 +00:00
dependabot[bot]
e2c807e303 Bump requests from 2.28.1 to 2.28.2
Bumps [requests](https://github.com/psf/requests) from 2.28.1 to 2.28.2.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.28.1...v2.28.2)

---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-01 00:57:39 +00:00
vabene1111
64efadfc81 added bottom padding for recipe view 2023-02-27 16:43:37 +01:00
vabene1111
fb90eede52 fixed blank meal plan when nothing planned on mobile 2023-02-27 16:41:33 +01:00
Jesse
48fda987fb Translated using Weblate (Dutch)
Currently translated at 100.0% (482 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nl/
2023-02-27 13:55:47 +00:00
bebur
8e85fd57b6 Translated using Weblate (Dutch)
Currently translated at 100.0% (478 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nl/
2023-02-26 13:15:31 +00:00
bebur
3f475aed03 Translated using Weblate (Dutch)
Currently translated at 100.0% (478 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nl/
2023-02-26 13:15:31 +00:00
Jesse
12a11766d9 Translated using Weblate (Dutch)
Currently translated at 100.0% (478 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nl/
2023-02-26 13:15:31 +00:00
吕楪
0e90700ce9 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (482 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/zh_Hans/
2023-02-26 13:15:31 +00:00
vabene1111
b10be8d321 playing around with pint 2023-02-26 11:56:48 +01:00
vabene1111
8a648a5e41 unit conversion cleanups 2023-02-26 09:12:16 +01:00
vabene1111
fcf861f5eb cleaner caching function 2023-02-26 08:49:44 +01:00
vabene1111
1efcf386e2 ingredient related recipes performance 2023-02-26 08:27:20 +01:00
vabene1111
38010117e5 optimized unit conversion queries
using filter breaks prefetch related
2023-02-26 08:22:07 +01:00
vabene1111
c217bf2445 improved recipe detail API performance
by properly using prefetch related
from 600 queries in 280ms to 290 in ~100 ms
2023-02-25 23:34:35 +01:00
vabene1111
671269dca7 Merge branch 'develop' into feature/unit-conversion 2023-02-25 22:15:42 +01:00
vabene1111
b7f202d645 working on dedicated food view 2023-02-25 11:41:25 +01:00
vabene1111
f0f12ca83f removed use_plural space setting
remove because i dont see the need and it was causing issues
2023-02-24 23:32:30 +01:00
vabene1111
b14d8f0051 fixed plural showing in lists where it does not make sense 2023-02-24 23:27:20 +01:00
vabene1111
2e013e7b43 add api endpoints and genereic views 2023-02-24 23:17:12 +01:00
vabene1111
ff6c8d5822 added unique constraints 2023-02-24 22:27:35 +01:00
vabene1111
a2b987352f user nutrition types + ingredient nutrtion calculation 2023-02-24 22:12:52 +01:00
vabene1111
5651beffb2 Merge branch 'develop' into feature/unit-conversion
# Conflicts:
#	vue/yarn.lock
2023-02-24 20:41:01 +01:00
vabene1111
5fd8c56324 Merge branch 'develop' of https://github.com/TandoorRecipes/recipes into develop 2023-02-24 20:36:06 +01:00
vabene1111
8abef1d8cc improved style 2023-02-24 20:35:54 +01:00
vabene1111
0c8c74c0ac context menu working for mobile mealplan view 2023-02-24 20:24:28 +01:00
vabene1111
0b40414d23 basic context menu for meal plan working 2023-02-24 16:10:16 +01:00
vabene1111
d4b8190f55 increased right/left padding in bottom nav 2023-02-24 11:16:12 +01:00
JFL
0ce7ea0b61 Translated using Weblate (French)
Currently translated at 93.5% (447 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2023-02-24 02:55:47 +00:00
JFL
817c4cb9d6 Translated using Weblate (French)
Currently translated at 87.7% (423 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-02-24 02:55:46 +00:00
Alex Barcelo
d05b894d69 Updating/improving kubernetes deployment and its documentation 2023-02-20 14:14:53 +01:00
Oliver Cervera
9962c849ed Translated using Weblate (Italian)
Currently translated at 97.4% (466 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2023-02-20 12:55:48 +00:00
vabene1111
8313dc8abe added padding in recipe search view 2023-02-19 22:15:54 +01:00
vabene1111
2781730778 fixed mess 2023-02-19 21:09:06 +01:00
vabene1111
985e98c699 fixed shopping list meal plan logic 2023-02-19 17:05:39 +01:00
vabene1111
d244af28e3 Merge pull request #2290 from TandoorRecipes/dependabot/pip/pillow-9.4.0
Bump pillow from 9.3.0 to 9.4.0
2023-02-19 16:49:56 +01:00
vabene1111
488ac3b94a Merge pull request #2307 from TandoorRecipes/dependabot/pip/cryptography-39.0.1
Bump cryptography from 38.0.4 to 39.0.1
2023-02-19 16:49:41 +01:00
vabene1111
b49426e35c more styling tweaks 2023-02-19 16:42:00 +01:00
vabene1111
a81bac1193 styling and fixes for mealplan and search plan 2023-02-19 16:37:32 +01:00
vabene1111
7fe80b7a5f more styling of mobile meal plan 2023-02-19 16:05:49 +01:00
vabene1111
a6e3ab2dbe mostly working and somewhat styled mobile plan ui 2023-02-19 15:58:39 +01:00
vabene1111
a4f0f38300 meal plan simple mobile layout 2023-02-19 15:24:51 +01:00
vabene1111
1a5b7244dd improved paddings in search view 2023-02-19 14:46:50 +01:00
vabene1111
dff9f91d4c properly integrated bottom nav 2023-02-19 13:54:16 +01:00
vabene1111
59d1c1dcdc improved bottom nav with slots and more 2023-02-19 10:02:31 +01:00
vabene1111
2cff936b5b improved showing of meal plan and bottom nav widget 2023-02-19 08:50:40 +01:00
vabene1111
d9dc644cb6 fixed meal plan edit id handling 2023-02-19 08:44:36 +01:00
vabene1111
2280d04fd2 search view meal plan working 2023-02-19 08:42:23 +01:00
vabene1111
1c8cb69cf3 wip integrating mealplan edit into search 2023-02-18 22:27:17 +01:00
vabene1111
e33c3789b7 fixed add to shopping when using ingredient headers 2023-02-18 21:56:21 +01:00
vabene1111
8d85800e2f updated store 2023-02-18 21:55:24 +01:00
vabene1111
c08c1d30ad fixed review shopping before save, improved meal plan edit modal independece 2023-02-18 21:55:17 +01:00
vabene1111
3c00e1ecdb made meal plan edit modal mostely independent 2023-02-18 21:15:08 +01:00
vabene1111
83947e31aa properly reactive meal plan store with dict 2023-02-18 19:13:32 +01:00
Joachim Weber
b4f90fbbb3 Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.6% (32 of 562 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt_BR/
2023-02-18 10:55:49 +00:00
Joachim Weber
0f55f91586 Translated using Weblate (Portuguese (Brazil))
Currently translated at 36.1% (173 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2023-02-18 10:55:49 +00:00
Joachim Weber
7d0a9b11a0 Translated using Weblate (German)
Currently translated at 100.0% (478 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-02-18 10:55:49 +00:00
vabene1111
9167261714 add nav to view 2023-02-17 18:00:43 +01:00
vabene1111
57fae34ff6 playing with bottom nav 2023-02-17 17:02:50 +01:00
dependabot[bot]
1cbc74761a Bump vue-template-compiler from 2.6.14 to 2.7.14 in /vue
Bumps [vue-template-compiler](https://github.com/vuejs/vue) from 2.6.14 to 2.7.14.
- [Release notes](https://github.com/vuejs/vue/releases)
- [Changelog](https://github.com/vuejs/vue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue/compare/v2.6.14...v2.7.14)

---
updated-dependencies:
- dependency-name: vue-template-compiler
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-16 22:44:06 +00:00
vabene1111
961578385d new meal plan widget 2023-02-16 23:38:14 +01:00
vabene1111
0dc6bed7ad prevent user preference store from spamming API requests 2023-02-16 23:21:39 +01:00
vabene1111
c78c615372 Merge branch 'develop' into feature/card_ui_2 2023-02-16 22:51:30 +01:00
vabene1111
04bdec3889 Merge branch 'feature/improved-offline' into develop 2023-02-16 22:51:21 +01:00
vabene1111
6af3d7c98f playing around with better meal plan view 2023-02-16 22:50:48 +01:00
vabene1111
73be817c10 moved context menu and re added descripotion to detailed view 2023-02-16 21:30:30 +01:00
vabene1111
faf78fc254 larger pagination 2023-02-16 20:54:30 +01:00
vabene1111
2c85c370e6 description fade 2023-02-16 20:52:11 +01:00
vabene1111
3a38a095d8 nicer card working 2023-02-16 20:38:40 +01:00
vabene1111
e754b13340 quite nice 2023-02-16 20:23:46 +01:00
vabene1111
900c28caba playing around with the recipe card 2023-02-16 19:10:19 +01:00
vabene1111
c5ce197ed7 test setup done for real 2023-02-16 18:28:50 +01:00
vabene1111
9573ff0932 setup test view 2023-02-16 18:26:26 +01:00
vabene1111
f554963ae7 ugly but working import to my tandoor instance button 2023-02-16 18:16:01 +01:00
dependabot[bot]
961619c156 Bump cryptography from 38.0.4 to 39.0.1
Bumps [cryptography](https://github.com/pyca/cryptography) from 38.0.4 to 39.0.1.
- [Release notes](https://github.com/pyca/cryptography/releases)
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/38.0.4...39.0.1)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-16 17:11:41 +00:00
vabene1111
4ecadab53c Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2023-02-16 18:00:52 +01:00
vabene1111
744501a65d pass url parmeter to import page 2023-02-16 18:00:48 +01:00
vabene1111
44cc66888b Merge pull request #2293 from TandoorRecipes/dependabot/pip/django-debug-toolbar-3.8.1
Bump django-debug-toolbar from 3.7.0 to 3.8.1
2023-02-16 17:53:42 +01:00
vabene1111
0695909b6c Merge pull request #2291 from TandoorRecipes/dependabot/pip/recipe-scrapers-14.30.0
Bump recipe-scrapers from 14.24.0 to 14.30.0
2023-02-16 17:53:01 +01:00
vabene1111
7a4fa38725 Merge pull request #2319 from TandoorRecipes/dependabot/pip/django-4.1.7
Bump django from 4.1.4 to 4.1.7
2023-02-16 17:52:48 +01:00
vabene1111
9f360d8af6 improve cross instance import 2023-02-16 17:47:03 +01:00
vabene1111
5dad6b8b17 enable cross tandoor importing 2023-02-16 17:32:43 +01:00
dependabot[bot]
5b6df6ed2e Bump django from 4.1.4 to 4.1.7
Bumps [django](https://github.com/django/django) from 4.1.4 to 4.1.7.
- [Release notes](https://github.com/django/django/releases)
- [Commits](https://github.com/django/django/compare/4.1.4...4.1.7)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-15 20:18:53 +00:00
vabene1111
82d1a75d80 Merge branch 'develop' 2023-02-12 23:10:08 +01:00
vabene1111
50429207c5 import between tandoor instances WIP 2023-02-12 23:09:30 +01:00
vabene1111
589bc1f1aa fixed open graph tags when attributes are missing 2023-02-12 20:52:52 +01:00
vabene1111
824dcefc1a fixed space delete data 2023-02-12 20:52:30 +01:00
vabene1111
3f8c952237 added open graph meta tags 2023-02-12 18:17:05 +01:00
vabene1111
077db58de0 allow markdown in message of the day 2023-02-12 18:16:58 +01:00
vabene1111
3c527fd112 allow infiinit sharing as space setting 2023-02-12 18:16:43 +01:00
vabene1111
cd1f6ad7b0 added pinia to all app entrypoints 2023-02-12 16:14:15 +01:00
vabene1111
3af7e98216 basic pinia store 2023-02-12 16:06:00 +01:00
vabene1111
cb363d6321 added background sync to shopping list entry checking 2023-02-12 12:56:29 +01:00
vabene1111
39656152d3 fixed disabling shopping auto sync not working 2023-02-12 12:55:26 +01:00
vabene1111
22c88e5269 prevent double loading on import 2023-02-12 08:28:26 +01:00
vabene1111
89550e8345 fixed ingredient editor breaking import 2023-02-12 08:28:16 +01:00
vabene1111
9846c4df18 added support for rezeptsuite.de imports 2023-02-11 17:51:44 +01:00
vabene1111
924d1cb71b improved search food api performance 2023-02-11 16:27:41 +01:00
vabene1111
44236f611e removed unnecessary api calles in MealPlanEditModal 2023-02-11 15:56:11 +01:00
vabene1111
012dea5a0c fixed and improved import ingredient edit 2023-02-11 11:57:52 +01:00
vabene1111
820c9b704f improved servings parser 2023-02-11 09:04:05 +01:00
vabene1111
ed92926ec4 fixed plural import 2023-02-11 09:01:10 +01:00
vertilo
bc560ee76d Translated using Weblate (Ukrainian)
Currently translated at 52.9% (253 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/uk/
2023-02-10 14:55:46 +00:00
vertilo
b6c4130e4b Translated using Weblate (Ukrainian)
Currently translated at 52.7% (252 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/uk/
2023-02-09 13:55:15 +00:00
vertilo
b0ca391bb4 Translated using Weblate (Ukrainian)
Currently translated at 0.1% (1 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/uk/
2023-02-09 13:55:15 +00:00
Marion Kämpfer
45a6b1d386 Translated using Weblate (French)
Currently translated at 93.5% (447 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2023-02-09 13:55:15 +00:00
Laura
4626ffcbc5 Translated using Weblate (French)
Currently translated at 93.5% (447 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2023-02-09 13:55:14 +00:00
Andreas Ljungberg
c3a9cc94fa Translated using Weblate (Swedish)
Currently translated at 100.0% (478 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/sv/
2023-02-09 13:55:14 +00:00
Marion Kämpfer
a8eb8bb8d7 Translated using Weblate (German)
Currently translated at 99.7% (477 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-02-09 13:55:14 +00:00
Marion Kämpfer
b14c9aa68c Translated using Weblate (French)
Currently translated at 87.5% (422 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-02-09 13:55:14 +00:00
Marion Kämpfer
b03db7ad36 Translated using Weblate (German)
Currently translated at 99.5% (480 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2023-02-09 13:55:14 +00:00
Adri
cc706a1195 Translated using Weblate (Italian)
Currently translated at 92.1% (444 of 482 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2023-02-05 03:55:47 +00:00
vabene1111
b1028f49d6 Merge branch 'develop' 2023-02-03 16:04:58 +01:00
vabene1111
6d0cc96cc8 Merge pull request #2301 from RoGryza/patch-1
Fix path traversal in manual installation steps
2023-02-03 16:02:58 +01:00
Rodrigo Candido Gryzinski
969a91e751 Fix path traversal in manual installation steps 2023-02-03 08:42:44 +00:00
dependabot[bot]
c352bf82dd Bump django-debug-toolbar from 3.7.0 to 3.8.1
Bumps [django-debug-toolbar](https://github.com/jazzband/django-debug-toolbar) from 3.7.0 to 3.8.1.
- [Release notes](https://github.com/jazzband/django-debug-toolbar/releases)
- [Changelog](https://github.com/jazzband/django-debug-toolbar/blob/main/docs/changes.rst)
- [Commits](https://github.com/jazzband/django-debug-toolbar/compare/3.7...3.8.1)

---
updated-dependencies:
- dependency-name: django-debug-toolbar
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-01 00:02:03 +00:00
dependabot[bot]
a305527ba2 Bump recipe-scrapers from 14.24.0 to 14.30.0
Bumps [recipe-scrapers](https://github.com/hhursev/recipe-scrapers) from 14.24.0 to 14.30.0.
- [Release notes](https://github.com/hhursev/recipe-scrapers/releases)
- [Commits](https://github.com/hhursev/recipe-scrapers/compare/14.24.0...14.30.0)

---
updated-dependencies:
- dependency-name: recipe-scrapers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-01 00:01:46 +00:00
dependabot[bot]
c0e35e89e9 Bump pillow from 9.3.0 to 9.4.0
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.3.0 to 9.4.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.3.0...9.4.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-01 00:01:39 +00:00
Marcus Wolschon
bce44866c2 add translations, go back to using scraper.instructions() 2023-01-30 16:49:38 +01:00
vabene1111
f47470a9ad wip rezeptsuitede importer 2023-01-29 22:06:08 +01:00
Tomasz Klimczak
9ad9fe275d Translated using Weblate (Polish)
Currently translated at 100.0% (478 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2023-01-28 21:59:00 +00:00
vabene1111
33448c98c0 fixed mark food on hand 2023-01-27 15:48:33 +01:00
vabene1111
90e389f2fa fixed add to shopping modal layout 2023-01-27 15:43:22 +01:00
Kaibu
af7acd7473 swapped simple-calender dependency
updated simple-calender to forked version with fix
2023-01-27 15:26:39 +01:00
vabene1111
dfa0794281 Merge pull request #2272 from MarcusWolschon/features/upstream/ingredients_special_cases
handle 2 more special cases in ingredients
2023-01-27 15:14:47 +01:00
vabene1111
a36d42df84 Merge pull request #2281 from juneboom/juneboom-fix-typo
Fix typos
2023-01-27 15:09:32 +01:00
June
269dded046 Fix typos
Edited some spelling and grammar.
2023-01-23 19:41:32 -05:00
vabene1111
826ccc2760 yarn 2023-01-23 16:27:42 +01:00
吕楪
7190dc17a7 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (478 of 478 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/zh_Hans/
2023-01-21 02:55:48 +00:00
vabene1111
5e332bb88c changed plural default 2023-01-20 10:20:03 +01:00
vabene1111
fb21622bfe adding test page 2023-01-19 20:31:52 +01:00
vabene1111
191c38db8f testing chunks 2023-01-19 20:31:48 +01:00
vabene1111
71132fe992 updated translations 2023-01-19 19:14:39 +01:00
vabene1111
d1d568a9d3 fixed import view step editor 2023-01-19 19:12:25 +01:00
Fall1ngStar
68d4fb3b59 Translated using Weblate (French)
Currently translated at 85.8% (450 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-01-18 01:55:46 +00:00
Marcus Wolschon
b4c26682c7 simplify 2023-01-17 15:20:59 +01:00
Alexander Eifler
e2cfb53ec4 Translated using Weblate (German)
Currently translated at 100.0% (476 of 476 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-01-16 21:55:48 +00:00
vabene1111
274b17a860 improved unit factory and run CI on PR 2023-01-16 21:20:16 +01:00
vabene1111
97bcf1111b added simple edit modal to recipe import 2023-01-16 21:06:29 +01:00
vabene1111
3b9d221258 fixed importer loading empty ingredients 2023-01-16 20:41:29 +01:00
vabene1111
d8bcb8bcb6 emoji picker offline 2023-01-16 20:28:42 +01:00
vabene1111
5cb0f1761a fixed emoji picker 2023-01-16 20:23:36 +01:00
vabene1111
516b551528 Merge pull request #2273 from jacobgc/patch-1
Update .env.template
2023-01-16 19:38:10 +01:00
Oliver Cervera
f43d4d3971 Translated using Weblate (Italian)
Currently translated at 97.0% (462 of 476 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2023-01-15 16:55:46 +00:00
Oliver Cervera
e0dd70027b Translated using Weblate (Italian)
Currently translated at 91.2% (478 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2023-01-15 16:55:46 +00:00
vabene1111
29bb391bfe Merge branch 'develop' into feature/unit-conversion 2023-01-15 17:44:46 +01:00
Jacob Gee-Clarke
79efd94d6f Update .env.template
Fixed broken URLs in .env.template
2023-01-15 13:51:09 +00:00
Marcus Wolschon
f16870c59e fix an accidental commit 2023-01-15 14:31:37 +01:00
Marcus Wolschon
c690bc18a0 Fix CodeQL issue with regular expression 2023-01-15 14:27:55 +01:00
Marcus Wolschon
394f24c29f handle special cases in ingredients 2023-01-15 13:50:06 +01:00
Marcus Wolschon
f43ef3ad59 another typo 2023-01-15 13:04:29 +01:00
Marcus Wolschon
4c71c5b088 fix typo 2023-01-15 13:03:51 +01:00
Marcus Wolschon
54d0b70f01 #1552 use instructions_list() instead of instructions() and move Thermomix-Handling to clean_instruction_string() 2023-01-15 12:55:03 +01:00
Marcus Wolschon
5a0f07a6b2 handle steps 2023-01-13 22:21:31 +01:00
Marcus Wolschon
a4bf967f65 #1552 Import Recipes from Cookidoo 2023-01-13 21:33:01 +01:00
Marcus Wolschon
77feb0db3a #1552 Import Recipes from Cookidoo 2023-01-13 21:31:49 +01:00
Marcus Wolschon
33c634c0e2 #1552 Import Recipes from Cookidoo 2023-01-13 21:22:17 +01:00
Marcus Wolschon
be24e25ae4 #1552 Import Recipes from Cookidoo 2023-01-13 21:19:49 +01:00
arnaud
c2a8214290 Translated using Weblate (French)
Currently translated at 84.7% (444 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2023-01-12 21:55:48 +00:00
vabene1111
4d0cfc95e4 Merge pull request #2267 from besendorf/patch-2
Clarify the folder in which yarn needs to be run
2023-01-12 15:59:38 +01:00
besendorf
972c103538 fix error and add folder name 2023-01-12 15:37:53 +01:00
besendorf
2f62f51dc2 Clarify the folder in which yarn needs to be run 2023-01-11 16:43:01 +01:00
vabene1111
56ee173c07 fixed s3 file upload 2023-01-10 17:03:55 +01:00
Oliver Cervera
774c633d5c Translated using Weblate (Italian)
Currently translated at 96.6% (460 of 476 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2023-01-10 11:55:47 +00:00
Oliver Cervera
93dd35fde3 Translated using Weblate (Italian)
Currently translated at 87.7% (460 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2023-01-10 11:55:46 +00:00
vabene1111
3ced8c7a1e first conversions working 2023-01-09 17:42:53 +01:00
AquaticLava
4a390b5824 removed logging 2023-01-08 12:01:59 -07:00
Joachim Weber
666e4d282f Translated using Weblate (Portuguese)
Currently translated at 10.1% (48 of 474 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt/
2023-01-08 17:55:49 +00:00
Joachim Weber
ed6ca613ff Translated using Weblate (French)
Currently translated at 84.1% (399 of 474 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2023-01-08 17:55:49 +00:00
Joachim Weber
285364e12a Translated using Weblate (German)
Currently translated at 98.9% (469 of 474 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2023-01-08 17:55:49 +00:00
Joachim Weber
9a46a91652 Translated using Weblate (Portuguese)
Currently translated at 29.3% (154 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt/
2023-01-08 17:55:49 +00:00
Joachim Weber
4e4078f3da Translated using Weblate (Latvian)
Currently translated at 39.8% (209 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/lv/
2023-01-08 17:55:49 +00:00
Joachim Weber
41c9290ba8 Translated using Weblate (Armenian)
Currently translated at 100.0% (362 of 362 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hy/
2023-01-08 17:55:49 +00:00
Joachim Weber
4460fe013f Translated using Weblate (Czech)
Currently translated at 100.0% (362 of 362 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/cs/
2023-01-08 17:55:49 +00:00
vabene1111
558a5d6554 js stuff 2023-01-07 10:32:35 +01:00
vabene1111
388f2f441f tests 2023-01-06 22:35:14 +01:00
vabene1111
11e8af4c46 comment out broken test 2023-01-06 22:12:59 +01:00
vabene1111
387893e1ef remove source map reference 2023-01-06 21:58:14 +01:00
vabene1111
78dc1bf9ec fixed missing .map files (by removing the reference) 2023-01-06 21:50:26 +01:00
vabene1111
12638096b1 use updated version of js reverse 2023-01-06 21:40:43 +01:00
vabene1111
3e82199c44 added author keyword import 2023-01-06 21:22:02 +01:00
vabene1111
b4bcf5c032 Merge remote-tracking branch 'origin/feature/import-automation' into develop 2023-01-06 20:26:31 +01:00
AquaticLava
785dc15cd9 Merge branch 'TandoorRecipes:develop' into Auto-Planner 2023-01-05 16:27:27 -07:00
AquaticLava
31f3425354 Menu for auto planner, menu sets auto planner settings. delete method no longer deletes all records for testing the auto planner. 2023-01-05 16:25:42 -07:00
Tomasz Klimczak
afdd92c903 Translated using Weblate (Polish)
Currently translated at 100.0% (474 of 474 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2023-01-05 12:55:53 +00:00
Oliver Cervera
1462300eda Translated using Weblate (Italian)
Currently translated at 95.7% (454 of 474 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2023-01-05 12:55:53 +00:00
Oliver Cervera
d0417d09db Translated using Weblate (Italian)
Currently translated at 83.3% (437 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2023-01-05 12:55:53 +00:00
vabene1111
39c8da8305 Merge pull request #2248 from TandoorRecipes/dependabot/npm_and_yarn/vue/webpack-bundle-tracker-1.8.0
Bump webpack-bundle-tracker from 1.7.0 to 1.8.0 in /vue
2023-01-05 07:56:18 +01:00
vabene1111
c9af9277ae Merge pull request #2244 from TandoorRecipes/dependabot/pip/django-allauth-0.52.0
Bump django-allauth from 0.51.0 to 0.52.0
2023-01-05 07:53:02 +01:00
vabene1111
5e2be34f7b Merge pull request #2245 from TandoorRecipes/dependabot/pip/icalendar-5.0.4
Bump icalendar from 5.0.3 to 5.0.4
2023-01-05 07:52:30 +01:00
vabene1111
73a2476a79 Merge pull request #2242 from TandoorRecipes/dependabot/pip/django-storages-1.13.2
Bump django-storages from 1.13.1 to 1.13.2
2023-01-05 07:52:16 +01:00
dependabot[bot]
f61032cc74 Bump django-storages from 1.13.1 to 1.13.2
Bumps [django-storages](https://github.com/jschneier/django-storages) from 1.13.1 to 1.13.2.
- [Release notes](https://github.com/jschneier/django-storages/releases)
- [Changelog](https://github.com/jschneier/django-storages/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/jschneier/django-storages/compare/1.13.1...1.13.2)

---
updated-dependencies:
- dependency-name: django-storages
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-05 06:52:11 +00:00
vabene1111
f6956388c7 Merge pull request #2243 from TandoorRecipes/dependabot/pip/lxml-4.9.2
Bump lxml from 4.9.1 to 4.9.2
2023-01-05 07:52:07 +01:00
vabene1111
7e9b303e8b Merge pull request #2246 from TandoorRecipes/dependabot/pip/boto3-1.26.41
Bump boto3 from 1.24.84 to 1.26.41
2023-01-05 07:51:52 +01:00
vabene1111
f617dedfa2 Merge pull request #2247 from TandoorRecipes/dependabot/npm_and_yarn/vue/core-js-3.27.1
Bump core-js from 3.26.1 to 3.27.1 in /vue
2023-01-05 07:51:48 +01:00
vabene1111
942c26c581 Merge pull request #2249 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue-cookies-1.8.2
Bump vue-cookies from 1.8.1 to 1.8.2 in /vue
2023-01-05 07:51:43 +01:00
vabene1111
a00d90398e Merge pull request #2250 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue/compiler-sfc-3.2.45
Bump @vue/compiler-sfc from 3.2.40 to 3.2.45 in /vue
2023-01-05 07:51:29 +01:00
vabene1111
61e6d855ec Merge pull request #2251 from TandoorRecipes/dependabot/npm_and_yarn/vue/typescript-eslint/parser-5.47.1
Bump @typescript-eslint/parser from 4.33.0 to 5.47.1 in /vue
2023-01-05 07:51:23 +01:00
vabene1111
6b59f53273 test wip but not working 2023-01-04 17:27:15 +01:00
vabene1111
798457e7e2 translated, documented and implemented instruction replace 2023-01-04 16:36:03 +01:00
vabene1111
6176eeb024 basics 2023-01-03 23:12:00 +01:00
Oliver Cervera
56252a707a Translated using Weblate (Italian)
Currently translated at 73.5% (347 of 472 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2023-01-03 11:55:47 +00:00
vabene1111
9c649d743c fixed recettetek import ingredients 2023-01-01 15:07:58 +01:00
dependabot[bot]
00b1ca5454 Bump @typescript-eslint/parser from 4.33.0 to 5.47.1 in /vue
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.33.0 to 5.47.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.47.1/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-01 00:16:48 +00:00
dependabot[bot]
f2e1648556 Bump @vue/compiler-sfc from 3.2.40 to 3.2.45 in /vue
Bumps [@vue/compiler-sfc](https://github.com/vuejs/core/tree/HEAD/packages/compiler-sfc) from 3.2.40 to 3.2.45.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/commits/v3.2.45/packages/compiler-sfc)

---
updated-dependencies:
- dependency-name: "@vue/compiler-sfc"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-01 00:15:23 +00:00
dependabot[bot]
b1945edf04 Bump vue-cookies from 1.8.1 to 1.8.2 in /vue
Bumps [vue-cookies](https://github.com/cmp-cc/vue-cookies) from 1.8.1 to 1.8.2.
- [Release notes](https://github.com/cmp-cc/vue-cookies/releases)
- [Commits](https://github.com/cmp-cc/vue-cookies/compare/v1.8.1...v1.8.2)

---
updated-dependencies:
- dependency-name: vue-cookies
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-01 00:13:19 +00:00
dependabot[bot]
9f20db0ed3 Bump webpack-bundle-tracker from 1.7.0 to 1.8.0 in /vue
Bumps [webpack-bundle-tracker](https://github.com/django-webpack/webpack-bundle-tracker) from 1.7.0 to 1.8.0.
- [Release notes](https://github.com/django-webpack/webpack-bundle-tracker/releases)
- [Commits](https://github.com/django-webpack/webpack-bundle-tracker/compare/1.7.0...1.8.0)

---
updated-dependencies:
- dependency-name: webpack-bundle-tracker
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-01 00:12:24 +00:00
dependabot[bot]
852756f099 Bump core-js from 3.26.1 to 3.27.1 in /vue
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.26.1 to 3.27.1.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.27.1/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-01 00:11:03 +00:00
dependabot[bot]
452617ef30 Bump boto3 from 1.24.84 to 1.26.41
Bumps [boto3](https://github.com/boto/boto3) from 1.24.84 to 1.26.41.
- [Release notes](https://github.com/boto/boto3/releases)
- [Changelog](https://github.com/boto/boto3/blob/develop/CHANGELOG.rst)
- [Commits](https://github.com/boto/boto3/compare/1.24.84...1.26.41)

---
updated-dependencies:
- dependency-name: boto3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-01 00:04:44 +00:00
dependabot[bot]
4e972835e5 Bump icalendar from 5.0.3 to 5.0.4
Bumps [icalendar](https://github.com/collective/icalendar) from 5.0.3 to 5.0.4.
- [Release notes](https://github.com/collective/icalendar/releases)
- [Changelog](https://github.com/collective/icalendar/blob/master/CHANGES.rst)
- [Commits](https://github.com/collective/icalendar/compare/v5.0.3...v5.0.4)

---
updated-dependencies:
- dependency-name: icalendar
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-01 00:04:32 +00:00
dependabot[bot]
5e4d983b79 Bump django-allauth from 0.51.0 to 0.52.0
Bumps [django-allauth](https://github.com/pennersr/django-allauth) from 0.51.0 to 0.52.0.
- [Release notes](https://github.com/pennersr/django-allauth/releases)
- [Changelog](https://github.com/pennersr/django-allauth/blob/master/ChangeLog.rst)
- [Commits](https://github.com/pennersr/django-allauth/compare/0.51.0...0.52.0)

---
updated-dependencies:
- dependency-name: django-allauth
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-01 00:04:28 +00:00
dependabot[bot]
0de8065212 Bump lxml from 4.9.1 to 4.9.2
Bumps [lxml](https://github.com/lxml/lxml) from 4.9.1 to 4.9.2.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.9.1...lxml-4.9.2)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-01 00:04:22 +00:00
vabene1111
1a6e677c06 allow filter in add to shopping modal 2022-12-31 17:35:16 +01:00
vabene1111
8307828528 added ingredient auto sort feature 2022-12-31 16:19:13 +01:00
vabene1111
12a1f261db Merge branch 'develop' of http://translate.tandoor.dev/git/tandoor/recipes-backend into develop
# Conflicts:
#	vue/src/locales/ru.json
2022-12-31 13:36:34 +01:00
vabene1111
79e400ce6f updated 2022-12-19 16:49:26 +01:00
vabene1111
d51de1bd79 updated ci 2022-12-19 16:28:40 +01:00
vabene1111
6b3f1aa038 Merge pull request #2205 from fliiiix/doc/fix-typo
fix install guide link and typo
2022-12-19 16:23:09 +01:00
vabene1111
7d7803a07e Merge pull request #2215 from jwalker343/develop
Allow PWA Manifest to work behind CF Access / certain proxy configs
2022-12-19 16:09:01 +01:00
vabene1111
559c574fd6 Merge pull request #2195 from TandoorRecipes/dependabot/npm_and_yarn/vue/typescript-4.9.3
Bump typescript from 4.8.4 to 4.9.3 in /vue
2022-12-19 16:07:47 +01:00
vabene1111
5e0131acd9 Merge pull request #2193 from TandoorRecipes/dependabot/pip/cryptography-38.0.4
Bump cryptography from 38.0.3 to 38.0.4
2022-12-19 16:07:21 +01:00
vabene1111
d560b7a143 Merge pull request #2197 from TandoorRecipes/dependabot/npm_and_yarn/vue/bootstrap-vue-2.23.1
Bump bootstrap-vue from 2.22.0 to 2.23.1 in /vue
2022-12-19 16:07:04 +01:00
vabene1111
15e5366dbb Merge pull request #2199 from TandoorRecipes/dependabot/npm_and_yarn/vue/webpack-bundle-tracker-1.7.0
Bump webpack-bundle-tracker from 1.6.0 to 1.7.0 in /vue
2022-12-19 16:06:45 +01:00
vabene1111
6ccfdd6f2e Merge pull request #2216 from TandoorRecipes/dependabot/pip/django-webpack-loader-1.8.0
Bump django-webpack-loader from 1.6.0 to 1.8.0
2022-12-19 16:06:39 +01:00
dependabot[bot]
d2b79990cb Bump bootstrap-vue from 2.22.0 to 2.23.1 in /vue
Bumps [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) from 2.22.0 to 2.23.1.
- [Release notes](https://github.com/bootstrap-vue/bootstrap-vue/releases)
- [Changelog](https://github.com/bootstrap-vue/bootstrap-vue/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/bootstrap-vue/bootstrap-vue/compare/v2.22.0...v2.23.1)

---
updated-dependencies:
- dependency-name: bootstrap-vue
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-15 19:43:02 +00:00
vabene1111
01bb84e40b Merge pull request #2196 from TandoorRecipes/dependabot/npm_and_yarn/vue/axios-1.2.0
Bump axios from 1.1.3 to 1.2.0 in /vue
2022-12-15 20:42:11 +01:00
vabene1111
f66b422f68 Merge pull request #2198 from TandoorRecipes/dependabot/npm_and_yarn/vue/core-js-3.26.1
Bump core-js from 3.26.0 to 3.26.1 in /vue
2022-12-15 20:42:02 +01:00
dependabot[bot]
abab970f08 Bump django-webpack-loader from 1.6.0 to 1.8.0
Bumps [django-webpack-loader](https://github.com/django-webpack/django-webpack-loader) from 1.6.0 to 1.8.0.
- [Release notes](https://github.com/django-webpack/django-webpack-loader/releases)
- [Changelog](https://github.com/django-webpack/django-webpack-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/django-webpack/django-webpack-loader/compare/1.6.0...1.8.0)

---
updated-dependencies:
- dependency-name: django-webpack-loader
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-15 19:41:59 +00:00
vabene1111
edaa6de71d Merge pull request #2194 from TandoorRecipes/dependabot/pip/recipe-scrapers-14.24.0
Bump recipe-scrapers from 14.23.0 to 14.24.0
2022-12-15 20:41:29 +01:00
vabene1111
85a65127cf Merge pull request #2192 from TandoorRecipes/dependabot/pip/icalendar-5.0.3
Bump icalendar from 5.0.1 to 5.0.3
2022-12-15 20:41:24 +01:00
vabene1111
99035190f4 Merge pull request #2191 from TandoorRecipes/dependabot/pip/pytest-7.2.0
Bump pytest from 7.1.3 to 7.2.0
2022-12-15 20:41:18 +01:00
Johnny Walker
f1611fbafd set manifest link to use-credentials ensuring that cookies are passed with that request 2022-12-14 21:36:19 -05:00
fliiiix
e42ff2fb8b fix install guide link and typo 2022-12-10 09:20:34 +01:00
vabene1111
bc93071167 Merge pull request #2204 from TandoorRecipes/dependabot/npm_and_yarn/vue/decode-uri-component-0.2.2
Bump decode-uri-component from 0.2.0 to 0.2.2 in /vue
2022-12-09 16:53:31 +01:00
dependabot[bot]
410fa58d47 Bump decode-uri-component from 0.2.0 to 0.2.2 in /vue
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-08 20:50:23 +00:00
dependabot[bot]
06fd03fbde Bump webpack-bundle-tracker from 1.6.0 to 1.7.0 in /vue
Bumps [webpack-bundle-tracker](https://github.com/django-webpack/webpack-bundle-tracker) from 1.6.0 to 1.7.0.
- [Release notes](https://github.com/django-webpack/webpack-bundle-tracker/releases)
- [Commits](https://github.com/django-webpack/webpack-bundle-tracker/compare/1.6.0...1.7.0)

---
updated-dependencies:
- dependency-name: webpack-bundle-tracker
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-01 00:08:43 +00:00
dependabot[bot]
d169456c78 Bump core-js from 3.26.0 to 3.26.1 in /vue
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.26.0 to 3.26.1.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.26.1/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-01 00:08:18 +00:00
dependabot[bot]
7785aa4904 Bump axios from 1.1.3 to 1.2.0 in /vue
Bumps [axios](https://github.com/axios/axios) from 1.1.3 to 1.2.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.1.3...v1.2.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-01 00:06:01 +00:00
dependabot[bot]
33798fe47e Bump typescript from 4.8.4 to 4.9.3 in /vue
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.8.4 to 4.9.3.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.8.4...v4.9.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-01 00:04:33 +00:00
dependabot[bot]
0522b15cfd Bump recipe-scrapers from 14.23.0 to 14.24.0
Bumps [recipe-scrapers](https://github.com/hhursev/recipe-scrapers) from 14.23.0 to 14.24.0.
- [Release notes](https://github.com/hhursev/recipe-scrapers/releases)
- [Commits](https://github.com/hhursev/recipe-scrapers/compare/14.23.0...14.24.0)

---
updated-dependencies:
- dependency-name: recipe-scrapers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-01 00:01:58 +00:00
dependabot[bot]
8cfd3995d0 Bump cryptography from 38.0.3 to 38.0.4
Bumps [cryptography](https://github.com/pyca/cryptography) from 38.0.3 to 38.0.4.
- [Release notes](https://github.com/pyca/cryptography/releases)
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/38.0.3...38.0.4)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-01 00:01:48 +00:00
dependabot[bot]
84cdd8bb78 Bump icalendar from 5.0.1 to 5.0.3
Bumps [icalendar](https://github.com/collective/icalendar) from 5.0.1 to 5.0.3.
- [Release notes](https://github.com/collective/icalendar/releases)
- [Changelog](https://github.com/collective/icalendar/blob/master/CHANGES.rst)
- [Commits](https://github.com/collective/icalendar/compare/v5.0.1...v5.0.3)

---
updated-dependencies:
- dependency-name: icalendar
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-01 00:01:39 +00:00
dependabot[bot]
ad0177235d Bump pytest from 7.1.3 to 7.2.0
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.1.3 to 7.2.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.1.3...7.2.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-01 00:01:31 +00:00
Alex
e5782151a1 Translated using Weblate (Russian)
Currently translated at 9.0% (45 of 496 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ru/
2022-11-30 19:09:40 +00:00
Alex
adf4dafd01 Translated using Weblate (Russian)
Currently translated at 74.3% (342 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ru/
2022-11-30 19:09:40 +00:00
vabene1111
4214ef4a9f update oauth toolkit 2022-11-24 22:36:22 +01:00
vabene1111
1df0ad202f fixed urlize markdown 3.4 compatibility 2022-11-24 22:29:29 +01:00
vabene1111
e35cbba8b2 Merge pull request #2179 from bee395/feature/unpin-pins
Unpin pin from recipe page.
2022-11-22 20:21:44 +01:00
vabene1111
e6fa660c8f Merge branch 'develop' into feature/unpin-pins 2022-11-22 20:21:36 +01:00
Jasper Hartog
8aefdb71bb Add missing translation key for Split_All_Steps and Combine_All_Steps. 2022-11-22 19:11:42 +01:00
Jasper Hartog
5da8c6fe7b Unpin pin from recipe page. 2022-11-22 19:06:10 +01:00
vabene1111
520697e988 Merge pull request #2182 from TandoorRecipes/dependabot/npm_and_yarn/vue/babel-loader-9.1.0
Bump babel-loader from 9.0.1 to 9.1.0 in /vue
2022-11-22 08:44:35 +01:00
dependabot[bot]
7fe6fd3462 Bump babel-loader from 9.0.1 to 9.1.0 in /vue
Bumps [babel-loader](https://github.com/babel/babel-loader) from 9.0.1 to 9.1.0.
- [Release notes](https://github.com/babel/babel-loader/releases)
- [Changelog](https://github.com/babel/babel-loader/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel-loader/compare/v9.0.1...v9.1.0)

---
updated-dependencies:
- dependency-name: babel-loader
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-22 07:41:21 +00:00
vabene1111
85b3941539 Merge pull request #2173 from TandoorRecipes/dependabot/npm_and_yarn/vue/loader-utils-1.4.2
Bump loader-utils from 1.4.1 to 1.4.2 in /vue
2022-11-22 08:38:30 +01:00
vabene1111
6f5ea7bb48 Merge pull request #2164 from TandoorRecipes/dependabot/pip/django-4.1.3
Bump django from 4.0.8 to 4.1.3
2022-11-22 08:38:26 +01:00
vabene1111
e9a2b101d8 Merge pull request #2153 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue-i18n-8.28.2
Bump vue-i18n from 8.27.2 to 8.28.2 in /vue
2022-11-22 08:38:21 +01:00
vabene1111
c01faff135 Merge pull request #2152 from TandoorRecipes/dependabot/npm_and_yarn/vue/core-js-3.26.0
Bump core-js from 3.25.3 to 3.26.0 in /vue
2022-11-22 08:38:05 +01:00
vabene1111
bcee0007a5 Merge pull request #2151 from TandoorRecipes/dependabot/npm_and_yarn/vue/babel-loader-9.0.1
Bump babel-loader from 8.2.5 to 9.0.1 in /vue
2022-11-22 08:38:00 +01:00
vabene1111
f5ec956e08 Merge pull request #2149 from TandoorRecipes/dependabot/npm_and_yarn/vue/axios-1.1.3
Bump axios from 0.27.2 to 1.1.3 in /vue
2022-11-22 08:37:54 +01:00
vabene1111
56926d55ba Merge pull request #2148 from TandoorRecipes/dependabot/pip/icalendar-5.0.1
Bump icalendar from 4.1.0 to 5.0.1
2022-11-22 08:37:48 +01:00
vabene1111
55cfe9e9e7 Merge pull request #2146 from TandoorRecipes/dependabot/pip/markdown-3.4.1
Bump markdown from 3.3.7 to 3.4.1
2022-11-22 08:37:43 +01:00
vabene1111
31bdd97a56 Merge pull request #2145 from TandoorRecipes/dependabot/pip/django-debug-toolbar-3.7.0
Bump django-debug-toolbar from 3.6.0 to 3.7.0
2022-11-22 08:37:34 +01:00
vabene1111
eb60cbdd6b Merge pull request #2144 from TandoorRecipes/dependabot/pip/psycopg2-binary-2.9.5
Bump psycopg2-binary from 2.9.3 to 2.9.5
2022-11-22 08:37:28 +01:00
vabene1111
39ccf7bbcf added plural migration and pass param trough in recipe view 2022-11-22 07:58:12 +01:00
vabene1111
f92ee32c01 Merge pull request #1860 from Knalltuete5000/feature/simple_plural
Add optional plural name for unit and food
2022-11-22 07:34:23 +01:00
Alex
5aecf7e61c Translated using Weblate (German)
Currently translated at 100.0% (524 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2022-11-21 19:09:37 +00:00
dependabot[bot]
20435450f3 Bump loader-utils from 1.4.1 to 1.4.2 in /vue
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.2/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.1...v1.4.2)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-16 06:54:03 +00:00
dependabot[bot]
13e5fb4143 Bump psycopg2-binary from 2.9.3 to 2.9.5
Bumps [psycopg2-binary](https://github.com/psycopg/psycopg2) from 2.9.3 to 2.9.5.
- [Release notes](https://github.com/psycopg/psycopg2/releases)
- [Changelog](https://github.com/psycopg/psycopg2/blob/master/NEWS)
- [Commits](https://github.com/psycopg/psycopg2/commits)

---
updated-dependencies:
- dependency-name: psycopg2-binary
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-16 06:54:01 +00:00
dependabot[bot]
bdc6434839 Bump markdown from 3.3.7 to 3.4.1
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.3.7 to 3.4.1.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.3.7...3.4.1)

---
updated-dependencies:
- dependency-name: markdown
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-16 06:54:00 +00:00
vabene1111
796609de37 Merge pull request #2172 from TandoorRecipes/dependabot/pip/pillow-9.3.0
Bump pillow from 9.2.0 to 9.3.0
2022-11-16 07:53:15 +01:00
dependabot[bot]
8759e8dd73 Bump pillow from 9.2.0 to 9.3.0
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.2.0 to 9.3.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.2.0...9.3.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-15 13:49:56 +00:00
vabene1111
f8bf54189e Merge pull request #2167 from TandoorRecipes/revert-2128-develop
Revert "Fixed: ports are on the wrong service"
2022-11-13 13:24:25 +01:00
vabene1111
3e2988f998 Revert "Fixed: ports are on the wrong service" 2022-11-13 13:24:13 +01:00
Niklas Schwarz
2e5571f0a9 Fix naming of exported SpaceManageView 2022-11-11 18:15:57 +01:00
Niklas Schwarz
c97bb900a3 Add documentation page for the space settings 2022-11-11 18:15:57 +01:00
Niklas Schwarz
b1ad5ef205 Add option to space to enable plural name usage
* Add option to space to enable usage of plural name
  for food and unit per space

* Respect option per space to use the plural name
2022-11-11 18:15:57 +01:00
Niklas Schwarz
9994b6f9c2 Add plural name for unit and food
Add an optional plural name for unit and food.
Additional options to show always the plural name for unit and food
for an ingredient is added.
2022-11-11 18:15:57 +01:00
vabene1111
a8a590a942 Update SECURITY.md 2022-11-10 12:46:29 +01:00
vabene1111
4e13fb3b8c Merge branch 'develop' 2022-11-09 14:30:02 +01:00
vabene1111
24f331c208 improved ingredient parser handling of amount unit without space 2022-11-09 14:24:12 +01:00
vabene1111
16d0fc38f9 improved paste ingredient function to retain order and add to correct step 2022-11-09 14:01:03 +01:00
vabene1111
5e4cac52d6 fixed recipe image size with nutrition information 2022-11-09 13:23:43 +01:00
vabene1111
b489a2d849 Merge pull request #2101 from Mikhail5555/patch-2
Allow 1/16th to be a fraction (small salt amounts)
2022-11-09 12:53:13 +01:00
vabene1111
7c5707e0c0 Merge pull request #2128 from rdangdev/develop
Fixed: ports are on the wrong service
2022-11-09 12:52:40 +01:00
vabene1111
946699a335 Merge pull request #2154 from mh166/feature-enable-search-plugin
Enable search plugin for docs
2022-11-09 12:52:14 +01:00
dependabot[bot]
4888e2d476 Bump django from 4.0.8 to 4.1.3
Bumps [django](https://github.com/django/django) from 4.0.8 to 4.1.3.
- [Release notes](https://github.com/django/django/releases)
- [Commits](https://github.com/django/django/compare/4.0.8...4.1.3)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-09 11:50:09 +00:00
vabene1111
44b2c02034 updated cryptography 2022-11-09 12:49:23 +01:00
vabene1111
c150c7f84e fixed recipekeeper integration 2022-11-09 12:48:34 +01:00
vabene1111
97503a68d8 Merge pull request #2163 from TandoorRecipes/dependabot/npm_and_yarn/vue/loader-utils-1.4.1
Bump loader-utils from 1.4.0 to 1.4.1 in /vue
2022-11-09 12:17:21 +01:00
dependabot[bot]
126a2d870e Bump loader-utils from 1.4.0 to 1.4.1 in /vue
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.1/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: loader-utils
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-09 03:45:14 +00:00
Gorkem
02bad8cfb9 Translated using Weblate (Turkish)
Currently translated at 27.1% (125 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/tr/
2022-11-06 22:09:31 +00:00
Gorkem
d9465c7f9d Translated using Weblate (Turkish)
Currently translated at 2.2% (12 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/tr/
2022-11-06 22:09:31 +00:00
Gorkem
ead3168d80 Added translation using Weblate (Turkish) 2022-11-05 21:09:24 +00:00
mh166
a71bba307e Enable search plugin for docs
I think mkdocs-material's search function would be a great addition to make the documentation even more accessible. At least I was looking for some info just moments ago and would've liked a search bar.

From my own projects, I remembered that mkdocs-material does come with the search search plugin enabled by default. But it must be re-added to mkdocs.yml when other plugins are used. So I did. Hope this helps. :)
2022-11-01 11:44:56 +01:00
dependabot[bot]
d2a652891c Bump vue-i18n from 8.27.2 to 8.28.2 in /vue
Bumps [vue-i18n](https://github.com/intlify/vue-i18n-next/tree/HEAD/packages/vue-i18n) from 8.27.2 to 8.28.2.
- [Release notes](https://github.com/intlify/vue-i18n-next/releases)
- [Changelog](https://github.com/intlify/vue-i18n-next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/intlify/vue-i18n-next/commits/HEAD/packages/vue-i18n)

---
updated-dependencies:
- dependency-name: vue-i18n
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 00:20:16 +00:00
dependabot[bot]
a70ac42717 Bump core-js from 3.25.3 to 3.26.0 in /vue
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.25.3 to 3.26.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.26.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 00:20:00 +00:00
dependabot[bot]
a7bcf105dc Bump babel-loader from 8.2.5 to 9.0.1 in /vue
Bumps [babel-loader](https://github.com/babel/babel-loader) from 8.2.5 to 9.0.1.
- [Release notes](https://github.com/babel/babel-loader/releases)
- [Changelog](https://github.com/babel/babel-loader/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel-loader/compare/v8.2.5...v9.0.1)

---
updated-dependencies:
- dependency-name: babel-loader
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 00:19:20 +00:00
dependabot[bot]
8be02b4e74 Bump axios from 0.27.2 to 1.1.3 in /vue
Bumps [axios](https://github.com/axios/axios) from 0.27.2 to 1.1.3.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.27.2...v1.1.3)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 00:17:07 +00:00
dependabot[bot]
9ba9cda1c0 Bump icalendar from 4.1.0 to 5.0.1
Bumps [icalendar](https://github.com/collective/icalendar) from 4.1.0 to 5.0.1.
- [Release notes](https://github.com/collective/icalendar/releases)
- [Changelog](https://github.com/collective/icalendar/blob/master/CHANGES.rst)
- [Commits](https://github.com/collective/icalendar/compare/4.1.0...v5.0.1)

---
updated-dependencies:
- dependency-name: icalendar
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 00:09:27 +00:00
dependabot[bot]
4310282dc3 Bump django-debug-toolbar from 3.6.0 to 3.7.0
Bumps [django-debug-toolbar](https://github.com/jazzband/django-debug-toolbar) from 3.6.0 to 3.7.0.
- [Release notes](https://github.com/jazzband/django-debug-toolbar/releases)
- [Changelog](https://github.com/jazzband/django-debug-toolbar/blob/main/docs/changes.rst)
- [Commits](https://github.com/jazzband/django-debug-toolbar/compare/3.6...3.7)

---
updated-dependencies:
- dependency-name: django-debug-toolbar
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 00:09:07 +00:00
vabene1111
c2c08391cc fixed sharing pref saving 2022-10-31 19:51:06 +01:00
vabene1111
bc9d077b9d added used md spec to docs 2022-10-31 19:51:06 +01:00
vabene1111
fe0f739bd5 Merge pull request #2020 from ignis-draco/docuUpdate
Update Doku for manual Installation
2022-10-31 19:49:30 +01:00
vabene1111
e5b11a34f6 Update manual.md 2022-10-31 19:49:24 +01:00
vabene1111
1df7a4df91 Merge pull request #2121 from raj3000k/develop
Improved Overall Docs.
2022-10-31 19:47:29 +01:00
vabene1111
d401c143ec added faq for makrdown preview 2022-10-31 14:58:50 +01:00
vabene1111
00a59baa92 Merge pull request #2140 from TiagoRascazzi/develop
Added nextcloud export implementation
2022-10-31 14:34:16 +01:00
vabene1111
327c83ce32 improved share link tests 2022-10-31 14:30:39 +01:00
vabene1111
3371102e64 improved and added tests for share link creation 2022-10-31 14:24:41 +01:00
vabene1111
aec396e214 Merge pull request #2106 from swnf/fix-share-permissions
Fix share permission check
2022-10-31 14:16:01 +01:00
vabene1111
2b52b5c264 Merge pull request #2142 from TandoorRecipes/dependabot/pip/django-4.0.8
Bump django from 4.0.7 to 4.0.8
2022-10-31 09:03:24 +01:00
dependabot[bot]
19c24a85a1 Bump django from 4.0.7 to 4.0.8
Bumps [django](https://github.com/django/django) from 4.0.7 to 4.0.8.
- [Release notes](https://github.com/django/django/releases)
- [Commits](https://github.com/django/django/compare/4.0.7...4.0.8)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-31 08:02:46 +00:00
vabene1111
c147903f1e updated recipe scrapers and compiled translations 2022-10-31 09:02:14 +01:00
Tiago Rascazzi
9dedc5b8fa Added nextcloud export implementation 2022-10-29 14:08:12 -04:00
Tomasz Klimczak
d781cbe743 Translated using Weblate (Polish)
Currently translated at 100.0% (460 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2022-10-22 20:33:14 +00:00
rdang
37bd2017b0 ports are on the wrong service
the actual webserver is running on port 8080 and on the web_recipes service, as per all the documentation. 80 will not work, at least on the latest patch.
2022-10-21 19:13:18 +11:00
Oliver Cervera
2de8070156 Translated using Weblate (Italian)
Currently translated at 75.2% (346 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2022-10-19 22:33:13 +00:00
Sokratis Potamias
f70377c59b Translated using Weblate (Greek)
Currently translated at 0.5% (3 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/el/
2022-10-17 11:33:12 +00:00
Sokratis Potamias
6fc4151de5 Added translation using Weblate (Greek) 2022-10-16 11:01:56 +00:00
Shaxine
1fa001aad3 Translated using Weblate (Portuguese)
Currently translated at 28.4% (149 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/pt/
2022-10-14 17:19:28 +00:00
Raj Motwani
b84e03c58b Merge branch 'TandoorRecipes:develop' into develop 2022-10-14 22:26:12 +05:30
wella
e9dac25ff4 Translated using Weblate (Indonesian)
Currently translated at 11.4% (60 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/id/
2022-10-12 08:33:09 +00:00
Oliver Cervera
611787dbb6 Translated using Weblate (Italian)
Currently translated at 75.2% (346 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2022-10-10 17:33:11 +00:00
Oliver Cervera
bfbfb1d2a8 Translated using Weblate (Italian)
Currently translated at 83.3% (437 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2022-10-10 17:33:11 +00:00
Raj Motwani
d9662f7fa5 Update import_export.md
Fixed some typos and spellings.
2022-10-08 13:47:02 +05:30
Raj Motwani
9e44944b1d Update SECURITY.md 2022-10-08 13:38:52 +05:30
swnf
4de9a7ff89 Fix share permission check 2022-10-06 17:44:33 +02:00
vabene1111
32a663c5d7 Merge pull request #2104 from chiaramistro/feature/login-btn-reset-password
Remove yellow button to unify GUI of reset password in mobile/web viewports #2102
2022-10-05 16:42:42 +02:00
Chiara
3bee5ed35a Remove yellow button to unify GUI of reset password in mobile/web viewports #2102 2022-10-05 12:25:29 +02:00
Mikhail Epifanov
bee5d6b7eb Allow 1/16th to be a fraction (small salt amounts) 2022-10-03 12:37:09 +02:00
wella
00ed9b07b6 Translated using Weblate (Indonesian)
Currently translated at 8.3% (44 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/id/
2022-10-02 17:33:10 +00:00
wella
2279bba838 Translated using Weblate (Indonesian)
Currently translated at 31.5% (145 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/id/
2022-10-02 17:33:10 +00:00
Andrea
57f5343c77 Translated using Weblate (Spanish)
Currently translated at 75.2% (346 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2022-10-02 17:33:10 +00:00
vabene1111
da8262a9b5 Merge pull request #2088 from TandoorRecipes/dependabot/npm_and_yarn/vue/workbox-webpack-plugin-6.5.4
Bump workbox-webpack-plugin from 6.5.3 to 6.5.4 in /vue
2022-10-02 12:28:29 +02:00
vabene1111
f0cf4a23e4 Merge pull request #2095 from TandoorRecipes/feature/ingredient-actions
Feature/ingredient actions
2022-10-01 19:28:23 +02:00
vabene1111
489c81c378 Merge pull request #2094 from TandoorRecipes/feature/step-time-format
format step time
2022-10-01 19:28:13 +02:00
vabene1111
730344e326 duplicate ingredient to correct location 2022-10-01 19:27:09 +02:00
vabene1111
7e6b1d3638 added move and copy buttons to ingredient 2022-10-01 19:25:18 +02:00
vabene1111
15f65cd711 format step time 2022-10-01 19:10:58 +02:00
vabene1111
dba205dafb Merge pull request #2092 from wellart/develop
add indonesian language
2022-10-01 19:04:29 +02:00
KangAlleW
5ae149a1b6 add indonesian language 2022-10-01 23:55:37 +07:00
dependabot[bot]
4bb2307007 Bump workbox-webpack-plugin from 6.5.3 to 6.5.4 in /vue
Bumps [workbox-webpack-plugin](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/googlechrome/workbox/releases)
- [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4)

---
updated-dependencies:
- dependency-name: workbox-webpack-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 16:45:04 +00:00
vabene1111
be0088aec6 Merge pull request #2091 from TandoorRecipes/feature/fix-nc-import-nutrition
fixed nc importer nutritions
2022-10-01 18:42:16 +02:00
vabene1111
c56710ae0c fixed nc importer nutritions 2022-10-01 18:42:03 +02:00
vabene1111
1a420bc002 Merge pull request #2090 from TandoorRecipes/feature/fix-dependencies
fixed vue template compiler version and removed debug print from perm…
2022-10-01 18:41:21 +02:00
wella
545e4f7af4 Translated using Weblate (Indonesian)
Currently translated at 5.3% (28 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/id/
2022-10-01 16:38:41 +00:00
wella
d2a148ae7d Translated using Weblate (Indonesian)
Currently translated at 22.8% (105 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/id/
2022-10-01 16:32:26 +00:00
wella
580591a69e Added translation using Weblate (Indonesian) 2022-10-01 16:32:26 +00:00
vabene1111
409b438776 fixed vue template compiler version and removed debug print from permission helper 2022-10-01 18:18:00 +02:00
vabene1111
549175b56d Merge pull request #2086 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue/cli-service-5.0.8
Bump @vue/cli-service from 5.0.4 to 5.0.8 in /vue
2022-10-01 18:09:21 +02:00
vabene1111
0e3f5006b1 Merge pull request #2087 from TandoorRecipes/dependabot/npm_and_yarn/vue/workbox-expiration-6.5.4
Bump workbox-expiration from 6.5.3 to 6.5.4 in /vue
2022-10-01 18:09:14 +02:00
vabene1111
54043a0ae5 Merge pull request #2089 from TandoorRecipes/dependabot/npm_and_yarn/vue/typescript-4.8.4
Bump typescript from 4.8.2 to 4.8.4 in /vue
2022-10-01 18:09:06 +02:00
dependabot[bot]
36fdc8cd9e Bump typescript from 4.8.2 to 4.8.4 in /vue
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.8.2 to 4.8.4.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.8.2...v4.8.4)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 16:04:36 +00:00
dependabot[bot]
87cf3b2289 Bump workbox-expiration from 6.5.3 to 6.5.4 in /vue
Bumps [workbox-expiration](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/googlechrome/workbox/releases)
- [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4)

---
updated-dependencies:
- dependency-name: workbox-expiration
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 16:03:36 +00:00
dependabot[bot]
adb4071fdb Bump @vue/cli-service from 5.0.4 to 5.0.8 in /vue
Bumps [@vue/cli-service](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-service) from 5.0.4 to 5.0.8.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v5.0.8/packages/@vue/cli-service)

---
updated-dependencies:
- dependency-name: "@vue/cli-service"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 16:03:22 +00:00
vabene1111
2a20f5e6e2 Merge pull request #2082 from TandoorRecipes/dependabot/npm_and_yarn/vue/prismjs-1.29.0
Bump prismjs from 1.28.0 to 1.29.0 in /vue
2022-10-01 17:59:43 +02:00
vabene1111
00f7ae3d66 Merge pull request #2084 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue/cli-plugin-babel-5.0.8
Bump @vue/cli-plugin-babel from 5.0.4 to 5.0.8 in /vue
2022-10-01 17:59:36 +02:00
vabene1111
f1f4e7ca8e Merge pull request #2085 from TandoorRecipes/dependabot/npm_and_yarn/vue/workbox-precaching-6.5.4
Bump workbox-precaching from 6.5.3 to 6.5.4 in /vue
2022-10-01 17:59:32 +02:00
wella
6d7b3b8bfa Translated using Weblate (Indonesian)
Currently translated at 5.0% (23 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/id/
2022-10-01 15:56:03 +00:00
wella
7ebccf564d Added translation using Weblate (Indonesian) 2022-10-01 15:44:15 +00:00
dependabot[bot]
0421a1aa6c Bump prismjs from 1.28.0 to 1.29.0 in /vue
Bumps [prismjs](https://github.com/PrismJS/prism) from 1.28.0 to 1.29.0.
- [Release notes](https://github.com/PrismJS/prism/releases)
- [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PrismJS/prism/compare/v1.28.0...v1.29.0)

---
updated-dependencies:
- dependency-name: prismjs
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 15:09:02 +00:00
dependabot[bot]
c118ab9a3c Bump workbox-precaching from 6.5.3 to 6.5.4 in /vue
Bumps [workbox-precaching](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/googlechrome/workbox/releases)
- [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4)

---
updated-dependencies:
- dependency-name: workbox-precaching
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 15:09:01 +00:00
dependabot[bot]
02a12cf724 Bump @vue/cli-plugin-babel from 5.0.4 to 5.0.8 in /vue
Bumps [@vue/cli-plugin-babel](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-babel) from 5.0.4 to 5.0.8.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v5.0.8/packages/@vue/cli-plugin-babel)

---
updated-dependencies:
- dependency-name: "@vue/cli-plugin-babel"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 15:08:51 +00:00
vabene1111
f28ca41b7b Merge pull request #2080 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue-i18n-8.27.2
Bump vue-i18n from 8.27.1 to 8.27.2 in /vue
2022-10-01 17:05:50 +02:00
vabene1111
6e677cf3cd Merge pull request #1972 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue/cli-plugin-typescript-5.0.8
Bump @vue/cli-plugin-typescript from 5.0.4 to 5.0.8 in /vue
2022-10-01 15:58:53 +02:00
vabene1111
d30a23f7ef Merge pull request #2079 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue/cli-plugin-eslint-5.0.8
Bump @vue/cli-plugin-eslint from 5.0.4 to 5.0.8 in /vue
2022-10-01 15:58:49 +02:00
vabene1111
88fea6f25d Merge pull request #2081 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue/compiler-sfc-3.2.40
Bump @vue/compiler-sfc from 3.2.36 to 3.2.40 in /vue
2022-10-01 15:58:42 +02:00
dependabot[bot]
fc0b5bd738 Bump @vue/cli-plugin-eslint from 5.0.4 to 5.0.8 in /vue
Bumps [@vue/cli-plugin-eslint](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-eslint) from 5.0.4 to 5.0.8.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v5.0.8/packages/@vue/cli-plugin-eslint)

---
updated-dependencies:
- dependency-name: "@vue/cli-plugin-eslint"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:44:05 +00:00
dependabot[bot]
5174f9939c Bump @vue/cli-plugin-typescript from 5.0.4 to 5.0.8 in /vue
Bumps [@vue/cli-plugin-typescript](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-typescript) from 5.0.4 to 5.0.8.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v5.0.8/packages/@vue/cli-plugin-typescript)

---
updated-dependencies:
- dependency-name: "@vue/cli-plugin-typescript"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:43:38 +00:00
dependabot[bot]
8f9a489c7e Bump @vue/compiler-sfc from 3.2.36 to 3.2.40 in /vue
Bumps [@vue/compiler-sfc](https://github.com/vuejs/core/tree/HEAD/packages/compiler-sfc) from 3.2.36 to 3.2.40.
- [Release notes](https://github.com/vuejs/core/releases)
- [Changelog](https://github.com/vuejs/core/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/core/commits/v3.2.40/packages/compiler-sfc)

---
updated-dependencies:
- dependency-name: "@vue/compiler-sfc"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:41:31 +00:00
dependabot[bot]
fc72efac04 Bump vue-i18n from 8.27.1 to 8.27.2 in /vue
Bumps [vue-i18n](https://github.com/intlify/vue-i18n-next/tree/HEAD/packages/vue-i18n) from 8.27.1 to 8.27.2.
- [Release notes](https://github.com/intlify/vue-i18n-next/releases)
- [Changelog](https://github.com/intlify/vue-i18n-next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/intlify/vue-i18n-next/commits/HEAD/packages/vue-i18n)

---
updated-dependencies:
- dependency-name: vue-i18n
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:41:18 +00:00
vabene1111
72f57cf671 Merge pull request #2078 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue-template-compiler-2.7.10
Bump vue-template-compiler from 2.6.14 to 2.7.10 in /vue
2022-10-01 10:41:05 +02:00
vabene1111
85b95d1e96 Merge pull request #2076 from TandoorRecipes/dependabot/npm_and_yarn/vue/core-js-3.25.3
Bump core-js from 3.25.0 to 3.25.3 in /vue
2022-10-01 10:40:55 +02:00
vabene1111
35dee43f0b Merge pull request #2077 from TandoorRecipes/dependabot/npm_and_yarn/vue/popperjs/core-2.11.6
Bump @popperjs/core from 2.11.5 to 2.11.6 in /vue
2022-10-01 10:40:46 +02:00
dependabot[bot]
fb683bf230 Bump vue-template-compiler from 2.6.14 to 2.7.10 in /vue
Bumps [vue-template-compiler](https://github.com/vuejs/vue) from 2.6.14 to 2.7.10.
- [Release notes](https://github.com/vuejs/vue/releases)
- [Changelog](https://github.com/vuejs/vue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue/compare/v2.6.14...v2.7.10)

---
updated-dependencies:
- dependency-name: vue-template-compiler
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:40:45 +00:00
dependabot[bot]
a852f581ba Bump @popperjs/core from 2.11.5 to 2.11.6 in /vue
Bumps [@popperjs/core](https://github.com/popperjs/popper-core) from 2.11.5 to 2.11.6.
- [Release notes](https://github.com/popperjs/popper-core/releases)
- [Commits](https://github.com/popperjs/popper-core/compare/v2.11.5...v2.11.6)

---
updated-dependencies:
- dependency-name: "@popperjs/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:40:32 +00:00
dependabot[bot]
cc417f1499 Bump core-js from 3.25.0 to 3.25.3 in /vue
Bumps [core-js](https://github.com/zloirock/core-js) from 3.25.0 to 3.25.3.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/compare/v3.25.0...v3.25.3)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:40:08 +00:00
vabene1111
7f9da4c4fb Merge pull request #2074 from TandoorRecipes/dependabot/npm_and_yarn/vue/babel/eslint-parser-7.19.1
Bump @babel/eslint-parser from 7.18.2 to 7.19.1 in /vue
2022-10-01 10:39:57 +02:00
dependabot[bot]
31d3f9abee Bump @babel/eslint-parser from 7.18.2 to 7.19.1 in /vue
Bumps [@babel/eslint-parser](https://github.com/babel/babel/tree/HEAD/eslint/babel-eslint-parser) from 7.18.2 to 7.19.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.19.1/eslint/babel-eslint-parser)

---
updated-dependencies:
- dependency-name: "@babel/eslint-parser"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:39:30 +00:00
vabene1111
f9670e9833 Merge pull request #2073 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue/cli-5.0.8
Bump @vue/cli from 5.0.4 to 5.0.8 in /vue
2022-10-01 10:39:16 +02:00
dependabot[bot]
465af8c1a4 Bump @vue/cli from 5.0.4 to 5.0.8 in /vue
Bumps [@vue/cli](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli) from 5.0.4 to 5.0.8.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v5.0.8/packages/@vue/cli)

---
updated-dependencies:
- dependency-name: "@vue/cli"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:39:06 +00:00
vabene1111
ffe743e233 Merge pull request #2070 from TandoorRecipes/dependabot/pip/python-ldap-3.4.3
Bump python-ldap from 3.4.2 to 3.4.3
2022-10-01 10:38:54 +02:00
vabene1111
6b09731a55 Merge pull request #2071 from TandoorRecipes/dependabot/pip/djangorestframework-3.14.0
Bump djangorestframework from 3.13.1 to 3.14.0
2022-10-01 10:38:46 +02:00
vabene1111
182a94e0c7 Merge pull request #1971 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue/cli-plugin-pwa-5.0.8
Bump @vue/cli-plugin-pwa from 5.0.4 to 5.0.8 in /vue
2022-10-01 10:38:33 +02:00
vabene1111
2adaedfd1a Merge pull request #2028 from TandoorRecipes/dependabot/npm_and_yarn/vue/workbox-navigation-preload-6.5.4
Bump workbox-navigation-preload from 6.5.3 to 6.5.4 in /vue
2022-10-01 10:38:19 +02:00
dependabot[bot]
5074326471 Bump python-ldap from 3.4.2 to 3.4.3
Bumps [python-ldap](https://github.com/python-ldap/python-ldap) from 3.4.2 to 3.4.3.
- [Release notes](https://github.com/python-ldap/python-ldap/releases)
- [Commits](https://github.com/python-ldap/python-ldap/compare/python-ldap-3.4.2...python-ldap-3.4.3)

---
updated-dependencies:
- dependency-name: python-ldap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:38:06 +00:00
dependabot[bot]
4807a16a0f Bump djangorestframework from 3.13.1 to 3.14.0
Bumps [djangorestframework](https://github.com/encode/django-rest-framework) from 3.13.1 to 3.14.0.
- [Release notes](https://github.com/encode/django-rest-framework/releases)
- [Commits](https://github.com/encode/django-rest-framework/compare/3.13.1...3.14.0)

---
updated-dependencies:
- dependency-name: djangorestframework
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:38:05 +00:00
vabene1111
af044f1002 Merge pull request #2072 from TandoorRecipes/dependabot/pip/recipe-scrapers-14.14.1
Bump recipe-scrapers from 14.14.0 to 14.14.1
2022-10-01 10:37:47 +02:00
dependabot[bot]
cdf77c8796 Bump recipe-scrapers from 14.14.0 to 14.14.1
Bumps [recipe-scrapers](https://github.com/hhursev/recipe-scrapers) from 14.14.0 to 14.14.1.
- [Release notes](https://github.com/hhursev/recipe-scrapers/releases)
- [Commits](https://github.com/hhursev/recipe-scrapers/compare/14.14.0...14.14.1)

---
updated-dependencies:
- dependency-name: recipe-scrapers
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:37:36 +00:00
vabene1111
e68bedf7eb Merge pull request #2037 from TandoorRecipes/dependabot/pip/django-storages-1.13.1
Bump django-storages from 1.12.3 to 1.13.1
2022-10-01 10:37:20 +02:00
vabene1111
5e21e7fa8e Merge pull request #1896 from TandoorRecipes/dependabot/npm_and_yarn/vue/webpack-bundle-tracker-1.6.0
Bump webpack-bundle-tracker from 1.5.0 to 1.6.0 in /vue
2022-10-01 10:37:07 +02:00
dependabot[bot]
f49b39b216 Bump django-storages from 1.12.3 to 1.13.1
Bumps [django-storages](https://github.com/jschneier/django-storages) from 1.12.3 to 1.13.1.
- [Release notes](https://github.com/jschneier/django-storages/releases)
- [Changelog](https://github.com/jschneier/django-storages/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/jschneier/django-storages/compare/1.12.3...1.13.1)

---
updated-dependencies:
- dependency-name: django-storages
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 08:37:02 +00:00
vabene1111
0d24292f52 Merge pull request #1890 from TandoorRecipes/dependabot/pip/django-webpack-loader-1.6.0
Bump django-webpack-loader from 1.5.0 to 1.6.0
2022-10-01 10:37:02 +02:00
vabene1111
f3b7016be8 Merge pull request #2027 from TandoorRecipes/dependabot/npm_and_yarn/vue/workbox-routing-6.5.4
Bump workbox-routing from 6.5.3 to 6.5.4 in /vue
2022-10-01 10:36:41 +02:00
vabene1111
0f77c831c9 Merge pull request #2026 from TandoorRecipes/dependabot/pip/cryptography-38.0.1
Bump cryptography from 37.0.2 to 38.0.1
2022-10-01 10:36:35 +02:00
vabene1111
be48e57453 Merge pull request #2068 from TandoorRecipes/dependabot/pip/pytest-7.1.3
Bump pytest from 7.1.2 to 7.1.3
2022-10-01 10:36:24 +02:00
vabene1111
3b45ca18af Merge pull request #2069 from TandoorRecipes/dependabot/pip/boto3-1.24.84
Bump boto3 from 1.24.21 to 1.24.84
2022-10-01 10:36:18 +02:00
dependabot[bot]
da1b22c148 Bump boto3 from 1.24.21 to 1.24.84
Bumps [boto3](https://github.com/boto/boto3) from 1.24.21 to 1.24.84.
- [Release notes](https://github.com/boto/boto3/releases)
- [Changelog](https://github.com/boto/boto3/blob/develop/CHANGELOG.rst)
- [Commits](https://github.com/boto/boto3/compare/1.24.21...1.24.84)

---
updated-dependencies:
- dependency-name: boto3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 00:03:55 +00:00
dependabot[bot]
9dab21f972 Bump pytest from 7.1.2 to 7.1.3
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.1.2 to 7.1.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.1.2...7.1.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 00:03:45 +00:00
vabene1111
89a5f92ace Merge branch 'develop' 2022-09-30 15:43:51 +02:00
vabene1111
7be705f6a1 fixed error in token generation endpoint 2022-09-30 15:42:07 +02:00
vabene1111
8e60566311 fixed recipekeeper import 2022-09-27 15:49:13 +02:00
vabene1111
33e5bb7d0a Merge branch 'develop' 2022-09-27 14:18:29 +02:00
vabene1111
0cf63cd715 Merge pull request #2065 from smarth42/patch-1
Update faq.md
2022-09-27 07:38:15 +02:00
Noé Feutry
5dc7bf5b0e Translated using Weblate (French)
Currently translated at 86.7% (399 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2022-09-26 16:33:07 +00:00
Noé Feutry
c4c66aa640 Translated using Weblate (French)
Currently translated at 84.7% (444 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/fr/
2022-09-26 16:33:06 +00:00
vabene1111
f64be72a98 compiled translations 2022-09-26 09:18:19 +02:00
vabene1111
a3ed2bdcac Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2022-09-26 07:58:57 +02:00
vabene1111
996b8bedac fixed fuzzy search postgres 2022-09-26 07:58:52 +02:00
smarth42
a05a785e22 Update faq.md
updated user invite location.
2022-09-25 21:04:10 -05:00
Oliver Cervera
b470602317 Translated using Weblate (Italian)
Currently translated at 75.0% (345 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2022-09-25 12:33:12 +00:00
Oliver Cervera
cf8ab02d0e Translated using Weblate (Italian)
Currently translated at 81.1% (425 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2022-09-25 12:33:12 +00:00
vabene1111
60043fff59 changed contributions guidelines, please ask/talk first about new features 2022-09-23 17:07:04 +02:00
vabene1111
16c0189b80 Merge branch 'develop' 2022-09-23 17:00:11 +02:00
vabene1111
36c30f9e11 fixed print from card when recipe is not open 2022-09-23 16:55:25 +02:00
vabene1111
12a8582a9a fixed importer and copy recipe 2022-09-23 16:43:22 +02:00
vabene1111
13b91e5b91 improved swiping behavior on shopping list 2022-09-23 16:27:16 +02:00
vabene1111
d02b253242 fixed search settings not working with sqlite DB 2022-09-23 16:16:44 +02:00
henrique roberto lino
16528c4c89 Translated using Weblate (Portuguese)
Currently translated at 10.4% (48 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt/
2022-09-23 02:33:11 +00:00
henrique roberto lino
6442e174b3 Translated using Weblate (Portuguese (Brazil))
Currently translated at 35.0% (161 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2022-09-23 02:33:11 +00:00
vabene1111
fd325c1797 Merge branch 'develop' 2022-09-21 20:17:08 +02:00
vabene1111
12491d1302 changed gunicorn default settings 2022-09-21 20:17:00 +02:00
vabene1111
b7a4613310 Merge pull request #2052 from Szeraax/patch-1
Update boot.sh
2022-09-21 20:16:25 +02:00
Szeraax
39f5fca89b Update boot.sh
Set default value to 1 if null or unset for gunicorn workers/threads.
2022-09-21 11:06:55 -06:00
vabene1111
2902262503 Merge branch 'develop' 2022-09-21 17:05:17 +02:00
vabene1111
b49393357a fixed tests 2022-09-21 16:54:41 +02:00
vabene1111
cc1a69eac0 fixed cache key uniqueness even in tests 2022-09-21 16:28:54 +02:00
vabene1111
13d498658c fixed DB setting 2022-09-19 07:34:26 +02:00
vabene1111
cad93b2dd1 equal button styling in editor 2022-09-19 07:32:51 +02:00
vabene1111
f0b8bac221 improved loading animation 2022-09-19 07:31:57 +02:00
vabene1111
13ef843edb fixed sort dropdown visibility 2022-09-19 07:28:20 +02:00
dependabot[bot]
ca9c96647e Bump cryptography from 37.0.2 to 38.0.1
Bumps [cryptography](https://github.com/pyca/cryptography) from 37.0.2 to 38.0.1.
- [Release notes](https://github.com/pyca/cryptography/releases)
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/37.0.2...38.0.1)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-19 05:14:20 +00:00
vabene1111
902ef3cd1e downgrade django to fix DRF 2022-09-19 07:13:22 +02:00
vabene1111
0b69bcddcc downgrade django to fix DRF 2022-09-19 07:13:09 +02:00
vabene1111
9089fc7ad3 fixed admin userspace search 2022-09-17 08:49:00 +02:00
vabene1111
6d866ae62b fixed keyword serialization 2022-09-17 08:43:18 +02:00
vabene1111
9fa82c2ddb something broke with md, dont want to fix right now 2022-09-17 08:43:10 +02:00
vabene1111
0ca29cd677 small visual tweaks to search page 2022-09-17 08:06:38 +02:00
vabene1111
54c9e200a0 Merge pull request #2044 from ambroisie/fix/markdown_md_globals_deprecated
Fix 'markdown' 3.4 version incompatibility
2022-09-17 07:14:03 +02:00
vabene1111
fc67525dcb Merge pull request #1969 from TandoorRecipes/dependabot/pip/markdown-3.4.1
Bump markdown from 3.3.7 to 3.4.1
2022-09-17 07:13:54 +02:00
Bruno BELANYI
37e292cab9 Fix 'markdown' 3.4 version incompatibility 2022-09-16 19:11:52 +02:00
vabene1111
e391abd23d moved annotation to default query manager 2022-09-16 18:18:59 +02:00
vabene1111
947986277a fixed recipe detail query 2022-09-16 18:15:05 +02:00
vabene1111
b2a10f269c permission and search preference caching 2022-09-16 14:35:35 +02:00
vabene1111
dc076d25d6 improved hash generation time 2022-09-16 13:31:00 +02:00
vabene1111
845408244b optimized recipe search query annotation performance 2022-09-16 13:24:57 +02:00
vabene1111
e06c82297d added loading animation to main search page 2022-09-15 20:53:22 +02:00
vabene1111
459be74a7c changed local DB setting 2022-09-15 19:05:46 +02:00
vabene1111
37e81275b5 align dependencies with oauth toolkit 2022-09-15 18:37:15 +02:00
vabene1111
8417b0ec3f Merge branch 'develop' of https://github.com/vabene1111/recipes into develop
# Conflicts:
#	recipes/settings.py
2022-09-15 18:31:46 +02:00
vabene1111
7d834ee088 debug toobar stuff 2022-09-15 18:31:30 +02:00
vabene1111
eb119b7443 remove "favorite" as default sort order due to performacne issues 2022-09-15 18:31:22 +02:00
vabene1111
cc342cbae3 add community contributed to HA docs and link to alexbelgium directly on top 2022-09-12 20:06:12 +02:00
vabene1111
75ae26fd28 Merge pull request #2032 from alexbelgium/develop
Home Assistant documentation
2022-09-12 20:00:31 +02:00
dependabot[bot]
70e6585669 Bump django-webpack-loader from 1.5.0 to 1.6.0
Bumps [django-webpack-loader](https://github.com/django-webpack/django-webpack-loader) from 1.5.0 to 1.6.0.
- [Release notes](https://github.com/django-webpack/django-webpack-loader/releases)
- [Changelog](https://github.com/django-webpack/django-webpack-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/django-webpack/django-webpack-loader/compare/1.5.0...1.6.0)

---
updated-dependencies:
- dependency-name: django-webpack-loader
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-12 18:00:05 +00:00
vabene1111
94f58f4608 Merge pull request #2029 from TandoorRecipes/dependabot/pip/django-4.1.1
Bump django from 4.0.7 to 4.1.1
2022-09-12 19:59:37 +02:00
vabene1111
5478a8d49a Merge pull request #2036 from TandoorRecipes/dependabot/pip/recipe-scrapers-14.14.0
Bump recipe-scrapers from 14.11.0 to 14.14.0
2022-09-12 19:59:26 +02:00
dependabot[bot]
23180622e8 Bump django from 4.0.7 to 4.1.1
Bumps [django](https://github.com/django/django) from 4.0.7 to 4.1.1.
- [Release notes](https://github.com/django/django/releases)
- [Commits](https://github.com/django/django/commits)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-12 15:59:22 +00:00
dependabot[bot]
62187fbbdf Bump recipe-scrapers from 14.11.0 to 14.14.0
Bumps [recipe-scrapers](https://github.com/hhursev/recipe-scrapers) from 14.11.0 to 14.14.0.
- [Release notes](https://github.com/hhursev/recipe-scrapers/releases)
- [Commits](https://github.com/hhursev/recipe-scrapers/compare/14.11.0...14.14.0)

---
updated-dependencies:
- dependency-name: recipe-scrapers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-12 15:59:09 +00:00
vabene1111
bd6b04f95e Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2022-09-12 17:58:22 +02:00
vabene1111
b315d6e171 adding debug toolbar 2022-09-12 17:58:20 +02:00
Alexandre
35bb3c9eb1 Add updates and backup instructions 2022-09-10 22:33:06 +02:00
Noé Feutry
84e7850e91 Translated using Weblate (French)
Currently translated at 85.2% (392 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2022-09-10 19:33:01 +00:00
David Schenk
4b40d75d1d Translated using Weblate (German)
Currently translated at 99.6% (522 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2022-09-10 19:33:01 +00:00
Alexandre
5423019a14 Add self promotion 2022-09-10 11:57:27 +02:00
Alexandre
e8c5c610b7 Improve layout 2022-09-10 11:54:21 +02:00
Alexandre
3f0cef59b8 Create home assistant install instructions 2022-09-10 11:53:56 +02:00
Alexandre
867c3595ff Merge branch 'TandoorRecipes:develop' into develop 2022-09-10 10:51:58 +02:00
vabene1111
631dd58c1f fixed share link guest user error message 2022-09-09 18:28:01 +02:00
vabene1111
ba235b26b7 fixed make header not removing food/unit/amount 2022-09-09 18:18:29 +02:00
dependabot[bot]
e54e850241 Bump markdown from 3.3.7 to 3.4.1
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.3.7 to 3.4.1.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.3.7...3.4.1)

---
updated-dependencies:
- dependency-name: markdown
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-09 16:09:40 +00:00
dependabot[bot]
d0cb7a79f9 Bump webpack-bundle-tracker from 1.5.0 to 1.6.0 in /vue
Bumps [webpack-bundle-tracker](https://github.com/django-webpack/webpack-bundle-tracker) from 1.5.0 to 1.6.0.
- [Release notes](https://github.com/django-webpack/webpack-bundle-tracker/releases)
- [Commits](https://github.com/django-webpack/webpack-bundle-tracker/compare/1.5.0...1.6.0)

---
updated-dependencies:
- dependency-name: webpack-bundle-tracker
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-09 16:09:30 +00:00
vabene1111
40c85c512c Merge pull request #1968 from TandoorRecipes/dependabot/pip/pillow-9.2.0
Bump pillow from 9.1.1 to 9.2.0
2022-09-09 18:09:02 +02:00
vabene1111
ca5eb7b2b6 Merge pull request #1984 from andyjayne/fix-nl-ingredients
fix: ingredient parsing for non-latin languages
2022-09-09 18:07:55 +02:00
dependabot[bot]
cfd24de72a Bump workbox-navigation-preload from 6.5.3 to 6.5.4 in /vue
Bumps [workbox-navigation-preload](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/googlechrome/workbox/releases)
- [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4)

---
updated-dependencies:
- dependency-name: workbox-navigation-preload
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-09 16:07:08 +00:00
dependabot[bot]
54acfe3e39 Bump workbox-routing from 6.5.3 to 6.5.4 in /vue
Bumps [workbox-routing](https://github.com/googlechrome/workbox) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/googlechrome/workbox/releases)
- [Commits](https://github.com/googlechrome/workbox/compare/v6.5.3...v6.5.4)

---
updated-dependencies:
- dependency-name: workbox-routing
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-09 16:06:53 +00:00
dependabot[bot]
574a6ab5f4 Bump pillow from 9.1.1 to 9.2.0
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.1.1 to 9.2.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.1.1...9.2.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-09 16:06:44 +00:00
vabene1111
39070d32bd Merge pull request #1986 from CameronJGrant/develop
Solves #1830 (Split times over 60 min into hours and minutes)
2022-09-09 18:06:34 +02:00
vabene1111
9aa3d2d87a Merge pull request #2013 from nough/develop
Update documentation on external recipes
2022-09-09 18:05:29 +02:00
vabene1111
02926516b9 Merge pull request #2025 from TandoorRecipes/dependabot/pip/python-dotenv-0.21.0
Bump python-dotenv from 0.20.0 to 0.21.0
2022-09-09 18:05:18 +02:00
dependabot[bot]
215f561623 Bump python-dotenv from 0.20.0 to 0.21.0
Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 0.20.0 to 0.21.0.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v0.20.0...v0.21.0)

---
updated-dependencies:
- dependency-name: python-dotenv
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-09 16:04:58 +00:00
vabene1111
e2c2f5d757 Merge pull request #2017 from TandoorRecipes/dependabot/pip/drf-writable-nested-0.7.0
Bump drf-writable-nested from 0.6.4 to 0.7.0
2022-09-09 18:04:33 +02:00
vabene1111
d887405ab3 Merge pull request #2018 from TandoorRecipes/dependabot/npm_and_yarn/vue/typescript-4.8.2
Bump typescript from 4.7.2 to 4.8.2 in /vue
2022-09-09 18:04:29 +02:00
vabene1111
00deb75195 Merge pull request #2019 from TandoorRecipes/dependabot/npm_and_yarn/vue/core-js-3.25.0
Bump core-js from 3.22.7 to 3.25.0 in /vue
2022-09-09 18:04:21 +02:00
Tomasz Klimczak
b228b0f42a Translated using Weblate (Polish)
Currently translated at 100.0% (460 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2022-09-05 21:32:56 +00:00
AquaticLava
689eb426ea method for asynchronous generation of meals. start of menu for auto planner. delete method deletes all records for testing the auto planner. 2022-09-04 16:31:28 -06:00
Tomasz Klimczak
3d5ff23433 Translated using Weblate (Polish)
Currently translated at 99.3% (457 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2022-09-03 23:32:55 +00:00
Alexandre
1a24f34499 Create homeassistant.md 2022-09-03 18:59:14 +02:00
1k2
8459b40743 Translated using Weblate (Dutch)
Currently translated at 99.3% (457 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nl/
2022-09-01 20:32:55 +00:00
1k2
75cb5d2d4c Translated using Weblate (Dutch)
Currently translated at 99.4% (521 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nl/
2022-09-01 20:32:53 +00:00
Arne Hüffmeier
12ad6af8c3 fix path 2022-09-01 13:45:49 +02:00
Arne Hüffmeier
cf24e1014a add two infos 2022-09-01 13:38:47 +02:00
dependabot[bot]
bd1b40dd94 Bump core-js from 3.22.7 to 3.25.0 in /vue
Bumps [core-js](https://github.com/zloirock/core-js) from 3.22.7 to 3.25.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/compare/v3.22.7...v3.25.0)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-01 00:37:12 +00:00
dependabot[bot]
95d4bfb2bd Bump typescript from 4.7.2 to 4.8.2 in /vue
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.7.2 to 4.8.2.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.7.2...v4.8.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-01 00:34:33 +00:00
dependabot[bot]
23caac9d09 Bump drf-writable-nested from 0.6.4 to 0.7.0
Bumps [drf-writable-nested](https://github.com/beda-software/drf-writable-nested) from 0.6.4 to 0.7.0.
- [Release notes](https://github.com/beda-software/drf-writable-nested/releases)
- [Changelog](https://github.com/beda-software/drf-writable-nested/blob/master/CHANGELOG.md)
- [Commits](https://github.com/beda-software/drf-writable-nested/compare/v0.6.4...v0.7.0)

---
updated-dependencies:
- dependency-name: drf-writable-nested
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-01 00:15:01 +00:00
nough
ece4f6e32d Update updating.md 2022-08-28 20:52:52 +01:00
nough
5e7d1ba827 Update updating.md
remove outline of docker update batch script - it wasn't ready and I committed it when I didn't understand how github branches work (I still don't, really).
2022-08-28 20:51:26 +01:00
nough
a88214eea6 Update external_recipes.md
fixed my mistakes
2022-08-27 22:18:52 +01:00
nough
7ec5646338 update external_recipes.md with docker info
added info on docker external recipes, as i've just followed this process myself. unsure if I needed to add the externalfiles folder to the nginx_recipes volume, but I have anyway in my personal one, and that worked.
2022-08-27 22:12:33 +01:00
nough
c020bea41e Merge branch 'TandoorRecipes:develop' into develop 2022-08-27 21:57:02 +01:00
吕楪
e6f79a6fa3 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (460 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/zh_Hans/
2022-08-23 13:32:56 +00:00
Mike Miller
0ab430ea82 Translated using Weblate (German)
Currently translated at 99.7% (459 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2022-08-23 13:32:56 +00:00
Kirstin Seidel-Gebert
3d95657b8a Translated using Weblate (German)
Currently translated at 99.7% (459 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2022-08-23 13:32:56 +00:00
吕楪
726157a062 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (524 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/zh_Hans/
2022-08-23 13:32:51 +00:00
Kirstin Seidel-Gebert
f8793f3ec8 Translated using Weblate (German)
Currently translated at 99.6% (522 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2022-08-23 13:32:51 +00:00
吕楪
09929beeb9 Translated using Weblate (Chinese (Simplified))
Currently translated at 98.6% (454 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/zh_Hans/
2022-08-22 09:56:23 +00:00
Mathias Rasmussen
2a1b2c18fc Translated using Weblate (Danish)
Currently translated at 100.0% (528 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/da/
2022-08-18 14:32:52 +00:00
Mathias Rasmussen
0cc3df71d2 Translated using Weblate (Danish)
Currently translated at 100.0% (460 of 460 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/da/
2022-08-14 16:32:49 +00:00
Thorin
e124c211ac Translated using Weblate (Spanish)
Currently translated at 73.2% (315 of 430 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2022-08-12 21:32:52 +00:00
Thorin
dc2f62dc9d Translated using Weblate (Spanish)
Currently translated at 53.0% (278 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2022-08-12 21:32:52 +00:00
Cameron Grant
38921f1254 Updated time to use hours and minutes split 2022-08-11 14:23:31 -07:00
vabene1111
4fec9a493e Merge pull request #1989 from TandoorRecipes/dependabot/pip/django-4.0.7
Bump django from 4.0.6 to 4.0.7
2022-08-11 23:07:43 +02:00
dependabot[bot]
71c5adda79 Bump django from 4.0.6 to 4.0.7
Bumps [django](https://github.com/django/django) from 4.0.6 to 4.0.7.
- [Release notes](https://github.com/django/django/releases)
- [Commits](https://github.com/django/django/compare/4.0.6...4.0.7)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-11 15:25:12 +00:00
Andrew Jayne
cffa731106 fix: ingredient parsing for non-latin languages
Before this change the ingredient string for non-latin
languages was not being parsed into the correct amount
or units when the food is found at the start of the
ingredient string.

This was because the regex being used was restricted to
latin characters.

With this change the amount and units are correctly
parsed from such a string.

Fixes https://github.com/TandoorRecipes/recipes/issues/1983
2022-08-07 21:37:59 +01:00
vabene1111
c7f75fe58f boot.sh 2022-08-05 17:55:25 +02:00
vabene1111
2eed5143fe boot.sh 2022-08-05 17:43:59 +02:00
vabene1111
6e4ea518d9 boot.sh 2022-08-05 17:36:00 +02:00
vabene1111
a898d722d6 fixed typo 2022-08-05 17:21:59 +02:00
vabene1111
904358bb00 allow changing gunicorn settings 2022-08-05 17:13:27 +02:00
vabene1111
6605b87c5c new settings page finished 2022-08-05 16:54:53 +02:00
vabene1111
64688ca5e1 Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2022-08-05 14:28:22 +02:00
vabene1111
e9a1a06bda fixed recipe share permission 2022-08-05 14:28:17 +02:00
vabene1111
a8da28f877 Merge pull request #1980 from 8633brown/nplusone
prefetch food relations #1965
2022-08-05 07:53:01 +02:00
8633brown
70b2bd6ccf prefetch food relations #1965 2022-08-04 22:11:48 +01:00
vabene1111
8ed5d52ddf fixed space settings saving issue 2022-08-04 18:54:00 +02:00
vabene1111
f7af0741fe fixed bookmarklet 2022-08-04 18:45:40 +02:00
vabene1111
3ec4afb02f fixed scoping and permissions for tokens 2022-08-04 18:33:45 +02:00
vabene1111
3f77b73a61 add multiple API tokens per user, removes old API tokens 2022-08-04 17:24:54 +02:00
Oliver Cervera
9e62d8a3a3 Translated using Weblate (Italian)
Currently translated at 79.9% (419 of 524 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2022-08-04 11:32:45 +00:00
vabene1111
9ef21241bf markdown editor adjustments 2022-08-01 17:13:44 +02:00
vabene1111
5e77adf7e6 fixed mail send 2022-08-01 16:56:18 +02:00
vabene1111
4df0a46701 Merge pull request #1975 from TandoorRecipes/dependabot/pip/icalendar-4.1.0
Bump icalendar from 4.0.9 to 4.1.0
2022-08-01 16:28:48 +02:00
dependabot[bot]
f186404628 Bump icalendar from 4.0.9 to 4.1.0
Bumps [icalendar](https://github.com/collective/icalendar) from 4.0.9 to 4.1.0.
- [Release notes](https://github.com/collective/icalendar/releases)
- [Changelog](https://github.com/collective/icalendar/blob/4.1.0/CHANGES.rst)
- [Commits](https://github.com/collective/icalendar/compare/4.0.9...4.1.0)

---
updated-dependencies:
- dependency-name: icalendar
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 14:28:24 +00:00
vabene1111
8e3ec91f3c Merge pull request #1961 from AquaticLava/develop
Fixes  #1234
2022-08-01 16:28:18 +02:00
vabene1111
2605addf34 Merge pull request #1974 from TandoorRecipes/dependabot/pip/drf-writable-nested-0.6.4
Bump drf-writable-nested from 0.6.3 to 0.6.4
2022-08-01 16:27:48 +02:00
vabene1111
1ab3e57b83 Merge pull request #1947 from dmaes/develop
Add S3_CUSTOM_DOMAIN settings, closes #1943
2022-08-01 16:27:16 +02:00
dependabot[bot]
2f36ae5112 Bump drf-writable-nested from 0.6.3 to 0.6.4
Bumps [drf-writable-nested](https://github.com/beda-software/drf-writable-nested) from 0.6.3 to 0.6.4.
- [Release notes](https://github.com/beda-software/drf-writable-nested/releases)
- [Changelog](https://github.com/beda-software/drf-writable-nested/blob/master/CHANGELOG.md)
- [Commits](https://github.com/beda-software/drf-writable-nested/compare/v0.6.3...v0.6.4)

---
updated-dependencies:
- dependency-name: drf-writable-nested
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 14:27:15 +00:00
vabene1111
acc19ca65e Merge pull request #1973 from TandoorRecipes/dependabot/pip/python-ldap-3.4.2
Bump python-ldap from 3.4.0 to 3.4.2
2022-08-01 16:26:46 +02:00
vabene1111
ea213e2dfd Merge pull request #1948 from iamkarlson/feature/fix_csrf_django_40
fixed csrf
2022-08-01 16:25:56 +02:00
vabene1111
02cf3264a3 Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2022-08-01 16:18:46 +02:00
vabene1111
a0b1186558 settings wip 2022-08-01 16:18:43 +02:00
dependabot[bot]
27e47718bb Bump python-ldap from 3.4.0 to 3.4.2
Bumps [python-ldap](https://github.com/python-ldap/python-ldap) from 3.4.0 to 3.4.2.
- [Release notes](https://github.com/python-ldap/python-ldap/releases)
- [Commits](https://github.com/python-ldap/python-ldap/compare/python-ldap-3.4.0...python-ldap-3.4.2)

---
updated-dependencies:
- dependency-name: python-ldap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 05:52:23 +00:00
vabene1111
f78dd209bd Merge pull request #1967 from TandoorRecipes/dependabot/pip/recipe-scrapers-14.11.0
Bump recipe-scrapers from 14.6.0 to 14.11.0
2022-08-01 07:51:58 +02:00
dependabot[bot]
2f8b479fdd Bump @vue/cli-plugin-pwa from 5.0.4 to 5.0.8 in /vue
Bumps [@vue/cli-plugin-pwa](https://github.com/vuejs/vue-cli/tree/HEAD/packages/@vue/cli-plugin-pwa) from 5.0.4 to 5.0.8.
- [Release notes](https://github.com/vuejs/vue-cli/releases)
- [Changelog](https://github.com/vuejs/vue-cli/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-cli/commits/v5.0.8/packages/@vue/cli-plugin-pwa)

---
updated-dependencies:
- dependency-name: "@vue/cli-plugin-pwa"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 00:28:30 +00:00
dependabot[bot]
b4e0b51f5b Bump recipe-scrapers from 14.6.0 to 14.11.0
Bumps [recipe-scrapers](https://github.com/hhursev/recipe-scrapers) from 14.6.0 to 14.11.0.
- [Release notes](https://github.com/hhursev/recipe-scrapers/releases)
- [Commits](https://github.com/hhursev/recipe-scrapers/compare/14.6.0...14.11.0)

---
updated-dependencies:
- dependency-name: recipe-scrapers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 00:13:53 +00:00
AquaticLava
eedce4dcfd fixes shopping list number showing completed items 2022-07-27 21:03:21 -06:00
AquaticLava
006be92180 Fixes #1234 2022-07-26 17:49:43 -06:00
Tomasz Klimczak
1fae004785 Translated using Weblate (Polish)
Currently translated at 100.0% (427 of 427 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2022-07-26 21:32:41 +00:00
Huth Jimmy
239a88cd24 Translated using Weblate (French)
Currently translated at 88.5% (378 of 427 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2022-07-26 21:32:41 +00:00
vabene1111
22b432a6ae Merge pull request #1952 from tomtjes/patch-1
fix minor issues in CopyMeThat importer
2022-07-25 14:48:26 +02:00
tomtjes
c88566a4ae fix minor issues in CopyMeThat importer
improve handling of empty fields and fields that exceed character limits
2022-07-22 12:14:23 -04:00
vabene1111
5f8e371793 Merge pull request #1949 from TandoorRecipes/dependabot/npm_and_yarn/vue/terser-4.8.1
Bump terser from 4.8.0 to 4.8.1 in /vue
2022-07-21 07:46:56 +02:00
dependabot[bot]
94d9ac03ea Bump terser from 4.8.0 to 4.8.1 in /vue
Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-21 05:21:46 +00:00
George Green
897ac97423 fixed csrf 2022-07-20 21:17:29 +02:00
dmaes
24aeae6de9 update .env.template 2022-07-20 10:45:52 +02:00
dmaes
ce941db3be add S3_CUSTOM_DOMAIN setting 2022-07-20 08:54:34 +02:00
vabene1111
5ff91ee47f more settings in 2022-07-15 17:39:44 +02:00
vabene1111
ce1f55ffd1 settings wip 2022-07-15 17:12:01 +02:00
vabene1111
8700e2df69 basics of new settings page working 2022-07-14 17:50:20 +02:00
vabene1111
f4df84b609 added ability to set space images 2022-07-14 15:23:59 +02:00
vabene1111
ba473123ba added ability to use invite link more than once 2022-07-14 11:28:13 +02:00
vabene1111
98a54ef38f removed lots of unused stuff 2022-07-14 10:37:15 +02:00
vabene1111
7fdc9c7cb8 added sharing permission test 2022-07-14 10:30:45 +02:00
vabene1111
dc3b1566d7 made shared field for recipe api optional 2022-07-14 10:21:35 +02:00
vabene1111
5429c4d557 Merge pull request #1937 from tomtjes/patch-1
Update copymethat.py
2022-07-14 09:53:43 +02:00
tomtjes
dabcea6ba7 Update copymethat.py
- make use of field for source URL
- preserve "I made this" flag as keyword
- preserve long descriptions in full at bottom of steps
- preserve ingredient and step headers
2022-07-13 14:37:16 -04:00
vabene1111
e91790f5ac added ability to mark recipes as private 2022-07-13 15:46:39 +02:00
vabene1111
51076d4ced Merge branch 'master' into develop 2022-07-13 10:25:39 +02:00
vabene1111
1cb37fe2d2 dont allow space manage page in demo 2022-07-13 10:25:22 +02:00
vabene1111
61a9f0647b added userspace admin 2022-07-13 10:24:12 +02:00
vabene1111
ac2ab62050 moved import functions to proper api function 2022-07-12 21:14:51 +02:00
vabene1111
c50efac00e basics for profile page 2022-07-12 20:57:13 +02:00
vabene1111
bf16e61a1f removed unused stuff and fixed manifest 2022-07-12 20:52:32 +02:00
vabene1111
d464633c70 removed django filters 2022-07-12 20:38:18 +02:00
vabene1111
b78d0ec30b added userspace admin 2022-07-12 20:37:38 +02:00
vabene1111
da09602834 removed old search pages 2022-07-12 20:05:59 +02:00
vabene1111
5ead4967a5 removed ingredient list shopping 2022-07-12 19:54:18 +02:00
vabene1111
8bb7ce2062 removed user servings feature 2022-07-12 19:43:11 +02:00
vabene1111
0068c75e31 Merge branch 'develop' 2022-07-12 19:41:50 +02:00
vabene1111
5de7fa9d48 fixed another social auth issues 2022-07-12 19:41:46 +02:00
vabene1111
3dc3592783 Merge branch 'develop' 2022-07-12 19:20:42 +02:00
vabene1111
43a082a51a updated translations 2022-07-12 19:20:35 +02:00
vabene1111
4c264673df fixed copy me that importer 2022-07-12 19:20:05 +02:00
vabene1111
d537d73c6a Merge pull request #1930 from Mikhail5555/patch-1
Add documentation for migrating from sqlite3 database to postgresql (Unraid)
2022-07-12 14:46:00 +02:00
vabene1111
5c227ecc57 Merge pull request #1931 from smilerz/fix_cookbookapp_import
updated cookbookapp importer to handle multi-step recipes
2022-07-12 08:45:17 +02:00
smilerz
b03fa4fdf2 updated cookbookapp importer to handle multi-step recipes 2022-07-11 17:21:56 -05:00
vabene1111
38219a22ca fixed issue with social default access and multi space tennany 2022-07-11 23:42:26 +02:00
Mikhail5555
9d6a5efa72 Update migration_sqlite-postgres.md 2022-07-11 23:14:55 +02:00
Mikhail5555
aaa0520a6d Update migration_sqlite-postgres.md 2022-07-11 23:12:42 +02:00
Mikhail5555
eb0f231a80 Create migration_sqlite-postgres.md 2022-07-11 23:09:41 +02:00
vabene1111
17f3da5a37 removed dead invite link button from system page 2022-07-11 14:54:00 +02:00
vabene1111
608039b7e4 cookbookapp importer more or less broken (more) 2022-07-11 14:46:54 +02:00
vabene1111
bb424cc3d6 Merge pull request #1917 from smilerz/bookmarklet_fix
Bookmarklet fix
2022-07-11 14:28:08 +02:00
Mike Miller
9eaf0f9530 Translated using Weblate (German)
Currently translated at 96.9% (414 of 427 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2022-07-10 08:32:35 +00:00
Kalli_1
b44bb552e0 Translated using Weblate (German)
Currently translated at 96.9% (414 of 427 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2022-07-10 08:32:35 +00:00
nough
c86ff27bef Update backup.md
Further information, backup using import/export.
2022-07-08 09:19:48 +01:00
nough
be6bb5f039 Merge branch 'TandoorRecipes:develop' into develop 2022-07-08 09:14:57 +01:00
smilerz
e40b73f420 deprecate get_recipe_from_source 2022-07-07 15:09:22 -05:00
vabene1111
5b3d8a3aaf Merge branch 'develop' 2022-07-07 19:38:32 +02:00
vabene1111
fd4051c04a fixed copy to clipboard 2022-07-07 19:16:16 +02:00
vabene1111
5f0fa24c2a Merge pull request #1908 from nough/patch-1
Update backup.md with manual process
2022-07-07 18:57:43 +02:00
vabene1111
0d676e1957 Merge pull request #1909 from smilerz/makenow_query_fix
fix makenow filter
2022-07-07 18:56:31 +02:00
vabene1111
8539e365fb Merge pull request #1915 from TandoorRecipes/dependabot/npm_and_yarn/vue/moment-2.29.4
Bump moment from 2.29.3 to 2.29.4 in /vue
2022-07-07 18:52:49 +02:00
dependabot[bot]
dd25ea748b Bump moment from 2.29.3 to 2.29.4 in /vue
Bumps [moment](https://github.com/moment/moment) from 2.29.3 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.3...2.29.4)

---
updated-dependencies:
- dependency-name: moment
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-07 16:50:54 +00:00
vabene1111
2b74c1c47b Merge pull request #1912 from TandoorRecipes/dependabot/pip/lxml-4.9.1
Bump lxml from 4.9.0 to 4.9.1
2022-07-07 18:50:23 +02:00
nough
9961746f1f update, adding docker backup script outline 2022-07-07 15:46:31 +01:00
smilerz
b1c0334947 quick hack to allow scraper to work correctly 2022-07-07 07:50:57 -05:00
smilerz
25a41bd293 reverting scraper to just using wildmode 2022-07-07 06:43:07 -05:00
nough
ac25beddda Update backup.md
working restore function
2022-07-07 10:27:32 +01:00
nough
9d38186404 Update backup.md
updated with functional code
2022-07-07 10:16:52 +01:00
dependabot[bot]
51d9ffbb4e Bump lxml from 4.9.0 to 4.9.1
Bumps [lxml](https://github.com/lxml/lxml) from 4.9.0 to 4.9.1.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.9.0...lxml-4.9.1)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-06 21:47:07 +00:00
smilerz
e23d514d89 fix bookmarklet 2022-07-06 16:16:53 -05:00
nough
0697116a21 Update backup.md
Added comment about backing up when other containers are failing
2022-07-06 19:29:22 +01:00
Nidhal Brniyah
165bb00040 Translated using Weblate (Arabic)
Currently translated at 20.4% (108 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ar/
2022-07-06 14:32:36 +00:00
vabene1111
07947199c0 Merge pull request #1910 from TandoorRecipes/dependabot/pip/django-4.0.6
Bump django from 4.0.5 to 4.0.6
2022-07-06 09:07:04 +02:00
dependabot[bot]
92aadb4743 Bump django from 4.0.5 to 4.0.6
Bumps [django](https://github.com/django/django) from 4.0.5 to 4.0.6.
- [Release notes](https://github.com/django/django/releases)
- [Commits](https://github.com/django/django/compare/4.0.5...4.0.6)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-05 22:39:26 +00:00
smilerz
bd89de6f4d fix makenow filter 2022-07-05 14:31:32 -05:00
vabene1111
dca567b5fa Added translation using Weblate (Arabic) 2022-07-05 12:04:35 +00:00
vabene1111
a015c2f566 Added translation using Weblate (Arabic) 2022-07-05 12:04:31 +00:00
vabene1111
946de2e7e3 updated scrapers 2022-07-05 09:01:40 +02:00
vabene1111
690c486bb2 zip files before download in file broswer
needs to be completly rewritten in the future but for now this is more secure
2022-07-04 14:39:53 +02:00
vabene1111
d9d0676bed temporarily disable table button in mavon editor 2022-07-01 11:58:28 +02:00
vabene1111
9c8a410e50 fixed non spaced page load 2022-07-01 11:03:53 +02:00
vabene1111
22296de03c Merge pull request #1885 from Jbonnett/feature/reset_inheritance_fix
Fixes #1857
2022-07-01 11:02:26 +02:00
vabene1111
9228f9c339 Merge pull request #1891 from TandoorRecipes/dependabot/pip/django-allauth-0.51.0
Bump django-allauth from 0.50.0 to 0.51.0
2022-07-01 08:56:29 +02:00
vabene1111
609d4477ae Merge pull request #1906 from TandoorRecipes/dependabot/pip/requests-2.28.1
Bump requests from 2.27.1 to 2.28.1
2022-07-01 08:56:11 +02:00
vabene1111
fc0cfe3133 Merge pull request #1905 from TandoorRecipes/dependabot/pip/pytest-factoryboy-2.5.0
Bump pytest-factoryboy from 2.4.0 to 2.5.0
2022-07-01 08:55:48 +02:00
vabene1111
ebe1aa33f3 Merge pull request #1904 from TandoorRecipes/dependabot/pip/django-4.0.5
Bump django from 4.0.4 to 4.0.5
2022-07-01 08:55:41 +02:00
dependabot[bot]
e451adbfdb Bump requests from 2.27.1 to 2.28.1
Bumps [requests](https://github.com/psf/requests) from 2.27.1 to 2.28.1.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.27.1...v2.28.1)

---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 06:55:07 +00:00
dependabot[bot]
852c64d9f4 Bump pytest-factoryboy from 2.4.0 to 2.5.0
Bumps [pytest-factoryboy](https://github.com/pytest-dev/pytest-factoryboy) from 2.4.0 to 2.5.0.
- [Release notes](https://github.com/pytest-dev/pytest-factoryboy/releases)
- [Changelog](https://github.com/pytest-dev/pytest-factoryboy/blob/master/CHANGES.rst)
- [Commits](https://github.com/pytest-dev/pytest-factoryboy/compare/2.4.0...2.5.0)

---
updated-dependencies:
- dependency-name: pytest-factoryboy
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 06:55:02 +00:00
dependabot[bot]
d96b6dbefb Bump django from 4.0.4 to 4.0.5
Bumps [django](https://github.com/django/django) from 4.0.4 to 4.0.5.
- [Release notes](https://github.com/django/django/releases)
- [Commits](https://github.com/django/django/compare/4.0.4...4.0.5)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 06:54:56 +00:00
vabene1111
fbbd57a4ae Merge pull request #1903 from TandoorRecipes/dependabot/pip/django-cors-headers-3.13.0
Bump django-cors-headers from 3.12.0 to 3.13.0
2022-07-01 08:54:48 +02:00
dependabot[bot]
e5cc990111 Bump django-allauth from 0.50.0 to 0.51.0
Bumps [django-allauth](https://github.com/pennersr/django-allauth) from 0.50.0 to 0.51.0.
- [Release notes](https://github.com/pennersr/django-allauth/releases)
- [Changelog](https://github.com/pennersr/django-allauth/blob/master/ChangeLog.rst)
- [Commits](https://github.com/pennersr/django-allauth/compare/0.50.0...0.51.0)

---
updated-dependencies:
- dependency-name: django-allauth
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 06:54:46 +00:00
vabene1111
78482313d8 Merge pull request #1902 from TandoorRecipes/dependabot/pip/bleach-5.0.1
Bump bleach from 5.0.0 to 5.0.1
2022-07-01 08:54:39 +02:00
vabene1111
5b601695e1 Merge pull request #1901 from TandoorRecipes/dependabot/pip/pytube-12.1.0
Bump pytube from 12.0.0 to 12.1.0
2022-07-01 08:54:34 +02:00
dependabot[bot]
d6a67335ed Bump django-cors-headers from 3.12.0 to 3.13.0
Bumps [django-cors-headers](https://github.com/adamchainz/django-cors-headers) from 3.12.0 to 3.13.0.
- [Release notes](https://github.com/adamchainz/django-cors-headers/releases)
- [Changelog](https://github.com/adamchainz/django-cors-headers/blob/main/HISTORY.rst)
- [Commits](https://github.com/adamchainz/django-cors-headers/compare/3.12.0...3.13.0)

---
updated-dependencies:
- dependency-name: django-cors-headers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 06:53:58 +00:00
dependabot[bot]
4f7b68c882 Bump bleach from 5.0.0 to 5.0.1
Bumps [bleach](https://github.com/mozilla/bleach) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/mozilla/bleach/releases)
- [Changelog](https://github.com/mozilla/bleach/blob/main/CHANGES)
- [Commits](https://github.com/mozilla/bleach/commits)

---
updated-dependencies:
- dependency-name: bleach
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 06:53:54 +00:00
dependabot[bot]
1359782d30 Bump pytube from 12.0.0 to 12.1.0
Bumps [pytube](https://github.com/pytube/pytube) from 12.0.0 to 12.1.0.
- [Release notes](https://github.com/pytube/pytube/releases)
- [Commits](https://github.com/pytube/pytube/compare/v12.0.0...v12.1.0)

---
updated-dependencies:
- dependency-name: pytube
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 06:53:51 +00:00
vabene1111
966bd5fd33 Merge pull request #1899 from TandoorRecipes/dependabot/pip/whitenoise-6.2.0
Bump whitenoise from 6.1.0 to 6.2.0
2022-07-01 08:53:49 +02:00
vabene1111
759264e1d5 Merge pull request #1900 from TandoorRecipes/dependabot/pip/django-filter-22.1
Bump django-filter from 21.1 to 22.1
2022-07-01 08:53:40 +02:00
vabene1111
65c0f3d786 Merge pull request #1888 from TandoorRecipes/dependabot/pip/recipe-scrapers-14.5.2
Bump recipe-scrapers from 14.2.0 to 14.5.2
2022-07-01 08:53:30 +02:00
dependabot[bot]
f1535b4b54 Bump django-filter from 21.1 to 22.1
Bumps [django-filter](https://github.com/carltongibson/django-filter) from 21.1 to 22.1.
- [Release notes](https://github.com/carltongibson/django-filter/releases)
- [Changelog](https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst)
- [Commits](https://github.com/carltongibson/django-filter/compare/21.1...22.1)

---
updated-dependencies:
- dependency-name: django-filter
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 06:43:55 +00:00
dependabot[bot]
fcb5f51a78 Bump whitenoise from 6.1.0 to 6.2.0
Bumps [whitenoise](https://github.com/evansd/whitenoise) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/evansd/whitenoise/releases)
- [Changelog](https://github.com/evansd/whitenoise/blob/main/docs/changelog.rst)
- [Commits](https://github.com/evansd/whitenoise/compare/6.1.0...6.2.0)

---
updated-dependencies:
- dependency-name: whitenoise
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 06:43:52 +00:00
vabene1111
50fc98dcb3 Merge pull request #1889 from TandoorRecipes/dependabot/pip/boto3-1.24.21
Bump boto3 from 1.24.0 to 1.24.21
2022-07-01 08:43:45 +02:00
vabene1111
c1a1fe1047 Merge pull request #1887 from TandoorRecipes/dependabot/pip/validators-0.20.0
Bump validators from 0.19.0 to 0.20.0
2022-07-01 08:43:29 +02:00
dependabot[bot]
b3a60f70ff Bump boto3 from 1.24.0 to 1.24.21
Bumps [boto3](https://github.com/boto/boto3) from 1.24.0 to 1.24.21.
- [Release notes](https://github.com/boto/boto3/releases)
- [Changelog](https://github.com/boto/boto3/blob/develop/CHANGELOG.rst)
- [Commits](https://github.com/boto/boto3/compare/1.24.0...1.24.21)

---
updated-dependencies:
- dependency-name: boto3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 00:04:35 +00:00
dependabot[bot]
5ee0033983 Bump recipe-scrapers from 14.2.0 to 14.5.2
Bumps [recipe-scrapers](https://github.com/hhursev/recipe-scrapers) from 14.2.0 to 14.5.2.
- [Release notes](https://github.com/hhursev/recipe-scrapers/releases)
- [Commits](https://github.com/hhursev/recipe-scrapers/compare/14.2.0...14.5.2)

---
updated-dependencies:
- dependency-name: recipe-scrapers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 00:04:26 +00:00
dependabot[bot]
a28e653386 Bump validators from 0.19.0 to 0.20.0
Bumps [validators](https://github.com/kvesteri/validators) from 0.19.0 to 0.20.0.
- [Release notes](https://github.com/kvesteri/validators/releases)
- [Changelog](https://github.com/kvesteri/validators/blob/master/CHANGES.rst)
- [Commits](https://github.com/kvesteri/validators/compare/0.19.0...0.20.0)

---
updated-dependencies:
- dependency-name: validators
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 00:04:22 +00:00
Joshua Bonnett
8d568526be Fixes #1857 2022-06-29 05:15:22 -07:00
vabene1111
6643008baf media query for navbar scrolling 2022-06-28 07:30:42 +02:00
vabene1111
44a19e03e8 fixed ingredient list step header duplication 2022-06-28 06:32:25 +02:00
vabene1111
b5207d91ba fixed navbar viewport issues 2022-06-28 06:19:58 +02:00
vabene1111
f1d54675c3 allow editing recipe source filed 2022-06-28 06:17:43 +02:00
vabene1111
b057b6006c add debounce to food search on recipe edit 2022-06-26 12:54:08 +02:00
vabene1111
f92a62da4e improved header show/hide for step name 2022-06-26 12:47:40 +02:00
vabene1111
27c695a393 allow disabling of ingredient overview 2022-06-26 12:36:37 +02:00
vabene1111
7945c1a431 fixed ingredient compontent 2022-06-26 12:18:13 +02:00
vabene1111
7c31cb9993 updated and compiled translations 2022-06-26 12:10:25 +02:00
vabene1111
f6d46cae79 Merge pull request #1866 from nicedevil007/nicedevil007-patch-1
Updates with more packages
2022-06-26 12:08:16 +02:00
César Blanco Guillamon
0e49615a40 Translated using Weblate (Spanish)
Currently translated at 53.4% (282 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2022-06-25 17:32:27 +00:00
Tomasz Klimczak
534792cd1a Translated using Weblate (Polish)
Currently translated at 100.0% (425 of 425 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2022-06-22 18:32:29 +00:00
Andreas Thor Lau
89891d11d7 Translated using Weblate (Danish)
Currently translated at 100.0% (414 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/da/
2022-06-20 19:32:27 +00:00
vabene1111
cb86ece0c4 fixed parse servings function 2022-06-20 16:53:14 +02:00
vabene1111
e7976fab46 show import links 2022-06-20 16:52:42 +02:00
vabene1111
11cb40702d cookmate fixes 2022-06-20 16:29:33 +02:00
vabene1111
877b7799df added proper login template for social auth 2022-06-20 15:40:42 +02:00
vabene1111
7f35d462b6 fixed url import servings 2022-06-20 15:25:23 +02:00
nicedevil007
fff5c2387b removed python3.9 from update (python3 is enough) 2022-06-18 23:02:03 +02:00
nicedevil007
3de6f6faf8 Added the "--no-input" to the collectstatic lines 2022-06-18 22:32:09 +02:00
nicedevil007
e6f80497a9 Updates with more packages
Updated the manual installation file to get everybody up and running.
There were missing requirements like the nginx installation and so on.

Now a first time linux user should be able to get this up and running.
2022-06-18 09:49:25 +02:00
vabene1111
6c122e4ed0 fixed autofocus on markdown editor 2022-06-16 16:21:35 +02:00
Kaibu
1836056bd1 Recipe edit icons on mobile 2022-06-15 17:33:03 +02:00
Kaibu
cdc95d8fd2 ingredient card cleanup 2022-06-15 16:42:28 +02:00
Kaibu
d3c3339d5e shopping modal ui fixes 2022-06-15 16:27:43 +02:00
Kaibu
50992d3411 Merge branch 'develop' of https://github.com/TandoorRecipes/recipes into develop 2022-06-15 15:56:25 +02:00
Kaibu
2ae3e7f5b9 reactivated shopping list swipe only on food name 2022-06-15 15:56:18 +02:00
vabene1111
99ea193237 fixed url breaking recipe view 2022-06-15 15:47:52 +02:00
vabene1111
3427f7bbea fixed new limit recipe create 2022-06-15 15:37:20 +02:00
vabene1111
44704be22b fixed limit check for new recipes 2022-06-15 15:36:10 +02:00
vabene1111
356dec636f fixed ingredient paste and plan share serialize 2022-06-14 21:48:17 +02:00
vabene1111
355f181574 added youtube import 2022-06-14 21:37:59 +02:00
vabene1111
b365f9adc1 Merge pull request #1829 from astappiev/fixes
Some minor visual fixes
2022-06-14 21:03:00 +02:00
vabene1111
af1282c268 Merge pull request #1723 from vekunz/feature/optimize_printing
Fix some issues to improve the print output
2022-06-14 20:59:57 +02:00
vabene1111
9ccceb2199 Merge pull request #1815 from anu-codes/patch-1
Grammatical errors
2022-06-14 20:58:37 +02:00
vabene1111
bdea6440a8 Merge pull request #1854 from AliveDevil/feature/discussion-1832
Add django-scopes compatible django-admin dumpdata/loaddata commands
2022-06-14 20:56:52 +02:00
vabene1111
4e1f147b37 Merge pull request #1864 from anaymody/patch-1
Update index.md for capitalization and bold-face issues
2022-06-14 20:53:08 +02:00
anaymody
30d0d340c2 Update index.md
Added capitalization to line 52 and proposed some bold-face changes in lines 42, 44. 52. and 54.
2022-06-14 14:30:47 -04:00
vabene1111
d99748638d fixed broken filter on supermarket category lookups 2022-06-14 17:06:25 +02:00
vabene1111
889089b4cd fixed search defaults 2022-06-14 16:49:58 +02:00
vabene1111
e7de6f62b6 fixed permissions and tests 2022-06-14 16:20:37 +02:00
vabene1111
f02eac8ac6 remvoed ability to swipe shopping list as scrolling needs to be fixed 2022-06-14 15:13:46 +02:00
vabene1111
b30c282a13 remove exception details from api response 2022-06-14 15:07:31 +02:00
vabene1111
c2135de941 downgraded vue simple calendar 2022-06-14 12:08:43 +02:00
vabene1111
e2890d1363 Merge branch 'feature/multi-tennancy' into develop 2022-06-13 20:20:49 +02:00
Mike Miller
0dc2abbdd8 Translated using Weblate (German)
Currently translated at 97.8% (405 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2022-06-10 19:32:26 +00:00
vabene1111
deeed4b65b testes and fixes for space, userspace and invitelink apis 2022-06-09 22:02:58 +02:00
vabene1111
30e4ee855c switch space method signature change and test 2022-06-09 18:18:57 +02:00
vabene1111
2ab1560aed fixed user name api filter 2022-06-09 17:31:17 +02:00
vabene1111
d5b7d440fe fixed user preference api endpoint 2022-06-08 17:48:23 +02:00
Kaibu
df88b1ddd2 recipe switcher mobile ui height 2022-06-08 17:40:59 +02:00
vabene1111
e368488933 deprecated all old vue stuff and working on tests 2022-06-07 20:08:32 +02:00
vabene1111
37f0f7a0b7 added endpoint for space switching 2022-06-06 18:34:40 +02:00
vabene1111
e2b887b449 lots of fixes and stuff 2022-06-06 18:21:15 +02:00
Daniel
d653b8f9e6 Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.8% (20 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pt_BR/
2022-06-05 14:49:41 +00:00
vabene1111
b8f74af41c add supporting options to readme 2022-06-02 16:54:07 +02:00
vabene1111
07f78bb7b8 space management page progress 2022-06-02 16:20:52 +02:00
AliveDevil
1679d820a7 Add django-admin export and import commands, making dump-data and loaddata django-scopes compatible 2022-06-02 14:26:28 +02:00
Oliver Cervera
b3bbb0b156 Translated using Weblate (Italian)
Currently translated at 57.7% (239 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/it/
2022-06-01 22:32:20 +00:00
Oliver Cervera
8afd73394d Translated using Weblate (Italian)
Currently translated at 82.1% (434 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/it/
2022-06-01 22:32:20 +00:00
vabene1111
2afab2aec8 invite link basics 2022-06-01 17:42:07 +02:00
vabene1111
f41e4c62d4 space manage users and permissions 2022-06-01 17:01:13 +02:00
vabene1111
c804064155 Merge branch 'develop' into feature/multi-tennancy 2022-06-01 15:36:26 +02:00
vabene1111
eeee36844d Merge pull request #1849 from TandoorRecipes/dependabot/npm_and_yarn/vue/webpack-bundle-tracker-1.5.0
Bump webpack-bundle-tracker from 1.4.0 to 1.5.0 in /vue
2022-06-01 13:47:14 +02:00
vabene1111
d4d4495f2b Merge pull request #1850 from TandoorRecipes/dependabot/npm_and_yarn/vue/typescript-4.7.2
Bump typescript from 4.5.5 to 4.7.2 in /vue
2022-06-01 13:47:05 +02:00
dependabot[bot]
0eee2d8ba5 Bump typescript from 4.5.5 to 4.7.2 in /vue
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.5.5 to 4.7.2.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.5.5...v4.7.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 05:52:58 +00:00
dependabot[bot]
fbfe00bfec Bump webpack-bundle-tracker from 1.4.0 to 1.5.0 in /vue
Bumps [webpack-bundle-tracker](https://github.com/django-webpack/webpack-bundle-tracker) from 1.4.0 to 1.5.0.
- [Release notes](https://github.com/django-webpack/webpack-bundle-tracker/releases)
- [Commits](https://github.com/django-webpack/webpack-bundle-tracker/compare/1.4.0...1.5.0)

---
updated-dependencies:
- dependency-name: webpack-bundle-tracker
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 05:52:00 +00:00
vabene1111
6e70bc3b5d Merge pull request #1848 from TandoorRecipes/dependabot/pip/boto3-1.24.0
Bump boto3 from 1.23.10 to 1.24.0
2022-06-01 07:47:27 +02:00
vabene1111
2dde6ae663 Merge pull request #1846 from TandoorRecipes/dependabot/pip/lxml-4.9.0
Bump lxml from 4.8.0 to 4.9.0
2022-06-01 07:47:20 +02:00
vabene1111
9bda43a670 Merge pull request #1847 from TandoorRecipes/dependabot/pip/pytest-factoryboy-2.4.0
Bump pytest-factoryboy from 2.3.1 to 2.4.0
2022-06-01 07:47:13 +02:00
vabene1111
ba49535bba Merge pull request #1851 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue-cli-plugin-i18n-2.3.1
Bump vue-cli-plugin-i18n from 0.6.1 to 2.3.1 in /vue
2022-06-01 07:47:05 +02:00
vabene1111
21b69f06e5 Merge pull request #1845 from TandoorRecipes/dependabot/pip/recipe-scrapers-14.2.0
Bump recipe-scrapers from 14.1.0 to 14.2.0
2022-06-01 07:46:52 +02:00
dependabot[bot]
1390b01f07 Bump vue-cli-plugin-i18n from 0.6.1 to 2.3.1 in /vue
Bumps [vue-cli-plugin-i18n](https://github.com/intlify/vue-cli-plugin-i18n) from 0.6.1 to 2.3.1.
- [Release notes](https://github.com/intlify/vue-cli-plugin-i18n/releases)
- [Changelog](https://github.com/intlify/vue-cli-plugin-i18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/intlify/vue-cli-plugin-i18n/compare/v0.6.1...v2.3.1)

---
updated-dependencies:
- dependency-name: vue-cli-plugin-i18n
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 00:14:43 +00:00
dependabot[bot]
b9dc0da249 Bump boto3 from 1.23.10 to 1.24.0
Bumps [boto3](https://github.com/boto/boto3) from 1.23.10 to 1.24.0.
- [Release notes](https://github.com/boto/boto3/releases)
- [Changelog](https://github.com/boto/boto3/blob/develop/CHANGELOG.rst)
- [Commits](https://github.com/boto/boto3/compare/1.23.10...1.24.0)

---
updated-dependencies:
- dependency-name: boto3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 00:05:18 +00:00
dependabot[bot]
6615bbb532 Bump pytest-factoryboy from 2.3.1 to 2.4.0
Bumps [pytest-factoryboy](https://github.com/pytest-dev/pytest-factoryboy) from 2.3.1 to 2.4.0.
- [Release notes](https://github.com/pytest-dev/pytest-factoryboy/releases)
- [Changelog](https://github.com/pytest-dev/pytest-factoryboy/blob/master/CHANGES.rst)
- [Commits](https://github.com/pytest-dev/pytest-factoryboy/compare/2.3.1...2.4.0)

---
updated-dependencies:
- dependency-name: pytest-factoryboy
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 00:05:09 +00:00
dependabot[bot]
b8ef6b3888 Bump lxml from 4.8.0 to 4.9.0
Bumps [lxml](https://github.com/lxml/lxml) from 4.8.0 to 4.9.0.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.8.0...lxml-4.9.0)

---
updated-dependencies:
- dependency-name: lxml
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 00:05:03 +00:00
dependabot[bot]
1fc9f74e60 Bump recipe-scrapers from 14.1.0 to 14.2.0
Bumps [recipe-scrapers](https://github.com/hhursev/recipe-scrapers) from 14.1.0 to 14.2.0.
- [Release notes](https://github.com/hhursev/recipe-scrapers/releases)
- [Commits](https://github.com/hhursev/recipe-scrapers/compare/14.1.0...14.2.0)

---
updated-dependencies:
- dependency-name: recipe-scrapers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 00:04:55 +00:00
vabene1111
ded092ed23 baiscs of space edit page 2022-05-31 21:52:59 +02:00
vabene1111
007b7294d9 join and leave spaces 2022-05-31 20:38:53 +02:00
vabene1111
b3fcfdfc96 space switcher 2022-05-31 17:48:43 +02:00
vabene1111
151461508f multi space membership basics 2022-05-31 17:38:12 +02:00
vabene1111
9affc583a3 add token endpoint 2022-05-31 15:43:04 +02:00
vabene1111
cac72df7ba refactored recipe from source endpoint 2022-05-31 15:22:27 +02:00
Bekhruz Khazratov
a6c81d8168 Translated using Weblate (Russian)
Currently translated at 82.6% (342 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ru/
2022-05-31 08:32:18 +00:00
Jesse
7aa3e49e8c Translated using Weblate (Dutch)
Currently translated at 100.0% (414 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nl/
2022-05-31 08:32:18 +00:00
Jesse
ab378f5332 Translated using Weblate (Dutch)
Currently translated at 100.0% (528 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nl/
2022-05-31 08:32:18 +00:00
vabene1111
24b0d7f8e6 removed unused library 2022-05-30 22:10:25 +02:00
vabene1111
5561a9621b copy past 2022-05-30 21:58:22 +02:00
vabene1111
3512ab7515 update wokflow files 2022-05-30 21:53:59 +02:00
vabene1111
12df4abc80 updating ci 2022-05-30 21:48:34 +02:00
vabene1111
f768aef0b9 fixed some breaking changes due to dependency updates 2022-05-30 21:42:30 +02:00
vabene1111
a6dcef4467 Merge pull request #1756 from TandoorRecipes/dependabot/npm_and_yarn/vue/axios-0.27.2
Bump axios from 0.26.1 to 0.27.2 in /vue
2022-05-30 19:56:34 +02:00
dependabot[bot]
699a6a42be Bump axios from 0.26.1 to 0.27.2 in /vue
Bumps [axios](https://github.com/axios/axios) from 0.26.1 to 0.27.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.26.1...v0.27.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:54:21 +00:00
vabene1111
9380e376c6 Merge pull request #1840 from TandoorRecipes/dependabot/pip/whitenoise-6.1.0
Bump whitenoise from 6.0.0 to 6.1.0
2022-05-30 19:53:51 +02:00
dependabot[bot]
04dd51d089 Bump whitenoise from 6.0.0 to 6.1.0
Bumps [whitenoise](https://github.com/evansd/whitenoise) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/evansd/whitenoise/releases)
- [Changelog](https://github.com/evansd/whitenoise/blob/main/docs/changelog.rst)
- [Commits](https://github.com/evansd/whitenoise/compare/6.0.0...6.1.0)

---
updated-dependencies:
- dependency-name: whitenoise
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:53:09 +00:00
vabene1111
fe19f81bcd Merge pull request #1838 from TandoorRecipes/dependabot/pip/pillow-9.1.1
Bump pillow from 9.0.1 to 9.1.1
2022-05-30 19:52:48 +02:00
vabene1111
e3711f121f Merge pull request #1841 from TandoorRecipes/dependabot/pip/pytest-factoryboy-2.3.1
Bump pytest-factoryboy from 2.1.0 to 2.3.1
2022-05-30 19:52:34 +02:00
vabene1111
075fd2fd9b Merge pull request #1843 from TandoorRecipes/dependabot/pip/boto3-1.23.10
Bump boto3 from 1.21.31 to 1.23.10
2022-05-30 19:52:20 +02:00
dependabot[bot]
662cfde691 Bump pillow from 9.0.1 to 9.1.1
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.0.1 to 9.1.1.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.0.1...9.1.1)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:51:46 +00:00
dependabot[bot]
0a6264228a Bump pytest-factoryboy from 2.1.0 to 2.3.1
Bumps [pytest-factoryboy](https://github.com/pytest-dev/pytest-factoryboy) from 2.1.0 to 2.3.1.
- [Release notes](https://github.com/pytest-dev/pytest-factoryboy/releases)
- [Changelog](https://github.com/pytest-dev/pytest-factoryboy/blob/master/CHANGES.rst)
- [Commits](https://github.com/pytest-dev/pytest-factoryboy/compare/2.1.0...2.3.1)

---
updated-dependencies:
- dependency-name: pytest-factoryboy
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:51:37 +00:00
dependabot[bot]
3f67c6d220 Bump boto3 from 1.21.31 to 1.23.10
Bumps [boto3](https://github.com/boto/boto3) from 1.21.31 to 1.23.10.
- [Release notes](https://github.com/boto/boto3/releases)
- [Changelog](https://github.com/boto/boto3/blob/develop/CHANGELOG.rst)
- [Commits](https://github.com/boto/boto3/compare/1.21.31...1.23.10)

---
updated-dependencies:
- dependency-name: boto3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:51:30 +00:00
vabene1111
4fa6fc10f8 Merge pull request #1839 from TandoorRecipes/dependabot/pip/bleach-5.0.0
Bump bleach from 4.1.0 to 5.0.0
2022-05-30 19:51:08 +02:00
vabene1111
ada811a868 Merge pull request #1837 from TandoorRecipes/dependabot/pip/markdown-3.3.7
Bump markdown from 3.3.6 to 3.3.7
2022-05-30 19:50:55 +02:00
dependabot[bot]
00132c6afa Bump markdown from 3.3.6 to 3.3.7
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.3.6 to 3.3.7.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.3.6...3.3.7)

---
updated-dependencies:
- dependency-name: markdown
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:50:42 +00:00
dependabot[bot]
da1af693a2 Bump bleach from 4.1.0 to 5.0.0
Bumps [bleach](https://github.com/mozilla/bleach) from 4.1.0 to 5.0.0.
- [Release notes](https://github.com/mozilla/bleach/releases)
- [Changelog](https://github.com/mozilla/bleach/blob/main/CHANGES)
- [Commits](https://github.com/mozilla/bleach/compare/v4.1.0...v5.0.0)

---
updated-dependencies:
- dependency-name: bleach
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:50:31 +00:00
vabene1111
a9d9c03cc0 Merge pull request #1836 from TandoorRecipes/dependabot/pip/recipe-scrapers-14.1.0
Bump recipe-scrapers from 13.32.1 to 14.1.0
2022-05-30 19:50:18 +02:00
vabene1111
0e1522db12 Merge pull request #1835 from TandoorRecipes/dependabot/pip/cryptography-37.0.2
Bump cryptography from 37.0.1 to 37.0.2
2022-05-30 19:50:14 +02:00
vabene1111
df04d6b58d Merge pull request #1834 from TandoorRecipes/dependabot/pip/django-cors-headers-3.12.0
Bump django-cors-headers from 3.11.0 to 3.12.0
2022-05-30 19:50:09 +02:00
vabene1111
b098b6d148 Merge pull request #1833 from TandoorRecipes/dependabot/pip/django-auth-ldap-4.1.0
Bump django-auth-ldap from 4.0.0 to 4.1.0
2022-05-30 19:50:04 +02:00
dependabot[bot]
24bc6a1a8a Bump recipe-scrapers from 13.32.1 to 14.1.0
Bumps [recipe-scrapers](https://github.com/hhursev/recipe-scrapers) from 13.32.1 to 14.1.0.
- [Release notes](https://github.com/hhursev/recipe-scrapers/releases)
- [Commits](https://github.com/hhursev/recipe-scrapers/compare/13.32.1...14.1.0)

---
updated-dependencies:
- dependency-name: recipe-scrapers
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:48:56 +00:00
dependabot[bot]
64abf6d785 Bump django-cors-headers from 3.11.0 to 3.12.0
Bumps [django-cors-headers](https://github.com/adamchainz/django-cors-headers) from 3.11.0 to 3.12.0.
- [Release notes](https://github.com/adamchainz/django-cors-headers/releases)
- [Changelog](https://github.com/adamchainz/django-cors-headers/blob/main/HISTORY.rst)
- [Commits](https://github.com/adamchainz/django-cors-headers/compare/3.11.0...3.12.0)

---
updated-dependencies:
- dependency-name: django-cors-headers
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:48:56 +00:00
vabene1111
f156722456 Merge pull request #1752 from TandoorRecipes/dependabot/pip/pytest-7.1.2
Bump pytest from 7.1.1 to 7.1.2
2022-05-30 19:48:16 +02:00
dependabot[bot]
d641a3fa48 Bump cryptography from 37.0.1 to 37.0.2
Bumps [cryptography](https://github.com/pyca/cryptography) from 37.0.1 to 37.0.2.
- [Release notes](https://github.com/pyca/cryptography/releases)
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/37.0.1...37.0.2)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:47:17 +00:00
dependabot[bot]
29760defd0 Bump django-auth-ldap from 4.0.0 to 4.1.0
Bumps [django-auth-ldap](https://github.com/django-auth-ldap/django-auth-ldap) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/django-auth-ldap/django-auth-ldap/releases)
- [Changelog](https://github.com/django-auth-ldap/django-auth-ldap/blob/master/docs/changes.rst)
- [Commits](https://github.com/django-auth-ldap/django-auth-ldap/compare/4.0.0...4.1.0)

---
updated-dependencies:
- dependency-name: django-auth-ldap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:47:16 +00:00
dependabot[bot]
5eb822089d Bump pytest from 7.1.1 to 7.1.2
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.1.1 to 7.1.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.1.1...7.1.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:47:07 +00:00
vabene1111
53414ec1df Merge pull request #1753 from TandoorRecipes/dependabot/pip/jinja2-3.1.2
Bump jinja2 from 3.1.1 to 3.1.2
2022-05-30 19:46:47 +02:00
vabene1111
cd3f0ba739 Merge pull request #1751 from TandoorRecipes/dependabot/pip/beautifulsoup4-4.11.1
Bump beautifulsoup4 from 4.10.0 to 4.11.1
2022-05-30 19:46:42 +02:00
vabene1111
74152d2409 Merge pull request #1750 from TandoorRecipes/dependabot/pip/django-scopes-1.2.0.post1
Bump django-scopes from 1.2.0 to 1.2.0.post1
2022-05-30 19:46:37 +02:00
dependabot[bot]
8f7a4a31c8 Bump beautifulsoup4 from 4.10.0 to 4.11.1
Bumps [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) from 4.10.0 to 4.11.1.

---
updated-dependencies:
- dependency-name: beautifulsoup4
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:46:32 +00:00
dependabot[bot]
c5f11c1625 Bump jinja2 from 3.1.1 to 3.1.2
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.1 to 3.1.2.
- [Release notes](https://github.com/pallets/jinja/releases)
- [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/jinja/compare/3.1.1...3.1.2)

---
updated-dependencies:
- dependency-name: jinja2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 17:46:20 +00:00
vabene1111
f0eb295696 Merge pull request #1754 from TandoorRecipes/dependabot/pip/django-webpack-loader-1.5.0
Bump django-webpack-loader from 1.4.1 to 1.5.0
2022-05-30 19:45:54 +02:00
vabene1111
c86fe0690b Merge pull request #1755 from TandoorRecipes/dependabot/npm_and_yarn/vue/workbox-precaching-6.5.3
Bump workbox-precaching from 6.5.2 to 6.5.3 in /vue
2022-05-30 19:45:50 +02:00
vabene1111
2f088d03bb Merge pull request #1757 from TandoorRecipes/dependabot/npm_and_yarn/vue/vue-cookies-1.8.1
Bump vue-cookies from 1.7.4 to 1.8.1 in /vue
2022-05-30 19:45:42 +02:00
vabene1111
1195dd445a Merge pull request #1759 from TandoorRecipes/dependabot/npm_and_yarn/vue/eslint-plugin-vue-8.7.1
Bump eslint-plugin-vue from 8.5.0 to 8.7.1 in /vue
2022-05-30 19:45:36 +02:00
vabene1111
71c5835909 Added translation using Weblate (Ukrainian) 2022-05-30 16:42:02 +00:00
vabene1111
423e042492 Added translation using Weblate (Ukrainian) 2022-05-30 16:41:36 +00:00
Oleh Astappiev
37c87b4375 fix: ingredients table out of page bounds 2022-05-29 18:25:18 +02:00
Oleh Astappiev
43666e1f63 fix: improve recipe toolbar visualization on mobile and position of elements 2022-05-29 17:42:40 +02:00
Oleh Astappiev
d5dd64acd2 fix: improve buttons visualization on mobile 2022-05-29 17:41:51 +02:00
Oleh Astappiev
b0c3ea0934 fix: make menu icons centered on mobile 2022-05-29 17:16:18 +02:00
Oleh Astappiev
ab446590a2 fix: add some space in multi-row lists of elements on mobile 2022-05-29 17:02:21 +02:00
Oleh Astappiev
3478ff17f8 fix: recipe's step header out of view on mobile in edit mode 2022-05-29 16:56:13 +02:00
Frank Poppe
932e7c8912 Translated using Weblate (Spanish)
Currently translated at 37.4% (155 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2022-05-28 16:32:21 +00:00
Frank Poppe
6e7a769d79 Translated using Weblate (German)
Currently translated at 89.6% (371 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/de/
2022-05-28 16:32:21 +00:00
Frank Poppe
8602de6ce1 Translated using Weblate (Spanish)
Currently translated at 52.6% (278 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2022-05-28 16:32:21 +00:00
Tobias Reinmann
faee71943f Translated using Weblate (German)
Currently translated at 90.9% (480 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/de/
2022-05-28 16:32:21 +00:00
vabene1111
0e2a27ad41 Merge branch 'develop' 2022-05-25 18:53:18 +02:00
vabene1111
c064e8970f compiled messages 2022-05-25 17:58:29 +02:00
Krisztian Doka
b8ef7ae39d Translated using Weblate (Hungarian)
Currently translated at 92.2% (487 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/hu/
2022-05-24 20:32:14 +00:00
Krisztian Doka
702f3de061 Added translation using Weblate (Hungarian) 2022-05-23 19:50:50 +00:00
Ramon Aixa Juan
f278d7f6d0 Translated using Weblate (Spanish)
Currently translated at 8.2% (34 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2022-05-23 11:32:17 +00:00
Ramon Aixa Juan
221c1b523b Translated using Weblate (Spanish)
Currently translated at 52.2% (276 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2022-05-23 11:32:17 +00:00
Ramon Aixa Juan
d00b6a2e85 Translated using Weblate (Catalan)
Currently translated at 91.0% (481 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/ca/
2022-05-22 11:20:51 +00:00
César Blanco Guillamon
e03c285f14 Translated using Weblate (Spanish)
Currently translated at 5.3% (22 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/es/
2022-05-21 17:32:19 +00:00
Tomasz Klimczak
0ec1f334c0 Translated using Weblate (Polish)
Currently translated at 100.0% (414 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2022-05-21 17:32:19 +00:00
Laura
b637cbeabc Translated using Weblate (French)
Currently translated at 90.3% (374 of 414 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/fr/
2022-05-21 17:32:18 +00:00
César Blanco Guillamon
943f873855 Translated using Weblate (Spanish)
Currently translated at 51.3% (271 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2022-05-19 10:10:33 +00:00
César Blanco Guillamon
49cebb400a Added translation using Weblate (Spanish) 2022-05-19 10:10:33 +00:00
Anu
0ed9225c05 Grammatical errors
Spotted several errors in sentence structure, punctuation, capitalization and other grammatical issues. Most changes are minor and any sentences that have been restructured have been re-written with great contemplation to keep the original meaning intact. This is my first open source contribution attempt so please let me know if this is appropriate. I am willing to help improve other pages of the docs as well if this work is considered helpful!
2022-05-19 00:27:24 +05:30
vabene1111
991fbdad3a fixed localization of create shopping auto form 2022-05-18 16:49:25 +02:00
vabene1111
34e95cd25b improved mobile rendering on ingerdient editor 2022-05-18 16:44:27 +02:00
vabene1111
8bc06fef34 Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2022-05-18 16:27:11 +02:00
vabene1111
6aba5c3661 fixed plan to eat tag delimeter 2022-05-18 16:27:07 +02:00
vabene1111
876bd49ee5 Merge pull request #1793 from smilerz/url_import_test
fixed spuce eats test
2022-05-18 16:25:30 +02:00
vabene1111
9435c5a380 changed order for reverse auth middleware 2022-05-18 16:09:37 +02:00
vabene1111
94c915e23a fixed advanced search field configuration cookie expiery 2022-05-18 16:06:55 +02:00
vabene1111
9ac8641c13 dont make first step header as default if others are not 2022-05-18 15:55:58 +02:00
vabene1111
0fe06cf2df fixed random search ordering 2022-05-18 15:54:02 +02:00
vabene1111
f872f994f1 fixed import failure with leading commas in input strings 2022-05-18 15:29:03 +02:00
vabene1111
87c2ff73e8 Merge branch 'develop' 2022-05-18 14:38:01 +02:00
Gabriel Tapias
27bb4c9bb8 Translated using Weblate (Spanish)
Currently translated at 48.1% (254 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/es/
2022-05-17 21:32:15 +00:00
dependabot[bot]
c10e0fd7bc Bump eslint-plugin-vue from 8.5.0 to 8.7.1 in /vue
Bumps [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) from 8.5.0 to 8.7.1.
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/compare/v8.5.0...v8.7.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-vue
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-17 20:13:02 +00:00
dependabot[bot]
48d302020c Bump vue-cookies from 1.7.4 to 1.8.1 in /vue
Bumps [vue-cookies](https://github.com/cmp-cc/vue-cookies) from 1.7.4 to 1.8.1.
- [Release notes](https://github.com/cmp-cc/vue-cookies/releases)
- [Commits](https://github.com/cmp-cc/vue-cookies/compare/v1.7.4...v1.8.1)

---
updated-dependencies:
- dependency-name: vue-cookies
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-17 20:12:23 +00:00
dependabot[bot]
b31b3ccd23 Bump workbox-precaching from 6.5.2 to 6.5.3 in /vue
Bumps [workbox-precaching](https://github.com/googlechrome/workbox) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/googlechrome/workbox/releases)
- [Commits](https://github.com/googlechrome/workbox/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: workbox-precaching
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-17 20:11:21 +00:00
vabene1111
ac647c5ee8 more JS nonsense 2022-05-17 22:00:36 +02:00
vabene1111
3cec891aa1 added missing dependency 2022-05-17 21:57:43 +02:00
vabene1111
3633b9724b fixed image deletion error 2022-05-17 21:53:10 +02:00
vabene1111
420b5c093f updated some dependencies 2022-05-17 21:43:52 +02:00
vabene1111
9bb55dd746 Merge pull request #1758 from TandoorRecipes/dependabot/npm_and_yarn/vue/kangc/v-md-editor-1.7.11
Bump @kangc/v-md-editor from 1.7.9 to 1.7.11 in /vue
2022-05-17 21:38:00 +02:00
dependabot[bot]
1759ad3587 Bump @kangc/v-md-editor from 1.7.9 to 1.7.11 in /vue
Bumps [@kangc/v-md-editor](https://github.com/code-farmer-i/vue-markdown-editor) from 1.7.9 to 1.7.11.
- [Release notes](https://github.com/code-farmer-i/vue-markdown-editor/releases)
- [Changelog](https://github.com/code-farmer-i/vue-markdown-editor/blob/dev/docs/changelog.md)
- [Commits](https://github.com/code-farmer-i/vue-markdown-editor/compare/v1.7.9...v1.7.11)

---
updated-dependencies:
- dependency-name: "@kangc/v-md-editor"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-17 19:30:34 +00:00
vabene1111
956693b7ca changed view mode of file viewer downloadable files
changed it so that the file is always downloaded so that opened files do not open in the application context (to prevent possible XSS issues)
2022-05-17 21:27:40 +02:00
vabene1111
7b2117c019 improved output sanitization of several views 2022-05-17 21:24:27 +02:00
vabene1111
d48fe26a35 added url validation to all server requests 2022-05-17 18:04:43 +02:00
Kaibu
7fd5fca0cf changed mobile logo to png version aswell 2022-05-13 15:11:04 +02:00
smilerz
37e215a4ea fixed spuce eats test 2022-05-11 14:18:14 -05:00
dependabot[bot]
ab5400efad Bump django-webpack-loader from 1.4.1 to 1.5.0
Bumps [django-webpack-loader](https://github.com/django-webpack/django-webpack-loader) from 1.4.1 to 1.5.0.
- [Release notes](https://github.com/django-webpack/django-webpack-loader/releases)
- [Changelog](https://github.com/django-webpack/django-webpack-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/django-webpack/django-webpack-loader/compare/1.4.1...1.5.0)

---
updated-dependencies:
- dependency-name: django-webpack-loader
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-11 18:43:24 +00:00
dependabot[bot]
258ecd476c Bump django-scopes from 1.2.0 to 1.2.0.post1
Bumps [django-scopes](https://github.com/raphaelm/django-scopes) from 1.2.0 to 1.2.0.post1.
- [Release notes](https://github.com/raphaelm/django-scopes/releases)
- [Commits](https://github.com/raphaelm/django-scopes/commits)

---
updated-dependencies:
- dependency-name: django-scopes
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-11 18:43:07 +00:00
vabene1111
378938812c update recipe scrapers 2022-05-11 20:42:28 +02:00
vabene1111
60b494abeb workflow name 2022-05-11 20:30:17 +02:00
vabene1111
34be1dc1d7 removed notification from raspi build 2022-05-11 20:14:53 +02:00
vabene1111
d89a4620f0 meal plan remove old add to shopping 2022-05-11 19:59:04 +02:00
vabene1111
dea83b5720 fixed duplication of values in recipe editor 2022-05-11 19:31:44 +02:00
vabene1111
d9ebe3e0fb fixed original text rendering in recipe edito view 2022-05-11 19:25:48 +02:00
vabene1111
135dde247f fixed static path generation 2022-05-11 19:17:40 +02:00
vabene1111
eb7a667202 fixed cookmate importer 2022-05-11 19:10:56 +02:00
Kaibu
b3cc9967f5 Merge branch 'develop' of https://github.com/TandoorRecipes/recipes into develop 2022-05-11 17:10:18 +02:00
Kaibu
7276cea3d5 multiple ux fixes 2022-05-11 17:10:12 +02:00
vabene1111
c0c996622e made shopping new entry translatable 2022-05-11 17:06:34 +02:00
vabene1111
5556555bca fixed paprika servings import 2022-05-11 17:05:47 +02:00
vabene1111
55a84494c9 fixed issue with plan to eat importer 2022-05-11 16:53:20 +02:00
vabene1111
74d778dcb8 compiled messages 2022-05-11 16:45:34 +02:00
vabene1111
156d68f1b8 added link to shopping recipes 2022-05-11 16:42:52 +02:00
vabene1111
cb59a6340d Merge pull request #1788 from gloriousDan/fix-import
Fix import with recipe-scrapers
2022-05-11 16:37:41 +02:00
vabene1111
5eb013cc2f Merge branch 'develop' of https://github.com/vabene1111/recipes into develop 2022-05-11 16:22:18 +02:00
vabene1111
dafb26b500 updated raspi docs 2022-05-11 16:22:13 +02:00
vabene1111
d9416a42dc Merge pull request #1786 from gloriousDan/dockerfile-armv7
Build pillow for armv7/ raspi
2022-05-11 16:17:45 +02:00
Jesse
ad88eff9e3 Translated using Weblate (Dutch)
Currently translated at 100.0% (528 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/nl/
2022-05-10 15:32:17 +00:00
zeon
4d4f623adf Translated using Weblate (Bulgarian)
Currently translated at 100.0% (412 of 412 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/bg/
2022-05-10 15:32:16 +00:00
Mathias Rasmussen
ac9c9cd4e3 Translated using Weblate (Danish)
Currently translated at 100.0% (528 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/da/
2022-05-10 15:32:15 +00:00
Jesse
580eeef6b7 Translated using Weblate (Dutch)
Currently translated at 100.0% (412 of 412 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/nl/
2022-05-10 15:32:13 +00:00
zeon
f25f5a26cf Translated using Weblate (Bulgarian)
Currently translated at 100.0% (528 of 528 strings)

Translation: Tandoor/Recipes Backend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-backend/bg/
2022-05-10 15:32:11 +00:00
Mathias Rasmussen
972d43c2a2 Translated using Weblate (Danish)
Currently translated at 100.0% (412 of 412 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/da/
2022-05-10 15:32:09 +00:00
Daniel Schulz
2a7475c435 Call scrape_me first when scraping from url 2022-05-10 00:08:37 +02:00
Daniel Schulz
71b41efe6c Build pillow for armv7/ raspi 2022-05-09 13:24:59 +02:00
zeon
33a7fee1cc Added translation using Weblate (Bulgarian) 2022-05-08 21:25:53 +00:00
zeon
fa7fb644ea Added translation using Weblate (Bulgarian) 2022-05-08 20:44:02 +00:00
Mathias Rasmussen
13b996171a Translated using Weblate (Danish)
Currently translated at 1.9% (8 of 412 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/da/
2022-05-07 16:49:26 +00:00
Kim Dannemand
77bb3870bf Translated using Weblate (Danish)
Currently translated at 1.9% (8 of 412 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/da/
2022-05-07 16:49:26 +00:00
vabene1111
9863303a5e Merge remote-tracking branch 'origin/develop' into develop 2022-05-06 20:32:14 +02:00
vabene1111
0caccc3da8 updated it and ru languages 2022-05-06 20:31:57 +02:00
vabene1111
b75427b86d Added translation using Weblate (Danish) 2022-05-06 18:30:41 +00:00
vabene1111
054c4ec61a Added translation using Weblate (Danish) 2022-05-06 18:30:05 +00:00
vabene1111
8da21f9914 added specific build files for raspi (armv7) 2022-05-06 20:28:20 +02:00
vabene1111
99ba512862 Merge branch 'beta' into develop 2022-05-06 20:24:27 +02:00
vabene1111
eab59fcbd8 Update docker-publish-latest-raspi.yml 2022-05-06 16:08:13 +02:00
vabene1111
484da2200e added some debug to auto add shopping signal 2022-05-06 15:34:28 +02:00
vabene1111
330bb6d954 testing extra raspi build 2022-05-06 15:07:54 +02:00
axeron2036
d4b6c8da04 Translated using Weblate (Russian)
Currently translated at 80.3% (331 of 412 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/ru/
2022-05-06 06:32:14 +00:00
Tomasz Klimczak
a5ef438cfe Translated using Weblate (Polish)
Currently translated at 100.0% (412 of 412 strings)

Translation: Tandoor/Recipes Frontend
Translate-URL: http://translate.tandoor.dev/projects/tandoor/recipes-frontend/pl/
2022-05-04 19:32:09 +00:00
vabene1111
de196c716b build test openssl 2022-05-04 20:33:27 +02:00
vabene1111
cb248a1f19 beta build test libressl 2022-05-04 20:33:10 +02:00
vabene1111
df2f1b2b7c testing armv7 build solutuin
taken from https://github.com/healthchecks/healthchecks/issues/568#issuecomment-942047344
2022-05-04 17:18:25 +02:00
vabene1111
36e26d8009 Merge branch 'master' into beta 2022-05-04 17:18:08 +02:00
vabene1111
a5973de02b Merge branch 'develop' 2022-05-04 17:11:35 +02:00
vabene1111
68f272bc25 fixed adding supermarket category to supermarket frontend desync 2022-05-04 15:20:40 +02:00
vabene1111
26ff3f56ea Merge branch 'develop' into beta 2022-05-03 16:58:44 +02:00
vabene1111
483bc8f1b7 Merge branch 'develop' into beta 2022-04-29 21:58:13 +02:00
vabene1111
ba493e3e19 Merge branch 'develop' into beta 2022-04-25 09:40:04 +02:00
Veit Kunz
095befd9b7 Fix some issues to improve the print output 2022-04-14 14:26:36 +02:00
nough
0ae1ecd867 Update backup.md
Added manual backup method first draft
2022-02-20 00:59:56 +00:00
469 changed files with 82522 additions and 40154 deletions

View File

@@ -3,7 +3,6 @@ npm-debug.log
Dockerfile*
docker-compose*
.dockerignore
.git
.gitignore
README.md
LICENSE

View File

@@ -2,6 +2,10 @@
# when unset: 1 (true) - dont unset this, just for development
DEBUG=0
SQL_DEBUG=0
DEBUG_TOOLBAR=0
# Gunicorn log level for debugging (default value is "info" when unset)
# (see https://docs.gunicorn.org/en/stable/settings.html#loglevel for available settings)
# GUNICORN_LOG_LEVEL="debug"
# HTTP port to bind to
# TANDOOR_PORT=8080
@@ -9,9 +13,18 @@ SQL_DEBUG=0
# hosts the application can run under e.g. recipes.mydomain.com,cooking.mydomain.com,...
ALLOWED_HOSTS=*
# Cross Site Request Forgery protection
# (https://docs.djangoproject.com/en/4.2/ref/settings/#std-setting-CSRF_TRUSTED_ORIGINS)
# CSRF_TRUSTED_ORIGINS = []
# Cross Origin Resource Sharing
# (https://github.com/adamchainz/django-cors-header)
# CORS_ALLOW_ALL_ORIGINS = True
# random secret key, use for example `base64 /dev/urandom | head -c50` to generate one
# ---------------------------- REQUIRED -------------------------
# ---------------------------- AT LEAST ONE REQUIRED -------------------------
SECRET_KEY=
SECRET_KEY_FILE=
# ---------------------------------------------------------------
# your default timezone See https://timezonedb.com/time-zones for a list of timezones
@@ -23,8 +36,9 @@ DB_ENGINE=django.db.backends.postgresql
POSTGRES_HOST=db_recipes
POSTGRES_PORT=5432
POSTGRES_USER=djangouser
# ---------------------------- REQUIRED -------------------------
# ---------------------------- AT LEAST ONE REQUIRED -------------------------
POSTGRES_PASSWORD=
POSTGRES_PASSWORD_FILE=
# ---------------------------------------------------------------
POSTGRES_DB=djangodb
@@ -68,6 +82,10 @@ SHOPPING_MIN_AUTOSYNC_INTERVAL=5
# when unset: 1 (true) - this is temporary until an appropriate amount of time has passed for everyone to migrate
GUNICORN_MEDIA=0
# GUNICORN SERVER RELATED SETTINGS (see https://docs.gunicorn.org/en/stable/design.html#how-many-workers for recommended settings)
# GUNICORN_WORKERS=1
# GUNICORN_THREADS=1
# S3 Media settings: store mediafiles in s3 or any compatible storage backend (e.g. minio)
# as long as S3_ACCESS_KEY is not set S3 features are disabled
# S3_ACCESS_KEY=
@@ -77,6 +95,7 @@ GUNICORN_MEDIA=0
# S3_QUERYSTRING_AUTH=1 # default true, set to 0 to serve media from a public bucket without signed urls
# S3_QUERYSTRING_EXPIRE=3600 # number of seconds querystring are valid for
# S3_ENDPOINT_URL= # when using a custom endpoint like minio
# S3_CUSTOM_DOMAIN= # when using a CDN/proxy to S3 (see https://github.com/TandoorRecipes/recipes/issues/1943)
# Email Settings, see https://docs.djangoproject.com/en/3.2/ref/settings/#email-host
# Required for email confirmation and password reset (automatically activates if host is set)
@@ -91,10 +110,12 @@ GUNICORN_MEDIA=0
# prefix used for account related emails (default "[Tandoor Recipes] ")
# ACCOUNT_EMAIL_SUBJECT_PREFIX=
# allow authentication via reverse proxy (e.g. authelia), leave off if you dont know what you are doing
# see docs for more information https://vabene1111.github.io/recipes/features/authentication/
# allow authentication via the REMOTE-USER header (can be used for e.g. authelia).
# ATTENTION: Leave off if you don't know what you are doing! Enabling this without proper configuration will enable anybody
# to login with any username!
# See docs for additional information: https://docs.tandoor.dev/features/authentication/#reverse-proxy-authentication
# when unset: 0 (false)
REVERSE_PROXY_AUTH=0
REMOTE_USER_AUTH=0
# Default settings for spaces, apply per space and can be changed in the admin view
# SPACE_DEFAULT_MAX_RECIPES=0 # 0=unlimited recipes
@@ -102,7 +123,8 @@ REVERSE_PROXY_AUTH=0
# SPACE_DEFAULT_MAX_FILES=0 # Maximum file storage for space in MB. 0 for unlimited, -1 to disable file upload.
# SPACE_DEFAULT_ALLOW_SHARING=1 # Allow users to share recipes with public links
# allow people to create accounts on your application instance (without an invite link)
# allow people to create local accounts on your application instance (without an invite link)
# social accounts will always be able to sign up
# when unset: 0 (false)
# ENABLE_SIGNUP=0
@@ -121,7 +143,7 @@ REVERSE_PROXY_AUTH=0
# ENABLE_METRICS=0
# allows you to setup OAuth providers
# see docs for more information https://vabene1111.github.io/recipes/features/authentication/
# see docs for more information https://docs.tandoor.dev/features/authentication/
# SOCIAL_PROVIDERS = allauth.socialaccount.providers.github, allauth.socialaccount.providers.nextcloud,
# Should a newly created user from a social provider get assigned to the default space and given permission by default ?
@@ -152,6 +174,7 @@ REVERSE_PROXY_AUTH=0
#AUTH_LDAP_BIND_PASSWORD=
#AUTH_LDAP_USER_SEARCH_BASE_DN=
#AUTH_LDAP_TLS_CACERTFILE=
#AUTH_LDAP_START_TLS=
# Enables exporting PDF (see export docs)
# Disabled by default, uncomment to enable

View File

@@ -14,3 +14,8 @@ updates:
directory: "/vue/"
schedule:
interval: "monthly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"

View File

@@ -0,0 +1,110 @@
name: Build Docker Container with open data plugin installed
on: push
jobs:
build-container:
name: Build ${{ matrix.name }} Container
runs-on: ubuntu-latest
if: github.repository_owner == 'TandoorRecipes'
continue-on-error: ${{ matrix.continue-on-error }}
permissions:
contents: read
packages: write
strategy:
matrix:
include:
# Standard build config
- name: Standard
dockerfile: Dockerfile
platforms: linux/amd64,linux/arm64
suffix: ""
continue-on-error: false
steps:
- uses: actions/checkout@v3
- name: Get version number
id: get_version
run: |
if [[ "$GITHUB_REF" = refs/tags/* ]]; then
echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT
elif [[ "$GITHUB_REF" = refs/heads/beta ]]; then
echo VERSION=beta >> $GITHUB_OUTPUT
else
echo VERSION=develop >> $GITHUB_OUTPUT
fi
# clone open data plugin
- name: clone open data plugin repo
uses: actions/checkout@master
with:
repository: TandoorRecipes/open_data_plugin
ref: master
path: ./recipes/plugins/open_data_plugin
# Build Vue frontend
- uses: actions/setup-node@v3
with:
node-version: '18'
cache: yarn
cache-dependency-path: vue/yarn.lock
- name: Install dependencies
working-directory: ./vue
run: yarn install --frozen-lockfile
- name: Build dependencies
working-directory: ./vue
run: yarn build
- name: Setup Open Data Plugin Links
working-directory: ./recipes/plugins/open_data_plugin
run: python setup_repo.py
- name: Build Open Data Frontend
working-directory: ./recipes/plugins/open_data_plugin/vue
run: yarn build
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
if: github.secret_source == 'Actions'
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
if: github.secret_source == 'Actions'
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
vabene1111/recipes
ghcr.io/TandoorRecipes/recipes
flavor: |
latest=false
suffix=${{ matrix.suffix }}
tags: |
type=raw,value=latest,suffix=-open-data-plugin,enable=${{ startsWith(github.ref, 'refs/tags/') }}
type=semver,suffix=-open-data-plugin,pattern={{version}}
type=semver,suffix=-open-data-plugin,pattern={{major}}.{{minor}}
type=semver,suffix=-open-data-plugin,pattern={{major}}
type=ref,suffix=-open-data-plugin,event=branch
- name: Build and Push
uses: docker/build-push-action@v5
with:
context: .
file: ${{ matrix.dockerfile }}
pull: true
push: ${{ github.secret_source == 'Actions' }}
platforms: ${{ matrix.platforms }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max

126
.github/workflows/build-docker.yml vendored Normal file
View File

@@ -0,0 +1,126 @@
name: Build Docker Container
on: push
jobs:
build-container:
name: Build ${{ matrix.name }} Container
runs-on: ubuntu-latest
if: github.repository_owner == 'TandoorRecipes'
continue-on-error: ${{ matrix.continue-on-error }}
permissions:
contents: read
packages: write
strategy:
matrix:
include:
# Standard build config
- name: Standard
dockerfile: Dockerfile
platforms: linux/amd64,linux/arm64,linux/arm/v7
suffix: ""
continue-on-error: false
steps:
- uses: actions/checkout@v3
- name: Get version number
id: get_version
run: |
if [[ "$GITHUB_REF" = refs/tags/* ]]; then
echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT
elif [[ "$GITHUB_REF" = refs/heads/beta ]]; then
echo VERSION=beta >> $GITHUB_OUTPUT
else
echo VERSION=develop >> $GITHUB_OUTPUT
fi
# Build Vue frontend
- uses: actions/setup-node@v3
with:
node-version: '18'
cache: yarn
cache-dependency-path: vue/yarn.lock
- name: Install dependencies
working-directory: ./vue
run: yarn install --frozen-lockfile
- name: Build dependencies
working-directory: ./vue
run: yarn build
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
if: github.secret_source == 'Actions'
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
if: github.secret_source == 'Actions'
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
vabene1111/recipes
ghcr.io/TandoorRecipes/recipes
flavor: |
latest=false
suffix=${{ matrix.suffix }}
tags: |
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=ref,event=branch
- name: Build and Push
uses: docker/build-push-action@v5
with:
context: .
file: ${{ matrix.dockerfile }}
pull: true
push: ${{ github.secret_source == 'Actions' }}
platforms: ${{ matrix.platforms }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
notify-stable:
name: Notify Stable
runs-on: ubuntu-latest
needs: build-container
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Set tag name
run: |
# Strip "refs/tags/" prefix
echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
# Send stable discord notification
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2
with:
args: '🚀 Version {{ VERSION }} of tandoor has been released 🥳 Check it out https://github.com/vabene1111/recipes/releases/tag/{{ VERSION }}'
notify-beta:
name: Notify Beta
runs-on: ubuntu-latest
needs: build-container
if: github.ref == 'refs/heads/beta'
steps:
# Send beta discord notification
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_BETA_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2
with:
args: '🚀 The BETA Image has been updated! 🥳'

View File

@@ -1,6 +1,6 @@
name: Continuous Integration
on: [push]
on: [push, pull_request]
jobs:
build:
@@ -12,15 +12,15 @@ jobs:
python-version: ['3.10']
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v1
uses: actions/setup-python@v4
with:
python-version: '3.10'
# Build Vue frontend
- uses: actions/setup-node@v2
- uses: actions/setup-node@v3
with:
node-version: '14'
node-version: '18'
- name: Install Vue dependencies
working-directory: ./vue
run: yarn install
@@ -29,7 +29,8 @@ jobs:
run: yarn build
- name: Install Django dependencies
run: |
sudo apt-get install -y libsasl2-dev python-dev libldap2-dev libssl-dev
sudo apt-get -y update
sudo apt-get install -y libsasl2-dev python3-dev libldap2-dev libssl-dev
python -m pip install --upgrade pip
pip install -r requirements.txt
python3 manage.py collectstatic --noinput

View File

@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
@@ -25,7 +25,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@v2
# Override language selection by uncommenting this and choosing your languages
with:
languages: python, javascript
@@ -47,6 +47,6 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v2
with:
languages: javascript, python

View File

@@ -1,46 +0,0 @@
name: publish beta image docker
on:
push:
branches:
- 'beta'
jobs:
build:
if: github.repository_owner == 'TandoorRecipes'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
# Update Version number
- name: Update version file
uses: DamianReeves/write-file-action@v1.0
with:
path: recipes/version.py
contents: |
VERSION_NUMBER = 'beta'
BUILD_REF = '${{ github.sha }}'
write-mode: overwrite
# Build Vue frontend
- uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
working-directory: ./vue
run: yarn install
- name: Build dependencies
working-directory: ./vue
run: yarn build
# Build container
- name: Build and publish image
uses: ilteoood/docker_buildx@master
with:
publish: true
imageName: vabene1111/recipes
tag: beta
dockerUser: ${{ secrets.DOCKER_USERNAME }}
dockerPassword: ${{ secrets.DOCKER_PASSWORD }}
# Send discord notification
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_BETA_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2
with:
args: '🚀 The BETA Image has been updated! 🥳'

View File

@@ -1,42 +0,0 @@
name: publish dev image docker
on:
push:
branches:
- '*'
- '*/*'
- '!master'
jobs:
build:
if: github.repository_owner == 'TandoorRecipes'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
# Update Version number
- name: Update version file
uses: DamianReeves/write-file-action@v1.0
with:
path: recipes/version.py
contents: |
VERSION_NUMBER = 'develop'
BUILD_REF = '${{ github.sha }}'
write-mode: overwrite
# Build Vue frontend
- uses: actions/setup-node@v2
with:
node-version: '14'
- name: Clear Cache
working-directory: ./vue
run: yarn cache clean --all
- name: Install dependencies
working-directory: ./vue
run: yarn install
- name: Build dependencies
working-directory: ./vue
run: yarn build
# Build container
- name: Publish to Registry
uses: elgohr/Publish-Docker-Github-Action@2.13
with:
name: vabene1111/recipes
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

View File

@@ -1,44 +0,0 @@
name: publish latest image docker
on:
push:
tags:
- '*'
jobs:
build:
if: github.repository_owner == 'TandoorRecipes'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Get version number
id: get_version
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
# Update Version number
- name: Update version file
uses: DamianReeves/write-file-action@v1.0
with:
path: recipes/version.py
contents: |
VERSION_NUMBER = '${{ steps.get_version.outputs.VERSION }}'
BUILD_REF = '${{ github.sha }}'
write-mode: overwrite
# Build Vue frontend
- uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
working-directory: ./vue
run: yarn install
- name: Build dependencies
working-directory: ./vue
run: yarn build
# Build container
- name: Build and publish image
uses: ilteoood/docker_buildx@master
with:
publish: true
imageName: vabene1111/recipes
platform: linux/amd64,linux/arm64
tag: latest
dockerUser: ${{ secrets.DOCKER_USERNAME }}
dockerPassword: ${{ secrets.DOCKER_PASSWORD }}

View File

@@ -1,53 +0,0 @@
name: publish tagged release docker
on:
release:
types: [published]
jobs:
build:
if: github.repository_owner == 'TandoorRecipes'
runs-on: ubuntu-latest
name: Build image job
steps:
- name: Checkout master
uses: actions/checkout@master
- name: Get version number
id: get_version
run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
# Update Version number
- name: Update version file
uses: DamianReeves/write-file-action@v1.0
with:
path: recipes/version.py
contents: |
VERSION_NUMBER = '${{ steps.get_version.outputs.VERSION }}'
BUILD_REF = '${{ github.sha }}'
write-mode: overwrite
# Build Vue frontend
- uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
working-directory: ./vue
run: yarn install
- name: Build dependencies
working-directory: ./vue
run: yarn build
# Build container
- name: Build and publish image
uses: ilteoood/docker_buildx@master
with:
publish: true
imageName: vabene1111/recipes
platform: linux/amd64,linux/arm64
tag: ${{ steps.get_version.outputs.VERSION }}
dockerUser: ${{ secrets.DOCKER_USERNAME }}
dockerPassword: ${{ secrets.DOCKER_PASSWORD }}
# Send discord notification
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }}
uses: Ilshidur/action-discord@0.3.2
with:
args: '🚀 Version {{ EVENT_PAYLOAD.release.tag_name }} of tandoor has been released 🥳 Check it out https://github.com/vabene1111/recipes/releases/tag/{{ EVENT_PAYLOAD.release.tag_name }}'

View File

@@ -9,8 +9,8 @@ jobs:
if: github.repository_owner == 'TandoorRecipes'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.x
- run: pip install mkdocs-material mkdocs-include-markdown-plugin

3
.gitignore vendored
View File

@@ -74,13 +74,16 @@ mediafiles/
\.env
staticfiles/
postgresql/
data/
/docker-compose.override.yml
vue/node_modules
plugins
.vscode/
vetur.config.js
cookbook/static/vue
vue/webpack-stats.json
cookbook/templates/sw.js
.prettierignore
vue/.yarn

8
.idea/dictionaries/vaben.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<component name="ProjectDictionaryState">
<dictionary name="vaben">
<words>
<w>pinia</w>
<w>selfhosted</w>
</words>
</dictionary>
</component>

View File

@@ -6,6 +6,7 @@
<w>csrftoken</w>
<w>gunicorn</w>
<w>ical</w>
<w>invitelink</w>
<w>mealie</w>
<w>pepperplate</w>
<w>safron</w>

2
.idea/recipes.iml generated
View File

@@ -18,7 +18,7 @@
<excludeFolder url="file://$MODULE_DIR$/staticfiles" />
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.9 (recipes)" jdkType="Python SDK" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TemplatesService">

2
.idea/vcs.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@@ -1,7 +1,7 @@
FROM python:3.10-alpine3.15
FROM python:3.10-alpine3.18
#Install all dependencies.
RUN apk add --no-cache postgresql-libs postgresql-client gettext zlib libjpeg libwebp libxml2-dev libxslt-dev py-cryptography openldap
RUN apk add --no-cache postgresql-libs postgresql-client gettext zlib libjpeg libwebp libxml2-dev libxslt-dev openldap git
#Print all logs without buffering it.
ENV PYTHONUNBUFFERED 1
@@ -15,7 +15,11 @@ WORKDIR /opt/recipes
COPY requirements.txt ./
RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev libressl-dev libffi-dev cargo openssl-dev openldap-dev python3-dev && \
RUN \
if [ `apk --print-arch` = "armv7" ]; then \
printf "[global]\nextra-index-url=https://www.piwheels.org/simple\n" > /etc/pip.conf ; \
fi
RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev openssl-dev libffi-dev cargo openldap-dev python3-dev && \
echo -n "INPUT ( libldap.so )" > /usr/lib/libldap_r.so && \
python -m venv venv && \
/opt/recipes/venv/bin/python -m pip install --upgrade pip && \
@@ -26,5 +30,11 @@ RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-de
#Copy project and execute it.
COPY . ./
# collect information from git repositories
RUN /opt/recipes/venv/bin/python version.py
# delete git repositories to reduce image size
RUN find . -type d -name ".git" | xargs rm -rf
RUN chmod +x boot.sh
ENTRYPOINT ["/opt/recipes/boot.sh"]

View File

@@ -61,9 +61,17 @@ a public page.
Documentation can be found [here](https://docs.tandoor.dev/).
## Contributing
## Support our work
Tandoor is developed by volunteers in their free time just because its fun. That said earning
some money with the project allows us to spend more time on it and thus make improvements we otherwise couldn't.
Because of that there are several ways you can support us
You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. We are always welcoming new pull requests containing bug fixes, refactors and new features. We have a list of tasks and bugs on our issue tracker on Github. Please comment on issues if you want to contribute with, to avoid duplicating effort.
- **GitHub Sponsors** You can sponsor contributors of this project on GitHub: [vabene1111](https://github.com/sponsors/vabene1111)
- **Host at Hetzner** We have been very happy customers of Hetzner for multiple years for all of our projects. If you want to get into self-hosting or are tired of the expensive big providers, their cloud servers are a great place to get started. When you sign up via our [referral link](https://hetzner.cloud/?ref=ISdlrLmr9kGj) you will get 20€ worth of cloud credits and we get a small kickback too.
- **Let us host for you** We are offering a [hosted version](https://app.tandoor.dev) where all profits support us and the development of tandoor (currently only available in germany).
## Contributing
Contributions are welcome but please read [this](https://docs.tandoor.dev/contribute/#contributing-code) **BEFORE** contributing anything!
## Your Feedback

View File

@@ -6,5 +6,4 @@ Since this software is still considered beta/WIP support is always only given fo
## Reporting a Vulnerability
Please open a normal public issue if you have any security related concerns. If you feel like the issue should not be discussed in
public just open a generic issue and we will discuss further communication there (since GitHub does not allow everyone to create a security advisory :/).
Please use GitHub Security Advisories to report any kind of security vulnerabilities.

25
boot.sh
View File

@@ -2,6 +2,9 @@
source venv/bin/activate
TANDOOR_PORT="${TANDOOR_PORT:-8080}"
GUNICORN_WORKERS="${GUNICORN_WORKERS:-3}"
GUNICORN_THREADS="${GUNICORN_THREADS:-2}"
GUNICORN_LOG_LEVEL="${GUNICORN_LOG_LEVEL:-'info'}"
NGINX_CONF_FILE=/opt/recipes/nginx/conf.d/Recipes.conf
display_warning() {
@@ -16,9 +19,14 @@ if [ ! -f "$NGINX_CONF_FILE" ] && [ $GUNICORN_MEDIA -eq 0 ]; then
display_warning "Nginx configuration file could not be found at the default location!\nPath: ${NGINX_CONF_FILE}"
fi
# SECRET_KEY must be set in .env file
# SECRET_KEY (or a valid file at SECRET_KEY_FILE) must be set in .env file
if [ -f "${SECRET_KEY_FILE}" ]; then
export SECRET_KEY=$(cat "$SECRET_KEY_FILE")
fi
if [ -z "${SECRET_KEY}" ]; then
display_warning "The environment variable 'SECRET_KEY' is not set but REQUIRED for running Tandoor!"
display_warning "The environment variable 'SECRET_KEY' (or 'SECRET_KEY_FILE' that points to an existing file) is not set but REQUIRED for running Tandoor!"
fi
@@ -27,11 +35,16 @@ echo "Waiting for database to be ready..."
attempt=0
max_attempts=20
if [ "${DB_ENGINE}" != 'django.db.backends.sqlite3' ]; then
if [ "${DB_ENGINE}" == 'django.db.backends.postgresql' ] || [ "${DATABASE_URL}" == 'postgres'* ]; then
# POSTGRES_PASSWORD (or a valid file at POSTGRES_PASSWORD_FILE) must be set in .env file
if [ -f "${POSTGRES_PASSWORD_FILE}" ]; then
export POSTGRES_PASSWORD=$(cat "$POSTGRES_PASSWORD_FILE")
fi
# POSTGRES_PASSWORD must be set in .env file
if [ -z "${POSTGRES_PASSWORD}" ]; then
display_warning "The environment variable 'POSTGRES_PASSWORD' is not set but REQUIRED for running Tandoor!"
display_warning "The environment variable 'POSTGRES_PASSWORD' (or 'POSTGRES_PASSWORD_FILE' that points to an existing file) is not set but REQUIRED for running Tandoor!"
fi
while pg_isready --host=${POSTGRES_HOST} --port=${POSTGRES_PORT} --user=${POSTGRES_USER} -q; status=$?; attempt=$((attempt+1)); [ $status -ne 0 ] && [ $attempt -le $max_attempts ]; do
@@ -63,4 +76,4 @@ echo "Done"
chmod -R 755 /opt/recipes/mediafiles
exec gunicorn -b :$TANDOOR_PORT --access-logfile - --error-logfile - --log-level INFO recipes.wsgi
exec gunicorn -b :$TANDOOR_PORT --workers $GUNICORN_WORKERS --threads $GUNICORN_THREADS --access-logfile - --error-logfile - --log-level $GUNICORN_LOG_LEVEL recipes.wsgi

View File

@@ -10,12 +10,13 @@ from treebeard.forms import movenodeform_factory
from cookbook.managers import DICTIONARY
from .models import (BookmarkletImport, Comment, CookLog, Food, FoodInheritField, ImportLog,
Ingredient, InviteLink, Keyword, MealPlan, MealType, NutritionInformation,
from .models import (BookmarkletImport, Comment, CookLog, Food, ImportLog, Ingredient, InviteLink,
Keyword, MealPlan, MealType, NutritionInformation, Property, PropertyType,
Recipe, RecipeBook, RecipeBookEntry, RecipeImport, SearchPreference, ShareLink,
ShoppingList, ShoppingListEntry, ShoppingListRecipe, Space, Step, Storage,
Supermarket, SupermarketCategory, SupermarketCategoryRelation, Sync, SyncLog,
TelegramBot, Unit, UserFile, UserPreference, ViewLog, Automation)
TelegramBot, Unit, UnitConversion, UserFile, UserPreference, UserSpace,
ViewLog)
class CustomUserAdmin(UserAdmin):
@@ -32,46 +33,14 @@ admin.site.unregister(Group)
@admin.action(description='Delete all data from a space')
def delete_space_action(modeladmin, request, queryset):
for space in queryset:
CookLog.objects.filter(space=space).delete()
ViewLog.objects.filter(space=space).delete()
ImportLog.objects.filter(space=space).delete()
BookmarkletImport.objects.filter(space=space).delete()
Comment.objects.filter(recipe__space=space).delete()
Keyword.objects.filter(space=space).delete()
Ingredient.objects.filter(space=space).delete()
Food.objects.filter(space=space).delete()
Unit.objects.filter(space=space).delete()
Step.objects.filter(space=space).delete()
NutritionInformation.objects.filter(space=space).delete()
RecipeBookEntry.objects.filter(book__space=space).delete()
RecipeBook.objects.filter(space=space).delete()
MealType.objects.filter(space=space).delete()
MealPlan.objects.filter(space=space).delete()
ShareLink.objects.filter(space=space).delete()
Recipe.objects.filter(space=space).delete()
RecipeImport.objects.filter(space=space).delete()
SyncLog.objects.filter(sync__space=space).delete()
Sync.objects.filter(space=space).delete()
Storage.objects.filter(space=space).delete()
ShoppingListEntry.objects.filter(shoppinglist__space=space).delete()
ShoppingListRecipe.objects.filter(shoppinglist__space=space).delete()
ShoppingList.objects.filter(space=space).delete()
SupermarketCategoryRelation.objects.filter(supermarket__space=space).delete()
SupermarketCategory.objects.filter(space=space).delete()
Supermarket.objects.filter(space=space).delete()
InviteLink.objects.filter(space=space).delete()
UserFile.objects.filter(space=space).delete()
Automation.objects.filter(space=space).delete()
space.safe_delete()
class SpaceAdmin(admin.ModelAdmin):
list_display = ('name', 'created_by', 'max_recipes', 'max_users', 'max_file_storage_mb', 'allow_sharing')
search_fields = ('name', 'created_by__username')
autocomplete_fields = ('created_by',)
filter_horizontal = ('food_inherit',)
list_filter = ('max_recipes', 'max_users', 'max_file_storage_mb', 'allow_sharing')
date_hierarchy = 'created_at'
actions = [delete_space_action]
@@ -80,15 +49,26 @@ class SpaceAdmin(admin.ModelAdmin):
admin.site.register(Space, SpaceAdmin)
class UserSpaceAdmin(admin.ModelAdmin):
list_display = ('user', 'space',)
search_fields = ('user__username', 'space__name',)
filter_horizontal = ('groups',)
autocomplete_fields = ('user', 'space',)
admin.site.register(UserSpace, UserSpaceAdmin)
class UserPreferenceAdmin(admin.ModelAdmin):
list_display = ('name', 'space', 'theme', 'nav_color', 'default_page', 'search_style',) # TODO add new fields
search_fields = ('user__username', 'space__name')
list_filter = ('theme', 'nav_color', 'default_page', 'search_style')
list_display = ('name', 'theme', 'nav_color', 'default_page',)
search_fields = ('user__username',)
list_filter = ('theme', 'nav_color', 'default_page',)
date_hierarchy = 'created_at'
filter_horizontal = ('plan_share', 'shopping_share',)
@staticmethod
def name(obj):
return obj.user.get_user_name()
return obj.user.get_user_display_name()
admin.site.register(UserPreference, UserPreferenceAdmin)
@@ -101,7 +81,7 @@ class SearchPreferenceAdmin(admin.ModelAdmin):
@staticmethod
def name(obj):
return obj.user.get_user_name()
return obj.user.get_user_display_name()
admin.site.register(SearchPreference, SearchPreferenceAdmin)
@@ -176,9 +156,16 @@ class KeywordAdmin(TreeAdmin):
admin.site.register(Keyword, KeywordAdmin)
@admin.action(description='Delete Steps not part of a Recipe.')
def delete_unattached_steps(modeladmin, request, queryset):
with scopes_disabled():
Step.objects.filter(recipe=None).delete()
class StepAdmin(admin.ModelAdmin):
list_display = ('name', 'order',)
search_fields = ('name',)
actions = [delete_unattached_steps]
admin.site.register(Step, StepAdmin)
@@ -203,9 +190,9 @@ class RecipeAdmin(admin.ModelAdmin):
@staticmethod
def created_by(obj):
return obj.created_by.get_user_name()
return obj.created_by.get_user_display_name()
if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']:
if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.postgresql':
actions = [rebuild_index]
@@ -227,9 +214,24 @@ class FoodAdmin(TreeAdmin):
admin.site.register(Food, FoodAdmin)
class UnitConversionAdmin(admin.ModelAdmin):
list_display = ('base_amount', 'base_unit', 'food', 'converted_amount', 'converted_unit')
search_fields = ('food__name', 'unit__name')
admin.site.register(UnitConversion, UnitConversionAdmin)
@admin.action(description='Delete Ingredients not part of a Recipe.')
def delete_unattached_ingredients(modeladmin, request, queryset):
with scopes_disabled():
Ingredient.objects.filter(step__recipe=None).delete()
class IngredientAdmin(admin.ModelAdmin):
list_display = ('food', 'amount', 'unit')
search_fields = ('food__name', 'unit__name')
actions = [delete_unattached_ingredients]
admin.site.register(Ingredient, IngredientAdmin)
@@ -242,7 +244,7 @@ class CommentAdmin(admin.ModelAdmin):
@staticmethod
def name(obj):
return obj.created_by.get_user_name()
return obj.created_by.get_user_display_name()
admin.site.register(Comment, CommentAdmin)
@@ -261,7 +263,7 @@ class RecipeBookAdmin(admin.ModelAdmin):
@staticmethod
def user_name(obj):
return obj.created_by.get_user_name()
return obj.created_by.get_user_display_name()
admin.site.register(RecipeBook, RecipeBookAdmin)
@@ -275,11 +277,11 @@ admin.site.register(RecipeBookEntry, RecipeBookEntryAdmin)
class MealPlanAdmin(admin.ModelAdmin):
list_display = ('user', 'recipe', 'meal_type', 'date')
list_display = ('user', 'recipe', 'meal_type', 'from_date', 'to_date')
@staticmethod
def user(obj):
return obj.created_by.get_user_name()
return obj.created_by.get_user_display_name()
admin.site.register(MealPlan, MealPlanAdmin)
@@ -312,6 +314,7 @@ admin.site.register(InviteLink, InviteLinkAdmin)
class CookLogAdmin(admin.ModelAdmin):
list_display = ('recipe', 'created_by', 'created_at', 'rating', 'servings')
search_fields = ('recipe__name', 'space__name',)
admin.site.register(CookLog, CookLogAdmin)
@@ -345,6 +348,20 @@ class ShareLinkAdmin(admin.ModelAdmin):
admin.site.register(ShareLink, ShareLinkAdmin)
class PropertyTypeAdmin(admin.ModelAdmin):
list_display = ('id', 'name')
admin.site.register(PropertyType, PropertyTypeAdmin)
class PropertyAdmin(admin.ModelAdmin):
list_display = ('property_amount', 'property_type')
admin.site.register(Property, PropertyAdmin)
class NutritionInformationAdmin(admin.ModelAdmin):
list_display = ('id',)

View File

@@ -1,62 +0,0 @@
import django_filters
from django.conf import settings
from django.contrib.postgres.search import TrigramSimilarity
from django.db.models import Q
from django.utils.translation import gettext as _
from django_scopes import scopes_disabled
from cookbook.forms import MultiSelectWidget
from cookbook.models import Food, Keyword, Recipe
with scopes_disabled():
class RecipeFilter(django_filters.FilterSet):
name = django_filters.CharFilter(method='filter_name')
keywords = django_filters.ModelMultipleChoiceFilter(
queryset=Keyword.objects.none(),
widget=MultiSelectWidget,
method='filter_keywords'
)
foods = django_filters.ModelMultipleChoiceFilter(
queryset=Food.objects.none(),
widget=MultiSelectWidget,
method='filter_foods',
label=_('Ingredients')
)
def __init__(self, data=None, *args, **kwargs):
space = kwargs.pop('space')
super().__init__(data, *args, **kwargs)
self.filters['foods'].queryset = Food.objects.filter(space=space).all()
self.filters['keywords'].queryset = Keyword.objects.filter(space=space).all()
@staticmethod
def filter_keywords(queryset, name, value):
if not name == 'keywords':
return queryset
for x in value:
queryset = queryset.filter(keywords=x)
return queryset
@staticmethod
def filter_foods(queryset, name, value):
if not name == 'foods':
return queryset
for x in value:
queryset = queryset.filter(steps__ingredients__food__name=x).distinct()
return queryset
@staticmethod
def filter_name(queryset, name, value):
if not name == 'name':
return queryset
if settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2',
'django.db.backends.postgresql']:
queryset = queryset.annotate(similarity=TrigramSimilarity('name', value), ).filter(
Q(similarity__gt=0.1) | Q(name__unaccent__icontains=value)).order_by('-similarity')
else:
queryset = queryset.filter(name__icontains=value)
return queryset
class Meta:
model = Recipe
fields = ['name', 'keywords', 'foods', 'internal']

View File

@@ -9,8 +9,8 @@ from django_scopes import scopes_disabled
from django_scopes.forms import SafeModelChoiceField, SafeModelMultipleChoiceField
from hcaptcha.fields import hCaptchaField
from .models import (Comment, Food, InviteLink, Keyword, MealPlan, MealType, Recipe, RecipeBook,
RecipeBookEntry, SearchPreference, Space, Storage, Sync, User, UserPreference)
from .models import (Comment, Food, InviteLink, Keyword, Recipe, RecipeBook, RecipeBookEntry,
SearchPreference, Space, Storage, Sync, User, UserPreference)
class SelectWidget(widgets.Select):
@@ -37,19 +37,15 @@ class UserPreferenceForm(forms.ModelForm):
prefix = 'preference'
def __init__(self, *args, **kwargs):
if x := kwargs.get('instance', None):
space = x.space
else:
space = kwargs.pop('space')
space = kwargs.pop('space')
super().__init__(*args, **kwargs)
self.fields['plan_share'].queryset = User.objects.filter(userpreference__space=space).all()
self.fields['plan_share'].queryset = User.objects.filter(userspace__space=space).all()
class Meta:
model = UserPreference
fields = (
'default_unit', 'use_fractions', 'use_kj', 'theme', 'nav_color',
'sticky_navbar', 'default_page', 'show_recent', 'search_style',
'plan_share', 'ingredient_decimals', 'comments', 'left_handed',
'sticky_navbar', 'default_page', 'plan_share', 'ingredient_decimals', 'comments', 'left_handed', 'show_step_ingredients',
)
labels = {
@@ -60,37 +56,33 @@ class UserPreferenceForm(forms.ModelForm):
'nav_color': _('Navbar color'),
'sticky_navbar': _('Sticky navbar'),
'default_page': _('Default page'),
'show_recent': _('Show recent recipes'),
'search_style': _('Search style'),
'plan_share': _('Plan sharing'),
'ingredient_decimals': _('Ingredient decimal places'),
'shopping_auto_sync': _('Shopping list auto sync period'),
'comments': _('Comments'),
'left_handed': _('Left-handed mode')
'left_handed': _('Left-handed mode'),
'show_step_ingredients': _('Show step ingredients table')
}
help_texts = {
'nav_color': _('Color of the top navigation bar. Not all colors work with all themes, just try them out!'),
# noqa: E501
'default_unit': _('Default Unit to be used when inserting a new ingredient into a recipe.'), # noqa: E501
'default_unit': _('Default Unit to be used when inserting a new ingredient into a recipe.'),
'use_fractions': _(
'Enables support for fractions in ingredient amounts (e.g. convert decimals to fractions automatically)'),
# noqa: E501
'use_kj': _('Display nutritional energy amounts in joules instead of calories'), # noqa: E501
'use_kj': _('Display nutritional energy amounts in joules instead of calories'),
'plan_share': _('Users with whom newly created meal plans should be shared by default.'),
'shopping_share': _('Users with whom to share shopping lists.'),
# noqa: E501
'show_recent': _('Show recently viewed recipes on search page.'), # noqa: E501
'ingredient_decimals': _('Number of decimals to round ingredients.'), # noqa: E501
'comments': _('If you want to be able to create and see comments underneath recipes.'), # noqa: E501
'ingredient_decimals': _('Number of decimals to round ingredients.'),
'comments': _('If you want to be able to create and see comments underneath recipes.'),
'shopping_auto_sync': _(
'Setting to 0 will disable auto sync. When viewing a shopping list the list is updated every set seconds to sync changes someone else might have made. Useful when shopping with multiple people but might use a little bit ' # noqa: E501
'of mobile data. If lower than instance limit it is reset when saving.' # noqa: E501
'Setting to 0 will disable auto sync. When viewing a shopping list the list is updated every set seconds to sync changes someone else might have made. Useful when shopping with multiple people but might use a little bit '
'of mobile data. If lower than instance limit it is reset when saving.'
),
'sticky_navbar': _('Makes the navbar stick to the top of the page.'), # noqa: E501
'sticky_navbar': _('Makes the navbar stick to the top of the page.'),
'mealplan_autoadd_shopping': _('Automatically add meal plan ingredients to shopping list.'),
'mealplan_autoexclude_onhand': _('Exclude ingredients that are on hand.'),
'left_handed': _('Will optimize the UI for use with your left hand.')
'left_handed': _('Will optimize the UI for use with your left hand.'),
'show_step_ingredients': _('Add ingredients table next to recipe steps. Applies at creation time for manually created and URL imported recipes. Individual steps can be overridden in the edit recipe view.')
}
widgets = {
@@ -162,6 +154,7 @@ class ImportExportBase(forms.Form):
COOKBOOKAPP = 'COOKBOOKAPP'
COPYMETHAT = 'COPYMETHAT'
COOKMATE = 'COOKMATE'
REZEPTSUITEDE = 'REZEPTSUITEDE'
PDF = 'PDF'
type = forms.ChoiceField(choices=(
@@ -170,12 +163,30 @@ class ImportExportBase(forms.Form):
(PEPPERPLATE, 'Pepperplate'), (RECETTETEK, 'RecetteTek'), (RECIPESAGE, 'Recipe Sage'), (DOMESTICA, 'Domestica'),
(MEALMASTER, 'MealMaster'), (REZKONV, 'RezKonv'), (OPENEATS, 'Openeats'), (RECIPEKEEPER, 'Recipe Keeper'),
(PLANTOEAT, 'Plantoeat'), (COOKBOOKAPP, 'CookBookApp'), (COPYMETHAT, 'CopyMeThat'), (PDF, 'PDF'), (MELARECIPES, 'Melarecipes'),
(COOKMATE, 'Cookmate')
(COOKMATE, 'Cookmate'), (REZEPTSUITEDE, 'Recipesuite.de')
))
class MultipleFileInput(forms.ClearableFileInput):
allow_multiple_selected = True
class MultipleFileField(forms.FileField):
def __init__(self, *args, **kwargs):
kwargs.setdefault("widget", MultipleFileInput())
super().__init__(*args, **kwargs)
def clean(self, data, initial=None):
single_file_clean = super().clean
if isinstance(data, (list, tuple)):
result = [single_file_clean(d, initial) for d in data]
else:
result = single_file_clean(data, initial)
return result
class ImportForm(ImportExportBase):
files = forms.FileField(required=True, widget=forms.ClearableFileInput(attrs={'multiple': True}))
files = MultipleFileField(required=True)
duplicates = forms.BooleanField(help_text=_(
'To prevent duplicates recipes with the same name as existing ones are ignored. Check this box to import everything.'),
required=False)
@@ -312,50 +323,6 @@ class ImportRecipeForm(forms.ModelForm):
}
# TODO deprecate
class MealPlanForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
space = kwargs.pop('space')
super().__init__(*args, **kwargs)
self.fields['recipe'].queryset = Recipe.objects.filter(space=space).all()
self.fields['meal_type'].queryset = MealType.objects.filter(space=space).all()
self.fields['shared'].queryset = User.objects.filter(userpreference__space=space).all()
def clean(self):
cleaned_data = super(MealPlanForm, self).clean()
if cleaned_data['title'] == '' and cleaned_data['recipe'] is None:
raise forms.ValidationError(
_('You must provide at least a recipe or a title.')
)
return cleaned_data
class Meta:
model = MealPlan
fields = (
'recipe', 'title', 'meal_type', 'note',
'servings', 'date', 'shared'
)
help_texts = {
'shared': _('You can list default users to share recipes with in the settings.'), # noqa: E501
'note': _('You can use markdown to format this field. See the <a href="/docs/markdown/">docs here</a>')
# noqa: E501
}
widgets = {
'recipe': SelectWidget,
'date': DateWidget,
'shared': MultiSelectWidget
}
field_classes = {
'recipe': SafeModelChoiceField,
'meal_type': SafeModelChoiceField,
'shared': SafeModelMultipleChoiceField,
}
class InviteLinkForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
@@ -496,8 +463,8 @@ class ShoppingPreferenceForm(forms.ModelForm):
help_texts = {
'shopping_share': _('Users will see all items you add to your shopping list. They must add you to see items on their list.'),
'shopping_auto_sync': _(
'Setting to 0 will disable auto sync. When viewing a shopping list the list is updated every set seconds to sync changes someone else might have made. Useful when shopping with multiple people but might use a little bit ' # noqa: E501
'of mobile data. If lower than instance limit it is reset when saving.' # noqa: E501
'Setting to 0 will disable auto sync. When viewing a shopping list the list is updated every set seconds to sync changes someone else might have made. Useful when shopping with multiple people but might use a little bit '
'of mobile data. If lower than instance limit it is reset when saving.'
),
'mealplan_autoadd_shopping': _('Automatically add meal plan ingredients to shopping list.'),
'mealplan_autoinclude_related': _('When adding a meal plan to the shopping list (manually or automatically), include all related recipes.'),
@@ -541,11 +508,12 @@ class SpacePreferenceForm(forms.ModelForm):
class Meta:
model = Space
fields = ('food_inherit', 'reset_food_inherit', 'show_facet_count')
fields = ('food_inherit', 'reset_food_inherit', 'use_plural')
help_texts = {
'food_inherit': _('Fields on food that should be inherited by default.'),
'show_facet_count': _('Show recipe counts on search filters'), }
'use_plural': _('Use the plural form for units and food inside this space.'),
}
widgets = {
'food_inherit': MultiSelectWidget

View File

@@ -1,11 +1,10 @@
import datetime
from django.conf import settings
from gettext import gettext as _
from allauth.account.adapter import DefaultAccountAdapter
from django.conf import settings
from django.contrib import messages
from django.core.cache import caches
from gettext import gettext as _
from cookbook.models import InviteLink
@@ -14,13 +13,16 @@ class AllAuthCustomAdapter(DefaultAccountAdapter):
def is_open_for_signup(self, request):
"""
Whether to allow sign ups.
Whether to allow sign-ups.
"""
signup_token = False
if 'signup_token' in request.session and InviteLink.objects.filter(valid_until__gte=datetime.datetime.today(), used_by=None, uuid=request.session['signup_token']).exists():
if 'signup_token' in request.session and InviteLink.objects.filter(
valid_until__gte=datetime.datetime.today(), used_by=None, uuid=request.session['signup_token']).exists():
signup_token = True
if (request.resolver_match.view_name == 'account_signup' or request.resolver_match.view_name == 'socialaccount_signup') and not settings.ENABLE_SIGNUP and not signup_token:
if request.resolver_match.view_name == 'account_signup' and not settings.ENABLE_SIGNUP and not signup_token:
return False
elif request.resolver_match.view_name == 'socialaccount_signup' and len(settings.SOCIAL_PROVIDERS) < 1:
return False
else:
return super(AllAuthCustomAdapter, self).is_open_for_signup(request)
@@ -31,7 +33,10 @@ class AllAuthCustomAdapter(DefaultAccountAdapter):
default = datetime.datetime.now()
c = caches['default'].get_or_set(email, default, timeout=360)
if c == default:
super(AllAuthCustomAdapter, self).send_mail(template_prefix, email, context)
try:
super(AllAuthCustomAdapter, self).send_mail(template_prefix, email, context)
except Exception: # dont fail signup just because confirmation mail could not be send
pass
else:
messages.add_message(self.request, messages.ERROR, _('In order to prevent spam, the requested email was not send. Please wait a few minutes and try again.'))
else:

View File

@@ -0,0 +1,227 @@
import re
from django.core.cache import caches
from django.db.models.functions import Lower
from cookbook.models import Automation
class AutomationEngine:
request = None
source = None
use_cache = None
food_aliases = None
keyword_aliases = None
unit_aliases = None
never_unit = None
transpose_words = None
regex_replace = {
Automation.DESCRIPTION_REPLACE: None,
Automation.INSTRUCTION_REPLACE: None,
Automation.FOOD_REPLACE: None,
Automation.UNIT_REPLACE: None,
Automation.NAME_REPLACE: None,
}
def __init__(self, request, use_cache=True, source=None):
self.request = request
self.use_cache = use_cache
if not source:
self.source = "default_string_to_avoid_false_regex_match"
else:
self.source = source
def apply_keyword_automation(self, keyword):
keyword = keyword.strip()
if self.use_cache and self.keyword_aliases is None:
self.keyword_aliases = {}
KEYWORD_CACHE_KEY = f'automation_keyword_alias_{self.request.space.pk}'
if c := caches['default'].get(KEYWORD_CACHE_KEY, None):
self.keyword_aliases = c
caches['default'].touch(KEYWORD_CACHE_KEY, 30)
else:
for a in Automation.objects.filter(space=self.request.space, disabled=False, type=Automation.KEYWORD_ALIAS).only('param_1', 'param_2').order_by('order').all():
self.keyword_aliases[a.param_1.lower()] = a.param_2
caches['default'].set(KEYWORD_CACHE_KEY, self.keyword_aliases, 30)
else:
self.keyword_aliases = {}
if self.keyword_aliases:
try:
keyword = self.keyword_aliases[keyword.lower()]
except KeyError:
pass
else:
if automation := Automation.objects.filter(space=self.request.space, type=Automation.KEYWORD_ALIAS, param_1__iexact=keyword, disabled=False).order_by('order').first():
return automation.param_2
return keyword
def apply_unit_automation(self, unit):
unit = unit.strip()
if self.use_cache and self.unit_aliases is None:
self.unit_aliases = {}
UNIT_CACHE_KEY = f'automation_unit_alias_{self.request.space.pk}'
if c := caches['default'].get(UNIT_CACHE_KEY, None):
self.unit_aliases = c
caches['default'].touch(UNIT_CACHE_KEY, 30)
else:
for a in Automation.objects.filter(space=self.request.space, disabled=False, type=Automation.UNIT_ALIAS).only('param_1', 'param_2').order_by('order').all():
self.unit_aliases[a.param_1.lower()] = a.param_2
caches['default'].set(UNIT_CACHE_KEY, self.unit_aliases, 30)
else:
self.unit_aliases = {}
if self.unit_aliases:
try:
unit = self.unit_aliases[unit.lower()]
except KeyError:
pass
else:
if automation := Automation.objects.filter(space=self.request.space, type=Automation.UNIT_ALIAS, param_1__iexact=unit, disabled=False).order_by('order').first():
return automation.param_2
return self.apply_regex_replace_automation(unit, Automation.UNIT_REPLACE)
def apply_food_automation(self, food):
food = food.strip()
if self.use_cache and self.food_aliases is None:
self.food_aliases = {}
FOOD_CACHE_KEY = f'automation_food_alias_{self.request.space.pk}'
if c := caches['default'].get(FOOD_CACHE_KEY, None):
self.food_aliases = c
caches['default'].touch(FOOD_CACHE_KEY, 30)
else:
for a in Automation.objects.filter(space=self.request.space, disabled=False, type=Automation.FOOD_ALIAS).only('param_1', 'param_2').order_by('order').all():
self.food_aliases[a.param_1.lower()] = a.param_2
caches['default'].set(FOOD_CACHE_KEY, self.food_aliases, 30)
else:
self.food_aliases = {}
if self.food_aliases:
try:
return self.food_aliases[food.lower()]
except KeyError:
return food
else:
if automation := Automation.objects.filter(space=self.request.space, type=Automation.FOOD_ALIAS, param_1__iexact=food, disabled=False).order_by('order').first():
return automation.param_2
return self.apply_regex_replace_automation(food, Automation.FOOD_REPLACE)
def apply_never_unit_automation(self, tokens):
"""
Moves a string that should never be treated as a unit to next token and optionally replaced with default unit
e.g. NEVER_UNIT: param1: egg, param2: None would modify ['1', 'egg', 'white'] to ['1', '', 'egg', 'white']
or NEVER_UNIT: param1: egg, param2: pcs would modify ['1', 'egg', 'yolk'] to ['1', 'pcs', 'egg', 'yolk']
:param1 string: string that should never be considered a unit, will be moved to token[2]
:param2 (optional) unit as string: will insert unit string into token[1]
:return: unit as string (possibly changed by automation)
"""
if self.use_cache and self.never_unit is None:
self.never_unit = {}
NEVER_UNIT_CACHE_KEY = f'automation_never_unit_{self.request.space.pk}'
if c := caches['default'].get(NEVER_UNIT_CACHE_KEY, None):
self.never_unit = c
caches['default'].touch(NEVER_UNIT_CACHE_KEY, 30)
else:
for a in Automation.objects.filter(space=self.request.space, disabled=False, type=Automation.NEVER_UNIT).only('param_1', 'param_2').order_by('order').all():
self.never_unit[a.param_1.lower()] = a.param_2
caches['default'].set(NEVER_UNIT_CACHE_KEY, self.never_unit, 30)
else:
self.never_unit = {}
new_unit = None
alt_unit = self.apply_unit_automation(tokens[1])
never_unit = False
if self.never_unit:
try:
new_unit = self.never_unit[tokens[1].lower()]
never_unit = True
except KeyError:
return tokens
else:
if a := Automation.objects.annotate(param_1_lower=Lower('param_1')).filter(space=self.request.space, type=Automation.NEVER_UNIT, param_1_lower__in=[
tokens[1].lower(), alt_unit.lower()], disabled=False).order_by('order').first():
new_unit = a.param_2
never_unit = True
if never_unit:
tokens.insert(1, new_unit)
return tokens
def apply_transpose_automation(self, string):
"""
If two words (param_1 & param_2) are detected in sequence, swap their position in the ingredient string
:param 1: first word to detect
:param 2: second word to detect
return: new ingredient string
"""
if self.use_cache and self.transpose_words is None:
self.transpose_words = {}
TRANSPOSE_WORDS_CACHE_KEY = f'automation_transpose_words_{self.request.space.pk}'
if c := caches['default'].get(TRANSPOSE_WORDS_CACHE_KEY, None):
self.transpose_words = c
caches['default'].touch(TRANSPOSE_WORDS_CACHE_KEY, 30)
else:
i = 0
for a in Automation.objects.filter(space=self.request.space, disabled=False, type=Automation.TRANSPOSE_WORDS).only(
'param_1', 'param_2').order_by('order').all()[:512]:
self.transpose_words[i] = [a.param_1.lower(), a.param_2.lower()]
i += 1
caches['default'].set(TRANSPOSE_WORDS_CACHE_KEY, self.transpose_words, 30)
else:
self.transpose_words = {}
tokens = [x.lower() for x in string.replace(',', ' ').split()]
if self.transpose_words:
for key, value in self.transpose_words.items():
if value[0] in tokens and value[1] in tokens:
string = re.sub(rf"\b({value[0]})\W*({value[1]})\b", r"\2 \1", string, flags=re.IGNORECASE)
else:
for rule in Automation.objects.filter(space=self.request.space, type=Automation.TRANSPOSE_WORDS, disabled=False) \
.annotate(param_1_lower=Lower('param_1'), param_2_lower=Lower('param_2')) \
.filter(param_1_lower__in=tokens, param_2_lower__in=tokens).order_by('order')[:512]:
if rule.param_1 in tokens and rule.param_2 in tokens:
string = re.sub(rf"\b({rule.param_1})\W*({rule.param_2})\b", r"\2 \1", string, flags=re.IGNORECASE)
return string
def apply_regex_replace_automation(self, string, automation_type):
# TODO add warning - maybe on SPACE page? when a max of 512 automations of a specific type is exceeded (ALIAS types excluded?)
"""
Replaces strings in a recipe field that are from a matched source
field_type are Automation.type that apply regex replacements
Automation.DESCRIPTION_REPLACE
Automation.INSTRUCTION_REPLACE
Automation.FOOD_REPLACE
Automation.UNIT_REPLACE
Automation.NAME_REPLACE
regex replacment utilized the following fields from the Automation model
:param 1: source that should apply the automation in regex format ('.*' for all)
:param 2: regex pattern to match ()
:param 3: replacement string (leave blank to delete)
return: new string
"""
if self.use_cache and self.regex_replace[automation_type] is None:
self.regex_replace[automation_type] = {}
REGEX_REPLACE_CACHE_KEY = f'automation_regex_replace_{self.request.space.pk}'
if c := caches['default'].get(REGEX_REPLACE_CACHE_KEY, None):
self.regex_replace[automation_type] = c[automation_type]
caches['default'].touch(REGEX_REPLACE_CACHE_KEY, 30)
else:
i = 0
for a in Automation.objects.filter(space=self.request.space, disabled=False, type=automation_type).only(
'param_1', 'param_2', 'param_3').order_by('order').all()[:512]:
self.regex_replace[automation_type][i] = [a.param_1, a.param_2, a.param_3]
i += 1
caches['default'].set(REGEX_REPLACE_CACHE_KEY, self.regex_replace, 30)
else:
self.regex_replace[automation_type] = {}
if self.regex_replace[automation_type]:
for rule in self.regex_replace[automation_type].values():
if re.match(rule[0], (self.source)[:512]):
string = re.sub(rule[1], rule[2], string, flags=re.IGNORECASE)
else:
for rule in Automation.objects.filter(space=self.request.space, disabled=False, type=automation_type).only(
'param_1', 'param_2', 'param_3').order_by('order').all()[:512]:
if re.match(rule.param_1, (self.source)[:512]):
string = re.sub(rule.param_2, rule.param_3, string, flags=re.IGNORECASE)
return string

View File

@@ -0,0 +1,11 @@
class CacheHelper:
space = None
BASE_UNITS_CACHE_KEY = None
PROPERTY_TYPE_CACHE_KEY = None
def __init__(self, space):
self.space = space
self.BASE_UNITS_CACHE_KEY = f'SPACE_{space.id}_BASE_UNITS'
self.PROPERTY_TYPE_CACHE_KEY = f'SPACE_{space.id}_PROPERTY_TYPES'

View File

@@ -10,4 +10,5 @@ def context_settings(request):
'TERMS_URL': settings.TERMS_URL,
'PRIVACY_URL': settings.PRIVACY_URL,
'IMPRINT_URL': settings.IMPRINT_URL,
'SHOPPING_MIN_AUTOSYNC_INTERVAL': settings.SHOPPING_MIN_AUTOSYNC_INTERVAL,
}

View File

@@ -1,8 +1,7 @@
import os
import sys
from io import BytesIO
from PIL import Image
from io import BytesIO
def rescale_image_jpeg(image_object, base_width=1020):
@@ -11,7 +10,7 @@ def rescale_image_jpeg(image_object, base_width=1020):
width_percent = (base_width / float(img.size[0]))
height = int((float(img.size[1]) * float(width_percent)))
img = img.resize((base_width, height), Image.ANTIALIAS)
img = img.resize((base_width, height), Image.LANCZOS)
img_bytes = BytesIO()
img.save(img_bytes, 'JPEG', quality=90, optimize=True, icc_profile=icc_profile)
@@ -22,7 +21,7 @@ def rescale_image_png(image_object, base_width=1020):
image_object = Image.open(image_object)
wpercent = (base_width / float(image_object.size[0]))
hsize = int((float(image_object.size[1]) * float(wpercent)))
img = image_object.resize((base_width, hsize), Image.ANTIALIAS)
img = image_object.resize((base_width, hsize), Image.LANCZOS)
im_io = BytesIO()
img.save(im_io, 'PNG', quality=90)
@@ -40,7 +39,12 @@ def get_filetype(name):
# TODO also add env variable to define which images sizes should be compressed
# filetype argument can not be optional, otherwise this function will treat all images as if they were a jpeg
# Because it's no longer optional, no reason to return it
def handle_image(request, image_object, filetype):
def handle_image(request, image_object, filetype):
try:
Image.open(image_object).verify()
except Exception:
return None
if (image_object.size / 1000) > 500: # if larger than 500 kb compress
if filetype == '.jpeg' or filetype == '.jpg':
return rescale_image_jpeg(image_object)

View File

@@ -2,18 +2,16 @@ import re
import string
import unicodedata
from django.core.cache import caches
from cookbook.models import Unit, Food, Automation, Ingredient
from cookbook.helper.automation_helper import AutomationEngine
from cookbook.models import Food, Ingredient, Unit
class IngredientParser:
request = None
ignore_rules = False
food_aliases = {}
unit_aliases = {}
automation = None
def __init__(self, request, cache_mode, ignore_automations=False):
def __init__(self, request, cache_mode=True, ignore_automations=False):
"""
Initialize ingredient parser
:param request: request context (to control caching, rule ownership, etc.)
@@ -22,65 +20,8 @@ class IngredientParser:
"""
self.request = request
self.ignore_rules = ignore_automations
if cache_mode:
FOOD_CACHE_KEY = f'automation_food_alias_{self.request.space.pk}'
if c := caches['default'].get(FOOD_CACHE_KEY, None):
self.food_aliases = c
caches['default'].touch(FOOD_CACHE_KEY, 30)
else:
for a in Automation.objects.filter(space=self.request.space, disabled=False, type=Automation.FOOD_ALIAS).only('param_1', 'param_2').all():
self.food_aliases[a.param_1] = a.param_2
caches['default'].set(FOOD_CACHE_KEY, self.food_aliases, 30)
UNIT_CACHE_KEY = f'automation_unit_alias_{self.request.space.pk}'
if c := caches['default'].get(UNIT_CACHE_KEY, None):
self.unit_aliases = c
caches['default'].touch(UNIT_CACHE_KEY, 30)
else:
for a in Automation.objects.filter(space=self.request.space, disabled=False, type=Automation.UNIT_ALIAS).only('param_1', 'param_2').all():
self.unit_aliases[a.param_1] = a.param_2
caches['default'].set(UNIT_CACHE_KEY, self.unit_aliases, 30)
else:
self.food_aliases = {}
self.unit_aliases = {}
def apply_food_automation(self, food):
"""
Apply food alias automations to passed food
:param food: unit as string
:return: food as string (possibly changed by automation)
"""
if self.ignore_rules:
return food
else:
if self.food_aliases:
try:
return self.food_aliases[food]
except KeyError:
return food
else:
if automation := Automation.objects.filter(space=self.request.space, type=Automation.FOOD_ALIAS, param_1=food, disabled=False).first():
return automation.param_2
return food
def apply_unit_automation(self, unit):
"""
Apply unit alias automations to passed unit
:param unit: unit as string
:return: unit as string (possibly changed by automation)
"""
if self.ignore_rules:
return unit
else:
if self.unit_aliases:
try:
return self.unit_aliases[unit]
except KeyError:
return unit
else:
if automation := Automation.objects.filter(space=self.request.space, type=Automation.UNIT_ALIAS, param_1=unit, disabled=False).first():
return automation.param_2
return unit
if not self.ignore_rules:
self.automation = AutomationEngine(self.request, use_cache=cache_mode)
def get_unit(self, unit):
"""
@@ -91,7 +32,10 @@ class IngredientParser:
if not unit:
return None
if len(unit) > 0:
u, created = Unit.objects.get_or_create(name=self.apply_unit_automation(unit), space=self.request.space)
if self.ignore_rules:
u, created = Unit.objects.get_or_create(name=unit.strip(), space=self.request.space)
else:
u, created = Unit.objects.get_or_create(name=self.automation.apply_unit_automation(unit), space=self.request.space)
return u
return None
@@ -104,7 +48,10 @@ class IngredientParser:
if not food:
return None
if len(food) > 0:
f, created = Food.objects.get_or_create(name=self.apply_food_automation(food), space=self.request.space)
if self.ignore_rules:
f, created = Food.objects.get_or_create(name=food.strip(), space=self.request.space)
else:
f, created = Food.objects.get_or_create(name=self.automation.apply_food_automation(food), space=self.request.space)
return f
return None
@@ -126,15 +73,17 @@ class IngredientParser:
amount = 0
unit = None
note = ''
if x.strip() == '':
return amount, unit, note
did_check_frac = False
end = 0
while (end < len(x) and (x[end] in string.digits
or (
(x[end] == '.' or x[end] == ',' or x[end] == '/')
and end + 1 < len(x)
and x[end + 1] in string.digits
))):
(x[end] == '.' or x[end] == ',' or x[end] == '/')
and end + 1 < len(x)
and x[end + 1] in string.digits
))):
end += 1
if end > 0:
if "/" in x[:end]:
@@ -158,7 +107,8 @@ class IngredientParser:
if unit is not None and unit.strip() == '':
unit = None
if unit is not None and (unit.startswith('(') or unit.startswith('-')): # i dont know any unit that starts with ( or - so its likely an alternative like 1L (500ml) Water or 2-3
if unit is not None and (unit.startswith('(') or unit.startswith(
'-')): # i dont know any unit that starts with ( or - so its likely an alternative like 1L (500ml) Water or 2-3
unit = None
note = x
return amount, unit, note
@@ -221,17 +171,31 @@ class IngredientParser:
# some people/languages put amount and unit at the end of the ingredient string
# if something like this is detected move it to the beginning so the parser can handle it
if len(ingredient) < 1000 and re.search(r'^([A-z])+(.)*[1-9](\d)*\s([A-z])+', ingredient):
match = re.search(r'[1-9](\d)*\s([A-z])+', ingredient)
if len(ingredient) < 1000 and re.search(r'^([^\W\d_])+(.)*[1-9](\d)*\s*([^\W\d_])+', ingredient):
match = re.search(r'[1-9](\d)*\s*([^\W\d_])+', ingredient)
print(f'reording from {ingredient} to {ingredient[match.start():match.end()] + " " + ingredient.replace(ingredient[match.start():match.end()], "")}')
ingredient = ingredient[match.start():match.end()] + ' ' + ingredient.replace(ingredient[match.start():match.end()], '')
# if the string contains parenthesis early on remove it and place it at the end
# because its likely some kind of note
if re.match('(.){1,6}\s\((.[^\(\)])+\)\s', ingredient):
match = re.search('\((.[^\(])+\)', ingredient)
if re.match('(.){1,6}\\s\\((.[^\\(\\)])+\\)\\s', ingredient):
match = re.search('\\((.[^\\(])+\\)', ingredient)
ingredient = ingredient[:match.start()] + ingredient[match.end():] + ' ' + ingredient[match.start():match.end()]
# leading spaces before commas result in extra tokens, clean them out
ingredient = ingredient.replace(' ,', ',')
# handle "(from) - (to)" amounts by using the minimum amount and adding the range to the description
# "10.5 - 200 g XYZ" => "100 g XYZ (10.5 - 200)"
ingredient = re.sub("^(\\d+|\\d+[\\.,]\\d+) - (\\d+|\\d+[\\.,]\\d+) (.*)", "\\1 \\3 (\\1 - \\2)", ingredient)
# if amount and unit are connected add space in between
if re.match('([0-9])+([A-z])+\\s', ingredient):
ingredient = re.sub(r'(?<=([a-z])|\d)(?=(?(1)\d|[a-z]))', ' ', ingredient)
if not self.ignore_rules:
ingredient = self.automation.apply_transpose_automation(ingredient)
tokens = ingredient.split() # split at each space into tokens
if len(tokens) == 1:
# there only is one argument, that must be the food
@@ -244,6 +208,8 @@ class IngredientParser:
# three arguments if it already has a unit there can't be
# a fraction for the amount
if len(tokens) > 2:
if not self.ignore_rules:
tokens = self.automation.apply_never_unit_automation(tokens)
try:
if unit is not None:
# a unit is already found, no need to try the second argument for a fraction
@@ -290,10 +256,11 @@ class IngredientParser:
if unit_note not in note:
note += ' ' + unit_note
if unit:
unit = self.apply_unit_automation(unit.strip())
if unit and not self.ignore_rules:
unit = self.automation.apply_unit_automation(unit)
food = self.apply_food_automation(food.strip())
if food and not self.ignore_rules:
food = self.automation.apply_food_automation(food)
if len(food) > Food._meta.get_field('name').max_length: # test if food name is to long
# try splitting it at a space and taking only the first arg
if len(food.split()) > 1 and len(food.split()[0]) < Food._meta.get_field('name').max_length:
@@ -303,4 +270,7 @@ class IngredientParser:
note = food + ' ' + note
food = food[:Food._meta.get_field('name').max_length]
if len(food.strip()) == 0:
raise ValueError(f'Error parsing string {ingredient}, food cannot be empty')
return amount, unit, food, note[:Ingredient._meta.get_field('note').max_length].strip()

View File

@@ -35,6 +35,7 @@ Negative examples:
u'<p>del.icio.us</p>'
"""
from xml.etree.ElementTree import Element
import markdown
@@ -64,7 +65,7 @@ class UrlizePattern(markdown.inlinepatterns.Pattern):
else:
url = 'http://' + url
el = markdown.util.etree.Element("a")
el = Element("a")
el.set('href', url)
el.text = markdown.util.AtomicString(text)
return el
@@ -73,9 +74,9 @@ class UrlizePattern(markdown.inlinepatterns.Pattern):
class UrlizeExtension(markdown.Extension):
""" Urlize Extension for Python-Markdown. """
def extendMarkdown(self, md, md_globals):
def extendMarkdown(self, md):
""" Replace autolink with UrlizePattern """
md.inlinePatterns['autolink'] = UrlizePattern(URLIZE_RE, md)
md.inlinePatterns.register(UrlizePattern(URLIZE_RE, md), 'autolink', 120)
def makeExtension(*args, **kwargs):

View File

@@ -0,0 +1,210 @@
from cookbook.models import (Food, FoodProperty, Property, PropertyType, Supermarket,
SupermarketCategory, SupermarketCategoryRelation, Unit, UnitConversion)
class OpenDataImporter:
request = None
data = {}
slug_id_cache = {}
update_existing = False
use_metric = True
def __init__(self, request, data, update_existing=False, use_metric=True):
self.request = request
self.data = data
self.update_existing = update_existing
self.use_metric = use_metric
def _update_slug_cache(self, object_class, datatype):
self.slug_id_cache[datatype] = dict(object_class.objects.filter(space=self.request.space, open_data_slug__isnull=False).values_list('open_data_slug', 'id', ))
def import_units(self):
datatype = 'unit'
insert_list = []
for u in list(self.data[datatype].keys()):
insert_list.append(Unit(
name=self.data[datatype][u]['name'],
plural_name=self.data[datatype][u]['plural_name'],
base_unit=self.data[datatype][u]['base_unit'] if self.data[datatype][u]['base_unit'] != '' else None,
open_data_slug=u,
space=self.request.space
))
if self.update_existing:
return Unit.objects.bulk_create(insert_list, update_conflicts=True, update_fields=(
'name', 'plural_name', 'base_unit', 'open_data_slug'), unique_fields=('space', 'name',))
else:
return Unit.objects.bulk_create(insert_list, update_conflicts=True, update_fields=('open_data_slug',), unique_fields=('space', 'name',))
def import_category(self):
datatype = 'category'
insert_list = []
for k in list(self.data[datatype].keys()):
insert_list.append(SupermarketCategory(
name=self.data[datatype][k]['name'],
open_data_slug=k,
space=self.request.space
))
return SupermarketCategory.objects.bulk_create(insert_list, update_conflicts=True, update_fields=('open_data_slug',), unique_fields=('space', 'name',))
def import_property(self):
datatype = 'property'
insert_list = []
for k in list(self.data[datatype].keys()):
insert_list.append(PropertyType(
name=self.data[datatype][k]['name'],
unit=self.data[datatype][k]['unit'],
open_data_slug=k,
space=self.request.space
))
return PropertyType.objects.bulk_create(insert_list, update_conflicts=True, update_fields=('open_data_slug',), unique_fields=('space', 'name',))
def import_supermarket(self):
datatype = 'store'
self._update_slug_cache(SupermarketCategory, 'category')
insert_list = []
for k in list(self.data[datatype].keys()):
insert_list.append(Supermarket(
name=self.data[datatype][k]['name'],
open_data_slug=k,
space=self.request.space
))
# always add open data slug if matching supermarket is found, otherwise relation might fail
supermarkets = Supermarket.objects.bulk_create(insert_list, unique_fields=('space', 'name',), update_conflicts=True, update_fields=('open_data_slug',))
self._update_slug_cache(Supermarket, 'store')
insert_list = []
for k in list(self.data[datatype].keys()):
relations = []
order = 0
for c in self.data[datatype][k]['categories']:
relations.append(
SupermarketCategoryRelation(
supermarket_id=self.slug_id_cache[datatype][k],
category_id=self.slug_id_cache['category'][c],
order=order,
)
)
order += 1
SupermarketCategoryRelation.objects.bulk_create(relations, ignore_conflicts=True, unique_fields=('supermarket', 'category',))
return supermarkets
def import_food(self):
identifier_list = []
datatype = 'food'
for k in list(self.data[datatype].keys()):
identifier_list.append(self.data[datatype][k]['name'])
identifier_list.append(self.data[datatype][k]['plural_name'])
existing_objects_flat = []
existing_objects = {}
for f in Food.objects.filter(space=self.request.space).filter(name__in=identifier_list).values_list('id', 'name', 'plural_name'):
existing_objects_flat.append(f[1])
existing_objects_flat.append(f[2])
existing_objects[f[1]] = f
existing_objects[f[2]] = f
self._update_slug_cache(Unit, 'unit')
self._update_slug_cache(PropertyType, 'property')
insert_list = []
insert_list_flat = []
update_list = []
update_field_list = []
for k in list(self.data[datatype].keys()):
if not (self.data[datatype][k]['name'] in existing_objects_flat or self.data[datatype][k]['plural_name'] in existing_objects_flat):
if not (self.data[datatype][k]['name'] in insert_list_flat or self.data[datatype][k]['plural_name'] in insert_list_flat):
insert_list.append({'data': {
'name': self.data[datatype][k]['name'],
'plural_name': self.data[datatype][k]['plural_name'] if self.data[datatype][k]['plural_name'] != '' else None,
'supermarket_category_id': self.slug_id_cache['category'][self.data[datatype][k]['store_category']],
'fdc_id': self.data[datatype][k]['fdc_id'] if self.data[datatype][k]['fdc_id'] != '' else None,
'open_data_slug': k,
'space': self.request.space.id,
}})
# build a fake second flat array to prevent duplicate foods from being inserted.
# trying to insert a duplicate would throw a db error :(
insert_list_flat.append(self.data[datatype][k]['name'])
insert_list_flat.append(self.data[datatype][k]['plural_name'])
else:
if self.data[datatype][k]['name'] in existing_objects:
existing_food_id = existing_objects[self.data[datatype][k]['name']][0]
else:
existing_food_id = existing_objects[self.data[datatype][k]['plural_name']][0]
if self.update_existing:
update_field_list = ['name', 'plural_name', 'preferred_unit_id', 'preferred_shopping_unit_id', 'supermarket_category_id', 'fdc_id', 'open_data_slug', ]
update_list.append(Food(
id=existing_food_id,
name=self.data[datatype][k]['name'],
plural_name=self.data[datatype][k]['plural_name'] if self.data[datatype][k]['plural_name'] != '' else None,
supermarket_category_id=self.slug_id_cache['category'][self.data[datatype][k]['store_category']],
fdc_id=self.data[datatype][k]['fdc_id'] if self.data[datatype][k]['fdc_id'] != '' else None,
open_data_slug=k,
))
else:
update_field_list = ['open_data_slug', ]
update_list.append(Food(id=existing_food_id, open_data_slug=k, ))
Food.load_bulk(insert_list, None)
if len(update_list) > 0:
Food.objects.bulk_update(update_list, update_field_list)
self._update_slug_cache(Food, 'food')
food_property_list = []
# alias_list = []
for k in list(self.data[datatype].keys()):
for fp in self.data[datatype][k]['properties']['type_values']:
# try catch here because somettimes key "k" is not set for he food cache
try:
food_property_list.append(Property(
property_type_id=self.slug_id_cache['property'][fp['property_type']],
property_amount=fp['property_value'],
import_food_id=self.slug_id_cache['food'][k],
space=self.request.space,
))
except KeyError:
print(str(k) + ' is not in self.slug_id_cache["food"]')
Property.objects.bulk_create(food_property_list, ignore_conflicts=True, unique_fields=('space', 'import_food_id', 'property_type',))
property_food_relation_list = []
for p in Property.objects.filter(space=self.request.space, import_food_id__isnull=False).values_list('import_food_id', 'id', ):
property_food_relation_list.append(Food.properties.through(food_id=p[0], property_id=p[1]))
FoodProperty.objects.bulk_create(property_food_relation_list, ignore_conflicts=True, unique_fields=('food_id', 'property_id',))
return insert_list + update_list
def import_conversion(self):
datatype = 'conversion'
insert_list = []
for k in list(self.data[datatype].keys()):
# try catch here because sometimes key "k" is not set for he food cache
try:
insert_list.append(UnitConversion(
base_amount=self.data[datatype][k]['base_amount'],
base_unit_id=self.slug_id_cache['unit'][self.data[datatype][k]['base_unit']],
converted_amount=self.data[datatype][k]['converted_amount'],
converted_unit_id=self.slug_id_cache['unit'][self.data[datatype][k]['converted_unit']],
food_id=self.slug_id_cache['food'][self.data[datatype][k]['food']],
open_data_slug=k,
space=self.request.space,
created_by=self.request.user,
))
except KeyError:
print(str(k) + ' is not in self.slug_id_cache["food"]')
return UnitConversion.objects.bulk_create(insert_list, ignore_conflicts=True, unique_fields=('space', 'base_unit', 'converted_unit', 'food', 'open_data_slug'))

View File

@@ -1,15 +1,19 @@
import inspect
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.decorators import user_passes_test
from django.core.cache import caches
from django.core.exceptions import ValidationError
from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.http import HttpResponseRedirect
from django.urls import reverse, reverse_lazy
from django.utils.translation import gettext as _
from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope, TokenHasScope
from oauth2_provider.models import AccessToken
from rest_framework import permissions
from rest_framework.permissions import SAFE_METHODS
from cookbook.models import ShareLink, Recipe, UserPreference
from cookbook.models import Recipe, ShareLink, UserSpace
def get_allowed_groups(groups_required):
@@ -27,11 +31,12 @@ def get_allowed_groups(groups_required):
return groups_allowed
def has_group_permission(user, groups):
def has_group_permission(user, groups, no_cache=False):
"""
Tests if a given user is member of a certain group (or any higher group)
Superusers always bypass permission checks.
Unauthenticated users can't be member of any group thus always return false.
:param no_cache: (optional) do not return cached results, always check agains DB
:param user: django auth user object
:param groups: list or tuple of groups the user should be checked for
:return: True if user is in allowed groups, false otherwise
@@ -39,10 +44,23 @@ def has_group_permission(user, groups):
if not user.is_authenticated:
return False
groups_allowed = get_allowed_groups(groups)
CACHE_KEY = hash((inspect.stack()[0][3], (user.pk, user.username, user.email), groups_allowed))
if not no_cache:
cached_result = cache.get(CACHE_KEY, default=None)
if cached_result is not None:
return cached_result
result = False
if user.is_authenticated:
if bool(user.groups.filter(name__in=groups_allowed)):
return True
return False
if user_space := user.userspace_set.filter(active=True):
if len(user_space) != 1:
result = False # do not allow any group permission if more than one space is active, needs to be changed when simultaneous multi-space-tenancy is added
elif bool(user_space.first().groups.filter(name__in=groups_allowed)):
result = True
cache.set(CACHE_KEY, result, timeout=10)
return result
def is_object_owner(user, obj):
@@ -50,7 +68,6 @@ def is_object_owner(user, obj):
Tests if a given user is the owner of a given object
test performed by checking user against the objects user
and create_by field (if exists)
superusers bypass all checks, unauthenticated users cannot own anything
:param user django auth user object
:param obj any object that should be tested
:return: true if user is owner of object, false otherwise
@@ -63,11 +80,25 @@ def is_object_owner(user, obj):
return False
def is_space_owner(user, obj):
"""
Tests if a given user is the owner the space of a given object
:param user django auth user object
:param obj any object that should be tested
:return: true if user is owner of the objects space, false otherwise
"""
if not user.is_authenticated:
return False
try:
return obj.get_space().get_owner() == user
except Exception:
return False
def is_object_shared(user, obj):
"""
Tests if a given user is shared for a given object
test performed by checking user against the objects shared table
superusers bypass all checks, unauthenticated users cannot own anything
:param user django auth user object
:param obj any object that should be tested
:return: true if user is shared for object, false otherwise
@@ -88,15 +119,15 @@ def share_link_valid(recipe, share):
"""
try:
CACHE_KEY = f'recipe_share_{recipe.pk}_{share}'
if c := caches['default'].get(CACHE_KEY, False):
if c := cache.get(CACHE_KEY, False):
return c
if link := ShareLink.objects.filter(recipe=recipe, uuid=share, abuse_blocked=False).first():
if 0 < settings.SHARING_LIMIT < link.request_count:
if 0 < settings.SHARING_LIMIT < link.request_count and not link.space.no_sharing_limit:
return False
link.request_count += 1
link.save()
caches['default'].set(CACHE_KEY, True, timeout=3)
cache.set(CACHE_KEY, True, timeout=3)
return True
return False
except ValidationError:
@@ -163,7 +194,7 @@ class OwnerRequiredMixin(object):
try:
obj = self.get_object()
if obj.get_space() != request.space:
if not request.user.userspace.filter(space=obj.get_space()).exists():
messages.add_message(request, messages.ERROR,
_('You do not have the required permissions to view this page!'))
return HttpResponseRedirect(reverse_lazy('index'))
@@ -181,7 +212,7 @@ class CustomIsOwner(permissions.BasePermission):
verifies user has ownership over object
(either user or created_by or user is request user)
"""
message = _('You cannot interact with this object as it is not owned by you!') # noqa: E501
message = _('You cannot interact with this object as it is not owned by you!')
def has_permission(self, request, view):
return request.user.is_authenticated
@@ -190,6 +221,28 @@ class CustomIsOwner(permissions.BasePermission):
return is_object_owner(request.user, obj)
class CustomIsOwnerReadOnly(CustomIsOwner):
def has_permission(self, request, view):
return super().has_permission(request, view) and request.method in SAFE_METHODS
def has_object_permission(self, request, view, obj):
return super().has_object_permission(request, view) and request.method in SAFE_METHODS
class CustomIsSpaceOwner(permissions.BasePermission):
"""
Custom permission class for django rest framework views
verifies if the user is the owner of the space the object belongs to
"""
message = _('You cannot interact with this object as it is not owned by you!')
def has_permission(self, request, view):
return request.user.is_authenticated and request.space.created_by == request.user
def has_object_permission(self, request, view, obj):
return is_space_owner(request.user, obj)
# TODO function duplicate/too similar name
class CustomIsShared(permissions.BasePermission):
"""
@@ -202,9 +255,6 @@ class CustomIsShared(permissions.BasePermission):
return request.user.is_authenticated
def has_object_permission(self, request, view, obj):
# # temporary hack to make old shopping list work with new shopping list
# if obj.__class__.__name__ in ['ShoppingList', 'ShoppingListEntry']:
# return is_object_shared(request.user, obj) or obj.created_by in list(request.user.get_shopping_share())
return is_object_shared(request.user, obj)
@@ -261,6 +311,75 @@ class CustomIsShare(permissions.BasePermission):
return False
class CustomRecipePermission(permissions.BasePermission):
"""
Custom permission class for recipe api endpoint
"""
message = _('You do not have the required permissions to view this page!')
def has_permission(self, request, view): # user is either at least a guest or a share link is given and the request is safe
share = request.query_params.get('share', None)
return ((has_group_permission(request.user, ['guest']) and request.method in SAFE_METHODS) or has_group_permission(
request.user, ['user'])) or (share and request.method in SAFE_METHODS and 'pk' in view.kwargs)
def has_object_permission(self, request, view, obj):
share = request.query_params.get('share', None)
if share:
return share_link_valid(obj, share)
else:
if obj.private:
return ((obj.created_by == request.user) or (request.user in obj.shared.all())) and obj.space == request.space
else:
return ((has_group_permission(request.user, ['guest']) and request.method in SAFE_METHODS)
or has_group_permission(request.user, ['user'])) and obj.space == request.space
class CustomUserPermission(permissions.BasePermission):
"""
Custom permission class for user api endpoint
"""
message = _('You do not have the required permissions to view this page!')
def has_permission(self, request, view): # a space filtered user list is visible for everyone
return has_group_permission(request.user, ['guest'])
def has_object_permission(self, request, view, obj): # object write permissions are only available for user
if request.method in SAFE_METHODS and 'pk' in view.kwargs and has_group_permission(request.user, ['guest']) and request.space in obj.userspace_set.all():
return True
elif request.user == obj:
return True
else:
return False
class CustomTokenHasScope(TokenHasScope):
"""
Custom implementation of Django OAuth Toolkit TokenHasScope class
Only difference: if any other authentication method except OAuth2Authentication is used the scope check is ignored
IMPORTANT: do not use this class without any other permission class as it will not check anything besides token scopes
"""
def has_permission(self, request, view):
if isinstance(request.auth, AccessToken):
return super().has_permission(request, view)
else:
return request.user.is_authenticated
class CustomTokenHasReadWriteScope(TokenHasReadWriteScope):
"""
Custom implementation of Django OAuth Toolkit TokenHasReadWriteScope class
Only difference: if any other authentication method except OAuth2Authentication is used the scope check is ignored
IMPORTANT: do not use this class without any other permission class as it will not check anything besides token scopes
"""
def has_permission(self, request, view):
if isinstance(request.auth, AccessToken):
return super().has_permission(request, view)
else:
return True
def above_space_limit(space): # TODO add file storage limit
"""
Test if the space has reached any limit (e.g. max recipes, users, ..)
@@ -290,7 +409,34 @@ def above_space_user_limit(space):
:param space: Space to test for limits
:return: Tuple (True if above or equal limit else false, message)
"""
limit = space.max_users != 0 and UserPreference.objects.filter(space=space).count() > space.max_users
limit = space.max_users != 0 and UserSpace.objects.filter(space=space).count() > space.max_users
if limit:
return True, _('You have more users than allowed in your space.')
return False, ''
def switch_user_active_space(user, space):
"""
Switch the currently active space of a user by setting all spaces to inactive and activating the one passed
:param user: user to change active space for
:param space: space to activate user for
:return user space object or none if not found/no permission
"""
try:
us = UserSpace.objects.get(space=space, user=user)
if not us.active:
UserSpace.objects.filter(user=user).update(active=False)
us.active = True
us.save()
return us
else:
return us
except ObjectDoesNotExist:
return None
class IsReadOnlyDRF(permissions.BasePermission):
message = 'You cannot interact with this object as it is not owned by you!'
def has_permission(self, request, view):
return request.method in SAFE_METHODS

View File

@@ -0,0 +1,74 @@
from django.core.cache import caches
from cookbook.helper.cache_helper import CacheHelper
from cookbook.helper.unit_conversion_helper import UnitConversionHelper
from cookbook.models import PropertyType
class FoodPropertyHelper:
space = None
def __init__(self, space):
"""
Helper to perform food property calculations
:param space: space to limit scope to
"""
self.space = space
def calculate_recipe_properties(self, recipe):
"""
Calculate all food properties for a given recipe.
:param recipe: recipe to calculate properties for
:return: dict of with property keys and total/food values for each property available
"""
ingredients = []
computed_properties = {}
for s in recipe.steps.all():
ingredients += s.ingredients.all()
property_types = caches['default'].get(CacheHelper(self.space).PROPERTY_TYPE_CACHE_KEY, None)
if not property_types:
property_types = PropertyType.objects.filter(space=self.space).all()
# cache is cleared on property type save signal so long duration is fine
caches['default'].set(CacheHelper(self.space).PROPERTY_TYPE_CACHE_KEY, property_types, 60 * 60)
for fpt in property_types:
computed_properties[fpt.id] = {'id': fpt.id, 'name': fpt.name, 'description': fpt.description,
'unit': fpt.unit, 'order': fpt.order, 'food_values': {}, 'total_value': 0, 'missing_value': False}
uch = UnitConversionHelper(self.space)
for i in ingredients:
if i.food is not None:
conversions = uch.get_conversions(i)
for pt in property_types:
found_property = False
if i.food.properties_food_amount == 0 or i.food.properties_food_unit is None:
computed_properties[pt.id]['food_values'][i.food.id] = {'id': i.food.id, 'food': i.food.name, 'value': 0}
computed_properties[pt.id]['missing_value'] = i.food.properties_food_unit is None
else:
for p in i.food.properties.all():
if p.property_type == pt:
for c in conversions:
if c.unit == i.food.properties_food_unit:
found_property = True
computed_properties[pt.id]['total_value'] += (c.amount / i.food.properties_food_amount) * p.property_amount
computed_properties[pt.id]['food_values'] = self.add_or_create(
computed_properties[p.property_type.id]['food_values'], c.food.id, (c.amount / i.food.properties_food_amount) * p.property_amount, c.food)
if not found_property:
computed_properties[pt.id]['missing_value'] = True
computed_properties[pt.id]['food_values'][i.food.id] = {'id': i.food.id, 'food': i.food.name, 'value': 0}
return computed_properties
# small dict helper to add to existing key or create new, probably a better way of doing this
# TODO move to central helper ?
@staticmethod
def add_or_create(d, key, value, food):
if key in d:
d[key]['value'] += value
else:
d[key] = {'id': food.id, 'food': food.name, 'value': value}
return d

View File

@@ -1,182 +0,0 @@
import json
import re
from json import JSONDecodeError
from urllib.parse import unquote
from bs4 import BeautifulSoup
from bs4.element import Tag
from recipe_scrapers._utils import get_host_name, normalize_string
from cookbook.helper import recipe_url_import as helper
from cookbook.helper.scrapers.scrapers import text_scraper
def get_recipe_from_source(text, url, request):
def build_node(k, v):
if isinstance(v, dict):
node = {
'name': k,
'value': k,
'children': get_children_dict(v)
}
elif isinstance(v, list):
node = {
'name': k,
'value': k,
'children': get_children_list(v)
}
else:
node = {
'name': k + ": " + normalize_string(str(v)),
'value': normalize_string(str(v))
}
return node
def get_children_dict(children):
kid_list = []
for k, v in children.items():
kid_list.append(build_node(k, v))
return kid_list
def get_children_list(children):
kid_list = []
for kid in children:
if type(kid) == list:
node = {
'name': "unknown list",
'value': "unknown list",
'children': get_children_list(kid)
}
kid_list.append(node)
elif type(kid) == dict:
for k, v in kid.items():
kid_list.append(build_node(k, v))
else:
kid_list.append({
'name': normalize_string(str(kid)),
'value': normalize_string(str(kid))
})
return kid_list
recipe_tree = []
parse_list = []
html_data = []
images = []
text = unquote(text)
try:
parse_list.append(remove_graph(json.loads(text)))
if not url and 'url' in parse_list[0]:
url = parse_list[0]['url']
scrape = text_scraper("<script type='application/ld+json'>" + text + "</script>", url=url)
except JSONDecodeError:
soup = BeautifulSoup(text, "html.parser")
html_data = get_from_html(soup)
images += get_images_from_source(soup, url)
for el in soup.find_all('script', type='application/ld+json'):
el = remove_graph(el)
if not url and 'url' in el:
url = el['url']
if type(el) == list:
for le in el:
parse_list.append(le)
elif type(el) == dict:
parse_list.append(el)
for el in soup.find_all(type='application/json'):
el = remove_graph(el)
if type(el) == list:
for le in el:
parse_list.append(le)
elif type(el) == dict:
parse_list.append(el)
scrape = text_scraper(text, url=url)
recipe_json = helper.get_from_scraper(scrape, request)
for el in parse_list:
temp_tree = []
if isinstance(el, Tag):
try:
el = json.loads(el.string)
except TypeError:
continue
for k, v in el.items():
if isinstance(v, dict):
node = {
'name': k,
'value': k,
'children': get_children_dict(v)
}
elif isinstance(v, list):
node = {
'name': k,
'value': k,
'children': get_children_list(v)
}
else:
node = {
'name': k + ": " + normalize_string(str(v)),
'value': normalize_string(str(v))
}
temp_tree.append(node)
if '@type' in el and el['@type'] == 'Recipe':
recipe_tree += [{'name': 'ld+json', 'children': temp_tree}]
else:
recipe_tree += [{'name': 'json', 'children': temp_tree}]
return recipe_json, recipe_tree, html_data, images
def get_from_html(soup):
INVISIBLE_ELEMS = ('style', 'script', 'head', 'title')
html = []
for s in soup.strings:
if ((s.parent.name not in INVISIBLE_ELEMS) and (len(s.strip()) > 0)):
html.append(s)
return html
def get_images_from_source(soup, url):
sources = ['src', 'srcset', 'data-src']
images = []
img_tags = soup.find_all('img')
if url:
site = get_host_name(url)
prot = url.split(':')[0]
urls = []
for img in img_tags:
for src in sources:
try:
urls.append(img[src])
except KeyError:
pass
for u in urls:
u = u.split('?')[0]
filename = re.search(r'/([\w_-]+[.](jpg|jpeg|gif|png))$', u)
if filename:
if (('http' not in u) and (url)):
# sometimes an image source can be relative
# if it is provide the base url
u = '{}://{}{}'.format(prot, site, u)
if 'http' in u:
images.append(u)
return images
def remove_graph(el):
# recipes type might be wrapped in @graph type
if isinstance(el, Tag):
try:
el = json.loads(el.string)
if '@graph' in el:
for x in el['@graph']:
if '@type' in x and x['@type'] == 'Recipe':
el = x
except (TypeError, JSONDecodeError):
pass
return el

View File

@@ -1,46 +1,54 @@
import json
from collections import Counter
from datetime import date, timedelta
from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector, TrigramSimilarity
from django.core.cache import caches
from django.db.models import Avg, Case, Count, F, Func, Max, OuterRef, Q, Subquery, Sum, Value, When
from django.core.cache import cache
from django.db.models import Avg, Case, Count, Exists, F, Max, OuterRef, Q, Subquery, Value, When
from django.db.models.functions import Coalesce, Lower, Substr
from django.utils import timezone, translation
from django.utils.translation import gettext as _
from cookbook.filters import RecipeFilter
from cookbook.helper.HelperFunctions import Round, str2bool
from cookbook.helper.permission_helper import has_group_permission
from cookbook.managers import DICTIONARY
from cookbook.models import (CookLog, CustomFilter, Food, Keyword, Recipe, RecipeBook, SearchFields,
from cookbook.models import (CookLog, CustomFilter, Food, Keyword, Recipe, SearchFields,
SearchPreference, ViewLog)
from recipes import settings
# TODO create extensive tests to make sure ORs ANDs and various filters, sorting, etc work as expected
# TODO consider creating a simpleListRecipe API that only includes minimum of recipe info and minimal filtering
class RecipeSearch():
_postgres = settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']
_postgres = settings.DATABASES['default']['ENGINE'] == 'django.db.backends.postgresql'
def __init__(self, request, **params):
def __init__(self, request, **params):
self._request = request
self._queryset = None
if f := params.get('filter', None):
custom_filter = CustomFilter.objects.filter(id=f, space=self._request.space).filter(Q(created_by=self._request.user) |
Q(shared=self._request.user) | Q(recipebook__shared=self._request.user)).first()
custom_filter = (
CustomFilter.objects.filter(id=f, space=self._request.space)
.filter(Q(created_by=self._request.user) | Q(shared=self._request.user) | Q(recipebook__shared=self._request.user))
.first()
)
if custom_filter:
self._params = {**json.loads(custom_filter.search)}
self._original_params = {**(params or {})}
# json.loads casts rating as an integer, expecting string
if isinstance(self._params.get('rating', None), int):
self._params['rating'] = str(self._params['rating'])
else:
self._params = {**(params or {})}
else:
self._params = {**(params or {})}
if self._request.user.is_authenticated:
self._search_prefs = request.user.searchpreference
CACHE_KEY = f'search_pref_{request.user.id}'
cached_result = cache.get(CACHE_KEY, default=None)
if cached_result is not None:
self._search_prefs = cached_result
else:
self._search_prefs = request.user.searchpreference
cache.set(CACHE_KEY, self._search_prefs, timeout=10)
else:
self._search_prefs = SearchPreference()
self._string = self._params.get('query').strip() if self._params.get('query', None) else None
self._string = self._params.get('query').strip(
) if self._params.get('query', None) else None
self._rating = self._params.get('rating', None)
self._keywords = {
'or': self._params.get('keywords_or', None) or self._params.get('keywords', None),
@@ -69,7 +77,8 @@ class RecipeSearch():
self._random = str2bool(self._params.get('random', False))
self._new = str2bool(self._params.get('new', False))
self._num_recent = int(self._params.get('num_recent', 0))
self._include_children = str2bool(self._params.get('include_children', None))
self._include_children = str2bool(
self._params.get('include_children', None))
self._timescooked = self._params.get('timescooked', None)
self._cookedon = self._params.get('cookedon', None)
self._createdon = self._params.get('createdon', None)
@@ -77,9 +86,9 @@ class RecipeSearch():
self._viewedon = self._params.get('viewedon', None)
self._makenow = self._params.get('makenow', None)
# this supports hidden feature to find recipes missing X ingredients
if type(self._makenow) == bool and self._makenow == True:
if isinstance(self._makenow, bool) and self._makenow == True:
self._makenow = 0
elif type(self._makenow) == str and self._makenow in ["yes", "true"]:
elif isinstance(self._makenow, str) and self._makenow in ["yes", "true"]:
self._makenow = 0
else:
try:
@@ -112,19 +121,20 @@ class RecipeSearch():
)
self.search_rank = None
self.orderby = []
self._default_sort = ['-favorite'] # TODO add user setting
self._filters = None
self._fuzzy_match = None
def get_queryset(self, queryset):
self._queryset = queryset
self._queryset = self._queryset.prefetch_related('keywords')
self._build_sort_order()
self._recently_viewed(num_recent=self._num_recent)
self._cooked_on_filter(cooked_date=self._cookedon)
self._created_on_filter(created_date=self._createdon)
self._updated_on_filter(updated_date=self._updatedon)
self._viewed_on_filter(viewed_date=self._viewedon)
self._favorite_recipes(timescooked=self._timescooked)
self._favorite_recipes(times_cooked=self._timescooked)
self._new_recipes()
self.keyword_filters(**self._keywords)
self.food_filters(**self._foods)
@@ -135,7 +145,7 @@ class RecipeSearch():
self.unit_filters(units=self._units)
self._makenow_filter(missing=self._makenow)
self.string_filters(string=self._string)
return self._queryset.filter(space=self._request.space).distinct().order_by(*self.orderby)
return self._queryset.filter(space=self._request.space).order_by(*self.orderby)
def _sort_includes(self, *args):
for x in args:
@@ -147,11 +157,11 @@ class RecipeSearch():
def _build_sort_order(self):
if self._random:
self._queryset = self._queryset.order_by("?")
self.orderby = ['?']
else:
order = []
# TODO add userpreference for default sort order and replace '-favorite'
default_order = ['-favorite']
default_order = ['name']
# recent and new_recipe are always first; they float a few recipes to the top
if self._num_recent:
order += ['-recent']
@@ -160,7 +170,6 @@ class RecipeSearch():
# if a sort order is provided by user - use that order
if self._sort_order:
if not isinstance(self._sort_order, list):
order += [self._sort_order]
else:
@@ -176,8 +185,10 @@ class RecipeSearch():
# otherwise sort by the remaining order_by attributes or favorite by default
else:
order += default_order
order[:] = [Lower('name').asc() if x == 'name' else x for x in order]
order[:] = [Lower('name').desc() if x == '-name' else x for x in order]
order[:] = [Lower('name').asc() if x ==
'name' else x for x in order]
order[:] = [Lower('name').desc() if x ==
'-name' else x for x in order]
self.orderby = order
def string_filters(self, string=None):
@@ -194,7 +205,8 @@ class RecipeSearch():
for f in self._filters:
query_filter |= f
self._queryset = self._queryset.filter(query_filter).distinct() # this creates duplicate records which can screw up other aggregates, see makenow for workaround
# this creates duplicate records which can screw up other aggregates, see makenow for workaround
self._queryset = self._queryset.filter(query_filter).distinct()
if self._fulltext_include:
if self._fuzzy_match is None:
self._queryset = self._queryset.annotate(score=Coalesce(Max(self.search_rank), 0.0))
@@ -208,7 +220,7 @@ class RecipeSearch():
else:
self._queryset = self._queryset.annotate(simularity=Coalesce(Subquery(simularity), 0.0))
if self._sort_includes('score') and self._fulltext_include and self._fuzzy_match is not None:
self._queryset = self._queryset.annotate(score=F('rank')+F('simularity'))
self._queryset = self._queryset.annotate(score=F('rank') + F('simularity'))
else:
query_filter = Q()
for f in [x + '__unaccent__iexact' if x in self._unaccent_include else x + '__iexact' for x in SearchFields.objects.all().values_list('field', flat=True)]:
@@ -222,12 +234,13 @@ class RecipeSearch():
default = timezone.now() - timedelta(days=100000)
else:
default = timezone.now()
self._queryset = self._queryset.annotate(lastcooked=Coalesce(
Max(Case(When(cooklog__created_by=self._request.user, cooklog__space=self._request.space, then='cooklog__created_at'))), Value(default)))
self._queryset = self._queryset.annotate(
lastcooked=Coalesce(Max(Case(When(cooklog__created_by=self._request.user, cooklog__space=self._request.space, then='cooklog__created_at'))), Value(default))
)
if cooked_date is None:
return
cooked_date = date(*[int(x) for x in cooked_date.split('-') if x != ''])
cooked_date = date(*[int(x)for x in cooked_date.split('-') if x != ''])
if lessthan:
self._queryset = self._queryset.filter(lastcooked__date__lte=cooked_date).exclude(lastcooked=default)
@@ -248,7 +261,7 @@ class RecipeSearch():
if updated_date is None:
return
lessthan = '-' in updated_date[:1]
updated_date = date(*[int(x) for x in updated_date.split('-') if x != ''])
updated_date = date(*[int(x)for x in updated_date.split('-') if x != ''])
if lessthan:
self._queryset = self._queryset.filter(updated_at__date__lte=updated_date)
else:
@@ -257,12 +270,13 @@ class RecipeSearch():
def _viewed_on_filter(self, viewed_date=None):
if self._sort_includes('lastviewed') or viewed_date:
longTimeAgo = timezone.now() - timedelta(days=100000)
self._queryset = self._queryset.annotate(lastviewed=Coalesce(
Max(Case(When(viewlog__created_by=self._request.user, viewlog__space=self._request.space, then='viewlog__created_at'))), Value(longTimeAgo)))
self._queryset = self._queryset.annotate(
lastviewed=Coalesce(Max(Case(When(viewlog__created_by=self._request.user, viewlog__space=self._request.space, then='viewlog__created_at'))), Value(longTimeAgo))
)
if viewed_date is None:
return
lessthan = '-' in viewed_date[:1]
viewed_date = date(*[int(x) for x in viewed_date.split('-') if x != ''])
viewed_date = date(*[int(x)for x in viewed_date.split('-') if x != ''])
if lessthan:
self._queryset = self._queryset.filter(lastviewed__date__lte=viewed_date).exclude(lastviewed=longTimeAgo)
@@ -273,9 +287,11 @@ class RecipeSearch():
# TODO make new days a user-setting
if not self._new:
return
self._queryset = (
self._queryset.annotate(new_recipe=Case(
When(created_at__gte=(timezone.now() - timedelta(days=new_days)), then=('pk')), default=Value(0), ))
self._queryset = self._queryset.annotate(
new_recipe=Case(
When(created_at__gte=(timezone.now() - timedelta(days=new_days)), then=('pk')),
default=Value(0),
)
)
def _recently_viewed(self, num_recent=None):
@@ -285,29 +301,35 @@ class RecipeSearch():
Max(Case(When(viewlog__created_by=self._request.user, viewlog__space=self._request.space, then='viewlog__pk'))), Value(0)))
return
num_recent_recipes = ViewLog.objects.filter(created_by=self._request.user, space=self._request.space).values(
'recipe').annotate(recent=Max('created_at')).order_by('-recent')[:num_recent]
num_recent_recipes = (
ViewLog.objects.filter(created_by=self._request.user, space=self._request.space)
.values('recipe').annotate(recent=Max('created_at')).order_by('-recent')[:num_recent]
)
self._queryset = self._queryset.annotate(recent=Coalesce(Max(Case(When(pk__in=num_recent_recipes.values('recipe'), then='viewlog__pk'))), Value(0)))
def _favorite_recipes(self, timescooked=None):
if self._sort_includes('favorite') or timescooked:
lessthan = '-' in (timescooked or []) or not self._sort_includes('-favorite')
if lessthan:
def _favorite_recipes(self, times_cooked=None):
if self._sort_includes('favorite') or times_cooked:
less_than = '-' in (times_cooked or []) and not self._sort_includes('-favorite')
if less_than:
default = 1000
else:
default = 0
favorite_recipes = CookLog.objects.filter(created_by=self._request.user, space=self._request.space, recipe=OuterRef('pk')
).values('recipe').annotate(count=Count('pk', distinct=True)).values('count')
favorite_recipes = (
CookLog.objects.filter(created_by=self._request.user, space=self._request.space, recipe=OuterRef('pk'))
.values('recipe')
.annotate(count=Count('pk', distinct=True))
.values('count')
)
self._queryset = self._queryset.annotate(favorite=Coalesce(Subquery(favorite_recipes), default))
if timescooked is None:
if times_cooked is None:
return
if timescooked == '0':
if times_cooked == '0':
self._queryset = self._queryset.filter(favorite=0)
elif lessthan:
self._queryset = self._queryset.filter(favorite__lte=int(timescooked[1:])).exclude(favorite=0)
elif less_than:
self._queryset = self._queryset.filter(favorite__lte=int(times_cooked.replace('-', ''))).exclude(favorite=0)
else:
self._queryset = self._queryset.filter(favorite__gte=int(timescooked))
self._queryset = self._queryset.filter(favorite__gte=int(times_cooked))
def keyword_filters(self, **kwargs):
if all([kwargs[x] is None for x in kwargs]):
@@ -387,8 +409,9 @@ class RecipeSearch():
def rating_filter(self, rating=None):
if rating or self._sort_includes('rating'):
lessthan = self._sort_includes('-rating') or '-' in (rating or [])
if lessthan:
lessthan = '-' in (rating or [])
reverse = 'rating' in (self._sort_order or []) and '-rating' not in (self._sort_order or [])
if lessthan or reverse:
default = 100
else:
default = 0
@@ -440,7 +463,7 @@ class RecipeSearch():
if not steps:
return
if not isinstance(steps, list):
steps = [unistepsts]
steps = [steps]
self._queryset = self._queryset.filter(steps__id__in=steps)
def build_fulltext_filters(self, string=None):
@@ -497,269 +520,62 @@ class RecipeSearch():
trigram += TrigramSimilarity(f, self._string)
else:
trigram = TrigramSimilarity(f, self._string)
self._fuzzy_match = Recipe.objects.annotate(trigram=trigram).distinct(
).annotate(simularity=Max('trigram')).values('id', 'simularity').filter(simularity__gt=self._search_prefs.trigram_threshold)
self._fuzzy_match = (
Recipe.objects.annotate(trigram=trigram)
.distinct()
.annotate(simularity=Max('trigram'))
.values('id', 'simularity')
.filter(simularity__gt=self._search_prefs.trigram_threshold)
)
self._filters += [Q(pk__in=self._fuzzy_match.values('pk'))]
def _makenow_filter(self, missing=None):
if missing is None or (type(missing) == bool and missing == False):
if missing is None or (isinstance(missing, bool) and missing == False):
return
shopping_users = [*self._request.user.get_shopping_share(), self._request.user]
onhand_filter = (
Q(steps__ingredients__food__onhand_users__in=shopping_users) # food onhand
| Q(steps__ingredients__food__substitute__onhand_users__in=shopping_users) # or substitute food onhand
# or substitute food onhand
| Q(steps__ingredients__food__substitute__onhand_users__in=shopping_users)
| Q(steps__ingredients__food__in=self.__children_substitute_filter(shopping_users))
| Q(steps__ingredients__food__in=self.__sibling_substitute_filter(shopping_users))
)
makenow_recipes = Recipe.objects.annotate(
count_food=Count('steps__ingredients__food__pk', filter=Q(steps__ingredients__food__isnull=False), distinct=True),
count_onhand=Count('steps__ingredients__food__pk', filter=onhand_filter, distinct=True),
count_ignore_shopping=Count('steps__ingredients__food__pk', filter=Q(steps__ingredients__food__ignore_shopping=True,
steps__ingredients__food__recipe__isnull=True), distinct=True),
count_ignore_shopping=Count(
'steps__ingredients__food__pk', filter=Q(steps__ingredients__food__ignore_shopping=True, steps__ingredients__food__recipe__isnull=True), distinct=True
),
has_child_sub=Case(When(steps__ingredients__food__in=self.__children_substitute_filter(shopping_users), then=Value(1)), default=Value(0)),
has_sibling_sub=Case(When(steps__ingredients__food__in=self.__sibling_substitute_filter(shopping_users), then=Value(1)), default=Value(0))
).annotate(missingfood=F('count_food')-F('count_onhand')-F('count_ignore_shopping')).filter(missingfood=missing)
).annotate(missingfood=F('count_food') - F('count_onhand') - F('count_ignore_shopping')).filter(missingfood__lte=missing)
self._queryset = self._queryset.distinct().filter(id__in=makenow_recipes.values('id'))
@ staticmethod
@staticmethod
def __children_substitute_filter(shopping_users=None):
children_onhand_subquery = Food.objects.filter(
path__startswith=Substr(OuterRef('path'), 1, Food.steplen*OuterRef('depth')),
depth__gt=OuterRef('depth'),
onhand_users__in=shopping_users
).annotate(child_onhand=Coalesce(Func('pk', function='Count'), 0)).values('child_onhand')
return Food.objects.exclude( # list of foods that are onhand and children of: foods that are not onhand and are set to use children as substitutes
Q(onhand_users__in=shopping_users)
| Q(ignore_shopping=True, recipe__isnull=True)
| Q(substitute__onhand_users__in=shopping_users)
).exclude(depth=1, numchild=0).filter(substitute_children=True
).annotate(child_onhand=Coalesce(Subquery(children_onhand_subquery), 0)).exclude(child_onhand=0)
@ staticmethod
def __sibling_substitute_filter(shopping_users=None):
sibling_onhand_subquery = Food.objects.filter(
path__startswith=Substr(OuterRef('path'), 1, Food.steplen*(OuterRef('depth')-1)),
depth=OuterRef('depth'),
onhand_users__in=shopping_users
).annotate(sibling_onhand=Coalesce(Func('pk', function='Count'), 0)).values('sibling_onhand')
return Food.objects.exclude( # list of foods that are onhand and siblings of: foods that are not onhand and are set to use siblings as substitutes
Q(onhand_users__in=shopping_users)
| Q(ignore_shopping=True, recipe__isnull=True)
| Q(substitute__onhand_users__in=shopping_users)
).exclude(depth=1, numchild=0).filter(substitute_siblings=True
).annotate(sibling_onhand=Coalesce(Subquery(sibling_onhand_subquery), 0)).exclude(sibling_onhand=0)
class RecipeFacet():
class CacheEmpty(Exception):
pass
def __init__(self, request, queryset=None, hash_key=None, cache_timeout=3600):
if hash_key is None and queryset is None:
raise ValueError(_("One of queryset or hash_key must be provided"))
self._request = request
self._queryset = queryset
self.hash_key = hash_key or str(hash(frozenset(self._queryset.values_list('pk'))))
self._SEARCH_CACHE_KEY = f"recipes_filter_{self.hash_key}"
self._cache_timeout = cache_timeout
self._cache = caches['default'].get(self._SEARCH_CACHE_KEY, {})
if self._cache is None and self._queryset is None:
raise self.CacheEmpty("No queryset provided and cache empty")
self.Keywords = self._cache.get('Keywords', None)
self.Foods = self._cache.get('Foods', None)
self.Books = self._cache.get('Books', None)
self.Ratings = self._cache.get('Ratings', None)
# TODO Move Recent to recipe annotation/serializer: requrires change in RecipeSearch(), RecipeSearchView.vue and serializer
self.Recent = self._cache.get('Recent', None)
if self._queryset is not None:
self._recipe_list = list(self._queryset.values_list('id', flat=True))
self._search_params = {
'keyword_list': self._request.query_params.getlist('keywords', []),
'food_list': self._request.query_params.getlist('foods', []),
'book_list': self._request.query_params.getlist('book', []),
'search_keywords_or': str2bool(self._request.query_params.get('keywords_or', True)),
'search_foods_or': str2bool(self._request.query_params.get('foods_or', True)),
'search_books_or': str2bool(self._request.query_params.get('books_or', True)),
'space': self._request.space,
}
elif self.hash_key is not None:
self._recipe_list = self._cache.get('recipe_list', [])
self._search_params = {
'keyword_list': self._cache.get('keyword_list', None),
'food_list': self._cache.get('food_list', None),
'book_list': self._cache.get('book_list', None),
'search_keywords_or': self._cache.get('search_keywords_or', None),
'search_foods_or': self._cache.get('search_foods_or', None),
'search_books_or': self._cache.get('search_books_or', None),
'space': self._cache.get('space', None),
}
self._cache = {
**self._search_params,
'recipe_list': self._recipe_list,
'Ratings': self.Ratings,
'Recent': self.Recent,
'Keywords': self.Keywords,
'Foods': self.Foods,
'Books': self.Books
}
caches['default'].set(self._SEARCH_CACHE_KEY, self._cache, self._cache_timeout)
def get_facets(self, from_cache=False):
if from_cache:
return {
'cache_key': self.hash_key or '',
'Ratings': self.Ratings or {},
'Recent': self.Recent or [],
'Keywords': self.Keywords or [],
'Foods': self.Foods or [],
'Books': self.Books or []
}
return {
'cache_key': self.hash_key,
'Ratings': self.get_ratings(),
'Recent': self.get_recent(),
'Keywords': self.get_keywords(),
'Foods': self.get_foods(),
'Books': self.get_books()
}
def set_cache(self, key, value):
self._cache = {**self._cache, key: value}
caches['default'].set(
self._SEARCH_CACHE_KEY,
self._cache,
self._cache_timeout
children_onhand_subquery = Food.objects.filter(path__startswith=OuterRef('path'), depth__gt=OuterRef('depth'), onhand_users__in=shopping_users)
return (
Food.objects.exclude( # list of foods that are onhand and children of: foods that are not onhand and are set to use children as substitutes
Q(onhand_users__in=shopping_users) | Q(ignore_shopping=True, recipe__isnull=True) | Q(substitute__onhand_users__in=shopping_users)
)
.exclude(depth=1, numchild=0)
.filter(substitute_children=True)
.annotate(child_onhand_count=Exists(children_onhand_subquery))
.filter(child_onhand_count=True)
)
def get_books(self):
if self.Books is None:
self.Books = []
return self.Books
def get_keywords(self):
if self.Keywords is None:
if self._search_params['search_keywords_or']:
keywords = Keyword.objects.filter(space=self._request.space).distinct()
else:
keywords = Keyword.objects.filter(Q(recipe__in=self._recipe_list) | Q(depth=1)).filter(space=self._request.space).distinct()
# set keywords to root objects only
keywords = self._keyword_queryset(keywords)
self.Keywords = [{**x, 'children': None} if x['numchild'] > 0 else x for x in list(keywords)]
self.set_cache('Keywords', self.Keywords)
return self.Keywords
def get_foods(self):
if self.Foods is None:
# # if using an OR search, will annotate all keywords, otherwise, just those that appear in results
if self._search_params['search_foods_or']:
foods = Food.objects.filter(space=self._request.space).distinct()
else:
foods = Food.objects.filter(Q(ingredient__step__recipe__in=self._recipe_list) | Q(depth=1)).filter(space=self._request.space).distinct()
# set keywords to root objects only
foods = self._food_queryset(foods)
self.Foods = [{**x, 'children': None} if x['numchild'] > 0 else x for x in list(foods)]
self.set_cache('Foods', self.Foods)
return self.Foods
def get_books(self):
if self.Books is None:
self.Books = []
return self.Books
def get_ratings(self):
if self.Ratings is None:
if not self._request.space.demo and self._request.space.show_facet_count:
if self._queryset is None:
self._queryset = Recipe.objects.filter(id__in=self._recipe_list)
rating_qs = self._queryset.annotate(rating=Round(Avg(Case(When(cooklog__created_by=self._request.user, then='cooklog__rating'), default=Value(0)))))
self.Ratings = dict(Counter(r.rating for r in rating_qs))
else:
self.Rating = {}
self.set_cache('Ratings', self.Ratings)
return self.Ratings
def get_recent(self):
if self.Recent is None:
# TODO make days of recent recipe a setting
recent_recipes = ViewLog.objects.filter(created_by=self._request.user, space=self._request.space, created_at__gte=timezone.now() - timedelta(days=14)
).values_list('recipe__pk', flat=True)
self.Recent = list(recent_recipes)
self.set_cache('Recent', self.Recent)
return self.Recent
def add_food_children(self, id):
try:
food = Food.objects.get(id=id)
nodes = food.get_ancestors()
except Food.DoesNotExist:
return self.get_facets()
foods = self._food_queryset(food.get_children(), food)
deep_search = self.Foods
for node in nodes:
index = next((i for i, x in enumerate(deep_search) if x["id"] == node.id), None)
deep_search = deep_search[index]['children']
index = next((i for i, x in enumerate(deep_search) if x["id"] == food.id), None)
deep_search[index]['children'] = [{**x, 'children': None} if x['numchild'] > 0 else x for x in list(foods)]
self.set_cache('Foods', self.Foods)
return self.get_facets()
def add_keyword_children(self, id):
try:
keyword = Keyword.objects.get(id=id)
nodes = keyword.get_ancestors()
except Keyword.DoesNotExist:
return self.get_facets()
keywords = self._keyword_queryset(keyword.get_children(), keyword)
deep_search = self.Keywords
for node in nodes:
index = next((i for i, x in enumerate(deep_search) if x["id"] == node.id), None)
deep_search = deep_search[index]['children']
index = next((i for i, x in enumerate(deep_search) if x["id"] == keyword.id), None)
deep_search[index]['children'] = [{**x, 'children': None} if x['numchild'] > 0 else x for x in list(keywords)]
self.set_cache('Keywords', self.Keywords)
return self.get_facets()
def _recipe_count_queryset(self, field, depth=1, steplen=4):
return Recipe.objects.filter(**{f'{field}__path__startswith': OuterRef('path'), f'{field}__depth__gte': depth}, id__in=self._recipe_list, space=self._request.space
).annotate(count=Coalesce(Func('pk', function='Count'), 0)).values('count')
def _keyword_queryset(self, queryset, keyword=None):
depth = getattr(keyword, 'depth', 0) + 1
steplen = depth * Keyword.steplen
if not self._request.space.demo and self._request.space.show_facet_count:
return queryset.annotate(count=Coalesce(Subquery(self._recipe_count_queryset('keywords', depth, steplen)), 0)
).filter(depth=depth, count__gt=0
).values('id', 'name', 'count', 'numchild').order_by(Lower('name').asc())[:200]
else:
return queryset.filter(depth=depth).values('id', 'name', 'numchild').order_by(Lower('name').asc())
def _food_queryset(self, queryset, food=None):
depth = getattr(food, 'depth', 0) + 1
steplen = depth * Food.steplen
if not self._request.space.demo and self._request.space.show_facet_count:
return queryset.annotate(count=Coalesce(Subquery(self._recipe_count_queryset('steps__ingredients__food', depth, steplen)), 0)
).filter(depth__lte=depth, count__gt=0
).values('id', 'name', 'count', 'numchild').order_by(Lower('name').asc())[:200]
else:
return queryset.filter(depth__lte=depth).values('id', 'name', 'numchild').order_by(Lower('name').asc())
def old_search(request):
if has_group_permission(request.user, ('guest',)):
params = dict(request.GET)
params['internal'] = None
f = RecipeFilter(params,
queryset=Recipe.objects.filter(space=request.user.userpreference.space).all().order_by(Lower('name').asc()),
space=request.space)
return f.qs
@staticmethod
def __sibling_substitute_filter(shopping_users=None):
sibling_onhand_subquery = Food.objects.filter(
path__startswith=Substr(OuterRef('path'), 1, Food.steplen * (OuterRef('depth') - 1)), depth=OuterRef('depth'), onhand_users__in=shopping_users
)
return (
Food.objects.exclude( # list of foods that are onhand and siblings of: foods that are not onhand and are set to use siblings as substitutes
Q(onhand_users__in=shopping_users) | Q(ignore_shopping=True, recipe__isnull=True) | Q(substitute__onhand_users__in=shopping_users)
)
.exclude(depth=1, numchild=0)
.filter(substitute_siblings=True)
.annotate(sibling_onhand=Exists(sibling_onhand_subquery))
.filter(sibling_onhand=True)
)

View File

@@ -1,27 +1,47 @@
import random
import re
import traceback
from html import unescape
from unicodedata import decomposition
from django.utils.dateparse import parse_duration
from django.utils.translation import gettext as _
from isodate import parse_duration as iso_parse_duration
from isodate.isoerror import ISO8601Error
from recipe_scrapers._utils import get_minutes
from pytube import YouTube
from recipe_scrapers._utils import get_host_name, get_minutes
from cookbook.helper import recipe_url_import as helper
from cookbook.helper.automation_helper import AutomationEngine
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.models import Keyword
# from recipe_scrapers._utils import get_minutes ## temporary until/unless upstream incorporates get_minutes() PR
from cookbook.models import Automation, Keyword, PropertyType
def get_from_scraper(scrape, request):
# converting the scrape_me object to the existing json format based on ld+json
recipe_json = {}
recipe_json = {
'steps': [],
'internal': True
}
keywords = []
# assign source URL
try:
recipe_json['name'] = parse_name(scrape.title() or None)
source_url = scrape.canonical_url()
except Exception:
try:
source_url = scrape.url
except Exception:
pass
if source_url:
recipe_json['source_url'] = source_url
try:
keywords.append(source_url.replace('http://', '').replace('https://', '').split('/')[0])
except Exception:
recipe_json['source_url'] = ''
automation_engine = AutomationEngine(request, source=recipe_json.get('source_url'))
# assign recipe name
try:
recipe_json['name'] = parse_name(scrape.title()[:128] or None)
except Exception:
recipe_json['name'] = None
if not recipe_json['name']:
@@ -30,6 +50,13 @@ def get_from_scraper(scrape, request):
except Exception:
recipe_json['name'] = ''
if isinstance(recipe_json['name'], list) and len(recipe_json['name']) > 0:
recipe_json['name'] = recipe_json['name'][0]
recipe_json['name'] = automation_engine.apply_regex_replace_automation(recipe_json['name'], Automation.NAME_REPLACE)
# assign recipe description
# TODO notify user about limit if reached - >256 description will be truncated
try:
description = scrape.description() or None
except Exception:
@@ -40,21 +67,20 @@ def get_from_scraper(scrape, request):
except Exception:
description = ''
recipe_json['internal'] = True
recipe_json['description'] = parse_description(description)
recipe_json['description'] = automation_engine.apply_regex_replace_automation(recipe_json['description'], Automation.DESCRIPTION_REPLACE)
# assign servings attributes
try:
servings = scrape.yields() or None
# dont use scrape.yields() as this will always return "x servings" or "x items", should be improved in scrapers directly
servings = scrape.schema.data.get('recipeYield') or 1
except Exception:
servings = None
if not servings:
try:
servings = scrape.schema.data.get('recipeYield') or 1
except Exception:
servings = 1
servings = 1
recipe_json['servings'] = parse_servings(servings)
recipe_json['servings_text'] = parse_servings_text(servings)
# assign time attributes
try:
recipe_json['working_time'] = get_minutes(scrape.prep_time()) or 0
except Exception:
@@ -79,6 +105,7 @@ def get_from_scraper(scrape, request):
except Exception:
pass
# assign image
try:
recipe_json['image'] = parse_image(scrape.image()) or None
except Exception:
@@ -89,7 +116,7 @@ def get_from_scraper(scrape, request):
except Exception:
recipe_json['image'] = ''
keywords = []
# assign keywords
try:
if scrape.schema.data.get("keywords"):
keywords += listify_keywords(scrape.schema.data.get("keywords"))
@@ -114,68 +141,140 @@ def get_from_scraper(scrape, request):
except Exception:
pass
if source_url := scrape.url:
recipe_json['source_url'] = source_url
try:
keywords.append(source_url.replace('http://', '').replace('https://', '').split('/')[0])
except Exception:
pass
try:
if scrape.author():
keywords.append(scrape.author())
except Exception:
pass
try:
recipe_json['keywords'] = parse_keywords(list(set(map(str.casefold, keywords))), request.space)
recipe_json['keywords'] = parse_keywords(list(set(map(str.casefold, keywords))), request)
except AttributeError:
recipe_json['keywords'] = keywords
ingredient_parser = IngredientParser(request, True)
recipe_json['steps'] = []
for i in parse_instructions(scrape.instructions()):
recipe_json['steps'].append({'instruction': i, 'ingredients': [], })
# assign steps
try:
for i in parse_instructions(scrape.instructions()):
recipe_json['steps'].append({'instruction': i, 'ingredients': [], 'show_ingredients_table': request.user.userpreference.show_step_ingredients, })
except Exception:
pass
if len(recipe_json['steps']) == 0:
recipe_json['steps'].append({'instruction': '', 'ingredients': [], })
if len(parse_description(description)) > 256: # split at 256 as long descriptions dont look good on recipe cards
recipe_json['steps'][0]['instruction'] = f'*{parse_description(description)}* \n\n' + recipe_json['steps'][0]['instruction']
if len(recipe_json['description']) > 256: # split at 256 as long descriptions don't look good on recipe cards
recipe_json['steps'][0]['instruction'] = f"*{recipe_json['description']}* \n\n" + recipe_json['steps'][0]['instruction']
else:
recipe_json['description'] = parse_description(description)[:512]
recipe_json['description'] = recipe_json['description'][:512]
try:
for x in scrape.ingredients():
try:
amount, unit, ingredient, note = ingredient_parser.parse(x)
ingredient = {
'amount': amount,
'food': {
'name': ingredient,
},
'unit': None,
'note': note,
'original_text': x
}
if unit:
ingredient['unit'] = {'name': unit, }
recipe_json['steps'][0]['ingredients'].append(ingredient)
except Exception:
recipe_json['steps'][0]['ingredients'].append(
{
'amount': 0,
'unit': None,
if x.strip() != '':
try:
amount, unit, ingredient, note = ingredient_parser.parse(x)
ingredient = {
'amount': amount,
'food': {
'name': x,
'name': ingredient,
},
'note': '',
'unit': None,
'note': note,
'original_text': x
}
)
if unit:
ingredient['unit'] = {'name': unit, }
recipe_json['steps'][0]['ingredients'].append(ingredient)
except Exception:
recipe_json['steps'][0]['ingredients'].append(
{
'amount': 0,
'unit': None,
'food': {
'name': x,
},
'note': '',
'original_text': x
}
)
except Exception:
pass
try:
recipe_json['properties'] = get_recipe_properties(request.space, scrape.schema.nutrients())
print(recipe_json['properties'])
except Exception:
traceback.print_exc()
pass
for s in recipe_json['steps']:
s['instruction'] = automation_engine.apply_regex_replace_automation(s['instruction'], Automation.INSTRUCTION_REPLACE)
# re.sub(a.param_2, a.param_3, s['instruction'])
return recipe_json
def get_recipe_properties(space, property_data):
# {'servingSize': '1', 'calories': '302 kcal', 'proteinContent': '7,66g', 'fatContent': '11,56g', 'carbohydrateContent': '41,33g'}
properties = {
"property-calories": "calories",
"property-carbohydrates": "carbohydrateContent",
"property-proteins": "proteinContent",
"property-fats": "fatContent",
}
recipe_properties = []
for pt in PropertyType.objects.filter(space=space, open_data_slug__in=list(properties.keys())).all():
for p in list(properties.keys()):
if pt.open_data_slug == p:
if properties[p] in property_data:
recipe_properties.append({
'property_type': {
'id': pt.id,
'name': pt.name,
},
'property_amount': parse_servings(property_data[properties[p]]) / float(property_data['servingSize']),
})
return recipe_properties
def get_from_youtube_scraper(url, request):
"""A YouTube Information Scraper."""
kw, created = Keyword.objects.get_or_create(name='YouTube', space=request.space)
default_recipe_json = {
'name': '',
'internal': True,
'description': '',
'servings': 1,
'working_time': 0,
'waiting_time': 0,
'image': "",
'keywords': [{'name': kw.name, 'label': kw.name, 'id': kw.pk}],
'source_url': url,
'steps': [
{
'ingredients': [],
'instruction': ''
}
]
}
# TODO add automation here
try:
automation_engine = AutomationEngine(request, source=url)
video = YouTube(url=url)
default_recipe_json['name'] = automation_engine.apply_regex_replace_automation(video.title, Automation.NAME_REPLACE)
default_recipe_json['image'] = video.thumbnail_url
default_recipe_json['steps'][0]['instruction'] = automation_engine.apply_regex_replace_automation(video.description, Automation.INSTRUCTION_REPLACE)
except Exception:
pass
return default_recipe_json
def parse_name(name):
if type(name) == list:
if isinstance(name, list):
try:
name = name[0]
except Exception:
@@ -188,10 +287,27 @@ def parse_description(description):
def clean_instruction_string(instruction):
normalized_string = normalize_string(instruction)
# handle HTML tags that can be converted to markup
normalized_string = instruction \
.replace("<nobr>", "**") \
.replace("</nobr>", "**") \
.replace("<strong>", "**") \
.replace("</strong>", "**")
normalized_string = normalize_string(normalized_string)
normalized_string = normalized_string.replace('\n', ' \n')
normalized_string = normalized_string.replace(' \n \n', '\n\n')
return normalized_string
# handle unsupported, special UTF8 character in Thermomix-specific instructions,
# that happen in nearly every recipe on Cookidoo, Zaubertopf Club, Rezeptwelt
# and in Thermomix-specific recipes on many other sites
return normalized_string \
.replace("", _('reverse rotation')) \
.replace("", _('careful rotation')) \
.replace("", _('knead')) \
.replace("Andicken ", _('thicken')) \
.replace("Erwärmen ", _('warm up')) \
.replace("Fermentieren ", _('ferment')) \
.replace("Sous-vide ", _("sous-vide"))
def parse_instructions(instructions):
@@ -202,16 +318,16 @@ def parse_instructions(instructions):
"""
instruction_list = []
if type(instructions) == list:
if isinstance(instructions, list):
for i in instructions:
if type(i) == str:
if isinstance(i, str):
instruction_list.append(clean_instruction_string(i))
else:
if 'text' in i:
instruction_list.append(clean_instruction_string(i['text']))
elif 'itemListElement' in i:
for ile in i['itemListElement']:
if type(ile) == str:
if isinstance(ile, str):
instruction_list.append(clean_instruction_string(ile))
elif 'text' in ile:
instruction_list.append(clean_instruction_string(ile['text']))
@@ -227,13 +343,13 @@ def parse_image(image):
# check if list of images is returned, take first if so
if not image:
return None
if type(image) == list:
if isinstance(image, list):
for pic in image:
if (type(pic) == str) and (pic[:4] == 'http'):
if (isinstance(pic, str)) and (pic[:4] == 'http'):
image = pic
elif 'url' in pic:
image = pic['url']
elif type(image) == dict:
elif isinstance(image, dict):
if 'url' in image:
image = image['url']
@@ -244,12 +360,12 @@ def parse_image(image):
def parse_servings(servings):
if type(servings) == str:
if isinstance(servings, str):
try:
servings = int(re.search(r'\d+', servings).group())
except AttributeError:
servings = 1
elif type(servings) == list:
elif isinstance(servings, list):
try:
servings = int(re.findall(r'\b\d+\b', servings[0])[0])
except KeyError:
@@ -258,12 +374,17 @@ def parse_servings(servings):
def parse_servings_text(servings):
if type(servings) == str:
if isinstance(servings, str):
try:
servings = re.sub("\d+", '', servings).strip()
servings = re.sub("\\d+", '', servings).strip()
except Exception:
servings = ''
return servings
if isinstance(servings, list):
try:
servings = parse_servings_text(servings[1])
except Exception:
pass
return str(servings)[:32]
def parse_time(recipe_time):
@@ -275,7 +396,7 @@ def parse_time(recipe_time):
recipe_time = round(iso_parse_duration(recipe_time).seconds / 60)
except ISO8601Error:
try:
if (type(recipe_time) == list and len(recipe_time) > 0):
if (isinstance(recipe_time, list) and len(recipe_time) > 0):
recipe_time = recipe_time[0]
recipe_time = round(parse_duration(recipe_time).seconds / 60)
except AttributeError:
@@ -284,13 +405,18 @@ def parse_time(recipe_time):
return recipe_time
def parse_keywords(keyword_json, space):
def parse_keywords(keyword_json, request):
keywords = []
automation_engine = AutomationEngine(request)
# keywords as list
for kw in keyword_json:
kw = normalize_string(kw)
# if alias exists use that instead
if len(kw) != 0:
if k := Keyword.objects.filter(name=kw, space=space).first():
automation_engine.apply_keyword_automation(kw)
if k := Keyword.objects.filter(name=kw, space=request.space).first():
keywords.append({'label': str(k), 'name': k.name, 'id': k.id})
else:
keywords.append({'label': kw, 'name': kw})
@@ -301,15 +427,15 @@ def parse_keywords(keyword_json, space):
def listify_keywords(keyword_list):
# keywords as string
try:
if type(keyword_list[0]) == dict:
if isinstance(keyword_list[0], dict):
return keyword_list
except (KeyError, IndexError):
pass
if type(keyword_list) == str:
if isinstance(keyword_list, str):
keyword_list = keyword_list.split(',')
# keywords as string in list
if (type(keyword_list) == list and len(keyword_list) == 1 and ',' in keyword_list[0]):
if (isinstance(keyword_list, list) and len(keyword_list) == 1 and ',' in keyword_list[0]):
keyword_list = keyword_list[0].split(',')
return [x.strip() for x in keyword_list]
@@ -331,3 +457,47 @@ def iso_duration_to_minutes(string):
string
).groupdict()
return int(match['days'] or 0) * 24 * 60 + int(match['hours'] or 0) * 60 + int(match['minutes'] or 0)
def get_images_from_soup(soup, url):
sources = ['src', 'srcset', 'data-src']
images = []
img_tags = soup.find_all('img')
if url:
site = get_host_name(url)
prot = url.split(':')[0]
urls = []
for img in img_tags:
for src in sources:
try:
urls.append(img[src])
except KeyError:
pass
for u in urls:
u = u.split('?')[0]
filename = re.search(r'/([\w_-]+[.](jpg|jpeg|gif|png))$', u)
if filename:
if (('http' not in u) and (url)):
# sometimes an image source can be relative
# if it is provide the base url
u = '{}://{}{}'.format(prot, site, u)
if 'http' in u:
images.append(u)
return images
def clean_dict(input_dict, key):
if isinstance(input_dict, dict):
for x in list(input_dict):
if x == key:
del input_dict[x]
elif isinstance(input_dict[x], dict):
input_dict[x] = clean_dict(input_dict[x], key)
elif isinstance(input_dict[x], list):
temp_list = []
for e in input_dict[x]:
temp_list.append(clean_dict(e, key))
return input_dict

View File

@@ -1,7 +1,6 @@
from django.urls import reverse
from django_scopes import scope, scopes_disabled
from rest_framework.authentication import TokenAuthentication
from rest_framework.authtoken.models import Token
from oauth2_provider.contrib.rest_framework import OAuth2Authentication
from rest_framework.exceptions import AuthenticationFailed
from cookbook.views import views
@@ -14,6 +13,12 @@ class ScopeMiddleware:
def __call__(self, request):
prefix = settings.JS_REVERSE_SCRIPT_PREFIX or ''
# need to disable scopes for writing requests into userpref and enable for loading ?
if request.path.startswith(prefix + '/api/user-preference/'):
with scopes_disabled():
return self.get_response(request)
if request.user.is_authenticated:
if request.path.startswith(prefix + '/admin/'):
@@ -26,24 +31,34 @@ class ScopeMiddleware:
if request.path.startswith(prefix + '/accounts/'):
return self.get_response(request)
with scopes_disabled():
if request.user.userpreference.space is None and not reverse('account_logout') in request.path:
return views.no_space(request)
if request.path.startswith(prefix + '/switch-space/'):
return self.get_response(request)
if request.user.groups.count() == 0 and not reverse('account_logout') in request.path:
with scopes_disabled():
if request.user.userspace_set.count() == 0 and not reverse('account_logout') in request.path:
return views.space_overview(request)
# get active user space, if for some reason more than one space is active select first (group permission checks will fail, this is not intended at this point)
user_space = request.user.userspace_set.filter(active=True).first()
if not user_space:
return views.space_overview(request)
if user_space.groups.count() == 0 and not reverse('account_logout') in request.path:
return views.no_groups(request)
request.space = request.user.userpreference.space
# with scopes_disabled():
request.space = user_space.space
with scope(space=request.space):
return self.get_response(request)
else:
if request.path.startswith(prefix + '/api/'):
try:
if auth := TokenAuthentication().authenticate(request):
request.space = auth[0].userpreference.space
with scope(space=request.space):
return self.get_response(request)
if auth := OAuth2Authentication().authenticate(request):
user_space = auth[0].userspace_set.filter(active=True).first()
if user_space:
request.space = user_space.space
with scope(space=request.space):
return self.get_response(request)
except AuthenticationFailed:
pass

View File

@@ -1,5 +1,6 @@
from bs4 import BeautifulSoup
from json import JSONDecodeError
from bs4 import BeautifulSoup
from recipe_scrapers import SCRAPERS, get_host_name
from recipe_scrapers._factory import SchemaScraperFactory
from recipe_scrapers._schemaorg import SchemaOrg
@@ -26,17 +27,17 @@ def text_scraper(text, url=None):
class TextScraper(scraper_class):
def __init__(
self,
page_data,
url=None
html=None,
url=None,
):
self.wild_mode = False
self.meta_http_equiv = False
self.soup = BeautifulSoup(page_data, "html.parser")
self.soup = BeautifulSoup(html, "html.parser")
self.url = url
self.recipe = None
try:
self.schema = SchemaOrg(page_data)
self.schema = SchemaOrg(html)
except (JSONDecodeError, AttributeError):
pass
return TextScraper(text, url)
return TextScraper(url=url, html=text)

View File

@@ -1,16 +1,13 @@
from datetime import timedelta
from decimal import Decimal
from django.contrib.postgres.aggregates import ArrayAgg
from django.db.models import F, OuterRef, Q, Subquery, Value
from django.db.models.functions import Coalesce
from django.utils import timezone
from django.utils.translation import gettext as _
from cookbook.helper.HelperFunctions import Round, str2bool
from cookbook.models import (Ingredient, MealPlan, Recipe, ShoppingListEntry, ShoppingListRecipe,
SupermarketCategoryRelation)
from recipes import settings
def shopping_helper(qs, request):
@@ -47,6 +44,8 @@ class RecipeShoppingEditor():
self.mealplan = self._kwargs.get('mealplan', None)
if type(self.mealplan) in [int, float]:
self.mealplan = MealPlan.objects.filter(id=self.mealplan, space=self.space)
if isinstance(self.mealplan, dict):
self.mealplan = MealPlan.objects.filter(id=self.mealplan['id'], space=self.space).first()
self.id = self._kwargs.get('id', None)
self._shopping_list_recipe = self.get_shopping_list_recipe(self.id, self.created_by, self.space)
@@ -67,11 +66,12 @@ class RecipeShoppingEditor():
@property
def _recipe_servings(self):
return getattr(self.recipe, 'servings', None) or getattr(getattr(self.mealplan, 'recipe', None), 'servings', None) or getattr(getattr(self._shopping_list_recipe, 'recipe', None), 'servings', None)
return getattr(self.recipe, 'servings', None) or getattr(getattr(self.mealplan, 'recipe', None), 'servings',
None) or getattr(getattr(self._shopping_list_recipe, 'recipe', None), 'servings', None)
@property
def _servings_factor(self):
return Decimal(self.servings)/Decimal(self._recipe_servings)
return Decimal(self.servings) / Decimal(self._recipe_servings)
@property
def _shared_users(self):
@@ -88,9 +88,10 @@ class RecipeShoppingEditor():
def get_recipe_ingredients(self, id, exclude_onhand=False):
if exclude_onhand:
return Ingredient.objects.filter(step__recipe__id=id, food__ignore_shopping=False, space=self.space).exclude(food__onhand_users__id__in=[x.id for x in self._shared_users])
return Ingredient.objects.filter(step__recipe__id=id, food__ignore_shopping=False, space=self.space).exclude(
food__onhand_users__id__in=[x.id for x in self._shared_users])
else:
return Ingredient.objects.filter(step__recipe__id=id, food__ignore_shopping=False, space=self.space)
return Ingredient.objects.filter(step__recipe__id=id, food__ignore_shopping=False, space=self.space)
@property
def _include_related(self):
@@ -107,7 +108,10 @@ class RecipeShoppingEditor():
self.servings = float(servings)
if mealplan := kwargs.get('mealplan', None):
self.mealplan = mealplan
if isinstance(mealplan, dict):
self.mealplan = MealPlan.objects.filter(id=mealplan['id'], space=self.space).first()
else:
self.mealplan = mealplan
self.recipe = mealplan.recipe
elif recipe := kwargs.get('recipe', None):
self.recipe = recipe
@@ -165,14 +169,14 @@ class RecipeShoppingEditor():
try:
self._shopping_list_recipe.delete()
return True
except:
except BaseException:
return False
def _add_ingredients(self, ingredients=None):
if not ingredients:
return
elif type(ingredients) == list:
ingredients = Ingredient.objects.filter(id__in=ingredients)
elif isinstance(ingredients, list):
ingredients = Ingredient.objects.filter(id__in=ingredients, food__ignore_shopping=False)
existing = self._shopping_list_recipe.entries.filter(ingredient__in=ingredients).values_list('ingredient__pk', flat=True)
add_ingredients = ingredients.exclude(id__in=existing)
@@ -194,120 +198,3 @@ class RecipeShoppingEditor():
to_delete = self._shopping_list_recipe.entries.exclude(ingredient__in=ingredients)
ShoppingListEntry.objects.filter(id__in=to_delete).delete()
self._shopping_list_recipe = self.get_shopping_list_recipe(self.id, self.created_by, self.space)
# # TODO refactor as class
# def list_from_recipe(list_recipe=None, recipe=None, mealplan=None, servings=None, ingredients=None, created_by=None, space=None, append=False):
# """
# Creates ShoppingListRecipe and associated ShoppingListEntrys from a recipe or a meal plan with a recipe
# :param list_recipe: Modify an existing ShoppingListRecipe
# :param recipe: Recipe to use as list of ingredients. One of [recipe, mealplan] are required
# :param mealplan: alternatively use a mealplan recipe as source of ingredients
# :param servings: Optional: Number of servings to use to scale shoppinglist. If servings = 0 an existing recipe list will be deleted
# :param ingredients: Ingredients, list of ingredient IDs to include on the shopping list. When not provided all ingredients will be used
# :param append: If False will remove any entries not included with ingredients, when True will append ingredients to the shopping list
# """
# r = recipe or getattr(mealplan, 'recipe', None) or getattr(list_recipe, 'recipe', None)
# if not r:
# raise ValueError(_("You must supply a recipe or mealplan"))
# created_by = created_by or getattr(ShoppingListEntry.objects.filter(list_recipe=list_recipe).first(), 'created_by', None)
# if not created_by:
# raise ValueError(_("You must supply a created_by"))
# try:
# servings = float(servings)
# except (ValueError, TypeError):
# servings = getattr(mealplan, 'servings', 1.0)
# servings_factor = servings / r.servings
# shared_users = list(created_by.get_shopping_share())
# shared_users.append(created_by)
# if list_recipe:
# created = False
# else:
# list_recipe = ShoppingListRecipe.objects.create(recipe=r, mealplan=mealplan, servings=servings)
# created = True
# related_step_ing = []
# if servings == 0 and not created:
# list_recipe.delete()
# return []
# elif ingredients:
# ingredients = Ingredient.objects.filter(pk__in=ingredients, space=space)
# else:
# ingredients = Ingredient.objects.filter(step__recipe=r, food__ignore_shopping=False, space=space)
# if exclude_onhand := created_by.userpreference.mealplan_autoexclude_onhand:
# ingredients = ingredients.exclude(food__onhand_users__id__in=[x.id for x in shared_users])
# if related := created_by.userpreference.mealplan_autoinclude_related:
# # TODO: add levels of related recipes (related recipes of related recipes) to use when auto-adding mealplans
# related_recipes = r.get_related_recipes()
# for x in related_recipes:
# # related recipe is a Step serving size is driven by recipe serving size
# # TODO once/if Steps can have a serving size this needs to be refactored
# if exclude_onhand:
# # if steps are used more than once in a recipe or subrecipe - I don' think this results in the desired behavior
# related_step_ing += Ingredient.objects.filter(step__recipe=x, space=space).exclude(food__onhand_users__id__in=[x.id for x in shared_users]).values_list('id', flat=True)
# else:
# related_step_ing += Ingredient.objects.filter(step__recipe=x, space=space).values_list('id', flat=True)
# x_ing = []
# if ingredients.filter(food__recipe=x).exists():
# for ing in ingredients.filter(food__recipe=x):
# if exclude_onhand:
# x_ing = Ingredient.objects.filter(step__recipe=x, food__ignore_shopping=False, space=space).exclude(food__onhand_users__id__in=[x.id for x in shared_users])
# else:
# x_ing = Ingredient.objects.filter(step__recipe=x, food__ignore_shopping=False, space=space).exclude(food__ignore_shopping=True)
# for i in [x for x in x_ing]:
# ShoppingListEntry.objects.create(
# list_recipe=list_recipe,
# food=i.food,
# unit=i.unit,
# ingredient=i,
# amount=i.amount * Decimal(servings_factor),
# created_by=created_by,
# space=space,
# )
# # dont' add food to the shopping list that are actually recipes that will be added as ingredients
# ingredients = ingredients.exclude(food__recipe=x)
# add_ingredients = list(ingredients.values_list('id', flat=True)) + related_step_ing
# if not append:
# existing_list = ShoppingListEntry.objects.filter(list_recipe=list_recipe)
# # delete shopping list entries not included in ingredients
# existing_list.exclude(ingredient__in=ingredients).delete()
# # add shopping list entries that did not previously exist
# add_ingredients = set(add_ingredients) - set(existing_list.values_list('ingredient__id', flat=True))
# add_ingredients = Ingredient.objects.filter(id__in=add_ingredients, space=space)
# # if servings have changed, update the ShoppingListRecipe and existing Entries
# if servings <= 0:
# servings = 1
# if not created and list_recipe.servings != servings:
# update_ingredients = set(ingredients.values_list('id', flat=True)) - set(add_ingredients.values_list('id', flat=True))
# list_recipe.servings = servings
# list_recipe.save()
# for sle in ShoppingListEntry.objects.filter(list_recipe=list_recipe, ingredient__id__in=update_ingredients):
# sle.amount = sle.ingredient.amount * Decimal(servings_factor)
# sle.save()
# # add any missing Entries
# for i in [x for x in add_ingredients if x.food]:
# ShoppingListEntry.objects.create(
# list_recipe=list_recipe,
# food=i.food,
# unit=i.unit,
# ingredient=i,
# amount=i.amount * Decimal(servings_factor),
# created_by=created_by,
# space=space,
# )
# # return all shopping list items
# return list_recipe

View File

@@ -2,7 +2,6 @@ from gettext import gettext as _
import bleach
import markdown as md
from bleach_allowlist import markdown_attrs, markdown_tags
from jinja2 import Template, TemplateSyntaxError, UndefinedError
from markdown.extensions.tables import TableExtension
@@ -22,10 +21,25 @@ class IngredientObject(object):
else:
self.amount = f"<scalable-number v-bind:number='{bleach.clean(str(ingredient.amount))}' v-bind:factor='ingredient_factor'></scalable-number>"
if ingredient.unit:
self.unit = bleach.clean(str(ingredient.unit))
if ingredient.unit.plural_name in (None, ""):
self.unit = bleach.clean(str(ingredient.unit))
else:
if ingredient.always_use_plural_unit or ingredient.amount > 1 and not ingredient.no_amount:
self.unit = bleach.clean(ingredient.unit.plural_name)
else:
self.unit = bleach.clean(str(ingredient.unit))
else:
self.unit = ""
self.food = bleach.clean(str(ingredient.food))
if ingredient.food:
if ingredient.food.plural_name in (None, ""):
self.food = bleach.clean(str(ingredient.food))
else:
if ingredient.always_use_plural_food or ingredient.amount > 1 and not ingredient.no_amount:
self.food = bleach.clean(str(ingredient.food.plural_name))
else:
self.food = bleach.clean(str(ingredient.food))
else:
self.food = ""
self.note = bleach.clean(str(ingredient.note))
def __str__(self):
@@ -38,9 +52,17 @@ class IngredientObject(object):
def render_instructions(step): # TODO deduplicate markdown cleanup code
instructions = step.instruction
tags = markdown_tags + [
'pre', 'table', 'td', 'tr', 'th', 'tbody', 'style', 'thead', 'img'
]
tags = {
"h1", "h2", "h3", "h4", "h5", "h6",
"b", "i", "strong", "em", "tt",
"p", "br",
"span", "div", "blockquote", "code", "pre", "hr",
"ul", "ol", "li", "dd", "dt",
"img",
"a",
"sub", "sup",
'pre', 'table', 'td', 'tr', 'th', 'tbody', 'style', 'thead'
}
parsed_md = md.markdown(
instructions,
extensions=[
@@ -48,7 +70,11 @@ def render_instructions(step): # TODO deduplicate markdown cleanup code
UrlizeExtension(), MarkdownFormatExtension()
]
)
markdown_attrs['*'] = markdown_attrs['*'] + ['class', 'width', 'height']
markdown_attrs = {
"*": ["id", "class", 'width', 'height'],
"img": ["src", "alt", "title"],
"a": ["href", "alt", "title"],
}
instructions = bleach.clean(parsed_md, tags, markdown_attrs)

View File

@@ -0,0 +1,141 @@
from django.core.cache import caches
from decimal import Decimal
from cookbook.helper.cache_helper import CacheHelper
from cookbook.models import Ingredient, Unit
CONVERSION_TABLE = {
'weight': {
'g': 1000,
'kg': 1,
'ounce': 35.274,
'pound': 2.20462
},
'volume': {
'ml': 1000,
'l': 1,
'fluid_ounce': 33.814,
'pint': 2.11338,
'quart': 1.05669,
'gallon': 0.264172,
'tbsp': 67.628,
'tsp': 202.884,
'imperial_fluid_ounce': 35.1951,
'imperial_pint': 1.75975,
'imperial_quart': 0.879877,
'imperial_gallon': 0.219969,
'imperial_tbsp': 56.3121,
'imperial_tsp': 168.936,
},
}
BASE_UNITS_WEIGHT = list(CONVERSION_TABLE['weight'].keys())
BASE_UNITS_VOLUME = list(CONVERSION_TABLE['volume'].keys())
class ConversionException(Exception):
pass
class UnitConversionHelper:
space = None
def __init__(self, space):
"""
Initializes unit conversion helper
:param space: space to perform conversions on
"""
self.space = space
@staticmethod
def convert_from_to(from_unit, to_unit, amount):
"""
Convert from one base unit to another. Throws ConversionException if trying to convert between different systems (weight/volume) or if units are not supported.
:param from_unit: str unit to convert from
:param to_unit: str unit to convert to
:param amount: amount to convert
:return: Decimal converted amount
"""
system = None
if from_unit in BASE_UNITS_WEIGHT and to_unit in BASE_UNITS_WEIGHT:
system = 'weight'
if from_unit in BASE_UNITS_VOLUME and to_unit in BASE_UNITS_VOLUME:
system = 'volume'
if not system:
raise ConversionException('Trying to convert units not existing or not in one unit system (weight/volume)')
return Decimal(amount / Decimal(CONVERSION_TABLE[system][from_unit] / CONVERSION_TABLE[system][to_unit]))
def base_conversions(self, ingredient_list):
"""
Calculates all possible base unit conversions for each ingredient give.
Converts to all common base units IF they exist in the unit database of the space.
For useful results all ingredients passed should be of the same food, otherwise filtering afterwards might be required.
:param ingredient_list: list of ingredients to convert
:return: ingredient list with appended conversions
"""
base_conversion_ingredient_list = ingredient_list.copy()
for i in ingredient_list:
try:
conversion_unit = i.unit.name
if i.unit.base_unit:
conversion_unit = i.unit.base_unit
# TODO allow setting which units to convert to? possibly only once conversions become visible
units = caches['default'].get(CacheHelper(self.space).BASE_UNITS_CACHE_KEY, None)
if not units:
units = Unit.objects.filter(space=self.space, base_unit__in=(BASE_UNITS_VOLUME + BASE_UNITS_WEIGHT)).all()
caches['default'].set(CacheHelper(self.space).BASE_UNITS_CACHE_KEY, units, 60 * 60) # cache is cleared on unit save signal so long duration is fine
for u in units:
try:
ingredient = Ingredient(amount=self.convert_from_to(conversion_unit, u.base_unit, i.amount), unit=u, food=ingredient_list[0].food, )
if not any((x.unit.name == ingredient.unit.name or x.unit.base_unit == ingredient.unit.name) for x in base_conversion_ingredient_list):
base_conversion_ingredient_list.append(ingredient)
except ConversionException:
pass
except Exception:
pass
return base_conversion_ingredient_list
def get_conversions(self, ingredient):
"""
Converts an ingredient to all possible conversions based on the custom unit conversion database.
After that passes conversion to UnitConversionHelper.base_conversions() to get all base conversions possible.
:param ingredient: Ingredient object
:return: list of ingredients with all possible custom and base conversions
"""
conversions = [ingredient]
if ingredient.unit:
for c in ingredient.unit.unit_conversion_base_relation.all():
if c.space == self.space:
r = self._uc_convert(c, ingredient.amount, ingredient.unit, ingredient.food)
if r and r not in conversions:
conversions.append(r)
for c in ingredient.unit.unit_conversion_converted_relation.all():
if c.space == self.space:
r = self._uc_convert(c, ingredient.amount, ingredient.unit, ingredient.food)
if r and r not in conversions:
conversions.append(r)
conversions = self.base_conversions(conversions)
return conversions
def _uc_convert(self, uc, amount, unit, food):
"""
Helper to calculate values for custom unit conversions.
Converts given base values using the passed UnitConversion object into a converted Ingredient
:param uc: UnitConversion object
:param amount: base amount
:param unit: base unit
:param food: base food
:return: converted ingredient object from base amount/unit/food
"""
if uc.food is None or uc.food == food:
if unit == uc.base_unit:
return Ingredient(amount=amount * (uc.converted_amount / uc.base_amount), unit=uc.converted_unit, food=food, space=self.space)
else:
return Ingredient(amount=amount * (uc.base_amount / uc.converted_amount), unit=uc.base_unit, food=food, space=self.space)

View File

@@ -36,7 +36,7 @@ class ChefTap(Integration):
recipe = Recipe.objects.create(name=title, created_by=self.request.user, internal=True, space=self.request.space, )
step = Step.objects.create(instruction='\n'.join(directions), space=self.request.space,)
step = Step.objects.create(instruction='\n'.join(directions), space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,)
if source_url != '':
step.instruction += '\n' + source_url

View File

@@ -4,6 +4,7 @@ from zipfile import ZipFile
from cookbook.helper.image_processing import get_filetype
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Keyword, Recipe, Step
@@ -19,6 +20,10 @@ class Chowdown(Integration):
direction_mode = False
description_mode = False
description = None
prep_time = None
serving = None
ingredients = []
directions = []
descriptions = []
@@ -26,6 +31,12 @@ class Chowdown(Integration):
line = fl.decode("utf-8")
if 'title:' in line:
title = line.replace('title:', '').replace('"', '').strip()
if 'description:' in line:
description = line.replace('description:', '').replace('"', '').strip()
if 'prep_time:' in line:
prep_time = line.replace('prep_time:', '').replace('"', '').strip()
if 'yield:' in line:
serving = line.replace('yield:', '').replace('"', '').strip()
if 'image:' in line:
image = line.replace('image:', '').strip()
if 'tags:' in line:
@@ -48,15 +59,43 @@ class Chowdown(Integration):
descriptions.append(line)
recipe = Recipe.objects.create(name=title, created_by=self.request.user, internal=True, space=self.request.space)
if description:
recipe.description = description
for k in tags.split(','):
print(f'adding keyword {k.strip()}')
keyword, created = Keyword.objects.get_or_create(name=k.strip(), space=self.request.space)
recipe.keywords.add(keyword)
step = Step.objects.create(
instruction='\n'.join(directions) + '\n\n' + '\n'.join(descriptions), space=self.request.space,
)
ingredients_added = False
for direction in directions:
if len(direction.strip()) > 0:
step = Step.objects.create(
instruction=direction, name='', space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
else:
step = Step.objects.create(
instruction=direction, space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
if not ingredients_added:
ingredients_added = True
ingredient_parser = IngredientParser(self.request, True)
for ingredient in ingredients:
if len(ingredient.strip()) > 0:
amount, unit, food, note = ingredient_parser.parse(ingredient)
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
step.ingredients.add(Ingredient.objects.create(
food=f, unit=u, amount=amount, note=note, original_text=ingredient, space=self.request.space,
))
recipe.steps.add(step)
if serving:
recipe.servings = parse_servings(serving)
recipe.servings_text = 'servings'
if prep_time:
recipe.working_time = parse_time(prep_time)
ingredient_parser = IngredientParser(self.request, True)
for ingredient in ingredients:
@@ -76,6 +115,7 @@ class Chowdown(Integration):
if re.match(f'^images/{image}$', z.filename):
self.import_recipe_image(recipe, BytesIO(import_zip.read(z.filename)), filetype=get_filetype(z.filename))
recipe.save()
return recipe
def get_file_from_recipe(self, recipe):

View File

@@ -1,18 +1,15 @@
import base64
import gzip
import json
import re
from gettext import gettext as _
from io import BytesIO
import requests
import yaml
import validators
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_html_import import get_recipe_from_source
from cookbook.helper.recipe_url_import import iso_duration_to_minutes
from cookbook.helper.recipe_url_import import (get_from_scraper, get_images_from_soup,
iso_duration_to_minutes)
from cookbook.helper.scrapers.scrapers import text_scraper
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Keyword, Recipe, Step
from cookbook.models import Ingredient, Recipe, Step
class CookBookApp(Integration):
@@ -23,7 +20,9 @@ class CookBookApp(Integration):
def get_recipe_from_file(self, file):
recipe_html = file.getvalue().decode("utf-8")
recipe_json, recipe_tree, html_data, images = get_recipe_from_source(recipe_html, 'CookBookApp', self.request)
scrape = text_scraper(text=recipe_html)
recipe_json = get_from_scraper(scrape, self.request)
images = list(dict.fromkeys(get_images_from_soup(scrape.soup, None)))
recipe = Recipe.objects.create(
name=recipe_json['name'].strip(),
@@ -32,7 +31,7 @@ class CookBookApp(Integration):
try:
recipe.servings = re.findall('([0-9])+', recipe_json['recipeYield'])[0]
except Exception as e:
except Exception:
pass
try:
@@ -41,7 +40,9 @@ class CookBookApp(Integration):
except Exception:
pass
step = Step.objects.create(instruction=recipe_json['recipeInstructions'], space=self.request.space, )
# assuming import files only contain single step
step = Step.objects.create(instruction=recipe_json['steps'][0]['instruction'], space=self.request.space,
show_ingredients_table=self.request.user.userpreference.show_step_ingredients, )
if 'nutrition' in recipe_json:
step.instruction = step.instruction + '\n\n' + recipe_json['nutrition']
@@ -50,17 +51,21 @@ class CookBookApp(Integration):
recipe.steps.add(step)
ingredient_parser = IngredientParser(self.request, True)
for ingredient in recipe_json['recipeIngredient']:
f = ingredient_parser.get_food(ingredient['ingredient']['text'])
u = ingredient_parser.get_unit(ingredient['unit']['text'])
for ingredient in recipe_json['steps'][0]['ingredients']:
f = ingredient_parser.get_food(ingredient['food']['name'])
u = None
if unit := ingredient.get('unit', None):
u = ingredient_parser.get_unit(unit.get('name', None))
step.ingredients.add(Ingredient.objects.create(
food=f, unit=u, amount=ingredient['amount'], note=ingredient['note'], space=self.request.space,
food=f, unit=u, amount=ingredient.get('amount', None), note=ingredient.get('note', None), original_text=ingredient.get('original_text', None), space=self.request.space,
))
if len(images) > 0:
try:
response = requests.get(images[0])
self.import_recipe_image(recipe, BytesIO(response.content))
url = images[0]
if validators.url(url, public=True):
response = requests.get(url)
self.import_recipe_image(recipe, BytesIO(response.content))
except Exception as e:
print('failed to import image ', str(e))

View File

@@ -1,16 +1,12 @@
import base64
import json
from io import BytesIO
from gettext import gettext as _
import requests
from lxml import etree
import validators
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_url_import import parse_servings, parse_time, parse_servings_text
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Keyword, Recipe, Step
from cookbook.models import Ingredient, Recipe, Step
class Cookmate(Integration):
@@ -28,43 +24,53 @@ class Cookmate(Integration):
name=recipe_xml.find('title').text.strip(),
created_by=self.request.user, internal=True, space=self.request.space)
if recipe_xml.find('preptime') is not None:
if recipe_xml.find('preptime') is not None and recipe_xml.find('preptime').text is not None:
recipe.working_time = parse_time(recipe_xml.find('preptime').text.strip())
if recipe_xml.find('cooktime') is not None:
if recipe_xml.find('cooktime') is not None and recipe_xml.find('cooktime').text is not None:
recipe.waiting_time = parse_time(recipe_xml.find('cooktime').text.strip())
if recipe_xml.find('quantity') is not None:
if recipe_xml.find('quantity') is not None and recipe_xml.find('quantity').text is not None:
recipe.servings = parse_servings(recipe_xml.find('quantity').text.strip())
recipe.servings_text = parse_servings_text(recipe_xml.find('quantity').text.strip())
if recipe_xml.find('url') is not None:
if recipe_xml.find('url') is not None and recipe_xml.find('url').text is not None:
recipe.source_url = recipe_xml.find('url').text.strip()
if recipe_xml.find('description') is not None: # description is a list of <li>'s with text
if len(recipe_xml.find('description')) > 0:
recipe.description = recipe_xml.find('description')[0].text[:512]
for step in recipe_xml.find('recipetext').getchildren():
step = Step.objects.create(
instruction=step.text.strip(), space=self.request.space,
)
recipe.steps.add(step)
if recipe_text := recipe_xml.find('recipetext'):
for step in recipe_text.getchildren():
if step.text:
step = Step.objects.create(
instruction=step.text.strip(), space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
recipe.steps.add(step)
ingredient_parser = IngredientParser(self.request, True)
for ingredient in recipe_xml.find('ingredient').getchildren():
if ingredient.text.strip() != '':
amount, unit, food, note = ingredient_parser.parse(ingredient.text.strip())
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
recipe.steps.first().ingredients.add(Ingredient.objects.create(
food=f, unit=u, amount=amount, note=note, original_text=ingredient.text.strip(), space=self.request.space,
))
if recipe_ingredients := recipe_xml.find('ingredient'):
ingredient_step = recipe.steps.first()
if ingredient_step is None:
ingredient_step = Step.objects.create(space=self.request.space, instruction='')
for ingredient in recipe_ingredients.getchildren():
if ingredient.text:
if ingredient.text.strip() != '':
amount, unit, food, note = ingredient_parser.parse(ingredient.text.strip())
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
ingredient_step.ingredients.add(Ingredient.objects.create(
food=f, unit=u, amount=amount, note=note, original_text=ingredient.text.strip(), space=self.request.space,
))
if recipe_xml.find('imageurl') is not None:
try:
response = requests.get(recipe_xml.find('imageurl').text.strip())
url = recipe_xml.find('imageurl').text.strip()
if validators.url(url, public=True):
response = requests.get(url)
self.import_recipe_image(recipe, BytesIO(response.content))
except Exception as e:
print('failed to import image ', str(e))

View File

@@ -1,12 +1,10 @@
import re
from io import BytesIO
from zipfile import ZipFile
from bs4 import BeautifulSoup
from bs4 import BeautifulSoup, Tag
from django.utils.translation import gettext as _
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_html_import import get_recipe_from_source
from cookbook.helper.recipe_url_import import iso_duration_to_minutes, parse_servings
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Keyword, Recipe, Step
@@ -22,7 +20,13 @@ class CopyMeThat(Integration):
def get_recipe_from_file(self, file):
# 'file' comes is as a beautifulsoup object
recipe = Recipe.objects.create(name=file.find("div", {"id": "name"}).text.strip(), created_by=self.request.user, internal=True, space=self.request.space, )
try:
source = file.find("a", {"id": "original_link"}).text
except AttributeError:
source = None
recipe = Recipe.objects.create(name=file.find("div", {"id": "name"}).text.strip(
)[:128], source_url=source, created_by=self.request.user, internal=True, space=self.request.space, )
for category in file.find_all("span", {"class": "recipeCategory"}):
keyword, created = Keyword.objects.get_or_create(name=category.text, space=self.request.space)
@@ -32,8 +36,6 @@ class CopyMeThat(Integration):
recipe.servings = parse_servings(file.find("a", {"id": "recipeYield"}).text.strip())
recipe.working_time = iso_duration_to_minutes(file.find("span", {"meta": "prepTime"}).text.strip())
recipe.waiting_time = iso_duration_to_minutes(file.find("span", {"meta": "cookTime"}).text.strip())
recipe.description = (file.find("div ", {"id": "description"}).text.strip())[:512]
except AttributeError:
pass
@@ -43,36 +45,72 @@ class CopyMeThat(Integration):
except AttributeError:
pass
step = Step.objects.create(instruction='', space=self.request.space, )
ingredient_parser = IngredientParser(self.request, True)
for ingredient in file.find_all("li", {"class": "recipeIngredient"}):
if ingredient.text == "":
continue
amount, unit, food, note = ingredient_parser.parse(ingredient.text.strip())
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
step.ingredients.add(Ingredient.objects.create(
food=f, unit=u, amount=amount, note=note, original_text=ingredient.text.strip(), space=self.request.space,
))
for s in file.find_all("li", {"class": "instruction"}):
if s.text == "":
continue
step.instruction += s.text.strip() + ' \n\n'
for s in file.find_all("li", {"class": "recipeNote"}):
if s.text == "":
continue
step.instruction += s.text.strip() + ' \n\n'
try:
if file.find("a", {"id": "original_link"}).text != '':
step.instruction += "\n\n" + _("Imported from") + ": " + file.find("a", {"id": "original_link"}).text
step.save()
if len(file.find("span", {"id": "made_this"}).text.strip()) > 0:
recipe.keywords.add(Keyword.objects.get_or_create(space=self.request.space, name=_('I made this'))[0])
except AttributeError:
pass
step = Step.objects.create(instruction='', space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients, )
ingredient_parser = IngredientParser(self.request, True)
ingredients = file.find("ul", {"id": "recipeIngredients"})
if isinstance(ingredients, Tag):
for ingredient in ingredients.children:
if not isinstance(ingredient, Tag) or not ingredient.text.strip() or "recipeIngredient_spacer" in ingredient['class']:
continue
if any(x in ingredient['class'] for x in ["recipeIngredient_subheader", "recipeIngredient_note"]):
step.ingredients.add(
Ingredient.objects.create(
is_header=True,
note=ingredient.text.strip()[
:256],
original_text=ingredient.text.strip(),
space=self.request.space,
))
else:
amount, unit, food, note = ingredient_parser.parse(ingredient.text.strip())
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
step.ingredients.add(Ingredient.objects.create(food=f, unit=u, amount=amount, note=note, original_text=ingredient.text.strip(), space=self.request.space, ))
instructions = file.find("ol", {"id": "recipeInstructions"})
if isinstance(instructions, Tag):
for instruction in instructions.children:
if not isinstance(instruction, Tag) or instruction.text == "":
continue
if "instruction_subheader" in instruction['class']:
if step.instruction:
step.save()
recipe.steps.add(step)
step = Step.objects.create(instruction='', space=self.request.space, )
step.name = instruction.text.strip()[:128]
else:
step.instruction += instruction.text.strip() + ' \n\n'
notes = file.find_all("li", {"class": "recipeNote"})
if notes:
step.instruction += '*Notes:* \n\n'
for n in notes:
if n.text == "":
continue
step.instruction += '*' + n.text.strip() + '* \n\n'
description = ''
try:
description = file.find("div", {"id": "description"}).text.strip()
except AttributeError:
pass
if len(description) <= 512:
recipe.description = description
else:
recipe.description = description[:480] + ' ... (full description below)'
step.instruction += '*Description:* \n\n*' + description + '* \n\n'
step.save()
recipe.steps.add(step)
# import the Primary recipe image that is stored in the Zip

View File

@@ -1,4 +1,5 @@
import json
import traceback
from io import BytesIO, StringIO
from re import match
from zipfile import ZipFile
@@ -19,7 +20,10 @@ class Default(Integration):
recipe = self.decode_recipe(recipe_string)
images = list(filter(lambda v: match('image.*', v), recipe_zip.namelist()))
if images:
self.import_recipe_image(recipe, BytesIO(recipe_zip.read(images[0])), filetype=get_filetype(images[0]))
try:
self.import_recipe_image(recipe, BytesIO(recipe_zip.read(images[0])), filetype=get_filetype(images[0]))
except AttributeError:
traceback.print_exc()
return recipe
def decode_recipe(self, string):
@@ -54,7 +58,7 @@ class Default(Integration):
try:
recipe_zip_obj.writestr(f'image{get_filetype(r.image.file.name)}', r.image.file.read())
except ValueError:
except (ValueError, FileNotFoundError):
pass
recipe_zip_obj.close()
@@ -67,4 +71,4 @@ class Default(Integration):
export_zip_obj.close()
return [[ self.get_export_file_name(), export_zip_stream.getvalue() ]]
return [[self.get_export_file_name(), export_zip_stream.getvalue()]]

View File

@@ -28,7 +28,7 @@ class Domestica(Integration):
recipe.save()
step = Step.objects.create(
instruction=file['directions'], space=self.request.space,
instruction=file['directions'], space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
if file['source'] != '':

View File

@@ -1,16 +1,11 @@
import time
import datetime
import json
import traceback
import uuid
from io import BytesIO, StringIO
from io import BytesIO
from zipfile import BadZipFile, ZipFile
import lxml
from django.core.cache import cache
import datetime
from bs4 import Tag
from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist
from django.core.files import File
from django.db import IntegrityError
@@ -20,11 +15,9 @@ from django.utils.translation import gettext as _
from django_scopes import scope
from lxml import etree
from cookbook.forms import ImportExportBase
from cookbook.helper.image_processing import get_filetype, handle_image
from cookbook.helper.image_processing import handle_image
from cookbook.models import Keyword, Recipe
from recipes.settings import DEBUG
from recipes.settings import EXPORT_FILE_CACHE_DURATION
from recipes.settings import DEBUG, EXPORT_FILE_CACHE_DURATION
class Integration:
@@ -43,8 +36,7 @@ class Integration:
self.export_type = export_type
self.ignored_recipes = []
description = f'Imported by {request.user.get_user_name()} at {date_format(datetime.datetime.now(), "DATETIME_FORMAT")}. Type: {export_type}'
icon = '📥'
description = f'Imported by {request.user.get_user_display_name()} at {date_format(datetime.datetime.now(), "DATETIME_FORMAT")}. Type: {export_type}'
try:
last_kw = Keyword.objects.filter(name__regex=r'^(Import [0-9]+)', space=request.space).latest('created_at')
@@ -57,23 +49,19 @@ class Integration:
self.keyword = parent.add_child(
name=name,
description=description,
icon=icon,
space=request.space
)
except (IntegrityError, ValueError): # in case, for whatever reason, the name does exist append UUID to it. Not nice but works for now.
self.keyword = parent.add_child(
name=f'{name} {str(uuid.uuid4())[0:8]}',
description=description,
icon=icon,
space=request.space
)
def do_export(self, recipes, el):
with scope(space=self.request.space):
el.total_recipes = len(recipes)
el.total_recipes = len(recipes)
el.cache_duration = EXPORT_FILE_CACHE_DURATION
el.save()
@@ -85,7 +73,7 @@ class Integration:
export_file = file
else:
#zip the files if there is more then one file
# zip the files if there is more then one file
export_filename = self.get_export_file_name()
export_stream = BytesIO()
export_obj = ZipFile(export_stream, 'w')
@@ -96,8 +84,7 @@ class Integration:
export_obj.close()
export_file = export_stream.getvalue()
cache.set('export_file_'+str(el.pk), {'filename': export_filename, 'file': export_file}, EXPORT_FILE_CACHE_DURATION)
cache.set('export_file_' + str(el.pk), {'filename': export_filename, 'file': export_file}, EXPORT_FILE_CACHE_DURATION)
el.running = False
el.save()
@@ -105,7 +92,6 @@ class Integration:
response['Content-Disposition'] = 'attachment; filename="' + export_filename + '"'
return response
def import_file_name_filter(self, zip_info_object):
"""
Since zipfile.namelist() returns all files in all subdirectories this function allows filtering of files
@@ -169,7 +155,7 @@ class Integration:
for z in file_list:
try:
if not hasattr(z, 'filename'):
if not hasattr(z, 'filename') or isinstance(z, Tag):
recipe = self.get_recipe_from_file(z)
else:
recipe = self.get_recipe_from_file(BytesIO(import_zip.read(z.filename)))
@@ -182,7 +168,7 @@ class Integration:
traceback.print_exc()
self.handle_exception(e, log=il, message=f'-------------------- \nERROR \n{e}\n--------------------\n')
import_zip.close()
elif '.json' in f['name'] or '.txt' in f['name'] or '.mmf' in f['name'] or '.rk' in f['name'] or '.melarecipe' in f['name']:
elif '.json' in f['name'] or '.xml' in f['name'] or '.txt' in f['name'] or '.mmf' in f['name'] or '.rk' in f['name'] or '.melarecipe' in f['name']:
data_list = self.split_recipe_file(f['file'])
il.total_recipes += len(data_list)
for d in data_list:
@@ -303,7 +289,6 @@ class Integration:
if DEBUG:
traceback.print_exc()
def get_export_file_name(self, format='zip'):
return "export_{}.{}".format(datetime.datetime.now().strftime("%Y-%m-%d"), format)

View File

@@ -5,8 +5,9 @@ from zipfile import ZipFile
from cookbook.helper.image_processing import get_filetype
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Recipe, Step
from cookbook.models import Ingredient, Keyword, Recipe, Step
class Mealie(Integration):
@@ -23,41 +24,66 @@ class Mealie(Integration):
name=recipe_json['name'].strip(), description=description,
created_by=self.request.user, internal=True, space=self.request.space)
# TODO parse times (given in PT2H3M )
# @vabene check recipe_url_import.iso_duration_to_minutes I think it does what you are looking for
ingredients_added = False
for s in recipe_json['recipe_instructions']:
step = Step.objects.create(
instruction=s['text'], space=self.request.space,
)
if not ingredients_added:
ingredients_added = True
if len(recipe_json['description'].strip()) > 500:
step.instruction = recipe_json['description'].strip() + '\n\n' + step.instruction
ingredient_parser = IngredientParser(self.request, True)
for ingredient in recipe_json['recipe_ingredient']:
try:
if ingredient['food']:
f = ingredient_parser.get_food(ingredient['food'])
u = ingredient_parser.get_unit(ingredient['unit'])
amount = ingredient['quantity']
note = ingredient['note']
original_text = None
else:
amount, unit, food, note = ingredient_parser.parse(ingredient['note'])
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
original_text = ingredient['note']
step.ingredients.add(Ingredient.objects.create(
food=f, unit=u, amount=amount, note=note, original_text=original_text, space=self.request.space,
))
except Exception:
pass
step = Step.objects.create(instruction=s['text'], space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients, )
recipe.steps.add(step)
step = recipe.steps.first()
if not step: # if there is no step in the exported data
step = Step.objects.create(instruction='', space=self.request.space, )
recipe.steps.add(step)
if len(recipe_json['description'].strip()) > 500:
step.instruction = recipe_json['description'].strip() + '\n\n' + step.instruction
ingredient_parser = IngredientParser(self.request, True)
for ingredient in recipe_json['recipe_ingredient']:
try:
if ingredient['food']:
f = ingredient_parser.get_food(ingredient['food'])
u = ingredient_parser.get_unit(ingredient['unit'])
amount = ingredient['quantity']
note = ingredient['note']
original_text = None
else:
amount, unit, food, note = ingredient_parser.parse(ingredient['note'])
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
original_text = ingredient['note']
step.ingredients.add(Ingredient.objects.create(
food=f, unit=u, amount=amount, note=note, original_text=original_text, space=self.request.space,
))
except Exception:
pass
if 'tags' in recipe_json and len(recipe_json['tags']) > 0:
for k in recipe_json['tags']:
if 'name' in k:
keyword, created = Keyword.objects.get_or_create(name=k['name'].strip(), space=self.request.space)
recipe.keywords.add(keyword)
if 'notes' in recipe_json and len(recipe_json['notes']) > 0:
notes_text = "#### Notes \n\n"
for n in recipe_json['notes']:
notes_text += f'{n["text"]} \n'
step = Step.objects.create(
instruction=notes_text, space=self.request.space,
)
recipe.steps.add(step)
if 'recipe_yield' in recipe_json:
recipe.servings = parse_servings(recipe_json['recipe_yield'])
recipe.servings_text = parse_servings_text(recipe_json['recipe_yield'])
if 'total_time' in recipe_json and recipe_json['total_time'] is not None:
recipe.working_time = parse_time(recipe_json['total_time'])
if 'org_url' in recipe_json:
recipe.source_url = recipe_json['org_url']
recipe.save()
for f in self.files:
if '.zip' in f['name']:
import_zip = ZipFile(f['file'])

View File

@@ -39,7 +39,7 @@ class MealMaster(Integration):
recipe.keywords.add(keyword)
step = Step.objects.create(
instruction='\n'.join(directions) + '\n\n', space=self.request.space,
instruction='\n'.join(directions) + '\n\n', space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
ingredient_parser = IngredientParser(self.request, True)

View File

@@ -57,7 +57,7 @@ class MelaRecipes(Integration):
recipe.source_url = recipe_json['link']
step = Step.objects.create(
instruction=instruction, space=self.request.space,
instruction=instruction, space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients
)
ingredient_parser = IngredientParser(self.request, True)

View File

@@ -1,13 +1,15 @@
import json
import re
from io import BytesIO
from io import BytesIO, StringIO
from zipfile import ZipFile
from PIL import Image
from cookbook.helper.image_processing import get_filetype
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_url_import import iso_duration_to_minutes
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Keyword, Recipe, Step
from cookbook.models import Ingredient, Keyword, NutritionInformation, Recipe, Step
class NextcloudCookbook(Integration):
@@ -50,9 +52,14 @@ class NextcloudCookbook(Integration):
ingredients_added = False
for s in recipe_json['recipeInstructions']:
step = Step.objects.create(
instruction=s, space=self.request.space,
)
if 'text' in s:
step = Step.objects.create(
instruction=s['text'], name=s['name'], space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
else:
step = Step.objects.create(
instruction=s, space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
if not ingredients_added:
if len(recipe_json['description'].strip()) > 500:
step.instruction = recipe_json['description'].strip() + '\n\n' + step.instruction
@@ -70,11 +77,20 @@ class NextcloudCookbook(Integration):
recipe.steps.add(step)
if 'nutrition' in recipe_json:
nutrition = {}
try:
recipe.nutrition.calories = recipe_json['nutrition']['calories'].replace(' kcal', '').replace(' ', '')
recipe.nutrition.proteins = recipe_json['nutrition']['calories'].replace(' g', '').replace(',', '.').replace(' ', '')
recipe.nutrition.fats = recipe_json['nutrition']['calories'].replace(' g', '').replace(',', '.').replace(' ', '')
recipe.nutrition.carbohydrates = recipe_json['nutrition']['calories'].replace(' g', '').replace(',', '.').replace(' ', '')
if 'calories' in recipe_json['nutrition']:
nutrition['calories'] = int(re.search(r'\d+', recipe_json['nutrition']['calories']).group())
if 'proteinContent' in recipe_json['nutrition']:
nutrition['proteins'] = int(re.search(r'\d+', recipe_json['nutrition']['proteinContent']).group())
if 'fatContent' in recipe_json['nutrition']:
nutrition['fats'] = int(re.search(r'\d+', recipe_json['nutrition']['fatContent']).group())
if 'carbohydrateContent' in recipe_json['nutrition']:
nutrition['carbohydrates'] = int(re.search(r'\d+', recipe_json['nutrition']['carbohydrateContent']).group())
if nutrition != {}:
recipe.nutrition = NutritionInformation.objects.create(**nutrition, space=self.request.space)
recipe.save()
except Exception:
pass
@@ -87,5 +103,90 @@ class NextcloudCookbook(Integration):
return recipe
def formatTime(self, min):
h = min // 60
m = min % 60
return f'PT{h}H{m}M0S'
def get_file_from_recipe(self, recipe):
raise NotImplementedError('Method not implemented in storage integration')
export = {}
export['name'] = recipe.name
export['description'] = recipe.description
export['url'] = recipe.source_url
export['prepTime'] = self.formatTime(recipe.working_time)
export['cookTime'] = self.formatTime(recipe.waiting_time)
export['totalTime'] = self.formatTime(recipe.working_time + recipe.waiting_time)
export['recipeYield'] = recipe.servings
export['image'] = f'/Recipes/{recipe.name}/full.jpg'
export['imageUrl'] = f'/Recipes/{recipe.name}/full.jpg'
recipeKeyword = []
for k in recipe.keywords.all():
recipeKeyword.append(k.name)
export['keywords'] = recipeKeyword
recipeInstructions = []
recipeIngredient = []
for s in recipe.steps.all():
recipeInstructions.append(s.instruction)
for i in s.ingredients.all():
recipeIngredient.append(f'{float(i.amount)} {i.unit} {i.food}')
export['recipeIngredient'] = recipeIngredient
export['recipeInstructions'] = recipeInstructions
return "recipe.json", json.dumps(export)
def get_files_from_recipes(self, recipes, el, cookie):
export_zip_stream = BytesIO()
export_zip_obj = ZipFile(export_zip_stream, 'w')
for recipe in recipes:
if recipe.internal and recipe.space == self.request.space:
recipe_stream = StringIO()
filename, data = self.get_file_from_recipe(recipe)
recipe_stream.write(data)
export_zip_obj.writestr(f'{recipe.name}/{filename}', recipe_stream.getvalue())
recipe_stream.close()
try:
imageByte = recipe.image.file.read()
export_zip_obj.writestr(f'{recipe.name}/full.jpg', self.getJPEG(imageByte))
export_zip_obj.writestr(f'{recipe.name}/thumb.jpg', self.getThumb(171, imageByte))
export_zip_obj.writestr(f'{recipe.name}/thumb16.jpg', self.getThumb(16, imageByte))
except ValueError:
pass
el.exported_recipes += 1
el.msg += self.get_recipe_processed_msg(recipe)
el.save()
export_zip_obj.close()
return [[self.get_export_file_name(), export_zip_stream.getvalue()]]
def getJPEG(self, imageByte):
image = Image.open(BytesIO(imageByte))
image = image.convert('RGB')
bytes = BytesIO()
image.save(bytes, "JPEG")
return bytes.getvalue()
def getThumb(self, size, imageByte):
image = Image.open(BytesIO(imageByte))
w, h = image.size
m = min(w, h)
image = image.crop(((w - m) // 2, (h - m) // 2, (w + m) // 2, (h + m) // 2))
image = image.resize([size, size], Image.Resampling.LANCZOS)
image = image.convert('RGB')
bytes = BytesIO()
image.save(bytes, "JPEG")
return bytes.getvalue()

View File

@@ -1,27 +1,59 @@
import json
from django.utils.translation import gettext as _
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Recipe, Step
from cookbook.models import Comment, CookLog, Ingredient, Keyword, Recipe, Step
class OpenEats(Integration):
def get_recipe_from_file(self, file):
recipe = Recipe.objects.create(name=file['name'].strip(), created_by=self.request.user, internal=True,
description = file['info']
description_max_length = Recipe._meta.get_field('description').max_length
if len(description) > description_max_length:
description = description[0:description_max_length]
recipe = Recipe.objects.create(name=file['name'].strip(), description=description, created_by=self.request.user, internal=True,
servings=file['servings'], space=self.request.space, waiting_time=file['cook_time'], working_time=file['prep_time'])
instructions = ''
if file["info"] != '':
instructions += file["info"]
if file["directions"] != '':
instructions += file["directions"]
if file["source"] != '':
instructions += file["source"]
instructions += '\n' + _('Recipe source:') + f'[{file["source"]}]({file["source"]})'
step = Step.objects.create(instruction=instructions, space=self.request.space,)
cuisine_keyword, created = Keyword.objects.get_or_create(name="Cuisine", space=self.request.space)
if file["cuisine"] != '':
keyword, created = Keyword.objects.get_or_create(name=file["cuisine"].strip(), space=self.request.space)
if created:
keyword.move(cuisine_keyword, pos="last-child")
recipe.keywords.add(keyword)
course_keyword, created = Keyword.objects.get_or_create(name="Course", space=self.request.space)
if file["course"] != '':
keyword, created = Keyword.objects.get_or_create(name=file["course"].strip(), space=self.request.space)
if created:
keyword.move(course_keyword, pos="last-child")
recipe.keywords.add(keyword)
for tag in file["tags"]:
keyword, created = Keyword.objects.get_or_create(name=tag.strip(), space=self.request.space)
recipe.keywords.add(keyword)
for comment in file['comments']:
Comment.objects.create(recipe=recipe, text=comment['text'], created_by=self.request.user)
CookLog.objects.create(recipe=recipe, rating=comment['rating'], created_by=self.request.user, space=self.request.space)
if file["photo"] != '':
recipe.image = f'recipes/openeats-import/{file["photo"]}'
recipe.save()
step = Step.objects.create(instruction=instructions, space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,)
ingredient_parser = IngredientParser(self.request, True)
for ingredient in file['ingredients']:
@@ -38,6 +70,9 @@ class OpenEats(Integration):
recipe_json = json.loads(file.read())
recipe_dict = {}
ingredient_group_dict = {}
cuisine_group_dict = {}
course_group_dict = {}
tag_group_dict = {}
for o in recipe_json:
if o['model'] == 'recipe.recipe':
@@ -50,11 +85,27 @@ class OpenEats(Integration):
'cook_time': o['fields']['cook_time'],
'servings': o['fields']['servings'],
'ingredients': [],
'photo': o['fields']['photo'],
'cuisine': o['fields']['cuisine'],
'course': o['fields']['course'],
'tags': o['fields']['tags'],
'comments': [],
}
if o['model'] == 'ingredient.ingredientgroup':
ingredient_group_dict[o['pk']] = o['fields']['recipe']
if o['model'] == 'recipe_groups.cuisine':
cuisine_group_dict[o['pk']] = o['fields']['title']
if o['model'] == 'recipe_groups.course':
course_group_dict[o['pk']] = o['fields']['title']
if o['model'] == 'recipe_groups.tag':
tag_group_dict[o['pk']] = o['fields']['title']
for o in recipe_json:
if o['model'] == 'rating.rating':
recipe_dict[o['fields']['recipe']]["comments"].append({
"text": o['fields']['comment'],
"rating": o['fields']['rating']
})
if o['model'] == 'ingredient.ingredient':
ingredient = {
'food': o['fields']['title'],
@@ -63,6 +114,15 @@ class OpenEats(Integration):
}
recipe_dict[ingredient_group_dict[o['fields']['ingredient_group']]]['ingredients'].append(ingredient)
for k, r in recipe_dict.items():
if r["cuisine"] in cuisine_group_dict:
r["cuisine"] = cuisine_group_dict[r["cuisine"]]
if r["course"] in course_group_dict:
r["course"] = course_group_dict[r["course"]]
for index in range(len(r["tags"])):
if r["tags"][index] in tag_group_dict:
r["tags"][index] = tag_group_dict[r["tags"][index]]
return list(recipe_dict.values())
def get_file_from_recipe(self, recipe):

View File

@@ -5,6 +5,9 @@ import re
from gettext import gettext as _
from io import BytesIO
import requests
import validators
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text
from cookbook.integration.integration import Integration
@@ -27,7 +30,7 @@ class Paprika(Integration):
recipe.description = '' if len(recipe_json['description'].strip()) > 500 else recipe_json['description'].strip()
try:
if 'servings' in recipe_json['servings']:
if 'servings' in recipe_json:
recipe.servings = parse_servings(recipe_json['servings'])
recipe.servings_text = parse_servings_text(recipe_json['servings'])
@@ -55,7 +58,7 @@ class Paprika(Integration):
pass
step = Step.objects.create(
instruction=instructions, space=self.request.space,
instruction=instructions, space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
if 'description' in recipe_json and len(recipe_json['description'].strip()) > 500:
@@ -81,7 +84,14 @@ class Paprika(Integration):
recipe.steps.add(step)
if recipe_json.get("photo_data", None):
self.import_recipe_image(recipe, BytesIO(base64.b64decode(recipe_json['photo_data'])), filetype='.jpeg')
try:
if recipe_json.get("image_url", None):
url = recipe_json.get("image_url", None)
if validators.url(url, public=True):
response = requests.get(url)
self.import_recipe_image(recipe, BytesIO(response.content))
except Exception:
if recipe_json.get("photo_data", None):
self.import_recipe_image(recipe, BytesIO(base64.b64decode(recipe_json['photo_data'])), filetype='.jpeg')
return recipe

View File

@@ -1,21 +1,11 @@
import json
from io import BytesIO
from re import match
from zipfile import ZipFile
import asyncio
from pyppeteer import launch
from rest_framework.renderers import JSONRenderer
from cookbook.helper.image_processing import get_filetype
from cookbook.integration.integration import Integration
from cookbook.serializer import RecipeExportSerializer
from cookbook.models import ExportLog
from asgiref.sync import sync_to_async
import django.core.management.commands.runserver as runserver
import logging
from asgiref.sync import sync_to_async
from pyppeteer import launch
from cookbook.integration.integration import Integration
class PDFexport(Integration):
@@ -42,7 +32,6 @@ class PDFexport(Integration):
}
}
files = []
for recipe in recipes:
@@ -50,20 +39,18 @@ class PDFexport(Integration):
await page.emulateMedia('print')
await page.setCookie(cookies)
await page.goto('http://'+cmd.default_addr+':'+cmd.default_port+'/view/recipe/'+str(recipe.id), {'waitUntil': 'domcontentloaded'})
await page.waitForSelector('#printReady');
await page.goto('http://' + cmd.default_addr + ':' + cmd.default_port + '/view/recipe/' + str(recipe.id), {'waitUntil': 'domcontentloaded'})
await page.waitForSelector('#printReady')
files.append([recipe.name + '.pdf', await page.pdf(options)])
await page.close();
await page.close()
el.exported_recipes += 1
el.msg += self.get_recipe_processed_msg(recipe)
await sync_to_async(el.save, thread_sensitive=True)()
await browser.close()
return files
def get_files_from_recipes(self, recipes, el, cookie):
return asyncio.run(self.get_files_from_recipes_async(recipes, el, cookie))

View File

@@ -35,7 +35,7 @@ class Pepperplate(Integration):
recipe = Recipe.objects.create(name=title, description=description, created_by=self.request.user, internal=True, space=self.request.space)
step = Step.objects.create(
instruction='\n'.join(directions) + '\n\n', space=self.request.space,
instruction='\n'.join(directions) + '\n\n', space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
ingredient_parser = IngredientParser(self.request, True)

View File

@@ -1,6 +1,7 @@
from io import BytesIO
import requests
import validators
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.integration.integration import Integration
@@ -45,10 +46,11 @@ class Plantoeat(Integration):
recipe = Recipe.objects.create(name=title, description=description, created_by=self.request.user, internal=True, space=self.request.space)
step = Step.objects.create(
instruction='\n'.join(directions) + '\n\n', space=self.request.space,
instruction='\n'.join(directions) + '\n\n', space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
if tags:
tags = tags.replace('^',',')
for k in tags.split(','):
keyword, created = Keyword.objects.get_or_create(name=k.strip(), space=self.request.space)
recipe.keywords.add(keyword)
@@ -66,8 +68,9 @@ class Plantoeat(Integration):
if image_url:
try:
response = requests.get(image_url)
self.import_recipe_image(recipe, BytesIO(response.content))
if validators.url(image_url, public=True):
response = requests.get(image_url)
self.import_recipe_image(recipe, BytesIO(response.content))
except Exception as e:
print('failed to import image ', str(e))
@@ -78,7 +81,11 @@ class Plantoeat(Integration):
current_recipe = ''
for fl in file.readlines():
line = fl.decode("windows-1250")
try:
line = fl.decode("utf-8")
except UnicodeDecodeError:
line = fl.decode("windows-1250")
if line.startswith('--------------'):
if current_recipe != '':
recipe_list.append(current_recipe)

View File

@@ -5,6 +5,7 @@ from io import BytesIO
from zipfile import ZipFile
import requests
import validators
from django.utils.translation import gettext as _
from cookbook.helper.image_processing import get_filetype
@@ -45,7 +46,7 @@ class RecetteTek(Integration):
if not instructions:
instructions = ''
step = Step.objects.create(instruction=instructions, space=self.request.space,)
step = Step.objects.create(instruction=instructions, space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,)
# Append the original import url to the step (if it exists)
try:
@@ -60,7 +61,7 @@ class RecetteTek(Integration):
ingredient_parser = IngredientParser(self.request, True)
for ingredient in file['ingredients'].split('\n'):
if len(ingredient.strip()) > 0:
amount, unit, food, note = ingredient_parser.parse(food)
amount, unit, food, note = ingredient_parser.parse(ingredient.strip())
f = ingredient_parser.get_food(ingredient)
u = ingredient_parser.get_unit(unit)
step.ingredients.add(Ingredient.objects.create(
@@ -123,11 +124,13 @@ class RecetteTek(Integration):
self.import_recipe_image(recipe, BytesIO(import_zip.read(image_file_name)), filetype=get_filetype(image_file_name))
else:
if file['originalPicture'] != '':
response = requests.get(file['originalPicture'])
if imghdr.what(BytesIO(response.content)) is not None:
self.import_recipe_image(recipe, BytesIO(response.content), filetype=get_filetype(file['originalPicture']))
else:
raise Exception("Original image failed to download.")
url = file['originalPicture']
if validators.url(url, public=True):
response = requests.get(url)
if imghdr.what(BytesIO(response.content)) is not None:
self.import_recipe_image(recipe, BytesIO(response.content), filetype=get_filetype(file['originalPicture']))
else:
raise Exception("Original image failed to download.")
except Exception as e:
print(recipe.name, ': failed to import image ', str(e))

View File

@@ -41,7 +41,7 @@ class RecipeKeeper(Integration):
except AttributeError:
pass
step = Step.objects.create(instruction='', space=self.request.space,)
step = Step.objects.create(instruction='', space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients, )
ingredient_parser = IngredientParser(self.request, True)
for ingredient in file.find("div", {"itemprop": "recipeIngredients"}).findChildren("p"):
@@ -51,13 +51,20 @@ class RecipeKeeper(Integration):
f = ingredient_parser.get_food(food)
u = ingredient_parser.get_unit(unit)
step.ingredients.add(Ingredient.objects.create(
food=f, unit=u, amount=amount, note=note, original_text=ingredient, space=self.request.space,
food=f, unit=u, amount=amount, note=note, original_text=str(ingredient).replace('<p>', '').replace('</p>', ''), space=self.request.space,
))
for s in file.find("div", {"itemprop": "recipeDirections"}).find_all("p"):
if s.text == "":
continue
step.instruction += s.text + ' \n'
step.save()
for s in file.find("div", {"itemprop": "recipeNotes"}).find_all("p"):
if s.text == "":
continue
step.instruction += s.text + ' \n'
step.save()
if file.find("span", {"itemprop": "recipeSource"}).text != '':
step.instruction += "\n\n" + _("Imported from") + ": " + file.find("span", {"itemprop": "recipeSource"}).text

View File

@@ -2,8 +2,10 @@ import json
from io import BytesIO
import requests
import validators
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text, parse_time
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Recipe, Step
@@ -17,25 +19,27 @@ class RecipeSage(Integration):
created_by=self.request.user, internal=True,
space=self.request.space)
if file['recipeYield'] != '':
recipe.servings = parse_servings(file['recipeYield'])
recipe.servings_text = parse_servings_text(file['recipeYield'])
try:
if file['recipeYield'] != '':
recipe.servings = int(file['recipeYield'])
if 'totalTime' in file and file['totalTime'] != '':
recipe.working_time = parse_time(file['totalTime'])
if file['totalTime'] != '':
recipe.waiting_time = int(file['totalTime']) - int(file['timePrep'])
if file['prepTime'] != '':
recipe.working_time = int(file['timePrep'])
recipe.save()
if 'timePrep' in file and file['prepTime'] != '':
recipe.working_time = parse_time(file['timePrep'])
recipe.waiting_time = parse_time(file['totalTime']) - parse_time(file['timePrep'])
except Exception as e:
print('failed to parse yield or time ', str(e))
print('failed to parse time ', str(e))
recipe.save()
ingredient_parser = IngredientParser(self.request, True)
ingredients_added = False
for s in file['recipeInstructions']:
step = Step.objects.create(
instruction=s['text'], space=self.request.space,
instruction=s['text'], space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
if not ingredients_added:
ingredients_added = True
@@ -51,8 +55,10 @@ class RecipeSage(Integration):
if len(file['image']) > 0:
try:
response = requests.get(file['image'][0])
self.import_recipe_image(recipe, BytesIO(response.content))
url = file['image'][0]
if validators.url(url, public=True):
response = requests.get(url)
self.import_recipe_image(recipe, BytesIO(response.content))
except Exception as e:
print('failed to import image ', str(e))

View File

@@ -0,0 +1,75 @@
import base64
from io import BytesIO
from xml import etree
from cookbook.helper.ingredient_parser import IngredientParser
from cookbook.helper.recipe_url_import import parse_servings, parse_servings_text
from cookbook.integration.integration import Integration
from cookbook.models import Ingredient, Keyword, Recipe, Step
class Rezeptsuitede(Integration):
def split_recipe_file(self, file):
return etree.parse(file).getroot().getchildren()
def get_recipe_from_file(self, file):
recipe_xml = file
recipe = Recipe.objects.create(
name=recipe_xml.find('head').attrib['title'].strip(),
created_by=self.request.user, internal=True, space=self.request.space)
try:
if recipe_xml.find('head').attrib['servingtype']:
recipe.servings = parse_servings(recipe_xml.find('head').attrib['servingtype'].strip())
recipe.servings_text = parse_servings_text(recipe_xml.find('head').attrib['servingtype'].strip())
except KeyError:
pass
if recipe_xml.find('remark') is not None: # description is a list of <li>'s with text
if recipe_xml.find('remark').find('line') is not None:
recipe.description = recipe_xml.find('remark').find('line').text[:512]
for prep in recipe_xml.findall('preparation'):
try:
if prep.find('step').text:
step = Step.objects.create(
instruction=prep.find('step').text.strip(), space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
recipe.steps.add(step)
except Exception:
pass
ingredient_parser = IngredientParser(self.request, True)
if recipe_xml.find('part').find('ingredient') is not None:
ingredient_step = recipe.steps.first()
if ingredient_step is None:
ingredient_step = Step.objects.create(space=self.request.space, instruction='')
for ingredient in recipe_xml.find('part').findall('ingredient'):
f = ingredient_parser.get_food(ingredient.attrib['item'])
u = ingredient_parser.get_unit(ingredient.attrib['unit'])
amount = 0
if ingredient.attrib['qty'].strip() != '':
amount, unit, note = ingredient_parser.parse_amount(ingredient.attrib['qty'])
ingredient_step.ingredients.add(Ingredient.objects.create(food=f, unit=u, amount=amount, space=self.request.space, ))
try:
k, created = Keyword.objects.get_or_create(name=recipe_xml.find('head').find('cat').text.strip(), space=self.request.space)
recipe.keywords.add(k)
except Exception:
pass
recipe.save()
try:
self.import_recipe_image(recipe, BytesIO(base64.b64decode(recipe_xml.find('head').find('picbin').text)), filetype='.jpeg')
except BaseException:
pass
return recipe
def get_file_from_recipe(self, recipe):
raise NotImplementedError('Method not implemented in storage integration')

View File

@@ -38,7 +38,7 @@ class RezKonv(Integration):
recipe.keywords.add(keyword)
step = Step.objects.create(
instruction=' \n'.join(directions) + '\n\n', space=self.request.space,
instruction=' \n'.join(directions) + '\n\n', space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients,
)
ingredient_parser = IngredientParser(self.request, True)
@@ -60,8 +60,8 @@ class RezKonv(Integration):
def split_recipe_file(self, file):
recipe_list = []
current_recipe = ''
encoding_list = ['windows-1250',
'latin-1'] # TODO build algorithm to try trough encodings and fail if none work, use for all importers
# TODO build algorithm to try trough encodings and fail if none work, use for all importers
# encoding_list = ['windows-1250', 'latin-1']
encoding = 'windows-1250'
for fl in file.readlines():
try:

View File

@@ -43,7 +43,7 @@ class Saffron(Integration):
recipe = Recipe.objects.create(name=title, description=description, created_by=self.request.user, internal=True, space=self.request.space, )
step = Step.objects.create(instruction='\n'.join(directions), space=self.request.space, )
step = Step.objects.create(instruction='\n'.join(directions), space=self.request.space, show_ingredients_table=self.request.user.userpreference.show_step_ingredients, )
ingredient_parser = IngredientParser(self.request, True)
for ingredient in ingredients:
@@ -59,11 +59,11 @@ class Saffron(Integration):
def get_file_from_recipe(self, recipe):
data = "Title: "+recipe.name if recipe.name else ""+"\n"
data += "Description: "+recipe.description if recipe.description else ""+"\n"
data = "Title: " + recipe.name if recipe.name else "" + "\n"
data += "Description: " + recipe.description if recipe.description else "" + "\n"
data += "Source: \n"
data += "Original URL: \n"
data += "Yield: "+str(recipe.servings)+"\n"
data += "Yield: " + str(recipe.servings) + "\n"
data += "Cookbook: \n"
data += "Section: \n"
data += "Image: \n"
@@ -78,13 +78,13 @@ class Saffron(Integration):
data += "Ingredients: \n"
for ingredient in recipeIngredient:
data += ingredient+"\n"
data += ingredient + "\n"
data += "Instructions: \n"
for instruction in recipeInstructions:
data += instruction+"\n"
data += instruction + "\n"
return recipe.name+'.txt', data
return recipe.name + '.txt', data
def get_files_from_recipes(self, recipes, el, cookie):
files = []

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -6,20 +6,22 @@
# Translators:
# Pavel Solař <pavelsolar86@gmail.com>, 2021
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-09 18:01+0100\n"
"PO-Revision-Date: 2020-06-02 19:28+0000\n"
"Last-Translator: Pavel Solař <pavelsolar86@gmail.com>, 2021\n"
"Language-Team: Czech (https://www.transifex.com/django-recipes/teams/110507/cs/)\n"
"PO-Revision-Date: 2023-07-31 14:19+0000\n"
"Last-Translator: Mára Štěpánek <stepanekm7@gmail.com>\n"
"Language-Team: Czech <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/cs/>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n "
"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
"X-Generator: Weblate 4.15\n"
#: .\cookbook\filters.py:22 .\cookbook\templates\base.html:87
#: .\cookbook\templates\forms\edit_internal_recipe.html:219
@@ -34,7 +36,7 @@ msgid ""
"try them out!"
msgstr ""
"Barva horního navigačního menu. Některé barvy neladí se všemi tématy a je "
"třeba je vyzkoušet."
"třeba je vyzkoušet!"
#: .\cookbook\forms.py:45
msgid "Default Unit to be used when inserting a new ingredient into a recipe."
@@ -48,7 +50,7 @@ msgid ""
"to fractions automatically)"
msgstr ""
"Povolit podporu zlomků u množství ingrediencí (desetinná čísla budou "
"automaticky převedena na zlomky)."
"automaticky převedena na zlomky)"
#: .\cookbook\forms.py:47
msgid ""
@@ -173,7 +175,7 @@ msgstr "Potravina, která by měla být nahrazena."
#: .\cookbook\forms.py:198
msgid "Add your comment: "
msgstr "Přidat vlastní komentář:"
msgstr "Přidat vlastní komentář: "
#: .\cookbook\forms.py:229
msgid "Leave empty for dropbox and enter app password for nextcloud."
@@ -551,7 +553,7 @@ msgstr "Cesta musí být v následujícím formátu"
#: .\cookbook\templates\batch\monitor.html:27
msgid "Sync Now!"
msgstr "Zahájit synchronizaci"
msgstr "Zahájit synchronizaci!"
#: .\cookbook\templates\batch\waiting.html:4
#: .\cookbook\templates\batch\waiting.html:10
@@ -1034,7 +1036,7 @@ msgstr "Tento text je kurzívou"
#: .\cookbook\templates\markdown_info.html:61
#: .\cookbook\templates\markdown_info.html:77
msgid "Blockquotes are also possible"
msgstr "Lze použít i kvotace "
msgstr "Lze použít i kvotace"
#: .\cookbook\templates\markdown_info.html:84
msgid "Lists"
@@ -1104,8 +1106,8 @@ msgid ""
"rel=\"noreferrer noopener\" target=\"_blank\">this one.</a>"
msgstr ""
"Ruční vytváření tabulek pomocí značek je složité. Doporučujeme použít "
"například <a href=\"https://www.tablesgenerator.com/markdown_tables\" "
"rel=\"noreferrer noopener\" target=\"_blank\">tento tabulkový editor</a>."
"například <a href=\"https://www.tablesgenerator.com/markdown_tables\" rel="
"\"noreferrer noopener\" target=\"_blank\">tento tabulkový editor.</a>"
#: .\cookbook\templates\markdown_info.html:155
#: .\cookbook\templates\markdown_info.html:157
@@ -1254,22 +1256,36 @@ msgid ""
" "
msgstr ""
"\n"
" <p>Modul jídelníčku umožňuje plánovat jídlo pomocí receptů i poznámek.</p>\n"
" <p>Jednoduše vyberte recept ze seznamu naposledy navštívených receptů, nebo ho vyhledejte\n"
" s přetáhněte na požadovaný den v rozvrhu. Můžete také přidat poznámku s popiskem\n"
" a poté přetáhnout recept pro vytvoření plánu s vlatními popisky. Vytvořením samotné poznámky\n"
" je možné přetažením pole poznámky do rozvrhu.</p>\n"
" <p>Kliknutím na recept zobrazíte detailní náhled. Odtud lze také přidat položky\n"
" do nákupního seznamu. Do nákupního seznamu můžete také přidat všechny recepty na daný den\n"
" kliknutím na ikonu nákupního košíku na horní straně tabulky.</p>\n"
" <p>V běžnémípadě se jídelníček plánuje hromadně, proto můžete v nastavení definovat\n"
" se kterými uživateli si přejete jídelníčky sdílet.\n"
" <p>Modul jídelníčku umožňuje plánovat jídlo "
"pomocí receptů i poznámek.</p>\n"
" <p>Jednoduše vyberte recept ze seznamu naposledy "
"navštívených receptů, nebo ho vyhledejte\n"
" s přetáhněte na požadovaný den v rozvrhu. "
"Můžete také přidat poznámku s popiskem\n"
" a poté přetáhnout recept pro vytvoření plánu "
"s vlatními popisky. Vytvořem samotné poznámky\n"
" je možné přetažením pole poznámky do "
"rozvrhu.</p>\n"
" <p>Kliknutím na recept zobrazíte detailní "
"náhled. Odtud lze také přidat položky\n"
" do nákupního seznamu. Do nákupního seznamu "
"můžete také přidat všechny recepty na daný den\n"
" kliknutím na ikonu nákupního košíku na horní "
"straně tabulky.</p>\n"
" <p>V běžném případě se jídelníček plánuje "
"hromadně, proto můžete v nastavení definovat\n"
" se kterými uživateli si přejete jídelníčky "
"sdílet.\n"
" </p>\n"
" <p>Můžete také upravovat typy jídel, které si přejete naplánovat. Pokud budete sdílet jídelníček \n"
" <p>Můžete také upravovat typy jídel, které si "
"přejete naplánovat. Pokud budete sdílet jídelníček \n"
" s někým, kdo\n"
" má přidána jiná jídla, jeho typy jídel se objeví i ve vašem seznamu. Pro předcházení\n"
" má přidána jiná jídla, jeho typy jídel se "
"objeví i ve vašem seznamu. Pro předcházení\n"
" duplicitám (např. Ostatní, Jiná)\n"
" pojmenujte váš typ jídla stejně, jako uživatel se kterým své seznamy sdílíte. Tím budou seznamy sloučeny.</p>\n"
" pojmenujte váš typ jídla stejně, jako "
"uživatel se kterým své seznamy sdílíte. Tím budou seznamy\n"
" sloučeny.</p>\n"
" "
#: .\cookbook\templates\meal_plan_entry.html:6
@@ -1331,12 +1347,12 @@ msgstr "Obrázek receptu"
#: .\cookbook\templates\recipes_table.html:46
#: .\cookbook\templates\url_import.html:55
msgid "Preparation time ca."
msgstr "Doba přípravy cca"
msgstr "Doba přípravy cca."
#: .\cookbook\templates\recipes_table.html:52
#: .\cookbook\templates\url_import.html:60
msgid "Waiting time ca."
msgstr "Doba čekání cca"
msgstr "Doba čekání cca."
#: .\cookbook\templates\recipes_table.html:55
msgid "External"
@@ -1384,7 +1400,7 @@ msgid ""
" in the following examples:"
msgstr ""
"Použijte tajný klíč jako autorizační hlavičku definovanou slovním klíčem, "
"jak je uvedeno v následujících příkladech."
"jak je uvedeno v následujících příkladech:"
#: .\cookbook\templates\settings.html:94
msgid "or"
@@ -1806,7 +1822,7 @@ msgstr "Import není pro tohoto poskytovatele implementován!"
#: .\cookbook\views\import_export.py:58
msgid "Exporting is not implemented for this provider"
msgstr "Eport není pro tohoto poskytovatele implementován!"
msgstr "Export není pro tohoto poskytovatele implementován!"
#: .\cookbook\views\lists.py:42
msgid "Import Log"
@@ -1838,7 +1854,7 @@ msgstr "Komentář uložen!"
#: .\cookbook\views\views.py:152
msgid "This recipe is already linked to the book!"
msgstr "Tento recept už v kuchařce existuje."
msgstr "Tento recept už v kuchařce existuje!"
#: .\cookbook\views\views.py:158
msgid "Bookmark saved!"

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-09 18:01+0100\n"
"PO-Revision-Date: 2021-10-13 12:50+0000\n"
"Last-Translator: Hrachya Kocharyan <hkocharyan@ctemplar.com>\n"
"PO-Revision-Date: 2023-01-08 17:55+0000\n"
"Last-Translator: Joachim Weber <joachim.weber@gmx.de>\n"
"Language-Team: Armenian <http://translate.tandoor.dev/projects/tandoor/"
"recipes-backend/hy/>\n"
"Language: hy\n"
@@ -20,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 4.8\n"
"X-Generator: Weblate 4.15\n"
#: .\cookbook\filters.py:22 .\cookbook\templates\base.html:87
#: .\cookbook\templates\forms\edit_internal_recipe.html:219
@@ -410,7 +410,7 @@ msgstr "Դուրս գալ"
#: .\cookbook\templates\account\logout.html:11
msgid "Are you sure you want to sign out?"
msgstr "Համոզվա՞ծ եք, որ ցանկանում եք դուրս գալ:"
msgstr "Համոզվա՞ծ եք, որ ցանկանում եք դուրս գալ՞"
#: .\cookbook\templates\account\password_reset.html:5
#: .\cookbook\templates\account\password_reset_done.html:5

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More