strava.cz-api 2.3__tar.gz → 2.4__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: strava-cz-api
3
- Version: 2.3
3
+ Version: 2.4
4
4
  Summary: Rest API for strava.cz.
5
5
  Author-email: Matěj Adamec <kralyk@kralyk.dev>
6
6
  Requires-Python: >=3.8
@@ -73,6 +73,16 @@ api = Api(
73
73
  | `postOrders()` | Uložit změny objednávek | Nutné po `postJidlo`/`postDen` |
74
74
  | `resetChanges()` | Resetuje neuložené změny v komunikaci. | Dobré pro zrušení změn pří objednávkách
75
75
 
76
+ ## Filtr
77
+ Filtr existuje, ale je to **pre‑release**: může obsahovat chyby a bude se dál rozšiřovat. Lze ho importovat (`from strava_cz_api import Filter`), ale zatím není zaručeno, že všude funguje správně.
78
+
79
+ ```py
80
+ from strava_cz_api import Filter
81
+
82
+ filtrovano = Filter.filter_json(["veta"], api.getJidelnicekAll())
83
+ print(filtrovano)
84
+ ```
85
+
76
86
  ## Objednávky – správný postup
77
87
  Změny objednávek se ukládají ve dvou krocích:
78
88
  1. Provedení změn (`postJidlo` nebo `postDen`)
@@ -94,6 +104,62 @@ Většina metod vrací JSON string. Metody `postJidlo`, `postDen` a `postOrders`
94
104
  ## Příklady
95
105
  Ukázkové skripty najdeš ve složce `./examples`.
96
106
 
107
+ ## Json struktura
108
+ ```json
109
+ {
110
+ "tableX": [
111
+ {
112
+ "id": 0,
113
+ "datum": "30.06.2026", // datum
114
+ "druh_popis": "Polévka", // část
115
+ "druh_chod": "Oběd", // chod
116
+ "nazev": "Polévka 1", // název chodu (oběd č. 1)
117
+ "popis": "Snídaně", // popis chodu
118
+ "delsiPopis": "", // delší popis chodu
119
+ "zakazaneAlergeny": null, // ??
120
+ "alergeny_text": "", // alergeny
121
+ "alergeny": [], // alergeny
122
+ "chod": "C", // číslo chodu (A = snídaně, B, C)
123
+ "druh": "OB", // druh chodu ve zkratce
124
+ "cena": "45.00", // cena
125
+ "polevka": "N", // zda pole je polévka (je v ceně)
126
+ "pocet": 1, // 1 = přihlášeno, 0 = odhlášeno
127
+ "veta": "172", // id políčka
128
+ "vetaDieta": "196", // ??
129
+ "omezeniObj": { // ???
130
+ "den": "",
131
+ "obj": "",
132
+ "zm": "",
133
+ "bur": "C"
134
+ },
135
+ "burza": { // ???
136
+ "zmena": "0",
137
+ "ostatni": "0",
138
+ "nabidka": "0",
139
+ "poptavka": "0"
140
+ },
141
+ "vydejniMisto": { // kde se vydává oběd (škola má více jídelních budov)
142
+ "misto": "2",
143
+ "mista": "2"
144
+ },
145
+ "diety": { // ??
146
+ "dieta": "",
147
+ "diety": ""
148
+ },
149
+ "zkratkaProduktu": "OB", // zkratka produktu (identické jako chod, u polévky chybí??)
150
+ "cisloJidelnicku": "1", // ??
151
+ "multipleNazev": "1NOběd č. 1COB", // ??
152
+ "version": 5, // ??
153
+ "casKonec": "2026-06-29T11:50:00", // do kdy lze přihlásit
154
+ "casOdhlaseni": "2026-06-29T11:50:00", // do kdy lze přihlásit
155
+ "obrazky": []
156
+ },
157
+ ...
158
+ ]
159
+ }
160
+ ```
161
+ - Mnoho polí není vyplněno. Zda víte co to je, doplňte to nebo mě kontaktujte.
162
+
97
163
  ## Demo
98
164
  - Demo uživatele si lze vytvořit na https://www.strava.cz/strava/Stravnik/Demo
99
165
  - Poté se lze přihlásit na https://app.strava.cz/ na jídelně `0000`
@@ -63,6 +63,16 @@ api = Api(
63
63
  | `postOrders()` | Uložit změny objednávek | Nutné po `postJidlo`/`postDen` |
64
64
  | `resetChanges()` | Resetuje neuložené změny v komunikaci. | Dobré pro zrušení změn pří objednávkách
65
65
 
66
+ ## Filtr
67
+ Filtr existuje, ale je to **pre‑release**: může obsahovat chyby a bude se dál rozšiřovat. Lze ho importovat (`from strava_cz_api import Filter`), ale zatím není zaručeno, že všude funguje správně.
68
+
69
+ ```py
70
+ from strava_cz_api import Filter
71
+
72
+ filtrovano = Filter.filter_json(["veta"], api.getJidelnicekAll())
73
+ print(filtrovano)
74
+ ```
75
+
66
76
  ## Objednávky – správný postup
67
77
  Změny objednávek se ukládají ve dvou krocích:
68
78
  1. Provedení změn (`postJidlo` nebo `postDen`)
@@ -84,6 +94,62 @@ Většina metod vrací JSON string. Metody `postJidlo`, `postDen` a `postOrders`
84
94
  ## Příklady
85
95
  Ukázkové skripty najdeš ve složce `./examples`.
86
96
 
97
+ ## Json struktura
98
+ ```json
99
+ {
100
+ "tableX": [
101
+ {
102
+ "id": 0,
103
+ "datum": "30.06.2026", // datum
104
+ "druh_popis": "Polévka", // část
105
+ "druh_chod": "Oběd", // chod
106
+ "nazev": "Polévka 1", // název chodu (oběd č. 1)
107
+ "popis": "Snídaně", // popis chodu
108
+ "delsiPopis": "", // delší popis chodu
109
+ "zakazaneAlergeny": null, // ??
110
+ "alergeny_text": "", // alergeny
111
+ "alergeny": [], // alergeny
112
+ "chod": "C", // číslo chodu (A = snídaně, B, C)
113
+ "druh": "OB", // druh chodu ve zkratce
114
+ "cena": "45.00", // cena
115
+ "polevka": "N", // zda pole je polévka (je v ceně)
116
+ "pocet": 1, // 1 = přihlášeno, 0 = odhlášeno
117
+ "veta": "172", // id políčka
118
+ "vetaDieta": "196", // ??
119
+ "omezeniObj": { // ???
120
+ "den": "",
121
+ "obj": "",
122
+ "zm": "",
123
+ "bur": "C"
124
+ },
125
+ "burza": { // ???
126
+ "zmena": "0",
127
+ "ostatni": "0",
128
+ "nabidka": "0",
129
+ "poptavka": "0"
130
+ },
131
+ "vydejniMisto": { // kde se vydává oběd (škola má více jídelních budov)
132
+ "misto": "2",
133
+ "mista": "2"
134
+ },
135
+ "diety": { // ??
136
+ "dieta": "",
137
+ "diety": ""
138
+ },
139
+ "zkratkaProduktu": "OB", // zkratka produktu (identické jako chod, u polévky chybí??)
140
+ "cisloJidelnicku": "1", // ??
141
+ "multipleNazev": "1NOběd č. 1COB", // ??
142
+ "version": 5, // ??
143
+ "casKonec": "2026-06-29T11:50:00", // do kdy lze přihlásit
144
+ "casOdhlaseni": "2026-06-29T11:50:00", // do kdy lze přihlásit
145
+ "obrazky": []
146
+ },
147
+ ...
148
+ ]
149
+ }
150
+ ```
151
+ - Mnoho polí není vyplněno. Zda víte co to je, doplňte to nebo mě kontaktujte.
152
+
87
153
  ## Demo
88
154
  - Demo uživatele si lze vytvořit na https://www.strava.cz/strava/Stravnik/Demo
89
155
  - Poté se lze přihlásit na https://app.strava.cz/ na jídelně `0000`
@@ -7,7 +7,7 @@ where = ["."]
7
7
 
8
8
  [project]
9
9
  name = "strava-cz-api"
10
- version = "2.3"
10
+ version = "2.4"
11
11
  description = "Rest API for strava.cz."
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.8"
@@ -1,4 +1,5 @@
1
1
  from .strava import Api, Auth
2
+ from .filter import Filter
2
3
  from .action import (
3
4
  StravaError,
4
5
  JidelnaNenalezenaError,
@@ -0,0 +1,61 @@
1
+ import json
2
+
3
+ class Filter:
4
+ @staticmethod
5
+ def filter_json(items, jidelnicek):
6
+ if isinstance(items, (str, bytes)):
7
+ keywords = [items]
8
+ elif items is None:
9
+ keywords = []
10
+ else:
11
+ keywords = list(items)
12
+
13
+ keywords = [str(k).lower() for k in keywords if k is not None and str(k).strip()]
14
+
15
+ is_string_input = isinstance(jidelnicek, str)
16
+ data = json.loads(jidelnicek) if is_string_input else jidelnicek
17
+
18
+ if not keywords:
19
+ return json.dumps(data, ensure_ascii=False, indent=2) if is_string_input else data
20
+
21
+ filtered = Filter._filter_top_level(data, keywords)
22
+ return json.dumps(filtered, ensure_ascii=False, indent=2) if is_string_input else filtered
23
+
24
+ @staticmethod
25
+ def _filter_top_level(data, keywords):
26
+ if isinstance(data, dict):
27
+ filtered = {}
28
+ for key, value in data.items():
29
+ if isinstance(value, list):
30
+ filtered[key] = [Filter._filter_item(item, keywords) for item in value]
31
+ elif isinstance(value, dict):
32
+ filtered[key] = Filter._filter_dict_keys(value, keywords)
33
+ else:
34
+ filtered[key] = value
35
+ return filtered
36
+
37
+ if isinstance(data, list):
38
+ return [Filter._filter_item(item, keywords) for item in data]
39
+
40
+ return data
41
+
42
+ @staticmethod
43
+ def _filter_item(item, keywords):
44
+ if isinstance(item, dict):
45
+ return Filter._filter_dict_keys(item, keywords)
46
+ if isinstance(item, list):
47
+ return [Filter._filter_item(sub_item, keywords) for sub_item in item]
48
+ return item
49
+
50
+ @staticmethod
51
+ def _filter_dict_keys(data, keywords):
52
+ filtered = {}
53
+ for key, value in data.items():
54
+ if Filter._key_matches(key, keywords):
55
+ filtered[key] = value
56
+ return filtered
57
+
58
+ @staticmethod
59
+ def _key_matches(key, keywords):
60
+ key_lower = str(key).lower()
61
+ return any(keyword == key_lower for keyword in keywords)
@@ -1,6 +1,6 @@
1
1
  import requests
2
2
  import json
3
- from .action import Get, Post, ResetCookie
3
+ from .action import Get, Post, ResetChanges
4
4
 
5
5
 
6
6
  class Api:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: strava-cz-api
3
- Version: 2.3
3
+ Version: 2.4
4
4
  Summary: Rest API for strava.cz.
5
5
  Author-email: Matěj Adamec <kralyk@kralyk.dev>
6
6
  Requires-Python: >=3.8
@@ -73,6 +73,16 @@ api = Api(
73
73
  | `postOrders()` | Uložit změny objednávek | Nutné po `postJidlo`/`postDen` |
74
74
  | `resetChanges()` | Resetuje neuložené změny v komunikaci. | Dobré pro zrušení změn pří objednávkách
75
75
 
76
+ ## Filtr
77
+ Filtr existuje, ale je to **pre‑release**: může obsahovat chyby a bude se dál rozšiřovat. Lze ho importovat (`from strava_cz_api import Filter`), ale zatím není zaručeno, že všude funguje správně.
78
+
79
+ ```py
80
+ from strava_cz_api import Filter
81
+
82
+ filtrovano = Filter.filter_json(["veta"], api.getJidelnicekAll())
83
+ print(filtrovano)
84
+ ```
85
+
76
86
  ## Objednávky – správný postup
77
87
  Změny objednávek se ukládají ve dvou krocích:
78
88
  1. Provedení změn (`postJidlo` nebo `postDen`)
@@ -94,6 +104,62 @@ Většina metod vrací JSON string. Metody `postJidlo`, `postDen` a `postOrders`
94
104
  ## Příklady
95
105
  Ukázkové skripty najdeš ve složce `./examples`.
96
106
 
107
+ ## Json struktura
108
+ ```json
109
+ {
110
+ "tableX": [
111
+ {
112
+ "id": 0,
113
+ "datum": "30.06.2026", // datum
114
+ "druh_popis": "Polévka", // část
115
+ "druh_chod": "Oběd", // chod
116
+ "nazev": "Polévka 1", // název chodu (oběd č. 1)
117
+ "popis": "Snídaně", // popis chodu
118
+ "delsiPopis": "", // delší popis chodu
119
+ "zakazaneAlergeny": null, // ??
120
+ "alergeny_text": "", // alergeny
121
+ "alergeny": [], // alergeny
122
+ "chod": "C", // číslo chodu (A = snídaně, B, C)
123
+ "druh": "OB", // druh chodu ve zkratce
124
+ "cena": "45.00", // cena
125
+ "polevka": "N", // zda pole je polévka (je v ceně)
126
+ "pocet": 1, // 1 = přihlášeno, 0 = odhlášeno
127
+ "veta": "172", // id políčka
128
+ "vetaDieta": "196", // ??
129
+ "omezeniObj": { // ???
130
+ "den": "",
131
+ "obj": "",
132
+ "zm": "",
133
+ "bur": "C"
134
+ },
135
+ "burza": { // ???
136
+ "zmena": "0",
137
+ "ostatni": "0",
138
+ "nabidka": "0",
139
+ "poptavka": "0"
140
+ },
141
+ "vydejniMisto": { // kde se vydává oběd (škola má více jídelních budov)
142
+ "misto": "2",
143
+ "mista": "2"
144
+ },
145
+ "diety": { // ??
146
+ "dieta": "",
147
+ "diety": ""
148
+ },
149
+ "zkratkaProduktu": "OB", // zkratka produktu (identické jako chod, u polévky chybí??)
150
+ "cisloJidelnicku": "1", // ??
151
+ "multipleNazev": "1NOběd č. 1COB", // ??
152
+ "version": 5, // ??
153
+ "casKonec": "2026-06-29T11:50:00", // do kdy lze přihlásit
154
+ "casOdhlaseni": "2026-06-29T11:50:00", // do kdy lze přihlásit
155
+ "obrazky": []
156
+ },
157
+ ...
158
+ ]
159
+ }
160
+ ```
161
+ - Mnoho polí není vyplněno. Zda víte co to je, doplňte to nebo mě kontaktujte.
162
+
97
163
  ## Demo
98
164
  - Demo uživatele si lze vytvořit na https://www.strava.cz/strava/Stravnik/Demo
99
165
  - Poté se lze přihlásit na https://app.strava.cz/ na jídelně `0000`
@@ -6,6 +6,7 @@ examples/public_jidelnicek.py
6
6
  examples/user_info.py
7
7
  strava_cz_api/__init__.py
8
8
  strava_cz_api/action.py
9
+ strava_cz_api/filter.py
9
10
  strava_cz_api/strava.py
10
11
  strava_cz_api.egg-info/PKG-INFO
11
12
  strava_cz_api.egg-info/SOURCES.txt
File without changes
File without changes