From e0bdd1e2f7dfc6d91474a4fadf3f6d8464a50d2b Mon Sep 17 00:00:00 2001 From: Bjarne Riis Date: Mon, 3 Feb 2025 06:52:39 +0100 Subject: [PATCH 1/2] Bump to 2.1.7 --- pyaffalddk/__init__.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyaffalddk/__init__.py b/pyaffalddk/__init__.py index d49d753..0c003b3 100644 --- a/pyaffalddk/__init__.py +++ b/pyaffalddk/__init__.py @@ -22,6 +22,6 @@ ) __title__ = "pyaffalddk" -__version__ = "2.1.6" +__version__ = "2.1.7" __author__ = "briis" __license__ = "MIT" diff --git a/setup.py b/setup.py index d7ebbdd..767feca 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setuptools.setup( name="pyaffalddk", - version="2.1.6", + version="2.1.7", author="briis", author_email="bjarne@briis.com", description="Gets garbage collection data from danish Municipalities", From 899c63d312a1e2a25856aa267f203bdf0046bb22 Mon Sep 17 00:00:00 2001 From: Bjarne Riis Date: Mon, 3 Feb 2025 08:17:35 +0100 Subject: [PATCH 2/2] Fixing missing material and odd/even week days --- CHANGELOG.md | 16 ++++++++++--- pyaffalddk/api.py | 55 ++++++++++++++++++++++++++++++++++++++++++++- pyaffalddk/const.py | 7 +++++- 3 files changed, 73 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc401f5..312dfa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog for pyaffalddk +## Version 2.1.7 + +**Date**: `2025-01-04` + +### What's Changed + +* Fixing Missing Material in Egedal Kommune. Closing [AffaldDK #221](https://github.com/briis/affalddk/issues/221) +* Added function to find a date based on Weekday and Odd or Even week. Closing [AffaldDK #226](https://github.com/briis/affalddk/issues/226) +* Bump `pyaffalddk` to V2.1.7 + +
+ Previous Changes + ## Version 2.1.6 **Date**: `2024-01-07` @@ -11,9 +24,6 @@ * Fixing missing containers in Køge after renaming. Closing [AffaldDK #207](https://github.com/briis/affalddk/issues/207) * Bump `pyaffalddk` to V2.1.6 -
- Previous Changes - ## Version 2.1.3 **Date**: `2024-01-05` diff --git a/pyaffalddk/api.py b/pyaffalddk/api.py index b03f87f..1621d93 100644 --- a/pyaffalddk/api.py +++ b/pyaffalddk/api.py @@ -21,6 +21,7 @@ NAME_LIST, NON_MATERIAL_LIST, NON_SUPPORTED_ITEMS, + ODD_EVEN_ARRAY, SUPPORTED_ITEMS, WEEKDAYS, ) @@ -443,7 +444,7 @@ async def get_pickup_data(self, address_id: str) -> PickupEvents: data = await self._api.async_api_request(url, body) result = json.loads(data["d"]) garbage_data = result["list"] - _LOGGER.debug("Garbage Data: %s", garbage_data) + # _LOGGER.debug("Garbage Data: %s", garbage_data) for row in garbage_data: if row["ordningnavn"] in NON_SUPPORTED_ITEMS: @@ -454,11 +455,20 @@ async def get_pickup_data(self, address_id: str) -> PickupEvents: _pickup_date = to_date(row["toemningsdato"]) elif str(row["toemningsdage"]).capitalize() in WEEKDAYS: _pickup_date = get_next_weekday(row["toemningsdage"]) + _LOGGER.debug("FOUND IN TOEMNINGSDAGE") elif find_weekday_in_string(row["toemningsdage"]) != "None": if row["toemningsdato"] not in NON_SUPPORTED_ITEMS: _weekday = find_weekday_in_string( row["toemningsdage"]) _pickup_date = get_next_weekday(_weekday) + elif find_odd_even_in_string(row["toemningsdage"]) != "None": + _weekday = find_weekday_in_string( + row["toemningsdage"]) + _odd_even = find_odd_even_in_string( + row["toemningsdage"]) + _LOGGER.debug("WEEK: %s - %s", _odd_even, _weekday) + _pickup_date = get_next_weekday_odd_even( + _weekday, _odd_even) else: _pickup_date = get_next_year_end() else: @@ -609,6 +619,7 @@ def get_garbage_type_from_material( def get_next_weekday(weekday: str) -> dt.date: + weekdays = WEEKDAYS current_weekday = dt.datetime.now().weekday() target_weekday = weekdays.index(weekday.capitalize()) @@ -617,6 +628,39 @@ def get_next_weekday(weekday: str) -> dt.date: return next_date.date() +def get_next_weekday_odd_even(weekday: str, odd_even: str) -> dt.date: + """Get next date for a weekday considering odd/even weeks. + + Args: + weekday: String with weekday name + odd_even: String with 'ulige' or 'lige' for odd/even weeks + + Returns: + dt.date: Next date matching weekday and odd/even week criteria + """ + weekdays = WEEKDAYS + current_date = dt.datetime.now() + target_weekday = weekdays.index(weekday.capitalize()) + + # Find next occurrence of weekday + days_ahead = (target_weekday - current_date.weekday()) % 7 + next_date = current_date + dt.timedelta(days=days_ahead) + if days_ahead == 0: # If today is the target weekday, move to next week + next_date += dt.timedelta(days=7) + + # Check if week number matches odd/even criteria using ISO week numbers + week_number = next_date.isocalendar()[1] + _LOGGER.debug("Week Number: %s", week_number) + is_odd_week = week_number % 2 == 1 + needs_odd = odd_even.lower() == 'ulige' + + # If initial date doesn't match odd/even criteria, add a week + if is_odd_week != needs_odd: + next_date += dt.timedelta(days=7) + + return next_date.date() + + def list_to_string(list: list[str]) -> str: """Convert a list to a string.""" return " | ".join(list) @@ -631,6 +675,15 @@ def find_weekday_in_string(text: str) -> str: return "None" +def find_odd_even_in_string(text: str) -> str: + """Loop through each word in a text string and compare with another word.""" + words = text.split() + for w in words: + if w.lower() in ODD_EVEN_ARRAY: + return w.lower() + return "None" + + def get_next_year_end() -> dt.date: """Return December 31 of the next year.""" today = dt.date.today() diff --git a/pyaffalddk/const.py b/pyaffalddk/const.py index 937eb9e..ce5a0e0 100644 --- a/pyaffalddk/const.py +++ b/pyaffalddk/const.py @@ -252,6 +252,7 @@ "PP/MDK-plast 240 l (hver 2. uge) (1 stk.)", "240 L. PMDK/PP 3 ugers tømning (1 stk.)", "370 l Plast+MDK/Papir - Egenløsning (Privat) (1 stk.)", + "240 l Plast+MDK/Papir - Egenløsning (Privat) (1 stk.)", ], "farligtaffald": [ "", @@ -372,6 +373,7 @@ "4-kammer (370 l) (1 stk.)", "Pap og papir/metal, glas og hård plast - 240 L (1 stk.)", "240 l genbrug låg i låg (1 stk.)", + "Pap og papir/metal, glas og hård plast - 240 L (EX) (1 stk.)", ], "madaffald": [ "140 L madaffald (1 stk.)", @@ -528,5 +530,8 @@ MUNICIPALITIES_ARRAY = list(MUNICIPALITIES_LIST.keys()) -WEEKDAYS = ["Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"] +ODD_EVEN_ARRAY = ["lige", "ulige"] + +WEEKDAYS = ["Mandag", "Tirsdag", "Onsdag", + "Torsdag", "Fredag", "Lørdag", "Søndag"] WEEKDAYS_SHORT = ["Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"]