uk_bin_collection 0.144.4__tar.gz → 0.146.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.144.4 → uk_bin_collection-0.146.0}/PKG-INFO +1 -1
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/pyproject.toml +1 -1
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/map.html +33 -23
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/check_selenium_url_in_input.json.py +15 -8
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/input.json +32 -1
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/common.py +10 -6
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/GooglePublicCalendarCouncil.py +6 -4
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/GreatYarmouthBoroughCouncil.py +23 -13
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +40 -13
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MidUlsterDistrictCouncil.py +17 -13
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +1 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/LICENSE +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/README.md +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/Local_Authority_Boundaries.geojson +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/README.rst +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/features/environment.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/output.schema +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/test_conftest.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/test_get_data.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/AmberValleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BaberghDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BarkingDagenham.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BlaenauGwentCountyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BolsoverCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BostonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BraintreeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BrecklandCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BrentCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BroadlandDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BromsgroveDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BurnleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CambridgeCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CeredigionCountyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CheltenhamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CherwellDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CopelandBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CotswoldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CoventryCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CumberlandAllerdaleCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/CumberlandCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DenbighshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DerbyCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DudleyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DundeeCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastHertsCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastLothianCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastStaffordshireBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EdinburghCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/EpsomandEwellBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ExeterCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/FifeCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/FlintshireCountyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/FolkstoneandHytheDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/FyldeCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/GraveshamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/GwyneddCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HackneyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HarboroughDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HartDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HartlepoolBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HastingsBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HerefordshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/Hillingdon.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/IpswichBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/KingsLynnandWestNorfolkBC.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LeicesterCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LichfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LincolnCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHarrow.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHavering.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLewisham.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughOfRichmondUponThames.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MedwayCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MidDevonCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MiddlesbroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MonmouthshireCountyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/MorayCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleUnderLymeCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthDevonCountyCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthHertfordshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/NuneatonBedworthBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/OadbyAndWigstonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/OxfordCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/PerthAndKinrossCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/PeterboroughCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/PlymouthCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/PowysCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RedcarandClevelandCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RedditchBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RotherDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RoyalBoroughofGreenwich.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RunnymedeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SandwellBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SeftonCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthHamsDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthHollandDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthStaffordshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthamptonCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SpelthorneBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StevenageBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StirlingCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StocktonOnTeesCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SurreyHeathBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/SwindonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ThanetDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ThurrockCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/TunbridgeWellsCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WandsworthCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WestDunbartonshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WestLancashireBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WestOxfordshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WirralCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WolverhamptonCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WorcesterCityCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/WyreForestDistrictCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
- {uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/uk_bin_collection/get_bin_data.py +0 -0
@@ -37,23 +37,37 @@
|
|
37
37
|
const coveredLADs = new Set();
|
38
38
|
const integrationByLAD24CD = {};
|
39
39
|
|
40
|
-
for (const entry of Object.
|
41
|
-
const
|
42
|
-
const
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
40
|
+
for (const [moduleName, entry] of Object.entries(integrationData)) {
|
41
|
+
const wikiName = entry.wiki_name || moduleName;
|
42
|
+
const wikiUrl = `https://github.com/robbrad/UKBinCollectionData/wiki/Councils#${slugify(wikiName)}`;
|
43
|
+
|
44
|
+
// Case 1: Direct LAD24CD
|
45
|
+
if (entry.LAD24CD) {
|
46
|
+
const code = entry.LAD24CD?.replace(/[^\x20-\x7E]/g, '').trim();
|
47
|
+
if (code) {
|
48
|
+
coveredLADs.add(code);
|
49
|
+
integrationByLAD24CD[code] = { wiki_name: wikiName, url: wikiUrl };
|
50
|
+
} else {
|
51
|
+
console.warn("⚠️ Entry with bad LAD24CD:", moduleName, entry);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
// Case 2: Shared modules with multiple LADs
|
56
|
+
if (Array.isArray(entry.supported_councils_LAD24CD)) {
|
57
|
+
for (const codeRaw of entry.supported_councils_LAD24CD) {
|
58
|
+
const code = codeRaw?.replace(/[^\x20-\x7E]/g, '').trim();
|
59
|
+
if (code) {
|
60
|
+
coveredLADs.add(code);
|
61
|
+
// Only overwrite if not already present (prefer specific match)
|
62
|
+
if (!integrationByLAD24CD[code]) {
|
63
|
+
integrationByLAD24CD[code] = { wiki_name: wikiName, url: wikiUrl };
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
52
67
|
}
|
53
68
|
}
|
54
69
|
|
55
|
-
console.log("
|
56
|
-
console.log("📦 Final set of covered LADs:", [...coveredLADs]);
|
70
|
+
console.log("📦 Final covered LADs:", [...coveredLADs]);
|
57
71
|
|
58
72
|
return fetch('Local_Authority_Boundaries.geojson')
|
59
73
|
.then(res => res.json())
|
@@ -74,7 +88,6 @@
|
|
74
88
|
const name = feature.properties.LAD24NM;
|
75
89
|
const covered = coveredLADs.has(code);
|
76
90
|
|
77
|
-
console.log("🌍 GeoJSON Feature:", code, name);
|
78
91
|
if (!code) console.warn("⚠️ Missing LAD24CD in GeoJSON feature:", feature);
|
79
92
|
if (!covered && code) console.warn("❌ Not covered LAD:", code, name);
|
80
93
|
|
@@ -90,14 +103,11 @@
|
|
90
103
|
}
|
91
104
|
}).addTo(map);
|
92
105
|
|
93
|
-
//
|
94
|
-
const missing =
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
missing.push(`${code} - ${f.properties.LAD24NM}`);
|
99
|
-
}
|
100
|
-
});
|
106
|
+
// Debug missing LADs
|
107
|
+
const missing = geojson.features
|
108
|
+
.map(f => [f.properties.LAD24CD?.trim(), f.properties.LAD24NM])
|
109
|
+
.filter(([code]) => !coveredLADs.has(code))
|
110
|
+
.map(([code, name]) => `${code} - ${name}`);
|
101
111
|
console.warn("🛠️ Missing LADs in input.json:", missing);
|
102
112
|
});
|
103
113
|
})
|
@@ -23,10 +23,14 @@ def get_council_files(repo, branch):
|
|
23
23
|
name = item["name"]
|
24
24
|
if name.endswith(".py"):
|
25
25
|
council_name = name.replace(".py", "")
|
26
|
-
councils[council_name] = item[
|
26
|
+
councils[council_name] = item[
|
27
|
+
"url"
|
28
|
+
] # 'url' gives API-based content URL
|
27
29
|
return councils
|
28
30
|
else:
|
29
|
-
raise ValueError(
|
31
|
+
raise ValueError(
|
32
|
+
"Expected a list from the GitHub response but got something else."
|
33
|
+
)
|
30
34
|
else:
|
31
35
|
print(f"Failed to fetch councils from files: {response.content}")
|
32
36
|
return {}
|
@@ -39,7 +43,9 @@ def get_council_file_content(api_url):
|
|
39
43
|
We'll use the latter, decode base64, and return the text.
|
40
44
|
"""
|
41
45
|
# Example: https://api.github.com/repos/robbrad/UKBinCollectionData/contents/...
|
42
|
-
response = requests.get(
|
46
|
+
response = requests.get(
|
47
|
+
api_url, headers={"Accept": "application/vnd.github.v3+json"}
|
48
|
+
)
|
43
49
|
if response.status_code == 200:
|
44
50
|
file_json = response.json()
|
45
51
|
# file_json["content"] is base64-encoded
|
@@ -82,8 +88,8 @@ def council_needs_update(council_name, json_data, council_file_content):
|
|
82
88
|
# If the council isn't in the JSON at all, we can't do the check
|
83
89
|
# (or we assume no JSON data => no web_driver?).
|
84
90
|
council_data = json_data.get(council_name, {})
|
85
|
-
web_driver_missing =
|
86
|
-
create_webdriver_present =
|
91
|
+
web_driver_missing = "web_driver" not in council_data
|
92
|
+
create_webdriver_present = "create_webdriver" in council_file_content
|
87
93
|
|
88
94
|
return web_driver_missing and create_webdriver_present
|
89
95
|
|
@@ -165,20 +171,21 @@ def main(repo="robbrad/UKBinCollectionData", branch="master"):
|
|
165
171
|
# 4) Print results
|
166
172
|
table_data = []
|
167
173
|
headers = ["Council Name", "In Files", "In JSON", "Needs Update?", "Discrepancies"]
|
174
|
+
|
168
175
|
# Sort councils so that ones with the highest discrepancy or update appear first
|
169
176
|
# Then alphabetical if tie:
|
170
177
|
def sort_key(item):
|
171
178
|
# item is (council_name, data_dict)
|
172
179
|
return (
|
173
|
-
item[1]["needs_update"],
|
180
|
+
item[1]["needs_update"], # sort by needs_update (False < True)
|
174
181
|
item[1]["discrepancies_count"], # then by discrepancies
|
175
|
-
item[0],
|
182
|
+
item[0], # then by name
|
176
183
|
)
|
177
184
|
|
178
185
|
# We'll sort descending for "needs_update", so invert the boolean or reverse later
|
179
186
|
sorted_councils = sorted(
|
180
187
|
all_councils_data.items(),
|
181
|
-
key=lambda x: (not x[1]["needs_update"], x[1]["discrepancies_count"], x[0])
|
188
|
+
key=lambda x: (not x[1]["needs_update"], x[1]["discrepancies_count"], x[0]),
|
182
189
|
)
|
183
190
|
|
184
191
|
for council, presence in sorted_councils:
|
@@ -983,7 +983,38 @@
|
|
983
983
|
"GooglePublicCalendarCouncil": {
|
984
984
|
"url": "https://calendar.google.com/calendar/ical/0d775884b4db6a7bae5204f06dae113c1a36e505b25991ebc27c6bd42edf5b5e%40group.calendar.google.com/public/basic.ics",
|
985
985
|
"wiki_name": "Google Calendar (Public)",
|
986
|
-
"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."
|
986
|
+
"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.",
|
987
|
+
"supported_councils": [
|
988
|
+
"TraffordCouncil",
|
989
|
+
"ClackmannanshireCouncil",
|
990
|
+
"HavantBoroughCouncil",
|
991
|
+
"NorthWarwickshireBoroughCouncil",
|
992
|
+
"NewryMourneAndDownDistrictCouncil",
|
993
|
+
"EastDunbartonshireCouncil",
|
994
|
+
"PendleBoroughCouncil",
|
995
|
+
"TorfaenCountyBoroughCouncil",
|
996
|
+
"EastHampshireCountyCouncil",
|
997
|
+
"RibbleValleyCouncil",
|
998
|
+
"BrentwoodBoroughCouncil",
|
999
|
+
"IsleOfWightCouncil",
|
1000
|
+
"WestmorlAndFurnessCouncil",
|
1001
|
+
"DerryAndStrabaneDistrictCouncil",
|
1002
|
+
"NorwichCityCouncil"
|
1003
|
+
],
|
1004
|
+
"supported_councils_LAD24CD": [
|
1005
|
+
"E06000046",
|
1006
|
+
"E07000068",
|
1007
|
+
"E07000085",
|
1008
|
+
"E07000090",
|
1009
|
+
"E07000124",
|
1010
|
+
"E07000218",
|
1011
|
+
"E08000009",
|
1012
|
+
"N09000005",
|
1013
|
+
"N09000010",
|
1014
|
+
"S12000005",
|
1015
|
+
"S12000045",
|
1016
|
+
"W06000020"
|
1017
|
+
]
|
987
1018
|
},
|
988
1019
|
"GraveshamBoroughCouncil": {
|
989
1020
|
"skip_get_url": true,
|
@@ -177,7 +177,11 @@ def is_working_day(date_to_check: datetime, region: Region = Region.ENG) -> bool
|
|
177
177
|
:param region: The UK nation to check. Defaults to ENG.
|
178
178
|
:return: Bool - true if a working day (non-holiday, Mon-Fri).
|
179
179
|
"""
|
180
|
-
return
|
180
|
+
return (
|
181
|
+
False
|
182
|
+
if is_holiday(date_to_check, region) or is_weekend(date_to_check)
|
183
|
+
else True
|
184
|
+
)
|
181
185
|
|
182
186
|
|
183
187
|
def get_next_working_day(date: datetime, region: Region = Region.ENG) -> datetime:
|
@@ -232,7 +236,7 @@ def get_next_occurrence_from_day_month(date: datetime) -> datetime:
|
|
232
236
|
|
233
237
|
# Check if the target date has already occurred this year
|
234
238
|
if (target_month < current_month) or (
|
235
|
-
|
239
|
+
target_month == current_month and target_day < current_day
|
236
240
|
):
|
237
241
|
date = pd.to_datetime(date) + pd.DateOffset(years=1)
|
238
242
|
|
@@ -315,10 +319,10 @@ def contains_date(string, fuzzy=False) -> bool:
|
|
315
319
|
|
316
320
|
|
317
321
|
def create_webdriver(
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
+
web_driver: str = None,
|
323
|
+
headless: bool = True,
|
324
|
+
user_agent: str = None,
|
325
|
+
session_name: str = None,
|
322
326
|
) -> webdriver.Chrome:
|
323
327
|
"""
|
324
328
|
Create and return a Chrome WebDriver configured for optional headless operation.
|
@@ -29,9 +29,11 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
29
29
|
if not event.summary or not event.start:
|
30
30
|
continue
|
31
31
|
|
32
|
-
bindata["bins"].append(
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
bindata["bins"].append(
|
33
|
+
{
|
34
|
+
"type": event.summary,
|
35
|
+
"collectionDate": event.start.date().strftime(date_format),
|
36
|
+
}
|
37
|
+
)
|
36
38
|
|
37
39
|
return bindata
|
@@ -10,6 +10,7 @@ from datetime import datetime
|
|
10
10
|
from uk_bin_collection.uk_bin_collection.common import *
|
11
11
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
12
12
|
|
13
|
+
|
13
14
|
# import the wonderful Beautiful Soup and the URL grabber
|
14
15
|
class CouncilClass(AbstractGetBinDataClass):
|
15
16
|
"""
|
@@ -31,7 +32,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
31
32
|
check_postcode(user_postcode)
|
32
33
|
|
33
34
|
driver = create_webdriver(web_driver, headless, None, __name__)
|
34
|
-
|
35
|
+
|
35
36
|
driver.get(url)
|
36
37
|
|
37
38
|
wait = WebDriverWait(driver, 10)
|
@@ -78,19 +79,23 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
78
79
|
time.sleep(5)
|
79
80
|
# Wait for the specified div to be present
|
80
81
|
target_div = WebDriverWait(driver, 10).until(
|
81
|
-
EC.presence_of_element_located(
|
82
|
+
EC.presence_of_element_located(
|
83
|
+
(By.ID, "WASTECOLLECTIONCALENDARV2_LOOKUP_SHOWSCHEDULE")
|
84
|
+
)
|
82
85
|
)
|
83
86
|
|
84
87
|
soup = BeautifulSoup(driver.page_source, "html.parser")
|
85
88
|
|
86
89
|
bin_data = {"bins": []}
|
87
|
-
next_collections =
|
90
|
+
next_collections = (
|
91
|
+
{}
|
92
|
+
) # Dictionary to store the next collection for each bin type
|
88
93
|
|
89
94
|
bin_types = {
|
90
95
|
"bulky": "Bulky Collection",
|
91
96
|
"green": "Recycling",
|
92
97
|
"black": "General Waste",
|
93
|
-
"brown": "Garden Waste"
|
98
|
+
"brown": "Garden Waste",
|
94
99
|
}
|
95
100
|
|
96
101
|
for div in soup.select(".collection-area"):
|
@@ -108,21 +113,26 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
108
113
|
|
109
114
|
# Determine bin type from alt or description
|
110
115
|
description = detail.get_text(separator=" ", strip=True).lower()
|
111
|
-
alt_text = img[
|
116
|
+
alt_text = img["alt"].lower()
|
112
117
|
|
113
118
|
for key, name in bin_types.items():
|
114
119
|
if key in alt_text or key in description:
|
115
120
|
# Format date as dd/mm/yyyy
|
116
121
|
formatted_date = date_obj.strftime("%d/%m/%Y")
|
117
|
-
bin_entry = {
|
118
|
-
|
119
|
-
"collectionDate": formatted_date
|
120
|
-
}
|
121
|
-
|
122
|
+
bin_entry = {"type": name, "collectionDate": formatted_date}
|
123
|
+
|
122
124
|
# Only keep the earliest date for each bin type
|
123
|
-
if
|
125
|
+
if (
|
126
|
+
name not in next_collections
|
127
|
+
or date_obj
|
128
|
+
< datetime.strptime(
|
129
|
+
next_collections[name]["collectionDate"], "%d/%m/%Y"
|
130
|
+
)
|
131
|
+
):
|
124
132
|
next_collections[name] = bin_entry
|
125
|
-
print(
|
133
|
+
print(
|
134
|
+
f"Found next collection for {name}: {formatted_date}"
|
135
|
+
) # Debug output
|
126
136
|
break
|
127
137
|
|
128
138
|
# Add the next collections to the bin_data
|
@@ -134,7 +144,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
134
144
|
finally:
|
135
145
|
if driver:
|
136
146
|
driver.quit()
|
137
|
-
|
147
|
+
|
138
148
|
print("\nFinal bin data:")
|
139
149
|
print(bin_data) # Debug output
|
140
150
|
return bin_data
|
@@ -26,12 +26,19 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
26
26
|
driver = create_webdriver(web_driver, headless, None, __name__)
|
27
27
|
driver.set_window_size(1920, 1080) # 👈 ensure full viewport
|
28
28
|
|
29
|
-
driver.get(
|
29
|
+
driver.get(
|
30
|
+
"https://www.knowsley.gov.uk/bins-waste-and-recycling/your-household-bins/putting-your-bins-out"
|
31
|
+
)
|
30
32
|
|
31
33
|
# Dismiss cookie popup if it exists
|
32
34
|
try:
|
33
35
|
accept_cookies = WebDriverWait(driver, 10).until(
|
34
|
-
EC.element_to_be_clickable(
|
36
|
+
EC.element_to_be_clickable(
|
37
|
+
(
|
38
|
+
By.XPATH,
|
39
|
+
"//a[contains(@class, 'agree-button') and contains(text(), 'Accept all cookies')]",
|
40
|
+
)
|
41
|
+
)
|
35
42
|
)
|
36
43
|
accept_cookies.click()
|
37
44
|
time.sleep(1)
|
@@ -41,7 +48,10 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
41
48
|
# Step 1: Click "Search by postcode"
|
42
49
|
search_btn = WebDriverWait(driver, 60).until(
|
43
50
|
EC.element_to_be_clickable(
|
44
|
-
(
|
51
|
+
(
|
52
|
+
By.XPATH,
|
53
|
+
"//a[contains(text(), 'Search by postcode to find out when your bins are emptied')]",
|
54
|
+
)
|
45
55
|
)
|
46
56
|
)
|
47
57
|
search_btn.send_keys(Keys.RETURN)
|
@@ -49,14 +59,20 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
49
59
|
# Step 2: Enter postcode
|
50
60
|
postcode_box = WebDriverWait(driver, 60).until(
|
51
61
|
EC.presence_of_element_located(
|
52
|
-
(
|
62
|
+
(
|
63
|
+
By.XPATH,
|
64
|
+
"//label[contains(text(), 'Please enter the post code')]/following-sibling::input",
|
65
|
+
)
|
53
66
|
)
|
54
67
|
)
|
55
68
|
postcode_box.send_keys(user_postcode)
|
56
69
|
|
57
70
|
postcode_search_btn = WebDriverWait(driver, 60).until(
|
58
71
|
EC.element_to_be_clickable(
|
59
|
-
(
|
72
|
+
(
|
73
|
+
By.XPATH,
|
74
|
+
"//label[contains(text(), 'Please enter the post code')]/parent::div/following-sibling::button",
|
75
|
+
)
|
60
76
|
)
|
61
77
|
)
|
62
78
|
postcode_search_btn.send_keys(Keys.RETURN)
|
@@ -64,7 +80,10 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
64
80
|
# Step 3: Select address from results
|
65
81
|
address_selection_button = WebDriverWait(driver, 60).until(
|
66
82
|
EC.element_to_be_clickable(
|
67
|
-
(
|
83
|
+
(
|
84
|
+
By.XPATH,
|
85
|
+
f"//span[contains(text(), '{user_paon}')]/ancestor::li//button",
|
86
|
+
)
|
68
87
|
)
|
69
88
|
)
|
70
89
|
address_selection_button.send_keys(Keys.RETURN)
|
@@ -77,9 +96,13 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
77
96
|
)
|
78
97
|
|
79
98
|
bin_info_container = driver.find_element(
|
80
|
-
By.XPATH,
|
99
|
+
By.XPATH,
|
100
|
+
"//label[contains(text(), 'collection')]/ancestor::div[contains(@class, 'mx-dataview-content')]",
|
101
|
+
)
|
81
102
|
|
82
|
-
soup = BeautifulSoup(
|
103
|
+
soup = BeautifulSoup(
|
104
|
+
bin_info_container.get_attribute("innerHTML"), "html.parser"
|
105
|
+
)
|
83
106
|
|
84
107
|
for group in soup.find_all("div", class_="form-group"):
|
85
108
|
label = group.find("label")
|
@@ -93,14 +116,18 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
93
116
|
if "bin next collection date" in label_text.lower():
|
94
117
|
bin_type = label_text.split(" bin")[0]
|
95
118
|
try:
|
96
|
-
collection_date = datetime.strptime(
|
119
|
+
collection_date = datetime.strptime(
|
120
|
+
value_text, "%A %d/%m/%Y"
|
121
|
+
).strftime("%d/%m/%Y")
|
97
122
|
except ValueError:
|
98
123
|
continue
|
99
124
|
|
100
|
-
bindata["bins"].append(
|
101
|
-
|
102
|
-
|
103
|
-
|
125
|
+
bindata["bins"].append(
|
126
|
+
{
|
127
|
+
"type": bin_type,
|
128
|
+
"collectionDate": collection_date,
|
129
|
+
}
|
130
|
+
)
|
104
131
|
|
105
132
|
bindata["bins"].sort(
|
106
133
|
key=lambda x: datetime.strptime(x["collectionDate"], "%d/%m/%Y")
|
@@ -5,12 +5,13 @@ from selenium.webdriver.common.by import By
|
|
5
5
|
from selenium.webdriver.support import expected_conditions as EC
|
6
6
|
from selenium.webdriver.support.ui import Select, WebDriverWait
|
7
7
|
|
8
|
-
#import selenium keys
|
8
|
+
# import selenium keys
|
9
9
|
from selenium.webdriver.common.keys import Keys
|
10
10
|
|
11
11
|
from uk_bin_collection.uk_bin_collection.common import *
|
12
12
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
13
13
|
|
14
|
+
|
14
15
|
# import the wonderful Beautiful Soup and the URL grabber
|
15
16
|
class CouncilClass(AbstractGetBinDataClass):
|
16
17
|
"""
|
@@ -28,7 +29,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
28
29
|
check_postcode(user_postcode)
|
29
30
|
user_paon = kwargs.get("paon")
|
30
31
|
check_paon(user_paon)
|
31
|
-
|
32
|
+
|
32
33
|
headless = kwargs.get("headless")
|
33
34
|
web_driver = kwargs.get("web_driver")
|
34
35
|
driver = create_webdriver(web_driver, headless, None, __name__)
|
@@ -54,13 +55,10 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
54
55
|
pass
|
55
56
|
|
56
57
|
postcode_input = wait.until(
|
57
|
-
EC.presence_of_element_located(
|
58
|
-
(By.ID, 'postcode-search-input')
|
59
|
-
)
|
58
|
+
EC.presence_of_element_located((By.ID, "postcode-search-input"))
|
60
59
|
)
|
61
60
|
postcode_input.send_keys(user_postcode)
|
62
61
|
|
63
|
-
|
64
62
|
# Wait for the element to be clickable
|
65
63
|
postcode_search_btn = wait.until(
|
66
64
|
EC.element_to_be_clickable(
|
@@ -101,7 +99,9 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
101
99
|
date_text = date_span.text.strip()
|
102
100
|
current_year = datetime.now().year
|
103
101
|
full_date = f"{date_text} {current_year}" # e.g., "18 Apr 2025"
|
104
|
-
collection_date = datetime.strptime(full_date, "%d %b %Y").strftime(
|
102
|
+
collection_date = datetime.strptime(full_date, "%d %b %Y").strftime(
|
103
|
+
date_format
|
104
|
+
)
|
105
105
|
else:
|
106
106
|
collection_date = None
|
107
107
|
except Exception as e:
|
@@ -115,13 +115,17 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
115
115
|
bin_title_div = bin_block.select_one("div.bin-title")
|
116
116
|
if bin_title_div:
|
117
117
|
bin_type = bin_title_div.get_text(strip=True)
|
118
|
-
data["bins"].append(
|
119
|
-
|
120
|
-
|
121
|
-
|
118
|
+
data["bins"].append(
|
119
|
+
{
|
120
|
+
"type": bin_type,
|
121
|
+
"collectionDate": collection_date,
|
122
|
+
}
|
123
|
+
)
|
122
124
|
|
123
125
|
# 3. Optional: sort bins by collectionDate
|
124
|
-
data["bins"].sort(
|
126
|
+
data["bins"].sort(
|
127
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), date_format)
|
128
|
+
)
|
125
129
|
|
126
130
|
except Exception as e:
|
127
131
|
# Here you can log the exception if needed
|
@@ -132,4 +136,4 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
132
136
|
# This block ensures that the driver is closed regardless of an exception
|
133
137
|
if driver:
|
134
138
|
driver.quit()
|
135
|
-
return data
|
139
|
+
return data
|
@@ -2,6 +2,7 @@ from bs4 import BeautifulSoup
|
|
2
2
|
from uk_bin_collection.uk_bin_collection.common import *
|
3
3
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
4
4
|
|
5
|
+
|
5
6
|
# import the wonderful Beautiful Soup and the URL grabber
|
6
7
|
class CouncilClass(AbstractGetBinDataClass):
|
7
8
|
"""
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/output.schema
RENAMED
File without changes
|
File without changes
|
File without changes
|
{uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/test_collect_data.py
RENAMED
File without changes
|
File without changes
|
{uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/test_conftest.py
RENAMED
File without changes
|
{uk_bin_collection-0.144.4 → uk_bin_collection-0.146.0}/uk_bin_collection/tests/test_get_data.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|