uk_bin_collection 0.136.0__tar.gz → 0.138.0__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.
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/PKG-INFO +35 -36
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/README.md +33 -35
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/pyproject.toml +2 -1
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/input.json +21 -1
- uk_bin_collection-0.138.0/uk_bin_collection/uk_bin_collection/councils/FyldeCouncil.py +92 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -7
- uk_bin_collection-0.138.0/uk_bin_collection/uk_bin_collection/councils/GooglePublicCalendarCouncil.py +38 -0
- uk_bin_collection-0.138.0/uk_bin_collection/uk_bin_collection/councils/HastingsBoroughCouncil.py +53 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MidDevonCouncil.py +1 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +8 -9
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WestOxfordshireDistrictCouncil.py +4 -5
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/LICENSE +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/README.rst +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/check_selenium_url_in_input.json.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/features/environment.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/output.schema +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/test_conftest.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/tests/test_get_data.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/common.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/AmberValleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BaberghDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BlaenauGwentCountyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BolsoverCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BostonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BraintreeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BrecklandCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BrentCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BromsgroveDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BurnleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CambridgeCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CheltenhamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CherwellDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CopelandBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CotswoldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CoventryCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CumberlandAllerdaleCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/CumberlandCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DenbighshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DerbyCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DudleyCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DundeeCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastHertsCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastLothianCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastStaffordshireBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EdinburghCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/EpsomandEwellBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ExeterCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/FifeCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/FlintshireCountyCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/FolkstoneandHytheDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/GraveshamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/GwyneddCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HackneyCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HarboroughDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HartDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HartlepoolBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HerefordshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/IpswichBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/KingsLynnandWestNorfolkBC.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LeicesterCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LichfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LincolnCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHarrow.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHavering.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLewisham.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughOfRichmondUponThames.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MedwayCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MiddlesbroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MonmouthshireCountyCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/MorayCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleUnderLymeCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthHertfordshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/NuneatonBedworthBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/OadbyAndWigstonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/OxfordCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/PerthAndKinrossCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/PlymouthCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/PowysCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RedcarandClevelandCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RedditchBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RotherDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RoyalBoroughofGreenwich.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RunnymedeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SandwellBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SeftonCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthHamsDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthStaffordshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthamptonCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SpelthorneBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/StevenageBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/StocktonOnTeesCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SurreyHeathBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/SwindonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ThanetDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ThurrockCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/TunbridgeWellsCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WandsworthCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WestDunbartonshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WestLancashireBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WirralCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WolverhamptonCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WorcesterCityCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/WyreForestDistrictCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
- {uk_bin_collection-0.136.0 → uk_bin_collection-0.138.0}/uk_bin_collection/uk_bin_collection/get_bin_data.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: uk_bin_collection
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.138.0
|
4
4
|
Summary: Python Lib to collect UK Bin Data
|
5
5
|
Author: Robert Bradley
|
6
6
|
Author-email: robbrad182@gmail.com
|
@@ -10,6 +10,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.13
|
11
11
|
Requires-Dist: bs4
|
12
12
|
Requires-Dist: holidays
|
13
|
+
Requires-Dist: ics (>=0.7.2,<0.8.0)
|
13
14
|
Requires-Dist: lxml
|
14
15
|
Requires-Dist: pandas
|
15
16
|
Requires-Dist: python-dateutil
|
@@ -41,10 +42,10 @@ Description-Content-Type: text/markdown
|
|
41
42
|
# UK Bin Collection Data (UKBCD)
|
42
43
|
This project aims to provide a neat and standard way of providing bin collection data in JSON format from UK councils that have no API to do so.
|
43
44
|
|
44
|
-
Why do this?
|
45
|
-
You might want to use this in
|
45
|
+
Why would you want to do this?
|
46
|
+
You might want to use this in Home Automation—for example, say you had an LED bar that lit up on the day of bin collection to the colour of the bin you want to take out; then this repo provides the data for that.
|
46
47
|
|
47
|
-
**PLEASE respect a councils infrastructure / usage policy and only collect data for your own personal use on a suitable frequency to your collection schedule.**
|
48
|
+
**PLEASE respect a councils' infrastructure / usage policy and only collect data for your own personal use on a suitable frequency to your collection schedule.**
|
48
49
|
|
49
50
|
Most scripts make use of [Beautiful Soup 4](https://pypi.org/project/beautifulsoup4/) to scrape data, although others use different approaches, such as emulating web browser behaviour, or reading data from CSV files.
|
50
51
|
|
@@ -59,12 +60,12 @@ Most scripts make use of [Beautiful Soup 4](https://pypi.org/project/beautifulso
|
|
59
60
|
If an issue already exists, please comment on that issue to express your interest. Please do not open a new issue, as it will be closed as a duplicate.
|
60
61
|
|
61
62
|
If an issue does not already exist, please fill in a new [Council Request](https://github.com/robbrad/UKBinCollectionData/issues/new/choose) form, including as much information as possible, including:
|
62
|
-
- Name of the council
|
63
|
-
- URL to bin collections
|
64
|
-
- An example postcode and/or UPRN (whichever is relevant)
|
65
|
-
- Any further information
|
63
|
+
- Name of the council.
|
64
|
+
- URL to bin collections.
|
65
|
+
- An example postcode and/or [UPRN](https://uprn.uk/) (whichever is relevant).
|
66
|
+
- Any further information.
|
66
67
|
|
67
|
-
Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council
|
68
|
+
Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council is added to this integration.
|
68
69
|
|
69
70
|
---
|
70
71
|
|
@@ -80,7 +81,7 @@ This integration can be installed directly via HACS. To install:
|
|
80
81
|
* [Add the repository](https://my.home-assistant.io/redirect/hacs_repository/?owner=robbrad&repository=UKBinCollectionData&category=integration) to your HACS installation
|
81
82
|
* Click `Download`
|
82
83
|
|
83
|
-
For details how setup the custom component integration see the [
|
84
|
+
For details on how to setup the custom component integration, see the [documentation](https://github.com/robbrad/UKBinCollectionData/tree/master/custom_components/uk_bin_collection).
|
84
85
|
|
85
86
|
#### Manual
|
86
87
|
1. Ensure you have [HACS](https://hacs.xyz/) installed
|
@@ -90,7 +91,7 @@ For details how setup the custom component integration see the [this documentati
|
|
90
91
|
1. Click `+ Add Integration` and search for and select `UK Bin Collection Data` then click `Download`.
|
91
92
|
1. Restart your Home Assistant.
|
92
93
|
1. In the Home Assistant UI go to `Settings` > `Devices & Services` click `+ Add Integration` and search for `UK Bin Collection Data`.
|
93
|
-
1. If
|
94
|
+
1. If you see a "URL of the remote Selenium web driver to use" field when setting up your council, you'll need to provide the URL to a web driver you've set up separately such as [standalone-chrome](https://hub.docker.com/r/selenium/standalone-chrome).
|
94
95
|
|
95
96
|
### Install manually
|
96
97
|
|
@@ -101,15 +102,15 @@ For details how setup the custom component integration see the [this documentati
|
|
101
102
|
1. In the Home Assistant UI go to `Settings` > `Devices & Services` click `+ Add Integration` and search for `UK Bin Collection Data`.
|
102
103
|
|
103
104
|
### Overriding the Bin Icon and Bin Colour
|
104
|
-
We realise it is difficult to set a colour from the councils text for the Bin Type and to keep the integration generic we
|
105
|
+
We realise it is difficult to set a colour from the councils text for the Bin Type and to keep the integration generic, we don't capture colour from a council (not all councils supply this as a field), only bin type and next collection date.
|
105
106
|
|
106
|
-
When you configure the
|
107
|
+
When you configure the component on the first screen, you can set a JSON string to map the bin type to the colour and icon
|
107
108
|
|
108
109
|
Here is an example to set the colour and icon for the type `Empty Standard General Waste`. This type is the type returned from the council for the bin. You can do this for multiple bins.
|
109
110
|
|
110
|
-
If you miss this on the first setup you can reconfigure it.
|
111
|
+
If you miss this on the first setup, you can reconfigure it.
|
111
112
|
|
112
|
-
```
|
113
|
+
```json
|
113
114
|
{
|
114
115
|
"Empty Standard General Waste":
|
115
116
|
{
|
@@ -147,7 +148,7 @@ where ```council_name``` is the name of the council's .py script (without the .p
|
|
147
148
|
The help documentation refers to these as "module" and "URL", respectively. Supported council scripts can be found in the `uk_bin_collection/uk_bin_collection/councils` folder.
|
148
149
|
|
149
150
|
Some scripts require additional parameters, for example, when a UPRN is not passed in a URL, or when the script is not scraping a web page.
|
150
|
-
For example, the Leeds City Council script needs two additional parameters
|
151
|
+
For example, the Leeds City Council script needs two additional parameters—a postcode, and a house number. This is done like so:
|
151
152
|
|
152
153
|
```commandline
|
153
154
|
python collect_data.py LeedsCityCouncil https://www.leeds.gov.uk/residents/bins-and-recycling/check-your-bin-day -p "LS1 2JG" -n 41
|
@@ -161,9 +162,8 @@ To check the parameters needed for your council's script, please check the [proj
|
|
161
162
|
|
162
163
|
|
163
164
|
### Project dependencies
|
164
|
-
Some scripts rely on external packages to function. A list of required scripts for both development and execution can be found in the project's [PROJECT_TOML](https://github.com/robbrad/UKBinCollectionData/blob/feature/%2353_integration_tests/pyproject.toml)
|
165
|
-
Install can be done via
|
166
|
-
`poetry install` from within the root of the repo.
|
165
|
+
Some scripts rely on external packages to function. A list of required scripts for both development and execution can be found in the project's [PROJECT_TOML](https://github.com/robbrad/UKBinCollectionData/blob/feature/%2353_integration_tests/pyproject.toml).
|
166
|
+
Install can be done via `poetry install` from within the root of the repo.
|
167
167
|
|
168
168
|
---
|
169
169
|
|
@@ -172,7 +172,7 @@ Some councils make use of the UPRN (Unique property reference number) to identif
|
|
172
172
|
|
173
173
|
---
|
174
174
|
## Selenium
|
175
|
-
Some councils need Selenium to run the scrape on behalf of Home Assistant. The easiest way to do this is run Selenium as in a Docker container. However you do this the Home Assistant server must be able to reach the Selenium server
|
175
|
+
Some councils need Selenium to run the scrape on behalf of Home Assistant. The easiest way to do this is run Selenium as in a Docker container. However that you do this, the Home Assistant server must be able to reach the Selenium server.
|
176
176
|
|
177
177
|
### Instructions for Windows, Linux, and Mac
|
178
178
|
|
@@ -182,7 +182,7 @@ Some councils need Selenium to run the scrape on behalf of Home Assistant. The e
|
|
182
182
|
|
183
183
|
1. **Download Docker Desktop for Windows:**
|
184
184
|
|
185
|
-
* Go to the Docker website: Docker Desktop for Windows
|
185
|
+
* Go to the Docker website: Docker Desktop for Windows.
|
186
186
|
* Download and install Docker Desktop.
|
187
187
|
2. **Run Docker Desktop:**
|
188
188
|
|
@@ -235,7 +235,7 @@ Some councils need Selenium to run the scrape on behalf of Home Assistant. The e
|
|
235
235
|
|
236
236
|
1. **Download Docker Desktop for Mac:**
|
237
237
|
|
238
|
-
* Go to the Docker website: Docker Desktop for Mac
|
238
|
+
* Go to the Docker website: Docker Desktop for Mac.
|
239
239
|
* Download and install Docker Desktop.
|
240
240
|
2. **Run Docker Desktop:**
|
241
241
|
|
@@ -253,7 +253,7 @@ Some councils need Selenium to run the scrape on behalf of Home Assistant. The e
|
|
253
253
|
docker pull selenium/standalone-chrome
|
254
254
|
```
|
255
255
|
|
256
|
-
|
256
|
+
3. **Run the Selenium Standalone Chrome container:**
|
257
257
|
|
258
258
|
```bash
|
259
259
|
docker run -d -p 4444:4444 --name selenium-chrome selenium/standalone-chrome
|
@@ -262,17 +262,17 @@ Some councils need Selenium to run the scrape on behalf of Home Assistant. The e
|
|
262
262
|
#### Step 3: Test the Selenium Server
|
263
263
|
|
264
264
|
1. **Navigate to the Selenium server URL in your web browser:**
|
265
|
-
* Open a web browser and go to `http://localhost:4444
|
265
|
+
* Open a web browser and go to `http://localhost:4444`.
|
266
266
|
* You should see the Selenium Grid console.
|
267
267
|
|
268
268
|
#### Step 4: Supply the Selenium Server URL to UKBinCollectionData
|
269
269
|
|
270
270
|
1. **Find the `UKBinCollectionData` project:**
|
271
271
|
|
272
|
-
* Go to the GitHub repository: [UKBinCollectionData](https://github.com/robbrad/UKBinCollectionData)
|
272
|
+
* Go to the GitHub repository: [UKBinCollectionData](https://github.com/robbrad/UKBinCollectionData).
|
273
273
|
2. **Supply the Selenium Server URL:**
|
274
274
|
|
275
|
-
* Typically, the URL will be `http://localhost:4444/wd/hub
|
275
|
+
* Typically, the URL will be `http://localhost:4444/wd/hub`.
|
276
276
|
* You might need to update a configuration file or environment variable in the project to use this URL. Check the project's documentation for specific instructions.
|
277
277
|
|
278
278
|
### Summary of Commands
|
@@ -297,7 +297,7 @@ This guide is based on a Raspberry Pi 4. Instructions for other systems may vary
|
|
297
297
|
|
298
298
|
#### Prerequisites
|
299
299
|
1. Install **Portainer** from Alex Belgium's add-on repository:
|
300
|
-
[
|
300
|
+
[alexbelgium/hassio-addons](https://github.com/alexbelgium/hassio-addons)
|
301
301
|
|
302
302
|
---
|
303
303
|
|
@@ -367,13 +367,13 @@ We have created an API for this located under [uk_bin_collection_api_server](htt
|
|
367
367
|
|
368
368
|
### Prerequisites
|
369
369
|
|
370
|
-
- Docker installed on your machine
|
371
|
-
- Python (if you plan to run the API locally without Docker)
|
370
|
+
- Docker installed on your machine.
|
371
|
+
- Python (if you plan to run the API locally without Docker).
|
372
372
|
|
373
373
|
### Running the API with Docker
|
374
374
|
|
375
375
|
1. Clone this repository.
|
376
|
-
2. Navigate to the uk_bin_collection_api_server directory of the project.
|
376
|
+
2. Navigate to the `uk_bin_collection_api_server` directory of the project.
|
377
377
|
|
378
378
|
#### Build the Docker Container
|
379
379
|
|
@@ -401,7 +401,7 @@ The API documentation can be accessed via the Swagger UI. Use the Swagger UI to
|
|
401
401
|
#### API Endpoints
|
402
402
|
`GET /bin_collection/{council}`
|
403
403
|
|
404
|
-
Description: Retrieves information about bin
|
404
|
+
Description: Retrieves information about bin collections for the specified council.
|
405
405
|
|
406
406
|
Parameters:
|
407
407
|
|
@@ -415,9 +415,9 @@ curl -X GET "http://localhost:8080/api/bin_collection/{council}" -H "accept: app
|
|
415
415
|
```
|
416
416
|
|
417
417
|
## Docker Compose
|
418
|
-
This includes the Selenium standalone-chrome for Selenium
|
418
|
+
This includes the Selenium standalone-chrome for Selenium-based councils.
|
419
419
|
|
420
|
-
```
|
420
|
+
```yaml
|
421
421
|
version: '3'
|
422
422
|
|
423
423
|
services:
|
@@ -447,8 +447,8 @@ docker-compose up
|
|
447
447
|
---
|
448
448
|
|
449
449
|
## FAQ
|
450
|
-
#### I've got an issue/support question
|
451
|
-
Please post in the [HomeAssistant thread](https://community.home-assistant.io/t/bin-waste-collection/55451) or raise a new (non
|
450
|
+
#### I've got an issue/support question—what do I do?
|
451
|
+
Please post in the [HomeAssistant thread](https://community.home-assistant.io/t/bin-waste-collection/55451) or raise a new (non-council request) [issue](https://github.com/robbrad/UKBinCollectionData/issues/new).
|
452
452
|
|
453
453
|
#### I'd like to contribute, where do I start?
|
454
454
|
Contributions are always welcome! See ```CONTRIBUTING.md``` to get started. Please adhere to the project's [code of conduct](https://github.com/robbrad/UKBinCollectionData/blob/master/CODE_OF_CONDUCT.md).
|
@@ -461,4 +461,3 @@ Contributions are always welcome! See ```CONTRIBUTING.md``` to get started. Plea
|
|
461
461
|
<img src="https://contrib.rocks/image?repo=robbrad/UKBinCollectionData" alt="Image of contributors"/>
|
462
462
|
</a>
|
463
463
|
|
464
|
-
|
@@ -18,10 +18,10 @@
|
|
18
18
|
# UK Bin Collection Data (UKBCD)
|
19
19
|
This project aims to provide a neat and standard way of providing bin collection data in JSON format from UK councils that have no API to do so.
|
20
20
|
|
21
|
-
Why do this?
|
22
|
-
You might want to use this in
|
21
|
+
Why would you want to do this?
|
22
|
+
You might want to use this in Home Automation—for example, say you had an LED bar that lit up on the day of bin collection to the colour of the bin you want to take out; then this repo provides the data for that.
|
23
23
|
|
24
|
-
**PLEASE respect a councils infrastructure / usage policy and only collect data for your own personal use on a suitable frequency to your collection schedule.**
|
24
|
+
**PLEASE respect a councils' infrastructure / usage policy and only collect data for your own personal use on a suitable frequency to your collection schedule.**
|
25
25
|
|
26
26
|
Most scripts make use of [Beautiful Soup 4](https://pypi.org/project/beautifulsoup4/) to scrape data, although others use different approaches, such as emulating web browser behaviour, or reading data from CSV files.
|
27
27
|
|
@@ -36,12 +36,12 @@ Most scripts make use of [Beautiful Soup 4](https://pypi.org/project/beautifulso
|
|
36
36
|
If an issue already exists, please comment on that issue to express your interest. Please do not open a new issue, as it will be closed as a duplicate.
|
37
37
|
|
38
38
|
If an issue does not already exist, please fill in a new [Council Request](https://github.com/robbrad/UKBinCollectionData/issues/new/choose) form, including as much information as possible, including:
|
39
|
-
- Name of the council
|
40
|
-
- URL to bin collections
|
41
|
-
- An example postcode and/or UPRN (whichever is relevant)
|
42
|
-
- Any further information
|
39
|
+
- Name of the council.
|
40
|
+
- URL to bin collections.
|
41
|
+
- An example postcode and/or [UPRN](https://uprn.uk/) (whichever is relevant).
|
42
|
+
- Any further information.
|
43
43
|
|
44
|
-
Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council
|
44
|
+
Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council is added to this integration.
|
45
45
|
|
46
46
|
---
|
47
47
|
|
@@ -57,7 +57,7 @@ This integration can be installed directly via HACS. To install:
|
|
57
57
|
* [Add the repository](https://my.home-assistant.io/redirect/hacs_repository/?owner=robbrad&repository=UKBinCollectionData&category=integration) to your HACS installation
|
58
58
|
* Click `Download`
|
59
59
|
|
60
|
-
For details how setup the custom component integration see the [
|
60
|
+
For details on how to setup the custom component integration, see the [documentation](https://github.com/robbrad/UKBinCollectionData/tree/master/custom_components/uk_bin_collection).
|
61
61
|
|
62
62
|
#### Manual
|
63
63
|
1. Ensure you have [HACS](https://hacs.xyz/) installed
|
@@ -67,7 +67,7 @@ For details how setup the custom component integration see the [this documentati
|
|
67
67
|
1. Click `+ Add Integration` and search for and select `UK Bin Collection Data` then click `Download`.
|
68
68
|
1. Restart your Home Assistant.
|
69
69
|
1. In the Home Assistant UI go to `Settings` > `Devices & Services` click `+ Add Integration` and search for `UK Bin Collection Data`.
|
70
|
-
1. If
|
70
|
+
1. If you see a "URL of the remote Selenium web driver to use" field when setting up your council, you'll need to provide the URL to a web driver you've set up separately such as [standalone-chrome](https://hub.docker.com/r/selenium/standalone-chrome).
|
71
71
|
|
72
72
|
### Install manually
|
73
73
|
|
@@ -78,15 +78,15 @@ For details how setup the custom component integration see the [this documentati
|
|
78
78
|
1. In the Home Assistant UI go to `Settings` > `Devices & Services` click `+ Add Integration` and search for `UK Bin Collection Data`.
|
79
79
|
|
80
80
|
### Overriding the Bin Icon and Bin Colour
|
81
|
-
We realise it is difficult to set a colour from the councils text for the Bin Type and to keep the integration generic we
|
81
|
+
We realise it is difficult to set a colour from the councils text for the Bin Type and to keep the integration generic, we don't capture colour from a council (not all councils supply this as a field), only bin type and next collection date.
|
82
82
|
|
83
|
-
When you configure the
|
83
|
+
When you configure the component on the first screen, you can set a JSON string to map the bin type to the colour and icon
|
84
84
|
|
85
85
|
Here is an example to set the colour and icon for the type `Empty Standard General Waste`. This type is the type returned from the council for the bin. You can do this for multiple bins.
|
86
86
|
|
87
|
-
If you miss this on the first setup you can reconfigure it.
|
87
|
+
If you miss this on the first setup, you can reconfigure it.
|
88
88
|
|
89
|
-
```
|
89
|
+
```json
|
90
90
|
{
|
91
91
|
"Empty Standard General Waste":
|
92
92
|
{
|
@@ -124,7 +124,7 @@ where ```council_name``` is the name of the council's .py script (without the .p
|
|
124
124
|
The help documentation refers to these as "module" and "URL", respectively. Supported council scripts can be found in the `uk_bin_collection/uk_bin_collection/councils` folder.
|
125
125
|
|
126
126
|
Some scripts require additional parameters, for example, when a UPRN is not passed in a URL, or when the script is not scraping a web page.
|
127
|
-
For example, the Leeds City Council script needs two additional parameters
|
127
|
+
For example, the Leeds City Council script needs two additional parameters—a postcode, and a house number. This is done like so:
|
128
128
|
|
129
129
|
```commandline
|
130
130
|
python collect_data.py LeedsCityCouncil https://www.leeds.gov.uk/residents/bins-and-recycling/check-your-bin-day -p "LS1 2JG" -n 41
|
@@ -138,9 +138,8 @@ To check the parameters needed for your council's script, please check the [proj
|
|
138
138
|
|
139
139
|
|
140
140
|
### Project dependencies
|
141
|
-
Some scripts rely on external packages to function. A list of required scripts for both development and execution can be found in the project's [PROJECT_TOML](https://github.com/robbrad/UKBinCollectionData/blob/feature/%2353_integration_tests/pyproject.toml)
|
142
|
-
Install can be done via
|
143
|
-
`poetry install` from within the root of the repo.
|
141
|
+
Some scripts rely on external packages to function. A list of required scripts for both development and execution can be found in the project's [PROJECT_TOML](https://github.com/robbrad/UKBinCollectionData/blob/feature/%2353_integration_tests/pyproject.toml).
|
142
|
+
Install can be done via `poetry install` from within the root of the repo.
|
144
143
|
|
145
144
|
---
|
146
145
|
|
@@ -149,7 +148,7 @@ Some councils make use of the UPRN (Unique property reference number) to identif
|
|
149
148
|
|
150
149
|
---
|
151
150
|
## Selenium
|
152
|
-
Some councils need Selenium to run the scrape on behalf of Home Assistant. The easiest way to do this is run Selenium as in a Docker container. However you do this the Home Assistant server must be able to reach the Selenium server
|
151
|
+
Some councils need Selenium to run the scrape on behalf of Home Assistant. The easiest way to do this is run Selenium as in a Docker container. However that you do this, the Home Assistant server must be able to reach the Selenium server.
|
153
152
|
|
154
153
|
### Instructions for Windows, Linux, and Mac
|
155
154
|
|
@@ -159,7 +158,7 @@ Some councils need Selenium to run the scrape on behalf of Home Assistant. The e
|
|
159
158
|
|
160
159
|
1. **Download Docker Desktop for Windows:**
|
161
160
|
|
162
|
-
* Go to the Docker website: Docker Desktop for Windows
|
161
|
+
* Go to the Docker website: Docker Desktop for Windows.
|
163
162
|
* Download and install Docker Desktop.
|
164
163
|
2. **Run Docker Desktop:**
|
165
164
|
|
@@ -212,7 +211,7 @@ Some councils need Selenium to run the scrape on behalf of Home Assistant. The e
|
|
212
211
|
|
213
212
|
1. **Download Docker Desktop for Mac:**
|
214
213
|
|
215
|
-
* Go to the Docker website: Docker Desktop for Mac
|
214
|
+
* Go to the Docker website: Docker Desktop for Mac.
|
216
215
|
* Download and install Docker Desktop.
|
217
216
|
2. **Run Docker Desktop:**
|
218
217
|
|
@@ -230,7 +229,7 @@ Some councils need Selenium to run the scrape on behalf of Home Assistant. The e
|
|
230
229
|
docker pull selenium/standalone-chrome
|
231
230
|
```
|
232
231
|
|
233
|
-
|
232
|
+
3. **Run the Selenium Standalone Chrome container:**
|
234
233
|
|
235
234
|
```bash
|
236
235
|
docker run -d -p 4444:4444 --name selenium-chrome selenium/standalone-chrome
|
@@ -239,17 +238,17 @@ Some councils need Selenium to run the scrape on behalf of Home Assistant. The e
|
|
239
238
|
#### Step 3: Test the Selenium Server
|
240
239
|
|
241
240
|
1. **Navigate to the Selenium server URL in your web browser:**
|
242
|
-
* Open a web browser and go to `http://localhost:4444
|
241
|
+
* Open a web browser and go to `http://localhost:4444`.
|
243
242
|
* You should see the Selenium Grid console.
|
244
243
|
|
245
244
|
#### Step 4: Supply the Selenium Server URL to UKBinCollectionData
|
246
245
|
|
247
246
|
1. **Find the `UKBinCollectionData` project:**
|
248
247
|
|
249
|
-
* Go to the GitHub repository: [UKBinCollectionData](https://github.com/robbrad/UKBinCollectionData)
|
248
|
+
* Go to the GitHub repository: [UKBinCollectionData](https://github.com/robbrad/UKBinCollectionData).
|
250
249
|
2. **Supply the Selenium Server URL:**
|
251
250
|
|
252
|
-
* Typically, the URL will be `http://localhost:4444/wd/hub
|
251
|
+
* Typically, the URL will be `http://localhost:4444/wd/hub`.
|
253
252
|
* You might need to update a configuration file or environment variable in the project to use this URL. Check the project's documentation for specific instructions.
|
254
253
|
|
255
254
|
### Summary of Commands
|
@@ -274,7 +273,7 @@ This guide is based on a Raspberry Pi 4. Instructions for other systems may vary
|
|
274
273
|
|
275
274
|
#### Prerequisites
|
276
275
|
1. Install **Portainer** from Alex Belgium's add-on repository:
|
277
|
-
[
|
276
|
+
[alexbelgium/hassio-addons](https://github.com/alexbelgium/hassio-addons)
|
278
277
|
|
279
278
|
---
|
280
279
|
|
@@ -344,13 +343,13 @@ We have created an API for this located under [uk_bin_collection_api_server](htt
|
|
344
343
|
|
345
344
|
### Prerequisites
|
346
345
|
|
347
|
-
- Docker installed on your machine
|
348
|
-
- Python (if you plan to run the API locally without Docker)
|
346
|
+
- Docker installed on your machine.
|
347
|
+
- Python (if you plan to run the API locally without Docker).
|
349
348
|
|
350
349
|
### Running the API with Docker
|
351
350
|
|
352
351
|
1. Clone this repository.
|
353
|
-
2. Navigate to the uk_bin_collection_api_server directory of the project.
|
352
|
+
2. Navigate to the `uk_bin_collection_api_server` directory of the project.
|
354
353
|
|
355
354
|
#### Build the Docker Container
|
356
355
|
|
@@ -378,7 +377,7 @@ The API documentation can be accessed via the Swagger UI. Use the Swagger UI to
|
|
378
377
|
#### API Endpoints
|
379
378
|
`GET /bin_collection/{council}`
|
380
379
|
|
381
|
-
Description: Retrieves information about bin
|
380
|
+
Description: Retrieves information about bin collections for the specified council.
|
382
381
|
|
383
382
|
Parameters:
|
384
383
|
|
@@ -392,9 +391,9 @@ curl -X GET "http://localhost:8080/api/bin_collection/{council}" -H "accept: app
|
|
392
391
|
```
|
393
392
|
|
394
393
|
## Docker Compose
|
395
|
-
This includes the Selenium standalone-chrome for Selenium
|
394
|
+
This includes the Selenium standalone-chrome for Selenium-based councils.
|
396
395
|
|
397
|
-
```
|
396
|
+
```yaml
|
398
397
|
version: '3'
|
399
398
|
|
400
399
|
services:
|
@@ -424,8 +423,8 @@ docker-compose up
|
|
424
423
|
---
|
425
424
|
|
426
425
|
## FAQ
|
427
|
-
#### I've got an issue/support question
|
428
|
-
Please post in the [HomeAssistant thread](https://community.home-assistant.io/t/bin-waste-collection/55451) or raise a new (non
|
426
|
+
#### I've got an issue/support question—what do I do?
|
427
|
+
Please post in the [HomeAssistant thread](https://community.home-assistant.io/t/bin-waste-collection/55451) or raise a new (non-council request) [issue](https://github.com/robbrad/UKBinCollectionData/issues/new).
|
429
428
|
|
430
429
|
#### I'd like to contribute, where do I start?
|
431
430
|
Contributions are always welcome! See ```CONTRIBUTING.md``` to get started. Please adhere to the project's [code of conduct](https://github.com/robbrad/UKBinCollectionData/blob/master/CODE_OF_CONDUCT.md).
|
@@ -437,4 +436,3 @@ Contributions are always welcome! See ```CONTRIBUTING.md``` to get started. Plea
|
|
437
436
|
<a href="https://github.com/robbrad/UKBinCollectionData/graphs/contributors">
|
438
437
|
<img src="https://contrib.rocks/image?repo=robbrad/UKBinCollectionData" alt="Image of contributors"/>
|
439
438
|
</a>
|
440
|
-
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "uk_bin_collection"
|
3
|
-
version = "0.
|
3
|
+
version = "0.138.0"
|
4
4
|
description = "Python Lib to collect UK Bin Data"
|
5
5
|
readme = "README.md"
|
6
6
|
authors = ["Robert Bradley <robbrad182@gmail.com>"]
|
@@ -62,6 +62,7 @@ lxml = "*"
|
|
62
62
|
urllib3 = "*"
|
63
63
|
webdriver-manager = "^4.0.1"
|
64
64
|
tabulate = "^0.9.0"
|
65
|
+
ics = "^0.7.2"
|
65
66
|
|
66
67
|
[tool.commitizen]
|
67
68
|
major_version_zero = true
|
@@ -800,6 +800,13 @@
|
|
800
800
|
"wiki_name": "Forest of Dean District Council",
|
801
801
|
"wiki_note": "Pass the full address in the house number and postcode parameters. This parser requires a Selenium webdriver."
|
802
802
|
},
|
803
|
+
"FyldeCouncil": {
|
804
|
+
"uprn": "100010402452",
|
805
|
+
"url": "https://www.fylde.gov.uk",
|
806
|
+
"wiki_command_url_override": "https://www.fylde.gov.uk",
|
807
|
+
"wiki_name": "Fylde Council",
|
808
|
+
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
809
|
+
},
|
803
810
|
"GatesheadCouncil": {
|
804
811
|
"house_number": "Bracken Cottage",
|
805
812
|
"postcode": "NE16 5LQ",
|
@@ -832,7 +839,13 @@
|
|
832
839
|
"wiki_name": "Gloucester City Council",
|
833
840
|
"wiki_note": "Pass the house number, postcode, and UPRN in their respective parameters. This parser requires a Selenium webdriver."
|
834
841
|
},
|
835
|
-
"
|
842
|
+
"GooglePublicCalendarCouncil": {
|
843
|
+
"wiki_name": "Google Calendar (Public)",
|
844
|
+
"url": "https://calendar.google.com/calendar/ical/c_bca6c975545213622b3958bddab567e1e7398709c63e377b6fe9a9140bd1caf8%40group.calendar.google.com/public/basic.ics",
|
845
|
+
"skip_get_url": true,
|
846
|
+
"wiki_note": "The URL should be the public ics file URL for the public Google calendar. See https://support.google.com/calendar/answer/37083?sjid=7202815583021446882-EU. Councils that currently need this are Trafford."
|
847
|
+
},
|
848
|
+
"GraveshamBoroughCouncil": {
|
836
849
|
"skip_get_url": true,
|
837
850
|
"uprn": "100060927046",
|
838
851
|
"url": "https://www.gravesham.gov.uk",
|
@@ -905,6 +918,13 @@
|
|
905
918
|
"wiki_name": "Hartlepool Borough Council",
|
906
919
|
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find your UPRN."
|
907
920
|
},
|
921
|
+
"HastingsBoroughCouncil": {
|
922
|
+
"uprn": "100060038877",
|
923
|
+
"url": "https://www.hastings.gov.uk",
|
924
|
+
"wiki_command_url_override": "https://www.hastings.gov.uk",
|
925
|
+
"wiki_name": "Hastings Borough Council",
|
926
|
+
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
927
|
+
},
|
908
928
|
"HerefordshireCouncil": {
|
909
929
|
"url": "https://www.herefordshire.gov.uk/rubbish-recycling/check-bin-collection-day?blpu_uprn=10096232662",
|
910
930
|
"wiki_command_url_override": "https://www.herefordshire.gov.uk/rubbish-recycling/check-bin-collection-day?blpu_uprn=XXXXXXXXXXXX",
|
@@ -0,0 +1,92 @@
|
|
1
|
+
import re
|
2
|
+
import urllib.parse
|
3
|
+
|
4
|
+
import requests
|
5
|
+
from bs4 import BeautifulSoup, Tag
|
6
|
+
|
7
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
8
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
9
|
+
|
10
|
+
|
11
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
12
|
+
class CouncilClass(AbstractGetBinDataClass):
|
13
|
+
"""
|
14
|
+
Concrete classes have to implement all abstract operations of the
|
15
|
+
base class. They can also override some operations with a default
|
16
|
+
implementation.
|
17
|
+
"""
|
18
|
+
|
19
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
20
|
+
|
21
|
+
user_uprn = kwargs.get("uprn")
|
22
|
+
check_uprn(user_uprn)
|
23
|
+
bindata = {"bins": []}
|
24
|
+
|
25
|
+
URI = "https://fylde.gov.uk/resident/bins-recycling-and-rubbish/bin-collection-day"
|
26
|
+
|
27
|
+
# Make the GET request
|
28
|
+
session = requests.Session()
|
29
|
+
response = session.get(URI)
|
30
|
+
response.raise_for_status()
|
31
|
+
|
32
|
+
soup: BeautifulSoup = BeautifulSoup(response.text, "html.parser")
|
33
|
+
iframe = soup.find("iframe", id="bartec-iframe")
|
34
|
+
if not iframe or not isinstance(iframe, Tag):
|
35
|
+
raise Exception("Unexpected response from fylde.gov.uk")
|
36
|
+
|
37
|
+
search_res = re.search(r"(?<=Token=)(.*?)(?=&|$)", str(iframe["src"]))
|
38
|
+
if search_res is None:
|
39
|
+
raise Exception("Token could not be extracted from fylde.gov.uk")
|
40
|
+
token = search_res.group(1)
|
41
|
+
|
42
|
+
if not token:
|
43
|
+
raise Exception("Token could not be extracted from fylde.gov.uk")
|
44
|
+
|
45
|
+
token = urllib.parse.unquote(token)
|
46
|
+
|
47
|
+
parameters = {
|
48
|
+
"Method": "calendareventsfromtoken",
|
49
|
+
"Token": token,
|
50
|
+
"UPRN": user_uprn,
|
51
|
+
}
|
52
|
+
|
53
|
+
API_URL = "https://collectiveview.bartec-systems.com/R152"
|
54
|
+
API_METHOD = "GetData.ashx"
|
55
|
+
|
56
|
+
response = session.get(f"{API_URL}/{API_METHOD}", params=parameters)
|
57
|
+
response.raise_for_status()
|
58
|
+
|
59
|
+
# Parse the JSON response
|
60
|
+
bin_collection = response.json()
|
61
|
+
if not (len(bin_collection) > 0 and "title" in bin_collection[0]):
|
62
|
+
raise Exception("Unexpected response from fylde.gov.uk API")
|
63
|
+
|
64
|
+
today = datetime.now()
|
65
|
+
|
66
|
+
REGEX_JOB_NAME = r"(?i)Empty Bin\s+(?P<bin_type>\S+(?:\s+\S+)?)"
|
67
|
+
# Loop through each collection in bin_collection
|
68
|
+
for collection in bin_collection:
|
69
|
+
bin_type = (
|
70
|
+
re.search(REGEX_JOB_NAME, collection["title"])
|
71
|
+
.group("bin_type")
|
72
|
+
.strip()
|
73
|
+
.title()
|
74
|
+
)
|
75
|
+
collection_date = datetime.fromtimestamp(
|
76
|
+
int(collection["start"][6:-2]) / 1000
|
77
|
+
)
|
78
|
+
|
79
|
+
if collection_date < today:
|
80
|
+
continue
|
81
|
+
|
82
|
+
dict_data = {
|
83
|
+
"type": bin_type,
|
84
|
+
"collectionDate": collection_date.strftime("%d/%m/%Y"),
|
85
|
+
}
|
86
|
+
bindata["bins"].append(dict_data)
|
87
|
+
|
88
|
+
bindata["bins"].sort(
|
89
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
|
90
|
+
)
|
91
|
+
|
92
|
+
return bindata
|
@@ -42,13 +42,6 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
42
42
|
)
|
43
43
|
cookies_button.click()
|
44
44
|
|
45
|
-
without_login_button = WebDriverWait(driver, timeout=15).until(
|
46
|
-
EC.presence_of_element_located(
|
47
|
-
(By.LINK_TEXT, "or, Continue with no account")
|
48
|
-
)
|
49
|
-
)
|
50
|
-
without_login_button.click()
|
51
|
-
|
52
45
|
iframe_presense = WebDriverWait(driver, 30).until(
|
53
46
|
EC.presence_of_element_located((By.ID, "fillform-frame-1"))
|
54
47
|
)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
from datetime import datetime
|
2
|
+
from typing import Any
|
3
|
+
import requests
|
4
|
+
from ics import Calendar
|
5
|
+
|
6
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
7
|
+
from uk_bin_collection.uk_bin_collection.common import date_format
|
8
|
+
|
9
|
+
|
10
|
+
class CouncilClass(AbstractGetBinDataClass):
|
11
|
+
def parse_data(self, page: str, **kwargs: Any) -> dict:
|
12
|
+
ics_url: str = kwargs.get("url")
|
13
|
+
|
14
|
+
if not ics_url:
|
15
|
+
raise ValueError("Missing required argument: google_calendar_ics_url")
|
16
|
+
|
17
|
+
response = requests.get(ics_url)
|
18
|
+
response.raise_for_status()
|
19
|
+
|
20
|
+
calendar = Calendar(response.text)
|
21
|
+
bindata = {"bins": []}
|
22
|
+
|
23
|
+
for event in calendar.events:
|
24
|
+
if not event.name or not event.begin:
|
25
|
+
continue
|
26
|
+
|
27
|
+
try:
|
28
|
+
# .begin is a datetime-like object (Arrow)
|
29
|
+
collection_date = event.begin.date().strftime(date_format)
|
30
|
+
except Exception:
|
31
|
+
continue
|
32
|
+
|
33
|
+
bindata["bins"].append({
|
34
|
+
"type": event.name,
|
35
|
+
"collectionDate": collection_date
|
36
|
+
})
|
37
|
+
|
38
|
+
return bindata
|