refactor heilbronn_de

This commit is contained in:
mampfes
2023-03-24 16:43:00 +01:00
parent 110760f7e7
commit 97a8dc608d
2 changed files with 58 additions and 47 deletions

View File

@@ -1,5 +1,6 @@
import requests
from datetime import datetime
import requests
from waste_collection_schedule import Collection # type: ignore[attr-defined]
from waste_collection_schedule.service.ICS import ICS
@@ -13,31 +14,29 @@ TEST_CASES = {
"hausnr": 33,
},
"Biberach": {
"strasse":"Kehrhüttenstraße",
"strasse": "Kehrhüttenstraße",
"plz": 74078,
"hausnr": "90",
"hausnr": "90",
},
"klingenberg:": {
"strasse":"Wittumhalde",
"Klingenberg:": {
"strasse": "Wittumhalde",
"plz": "74081",
"hausnr": 75,
"hausnr": 75,
},
"klingenberg:": {
"strasse":"Wittumhalde",
"Klingenberg (hausnr as string):": {
"strasse": "Wittumhalde",
"plz": "74081",
"hausnr": "75",
"hausnr": "75",
},
"Rosenbergstraße": {
"strasse":"Rosenbergstraße",
"Rosenbergstraße 53": {
"strasse": "Rosenbergstraße",
"plz": "74074",
"hausnr": "53",
"hausnr": "53",
},
"Rosenbergstraße2": {
"strasse":"Rosenbergstraße",
"Rosenbergstraße 41": {
"strasse": "Rosenbergstraße",
"plz": "74072",
"hausnr": "41",
"hausnr": "41",
},
}
@@ -50,6 +49,7 @@ ICON_MAP = {
"BT": "mdi:package-variant",
}
class Source:
def __init__(self, plz: int, strasse: str, hausnr: str | int):
self._plz: str = str(plz)
@@ -59,61 +59,72 @@ class Source:
def fetch(self):
r = requests.get(
"https://abfallratgeber.heilbronn.de/excel_hn/htdocs/street.json")
"https://abfallratgeber.heilbronn.de/excel_hn/htdocs/street.json"
)
r.raise_for_status()
streets: dict = r.json()
#all the data is spilt in to two files for diffrent kinds of trash
# all the data is spilt in to two files for different kinds of trash
year_response = requests.get(
"https://abfallratgeber.heilbronn.de/excel_hn/htdocs/yearObject.json")
"https://abfallratgeber.heilbronn.de/excel_hn/htdocs/yearObject.json"
)
year_response.raise_for_status()
yearB_response = requests.get("https://abfallratgeber.heilbronn.de/excel_hn/htdocs/yearBObject.json")
yearB_response = requests.get(
"https://abfallratgeber.heilbronn.de/excel_hn/htdocs/yearBObject.json"
)
yearB_response.raise_for_status()
days_list: list[dict] = [year_response.json(),yearB_response.json()]
days_list: list[dict] = [year_response.json(), yearB_response.json()]
keys = []
# get the values to search for in the json and save them in keys
for street in streets:
if (street['route'] == self._strasse) and (street['postal_code'] == self._plz):
if ("street_number" in street) and (self._hausnr not in street['street_number']):
if (street["route"] == self._strasse) and (
street["postal_code"] == self._plz
):
if ("street_number" in street) and (
self._hausnr not in street["street_number"]
):
continue
keys = []
for key in list({street['area'], street['g'], street['bt']}):
for key in list({street["area"], street["g"], street["bt"]}):
keys.append(key)
if "-" in key:
keys.append(key.split("-")[0])
break
if keys == []:
raise Exception("no address found for " + self._strasse + " " + self._hausnr + " " + self._plz)
raise Exception(
"no address found for "
+ self._strasse
+ " "
+ self._hausnr
+ " "
+ self._plz
)
entries = []
# iterate over both json files and search for the keys
for days in days_list:
# iterate over both json files and search for the keys
for days in days_list:
for day in days.values():
if not "date" in day:
if "date" not in day:
continue
date: dict = datetime.strptime(day['date'], '%d.%m.%Y').date()
date: dict = datetime.strptime(day["date"], "%d.%m.%Y").date()
for key in keys:
if key in day["districts"] and day["districts"][key] != []:
for entry in day["districts"][key]:
if entry in ICON_MAP:
icon = ICON_MAP.get(entry)
elif len(entry)>=2 and entry[:2] == "BT":
elif len(entry) >= 2 and entry[:2] == "BT":
icon = ICON_MAP.get("BT")
else:
icon = ICON_MAP.get(entry[0])
entries.append(Collection(date, entry,icon))
entries.append(Collection(date, entry, icon))
return entries

View File

@@ -30,11 +30,11 @@ waste_collection_schedule:
```yaml
waste_collection_schedule:
sources:
- name: bsr_de
- name: heilbronn_de
args:
plz: 74072
abf_strasse: "Rosenau"
abf_hausnr: 33
strasse: Rosenau
hausnr: 33
```
## How to get the source arguments