chefkoch-cli 0.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chefkoch_cli-0.1.1/LICENSE +21 -0
- chefkoch_cli-0.1.1/PKG-INFO +136 -0
- chefkoch_cli-0.1.1/README.md +115 -0
- chefkoch_cli-0.1.1/pyproject.toml +39 -0
- chefkoch_cli-0.1.1/setup.cfg +4 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli/__init__.py +5 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli/__main__.py +8 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli/cli.py +447 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli/client.py +192 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli/errors.py +63 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli/formatting.py +136 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli/parsing.py +197 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli/service.py +360 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli/watch.py +188 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli.egg-info/PKG-INFO +136 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli.egg-info/SOURCES.txt +23 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli.egg-info/dependency_links.txt +1 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli.egg-info/entry_points.txt +2 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli.egg-info/requires.txt +1 -0
- chefkoch_cli-0.1.1/src/chefkoch_cli.egg-info/top_level.txt +1 -0
- chefkoch_cli-0.1.1/tests/test_client.py +114 -0
- chefkoch_cli-0.1.1/tests/test_formatting.py +116 -0
- chefkoch_cli-0.1.1/tests/test_parsing.py +88 -0
- chefkoch_cli-0.1.1/tests/test_service.py +178 -0
- chefkoch_cli-0.1.1/tests/test_watch.py +179 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 smlfg
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: chefkoch-cli
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: Chefkoch.de-Rezepte im Terminal: Suche, Rezeptdetails, Einkaufsliste und Watch
|
|
5
|
+
Author-email: smlfg <186922365+smlfg@users.noreply.github.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/smlfg/chefkoch-cli
|
|
8
|
+
Project-URL: Repository, https://github.com/smlfg/chefkoch-cli
|
|
9
|
+
Keywords: chefkoch,recipes,cli,terminal
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Requires-Python: >=3.10
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: httpx>=0.24
|
|
20
|
+
Dynamic: license-file
|
|
21
|
+
|
|
22
|
+
# chefkoch-cli
|
|
23
|
+
|
|
24
|
+
Chefkoch.de-Rezepte im Terminal: Suche mit Filtern, Rezeptdetails mit auf
|
|
25
|
+
Portionen skalierten Zutaten, Einkaufsliste aus mehreren Rezepten und Watch auf
|
|
26
|
+
neue Rezepte. Ausschließlich lesend, ohne Login.
|
|
27
|
+
|
|
28
|
+
## Schnellstart
|
|
29
|
+
|
|
30
|
+
Voraussetzung: Python 3.10+ und `pipx`.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pipx install git+https://github.com/smlfg/chefkoch-cli
|
|
34
|
+
chefkoch suche lasagne --limit 5
|
|
35
|
+
chefkoch rezept "vegane lasagne" --portionen 4
|
|
36
|
+
chefkoch einkaufsliste "die ultimative vegane lasagne" "vegetarische spinat gemüse lasagne" --portionen 4
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Die Suche nimmt den Begriff positional. `chefkoch rezept` und
|
|
40
|
+
`chefkoch einkaufsliste` akzeptieren Namen, IDs oder Chefkoch-URLs; bei
|
|
41
|
+
mehreren Treffern erscheint im Terminal eine nummerierte Auswahl.
|
|
42
|
+
|
|
43
|
+
## Befehle und Beispiele
|
|
44
|
+
|
|
45
|
+
### Suchen
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
chefkoch suche lasagne --limit 5
|
|
49
|
+
chefkoch suche chili --vegetarisch --max-zeit 30 --min-bewertung 4.5
|
|
50
|
+
chefkoch suche suppe --vegan --sort zeit
|
|
51
|
+
chefkoch suche kuchen --sort neu --limit 10 --seite 2
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Filter: `--vegetarisch`, `--vegan`, `--max-zeit N`, `--min-bewertung X`,
|
|
55
|
+
`--schwierigkeit simpel|normal|pfiffig`, `--sort bewertung|zeit|neu`,
|
|
56
|
+
`--limit N`, `--seite N`.
|
|
57
|
+
|
|
58
|
+
### Rezept anzeigen
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
chefkoch rezept "vegane lasagne" --portionen 4
|
|
62
|
+
chefkoch rezept 745721177147257
|
|
63
|
+
chefkoch rezept https://www.chefkoch.de/rezepte/745721177147257/Lasagne.html --portionen 8
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Ein Name sucht und zeigt bei mehreren Treffern eine nummerierte Auswahl. Eine
|
|
67
|
+
ID oder URL lädt das Rezept direkt. `--portionen` skaliert die Zutaten.
|
|
68
|
+
|
|
69
|
+
### Einkaufsliste
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
chefkoch einkaufsliste "die ultimative vegane lasagne" "vegetarische spinat gemüse lasagne" --portionen 4
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Mehrere Namen, IDs oder URLs ergeben eine zusammengefasste Liste. Gleiche
|
|
76
|
+
Zutaten mit gleicher Einheit werden summiert, unterschiedliche Einheiten
|
|
77
|
+
bleiben getrennt.
|
|
78
|
+
|
|
79
|
+
### Watch
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
chefkoch watch "vegane lasagne" --min-bewertung 4.5
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Watch merkt sich die zuletzt gesehenen IDs pro Suchbegriff und Filter und zeigt
|
|
86
|
+
beim nächsten Lauf nur neue Treffer.
|
|
87
|
+
|
|
88
|
+
## Ausgabe und JSON
|
|
89
|
+
|
|
90
|
+
Im Terminal ist die Ausgabe lesbar (Trefferliste, Rezept, Einkaufsliste). JSON
|
|
91
|
+
erscheint nur mit `--json` oder wenn stdout kein Terminal ist. Im JSON-Modus
|
|
92
|
+
steht genau ein Objekt auf stdout, auch bei Fehlern:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
chefkoch suche lasagne --limit 5 --json
|
|
96
|
+
chefkoch rezept "vegane lasagne" --json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Konfiguration
|
|
100
|
+
|
|
101
|
+
| Variable | Default | Bedeutung |
|
|
102
|
+
|---|---|---|
|
|
103
|
+
| `CHEFKOCH_BASE_URL` | `https://api.chefkoch.de` | API-Basis (Test/Fake-Server) |
|
|
104
|
+
| `CHEFKOCH_MIN_INTERVAL` | `1` | Mindestabstand zwischen Requests in Sekunden; `0` nur für Tests |
|
|
105
|
+
| `XDG_STATE_HOME` | `~/.local/state` | Basis für den Watch-State |
|
|
106
|
+
|
|
107
|
+
Der Watch-State liegt unter
|
|
108
|
+
`$XDG_STATE_HOME/chefkoch-cli/watch.json` (Fallback
|
|
109
|
+
`~/.local/state/chefkoch-cli/watch.json`) und enthält nur IDs, Suchschlüssel
|
|
110
|
+
und Zeitstempel. Weitere Config-Dateien gibt es nicht.
|
|
111
|
+
|
|
112
|
+
## Exit-Codes
|
|
113
|
+
|
|
114
|
+
| Exit | Bedeutung |
|
|
115
|
+
|---|---|
|
|
116
|
+
| 0 | Erfolg, inklusive `--help` und `--version` |
|
|
117
|
+
| 1 | Allgemeiner Fehler (z. B. kaputter Watch-State) |
|
|
118
|
+
| 2 | Usage: fehlende/ungültige Argumente, mehrdeutiger Name ohne TTY |
|
|
119
|
+
| 3 | Netz/Quelle: Timeout, HTTP-Fehler, Rezept-404, keine Treffer |
|
|
120
|
+
| 4 | Login erforderlich (nicht verwendet) bzw. Daten-/Parse-Fehler |
|
|
121
|
+
|
|
122
|
+
## Datenquelle und Grenzen
|
|
123
|
+
|
|
124
|
+
`chefkoch` nutzt die inoffizielle API `https://api.chefkoch.de` über
|
|
125
|
+
`GET /v2/recipes` und `GET /v2/recipes/<id>`. Die Website
|
|
126
|
+
`www.chefkoch.de/rezepte/*?*` und `/v2/search/suggestions` werden nicht
|
|
127
|
+
abgerufen. Das Tool sendet keine Cookies, speichert keine Zugangsdaten und
|
|
128
|
+
führt keine schreibenden Web-Aktionen aus.
|
|
129
|
+
|
|
130
|
+
Die API ist nicht offiziell dokumentiert und kann sich jederzeit ändern.
|
|
131
|
+
Details und Befehlsvertrag stehen in `ANFORDERUNGEN.md`, `INTERFACE.md` und
|
|
132
|
+
`docs/UX.md`.
|
|
133
|
+
|
|
134
|
+
## Lizenz
|
|
135
|
+
|
|
136
|
+
MIT, Copyright smlfg. Siehe `LICENSE`.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# chefkoch-cli
|
|
2
|
+
|
|
3
|
+
Chefkoch.de-Rezepte im Terminal: Suche mit Filtern, Rezeptdetails mit auf
|
|
4
|
+
Portionen skalierten Zutaten, Einkaufsliste aus mehreren Rezepten und Watch auf
|
|
5
|
+
neue Rezepte. Ausschließlich lesend, ohne Login.
|
|
6
|
+
|
|
7
|
+
## Schnellstart
|
|
8
|
+
|
|
9
|
+
Voraussetzung: Python 3.10+ und `pipx`.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pipx install git+https://github.com/smlfg/chefkoch-cli
|
|
13
|
+
chefkoch suche lasagne --limit 5
|
|
14
|
+
chefkoch rezept "vegane lasagne" --portionen 4
|
|
15
|
+
chefkoch einkaufsliste "die ultimative vegane lasagne" "vegetarische spinat gemüse lasagne" --portionen 4
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Die Suche nimmt den Begriff positional. `chefkoch rezept` und
|
|
19
|
+
`chefkoch einkaufsliste` akzeptieren Namen, IDs oder Chefkoch-URLs; bei
|
|
20
|
+
mehreren Treffern erscheint im Terminal eine nummerierte Auswahl.
|
|
21
|
+
|
|
22
|
+
## Befehle und Beispiele
|
|
23
|
+
|
|
24
|
+
### Suchen
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
chefkoch suche lasagne --limit 5
|
|
28
|
+
chefkoch suche chili --vegetarisch --max-zeit 30 --min-bewertung 4.5
|
|
29
|
+
chefkoch suche suppe --vegan --sort zeit
|
|
30
|
+
chefkoch suche kuchen --sort neu --limit 10 --seite 2
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Filter: `--vegetarisch`, `--vegan`, `--max-zeit N`, `--min-bewertung X`,
|
|
34
|
+
`--schwierigkeit simpel|normal|pfiffig`, `--sort bewertung|zeit|neu`,
|
|
35
|
+
`--limit N`, `--seite N`.
|
|
36
|
+
|
|
37
|
+
### Rezept anzeigen
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
chefkoch rezept "vegane lasagne" --portionen 4
|
|
41
|
+
chefkoch rezept 745721177147257
|
|
42
|
+
chefkoch rezept https://www.chefkoch.de/rezepte/745721177147257/Lasagne.html --portionen 8
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Ein Name sucht und zeigt bei mehreren Treffern eine nummerierte Auswahl. Eine
|
|
46
|
+
ID oder URL lädt das Rezept direkt. `--portionen` skaliert die Zutaten.
|
|
47
|
+
|
|
48
|
+
### Einkaufsliste
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
chefkoch einkaufsliste "die ultimative vegane lasagne" "vegetarische spinat gemüse lasagne" --portionen 4
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Mehrere Namen, IDs oder URLs ergeben eine zusammengefasste Liste. Gleiche
|
|
55
|
+
Zutaten mit gleicher Einheit werden summiert, unterschiedliche Einheiten
|
|
56
|
+
bleiben getrennt.
|
|
57
|
+
|
|
58
|
+
### Watch
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
chefkoch watch "vegane lasagne" --min-bewertung 4.5
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Watch merkt sich die zuletzt gesehenen IDs pro Suchbegriff und Filter und zeigt
|
|
65
|
+
beim nächsten Lauf nur neue Treffer.
|
|
66
|
+
|
|
67
|
+
## Ausgabe und JSON
|
|
68
|
+
|
|
69
|
+
Im Terminal ist die Ausgabe lesbar (Trefferliste, Rezept, Einkaufsliste). JSON
|
|
70
|
+
erscheint nur mit `--json` oder wenn stdout kein Terminal ist. Im JSON-Modus
|
|
71
|
+
steht genau ein Objekt auf stdout, auch bei Fehlern:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
chefkoch suche lasagne --limit 5 --json
|
|
75
|
+
chefkoch rezept "vegane lasagne" --json
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Konfiguration
|
|
79
|
+
|
|
80
|
+
| Variable | Default | Bedeutung |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `CHEFKOCH_BASE_URL` | `https://api.chefkoch.de` | API-Basis (Test/Fake-Server) |
|
|
83
|
+
| `CHEFKOCH_MIN_INTERVAL` | `1` | Mindestabstand zwischen Requests in Sekunden; `0` nur für Tests |
|
|
84
|
+
| `XDG_STATE_HOME` | `~/.local/state` | Basis für den Watch-State |
|
|
85
|
+
|
|
86
|
+
Der Watch-State liegt unter
|
|
87
|
+
`$XDG_STATE_HOME/chefkoch-cli/watch.json` (Fallback
|
|
88
|
+
`~/.local/state/chefkoch-cli/watch.json`) und enthält nur IDs, Suchschlüssel
|
|
89
|
+
und Zeitstempel. Weitere Config-Dateien gibt es nicht.
|
|
90
|
+
|
|
91
|
+
## Exit-Codes
|
|
92
|
+
|
|
93
|
+
| Exit | Bedeutung |
|
|
94
|
+
|---|---|
|
|
95
|
+
| 0 | Erfolg, inklusive `--help` und `--version` |
|
|
96
|
+
| 1 | Allgemeiner Fehler (z. B. kaputter Watch-State) |
|
|
97
|
+
| 2 | Usage: fehlende/ungültige Argumente, mehrdeutiger Name ohne TTY |
|
|
98
|
+
| 3 | Netz/Quelle: Timeout, HTTP-Fehler, Rezept-404, keine Treffer |
|
|
99
|
+
| 4 | Login erforderlich (nicht verwendet) bzw. Daten-/Parse-Fehler |
|
|
100
|
+
|
|
101
|
+
## Datenquelle und Grenzen
|
|
102
|
+
|
|
103
|
+
`chefkoch` nutzt die inoffizielle API `https://api.chefkoch.de` über
|
|
104
|
+
`GET /v2/recipes` und `GET /v2/recipes/<id>`. Die Website
|
|
105
|
+
`www.chefkoch.de/rezepte/*?*` und `/v2/search/suggestions` werden nicht
|
|
106
|
+
abgerufen. Das Tool sendet keine Cookies, speichert keine Zugangsdaten und
|
|
107
|
+
führt keine schreibenden Web-Aktionen aus.
|
|
108
|
+
|
|
109
|
+
Die API ist nicht offiziell dokumentiert und kann sich jederzeit ändern.
|
|
110
|
+
Details und Befehlsvertrag stehen in `ANFORDERUNGEN.md`, `INTERFACE.md` und
|
|
111
|
+
`docs/UX.md`.
|
|
112
|
+
|
|
113
|
+
## Lizenz
|
|
114
|
+
|
|
115
|
+
MIT, Copyright smlfg. Siehe `LICENSE`.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "chefkoch-cli"
|
|
7
|
+
version = "0.1.1"
|
|
8
|
+
description = "Chefkoch.de-Rezepte im Terminal: Suche, Rezeptdetails, Einkaufsliste und Watch"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "smlfg", email = "186922365+smlfg@users.noreply.github.com" },
|
|
14
|
+
]
|
|
15
|
+
keywords = ["chefkoch", "recipes", "cli", "terminal"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Environment :: Console",
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"Programming Language :: Python :: 3.10",
|
|
20
|
+
"Programming Language :: Python :: 3.11",
|
|
21
|
+
"Programming Language :: Python :: 3.12",
|
|
22
|
+
"Programming Language :: Python :: 3.13",
|
|
23
|
+
]
|
|
24
|
+
dependencies = ["httpx>=0.24"]
|
|
25
|
+
|
|
26
|
+
[project.urls]
|
|
27
|
+
Homepage = "https://github.com/smlfg/chefkoch-cli"
|
|
28
|
+
Repository = "https://github.com/smlfg/chefkoch-cli"
|
|
29
|
+
|
|
30
|
+
[project.scripts]
|
|
31
|
+
chefkoch = "chefkoch_cli.cli:main"
|
|
32
|
+
|
|
33
|
+
[tool.setuptools.packages.find]
|
|
34
|
+
where = ["src"]
|
|
35
|
+
|
|
36
|
+
[tool.pytest.ini_options]
|
|
37
|
+
testpaths = ["tests"]
|
|
38
|
+
addopts = "-ra"
|
|
39
|
+
pythonpath = ["src"]
|