diff --git a/custom_components/afvalwijzer/collector/deafvalapp.py b/custom_components/afvalwijzer/collector/deafvalapp.py index 5d80bcf..5557c7a 100644 --- a/custom_components/afvalwijzer/collector/deafvalapp.py +++ b/custom_components/afvalwijzer/collector/deafvalapp.py @@ -3,7 +3,6 @@ import requests -from ..common.waste_data_transformer import WasteDataTransformer from ..const.const import _LOGGER, SENSOR_COLLECTORS_DEAFVALAPP @@ -83,47 +82,3 @@ def _get_waste_data_provider(self): "%Y-%m-%d" ) self.waste_data_raw.append(temp) - - ########################################################################## - # COMMON CODE - ########################################################################## - waste_data = WasteDataTransformer( - self.waste_data_raw, - self.exclude_pickup_today, - self.exclude_list, - self.default_label, - ) - - self._waste_data_with_today = waste_data.waste_data_with_today - self._waste_data_without_today = waste_data.waste_data_without_today - self._waste_data_custom = waste_data.waste_data_custom - self._waste_data_provider = waste_data.waste_data_provider - self._waste_types_provider = waste_data.waste_types_provider - self._waste_types_custom = waste_data.waste_types_custom - - ########################################################################## - # PROPERTIES FOR EXECUTION - ########################################################################## - @property - def waste_data_with_today(self): - return self._waste_data_with_today - - @property - def waste_data_without_today(self): - return self._waste_data_without_today - - @property - def waste_data_provider(self): - return self._waste_data_provider - - @property - def waste_types_provider(self): - return self._waste_types_provider - - @property - def waste_data_custom(self): - return self._waste_data_custom - - @property - def waste_types_custom(self): - return self._waste_types_custom diff --git a/custom_components/afvalwijzer/collector/icalendar.py b/custom_components/afvalwijzer/collector/icalendar.py index 25d58da..c759000 100644 --- a/custom_components/afvalwijzer/collector/icalendar.py +++ b/custom_components/afvalwijzer/collector/icalendar.py @@ -3,7 +3,6 @@ import requests -from ..common.waste_data_transformer import WasteDataTransformer from ..const.const import _LOGGER, SENSOR_COLLECTORS_ICALENDAR @@ -80,47 +79,3 @@ def _get_waste_data_provider(self): # sourcery skip: avoid-builtin-shadow _LOGGER.debug( f"No date or type extracted from event: date={date}, type={type}" ) - - ########################################################################## - # COMMON CODE - ########################################################################## - waste_data = WasteDataTransformer( - self.waste_data_raw, - self.exclude_pickup_today, - self.exclude_list, - self.default_label, - ) - - self._waste_data_with_today = waste_data.waste_data_with_today - self._waste_data_without_today = waste_data.waste_data_without_today - self._waste_data_custom = waste_data.waste_data_custom - self._waste_data_provider = waste_data.waste_data_provider - self._waste_types_provider = waste_data.waste_types_provider - self._waste_types_custom = waste_data.waste_types_custom - - ########################################################################## - # PROPERTIES FOR EXECUTION - ########################################################################## - @property - def waste_data_with_today(self): - return self._waste_data_with_today - - @property - def waste_data_without_today(self): - return self._waste_data_without_today - - @property - def waste_data_provider(self): - return self._waste_data_provider - - @property - def waste_types_provider(self): - return self._waste_types_provider - - @property - def waste_data_custom(self): - return self._waste_data_custom - - @property - def waste_types_custom(self): - return self._waste_types_custom diff --git a/custom_components/afvalwijzer/collector/main_collector.py b/custom_components/afvalwijzer/collector/main_collector.py new file mode 100644 index 0000000..bfa66f9 --- /dev/null +++ b/custom_components/afvalwijzer/collector/main_collector.py @@ -0,0 +1,144 @@ +from ..common.waste_data_transformer import WasteDataTransformer +from ..const.const import ( + _LOGGER, + SENSOR_COLLECTOR_TO_URL, + SENSOR_COLLECTORS_AFVALWIJZER, + SENSOR_COLLECTORS_DEAFVALAPP, + SENSOR_COLLECTORS_ICALENDAR, + SENSOR_COLLECTORS_OPZET, + SENSOR_COLLECTORS_RD4, + SENSOR_COLLECTORS_XIMMIO, +) +from .deafvalapp import DeAfvalappCollector +from .icalendar import IcalendarCollector +from .mijnafvalwijzer import MijnAfvalWijzerCollector +from .opzet import OpzetCollector +from .rd4 import Rd4Collector +from .ximmio import XimmioCollector + + +class MainCollector(object): + def __init__( + self, + provider, + postal_code, + street_number, + suffix, + exclude_pickup_today, + exclude_list, + default_label, + ): + self.provider = provider + self.postal_code = postal_code = postal_code.strip().upper() + self.street_number = street_number + self.suffix = suffix + self.exclude_pickup_today = exclude_pickup_today + self.exclude_list = exclude_list.strip().lower() + self.default_label = default_label + + try: + if provider in SENSOR_COLLECTORS_AFVALWIJZER: + collector = MijnAfvalWijzerCollector( + provider, + postal_code, + street_number, + suffix, + exclude_pickup_today, + exclude_list, + default_label, + ) + elif provider in SENSOR_COLLECTORS_OPZET.keys(): + collector = OpzetCollector( + provider, + postal_code, + street_number, + suffix, + exclude_pickup_today, + exclude_list, + default_label, + ) + elif provider in SENSOR_COLLECTORS_XIMMIO.keys(): + collector = XimmioCollector( + provider, + postal_code, + street_number, + suffix, + exclude_pickup_today, + exclude_list, + default_label, + ) + elif provider in SENSOR_COLLECTORS_ICALENDAR.keys(): + collector = IcalendarCollector( + provider, + postal_code, + street_number, + suffix, + exclude_pickup_today, + exclude_list, + default_label, + ) + elif provider in SENSOR_COLLECTORS_DEAFVALAPP.keys(): + collector = DeAfvalappCollector( + provider, + postal_code, + street_number, + suffix, + exclude_pickup_today, + exclude_list, + default_label, + ) + elif provider in SENSOR_COLLECTORS_RD4.keys(): + collector = Rd4Collector( + provider, + postal_code, + street_number, + suffix, + exclude_pickup_today, + exclude_list, + default_label, + ) + else: + _LOGGER.error(f"Unknown provider: {provider}") + return False + + except ValueError as err: + _LOGGER.error(f"Check afvalwijzer platform settings {err.args}") + + waste_data_raw = collector.waste_data_raw + + ########################################################################## + # COMMON CODE + ########################################################################## + self._waste_data = WasteDataTransformer( + waste_data_raw, + self.exclude_pickup_today, + self.exclude_list, + self.default_label, + ) + + ########################################################################## + # PROPERTIES FOR EXECUTION + ########################################################################## + @property + def waste_data_with_today(self): + return self._waste_data.waste_data_with_today + + @property + def waste_data_without_today(self): + return self._waste_data.waste_data_without_today + + @property + def waste_data_provider(self): + return self._waste_data.waste_data_provider + + @property + def waste_types_provider(self): + return self._waste_data.waste_types_provider + + @property + def waste_data_custom(self): + return self._waste_data.waste_data_custom + + @property + def waste_types_custom(self): + return self._waste_data.waste_types_custom diff --git a/custom_components/afvalwijzer/collector/mijnafvalwijzer.py b/custom_components/afvalwijzer/collector/mijnafvalwijzer.py index f89e37b..c85a8ba 100644 --- a/custom_components/afvalwijzer/collector/mijnafvalwijzer.py +++ b/custom_components/afvalwijzer/collector/mijnafvalwijzer.py @@ -2,7 +2,6 @@ import requests -from ..common.waste_data_transformer import WasteDataTransformer from ..const.const import ( _LOGGER, SENSOR_COLLECTOR_TO_URL, @@ -35,9 +34,6 @@ def __init__( if self.provider == "rova": self.provider = "inzamelkalender.rova" - self._get_waste_data_provider() - - def _get_waste_data_provider(self): try: url = SENSOR_COLLECTOR_TO_URL["afvalwijzer_data_default"][0].format( self.provider, @@ -66,47 +62,3 @@ def _get_waste_data_provider(self): ) except KeyError as exc: raise KeyError(f"Invalid and/or no data received from {url}") from exc - - ########################################################################## - # COMMON CODE - ########################################################################## - waste_data = WasteDataTransformer( - self.waste_data_raw, - self.exclude_pickup_today, - self.exclude_list, - self.default_label, - ) - - self._waste_data_with_today = waste_data.waste_data_with_today - self._waste_data_without_today = waste_data.waste_data_without_today - self._waste_data_custom = waste_data.waste_data_custom - self._waste_data_provider = waste_data.waste_data_provider - self._waste_types_provider = waste_data.waste_types_provider - self._waste_types_custom = waste_data.waste_types_custom - - ########################################################################## - # PROPERTIES FOR EXECUTION - ########################################################################## - @property - def waste_data_with_today(self): - return self._waste_data_with_today - - @property - def waste_data_without_today(self): - return self._waste_data_without_today - - @property - def waste_data_provider(self): - return self._waste_data_provider - - @property - def waste_types_provider(self): - return self._waste_types_provider - - @property - def waste_data_custom(self): - return self._waste_data_custom - - @property - def waste_types_custom(self): - return self._waste_types_custom diff --git a/custom_components/afvalwijzer/collector/opzet.py b/custom_components/afvalwijzer/collector/opzet.py index d162e9a..1736ba6 100644 --- a/custom_components/afvalwijzer/collector/opzet.py +++ b/custom_components/afvalwijzer/collector/opzet.py @@ -2,7 +2,6 @@ import requests -from ..common.waste_data_transformer import WasteDataTransformer from ..const.const import _LOGGER, SENSOR_COLLECTORS_OPZET @@ -127,49 +126,3 @@ def _get_waste_data_provider(self): except ValueError as exc: raise ValueError(f"Invalid and/or no data received from {url}") from exc - - ########################################################################## - # COMMON CODE - ########################################################################## - - waste_data = WasteDataTransformer( - self.waste_data_raw, - self.exclude_pickup_today, - self.exclude_list, - self.default_label, - ) - - self._waste_data_with_today = waste_data.waste_data_with_today - self._waste_data_without_today = waste_data.waste_data_without_today - self._waste_data_custom = waste_data.waste_data_custom - self._waste_data_provider = waste_data.waste_data_provider - self._waste_types_provider = waste_data.waste_types_provider - self._waste_types_custom = waste_data.waste_types_custom - - ########################################################################## - # PROPERTIES FOR EXECUTION - ########################################################################## - - @property - def waste_data_with_today(self): - return self._waste_data_with_today - - @property - def waste_data_without_today(self): - return self._waste_data_without_today - - @property - def waste_data_provider(self): - return self._waste_data_provider - - @property - def waste_types_provider(self): - return self._waste_types_provider - - @property - def waste_data_custom(self): - return self._waste_data_custom - - @property - def waste_types_custom(self): - return self._waste_types_custom diff --git a/custom_components/afvalwijzer/collector/rd4.py b/custom_components/afvalwijzer/collector/rd4.py index de776db..20214c1 100644 --- a/custom_components/afvalwijzer/collector/rd4.py +++ b/custom_components/afvalwijzer/collector/rd4.py @@ -3,7 +3,6 @@ import requests -from ..common.waste_data_transformer import WasteDataTransformer from ..const.const import _LOGGER, SENSOR_COLLECTORS_RD4 @@ -100,47 +99,3 @@ def _get_waste_data_provider(self): "%Y-%m-%d" ) self.waste_data_raw.append(temp) - - ########################################################################## - # COMMON CODE - ########################################################################## - waste_data = WasteDataTransformer( - self.waste_data_raw, - self.exclude_pickup_today, - self.exclude_list, - self.default_label, - ) - - self._waste_data_with_today = waste_data.waste_data_with_today - self._waste_data_without_today = waste_data.waste_data_without_today - self._waste_data_custom = waste_data.waste_data_custom - self._waste_data_provider = waste_data.waste_data_provider - self._waste_types_provider = waste_data.waste_types_provider - self._waste_types_custom = waste_data.waste_types_custom - - ########################################################################## - # PROPERTIES FOR EXECUTION - ########################################################################## - @property - def waste_data_with_today(self): - return self._waste_data_with_today - - @property - def waste_data_without_today(self): - return self._waste_data_without_today - - @property - def waste_data_provider(self): - return self._waste_data_provider - - @property - def waste_types_provider(self): - return self._waste_types_provider - - @property - def waste_data_custom(self): - return self._waste_data_custom - - @property - def waste_types_custom(self): - return self._waste_types_custom diff --git a/custom_components/afvalwijzer/collector/ximmio.py b/custom_components/afvalwijzer/collector/ximmio.py index 48242f1..6ee9e6c 100644 --- a/custom_components/afvalwijzer/collector/ximmio.py +++ b/custom_components/afvalwijzer/collector/ximmio.py @@ -2,7 +2,6 @@ import requests -from ..common.waste_data_transformer import WasteDataTransformer from ..const.const import _LOGGER, SENSOR_COLLECTOR_TO_URL, SENSOR_COLLECTORS_XIMMIO @@ -127,47 +126,3 @@ def _get_waste_data_provider(self): sorted(item["pickupDates"])[0], "%Y-%m-%dT%H:%M:%S" ).strftime("%Y-%m-%d") self.waste_data_raw.append(temp) - - ########################################################################## - # COMMON CODE - ########################################################################## - waste_data = WasteDataTransformer( - self.waste_data_raw, - self.exclude_pickup_today, - self.exclude_list, - self.default_label, - ) - - self._waste_data_with_today = waste_data.waste_data_with_today - self._waste_data_without_today = waste_data.waste_data_without_today - self._waste_data_custom = waste_data.waste_data_custom - self._waste_data_provider = waste_data.waste_data_provider - self._waste_types_provider = waste_data.waste_types_provider - self._waste_types_custom = waste_data.waste_types_custom - - ########################################################################## - # PROPERTIES FOR EXECUTION - ########################################################################## - @property - def waste_data_with_today(self): - return self._waste_data_with_today - - @property - def waste_data_without_today(self): - return self._waste_data_without_today - - @property - def waste_data_provider(self): - return self._waste_data_provider - - @property - def waste_types_provider(self): - return self._waste_types_provider - - @property - def waste_data_custom(self): - return self._waste_data_custom - - @property - def waste_types_custom(self): - return self._waste_types_custom diff --git a/custom_components/afvalwijzer/const/const.py b/custom_components/afvalwijzer/const/const.py index de4f9e4..2e67b9d 100755 --- a/custom_components/afvalwijzer/const/const.py +++ b/custom_components/afvalwijzer/const/const.py @@ -3,7 +3,7 @@ API = "api" NAME = "afvalwijzer" -VERSION = "2022.10.07" +VERSION = "2022.11.01" ISSUE_URL = "https://github.com/xirixiz/homeassistant-afvalwijzer/issues" _LOGGER = logging.getLogger(__name__) diff --git a/custom_components/afvalwijzer/manifest.json b/custom_components/afvalwijzer/manifest.json index 8ecd56b..58b7792 100644 --- a/custom_components/afvalwijzer/manifest.json +++ b/custom_components/afvalwijzer/manifest.json @@ -1,7 +1,7 @@ { "domain": "afvalwijzer", "name": "Afvalwijzer", - "version": "2022.10.07", + "version": "2022.11.01", "iot_class": "cloud_polling", "documentation": "https://github.com/xirixiz/homeassistant-afvalwijzer/blob/master/README.md", "issue_tracker": "https://github.com/xirixiz/homeassistant-afvalwijzer/issues", diff --git a/custom_components/afvalwijzer/sensor.py b/custom_components/afvalwijzer/sensor.py index 3e0fbc8..6f15e0e 100755 --- a/custom_components/afvalwijzer/sensor.py +++ b/custom_components/afvalwijzer/sensor.py @@ -11,12 +11,7 @@ from homeassistant.util import Throttle import voluptuous as vol -from .collector.deafvalapp import DeAfvalappCollector -from .collector.icalendar import IcalendarCollector -from .collector.mijnafvalwijzer import MijnAfvalWijzerCollector -from .collector.opzet import OpzetCollector -from .collector.rd4 import Rd4Collector -from .collector.ximmio import XimmioCollector +from .collector.main_collector import MainCollector from .const.const import ( _LOGGER, CONF_COLLECTOR, @@ -30,12 +25,6 @@ MIN_TIME_BETWEEN_UPDATES, PARALLEL_UPDATES, SCAN_INTERVAL, - SENSOR_COLLECTORS_AFVALWIJZER, - SENSOR_COLLECTORS_DEAFVALAPP, - SENSOR_COLLECTORS_ICALENDAR, - SENSOR_COLLECTORS_OPZET, - SENSOR_COLLECTORS_RD4, - SENSOR_COLLECTORS_XIMMIO, STARTUP_MESSAGE, ) from .sensor_custom import CustomSensor @@ -73,93 +62,21 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= _LOGGER.debug(f"Afvalwijzer street_number = {street_number}") try: - if provider in SENSOR_COLLECTORS_AFVALWIJZER: - collector = await hass.async_add_executor_job( - partial( - MijnAfvalWijzerCollector, - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) + collector = await hass.async_add_executor_job( + partial( + MainCollector, + provider, + postal_code, + street_number, + suffix, + exclude_pickup_today, + exclude_list, + default_label, ) - elif provider in SENSOR_COLLECTORS_OPZET.keys(): - collector = await hass.async_add_executor_job( - partial( - OpzetCollector, - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - ) - elif provider in SENSOR_COLLECTORS_XIMMIO.keys(): - collector = await hass.async_add_executor_job( - partial( - XimmioCollector, - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - ) - elif provider in SENSOR_COLLECTORS_ICALENDAR.keys(): - collector = await hass.async_add_executor_job( - partial( - IcalendarCollector, - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - ) - elif provider in SENSOR_COLLECTORS_DEAFVALAPP.keys(): - collector = await hass.async_add_executor_job( - partial( - DeAfvalappCollector, - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - ) - elif provider in SENSOR_COLLECTORS_RD4.keys(): - collector = await hass.async_add_executor_job( - partial( - Rd4Collector, - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - ) - else: - _LOGGER.error("Unknown provider!") - return False + ) except ValueError as err: _LOGGER.error(f"Check afvalwijzer platform settings {err.args}") - if collector == "": - raise ValueError(f"Invalid provider: {provider}, please verify") - fetch_data = AfvalwijzerData(config) waste_types_provider = collector.waste_types_provider @@ -195,69 +112,15 @@ def update(self): exclude_list = self.config.get(CONF_EXCLUDE_LIST) try: - if provider in SENSOR_COLLECTORS_AFVALWIJZER: - collector = MijnAfvalWijzerCollector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - elif provider in SENSOR_COLLECTORS_OPZET.keys(): - collector = OpzetCollector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - elif provider in SENSOR_COLLECTORS_XIMMIO.keys(): - collector = XimmioCollector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - elif provider in SENSOR_COLLECTORS_ICALENDAR.keys(): - collector = IcalendarCollector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - elif provider in SENSOR_COLLECTORS_DEAFVALAPP.keys(): - collector = DeAfvalappCollector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - elif provider in SENSOR_COLLECTORS_RD4.keys(): - collector = Rd4Collector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) - else: - _LOGGER.error("Unknown provider!") - return False + collector = MainCollector( + provider, + postal_code, + street_number, + suffix, + exclude_pickup_today, + exclude_list, + default_label, + ) except ValueError as err: _LOGGER.error(f"Check afvalwijzer platform settings {err.args}") diff --git a/custom_components/afvalwijzer/test/test_module.py b/custom_components/afvalwijzer/test/test_module.py index 3a6371e..f018ef6 100644 --- a/custom_components/afvalwijzer/test/test_module.py +++ b/custom_components/afvalwijzer/test/test_module.py @@ -11,20 +11,8 @@ """ -from ..collector.deafvalapp import DeAfvalappCollector -from ..collector.icalendar import IcalendarCollector -from ..collector.mijnafvalwijzer import MijnAfvalWijzerCollector -from ..collector.opzet import OpzetCollector -from ..collector.rd4 import Rd4Collector -from ..collector.ximmio import XimmioCollector -from ..const.const import ( - SENSOR_COLLECTORS_AFVALWIJZER, - SENSOR_COLLECTORS_DEAFVALAPP, - SENSOR_COLLECTORS_ICALENDAR, - SENSOR_COLLECTORS_OPZET, - SENSOR_COLLECTORS_RD4, - SENSOR_COLLECTORS_XIMMIO, -) + +from ..collector.main_collector import MainCollector # provider = "afvalstoffendienstkalender" # api_token = "5ef443e778f41c4f75c69459eea6e6ae0c2d92de729aa0fc61653815fbd6a8ca" @@ -41,7 +29,7 @@ # Afvalwijzer provider = "mijnafvalwijzer" -postal_code = "5146EG" +postal_code = "5146eg" street_number = "1" # DeAfvalapp @@ -60,9 +48,9 @@ # street_number = "11" # Opzet -provider = "prezero" -postal_code = "6665CN" -street_number = "1" +# provider = "prezero" +# postal_code = "6665CN" +# street_number = "1" # RD4 # provider = "rd4" @@ -75,68 +63,17 @@ # postal_code = "9991AB" # street_number = "2" -postal_code = postal_code.strip().upper() - -if provider in SENSOR_COLLECTORS_AFVALWIJZER: - collector = MijnAfvalWijzerCollector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) -elif provider in SENSOR_COLLECTORS_OPZET.keys(): - collector = OpzetCollector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) -elif provider in SENSOR_COLLECTORS_XIMMIO.keys(): - collector = XimmioCollector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) -elif provider in SENSOR_COLLECTORS_ICALENDAR.keys(): - collector = IcalendarCollector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) -elif provider in SENSOR_COLLECTORS_DEAFVALAPP.keys(): - collector = DeAfvalappCollector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) -elif provider in SENSOR_COLLECTORS_RD4.keys(): - collector = Rd4Collector( - provider, - postal_code, - street_number, - suffix, - exclude_pickup_today, - exclude_list, - default_label, - ) +# postal_code = postal_code.strip().upper() + +collector = MainCollector( + provider, + postal_code, + street_number, + suffix, + exclude_pickup_today, + exclude_list, + default_label, +) # data = XimmioCollector().get_waste_data_provider("meerlanden", postal_code2, street_number2, suffix, default_label, exclude_list) # data2 = MijnAfvalWijzerCollector().get_waste_data_provider("mijnafvalwijzer", postal_code, street_number, suffix, default_label, exclude_list)