uk_bin_collection 0.127.2__tar.gz → 0.127.4__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of uk_bin_collection might be problematic. Click here for more details.
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/PKG-INFO +1 -1
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/pyproject.toml +1 -1
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/input.json +17 -11
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py +3 -3
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +18 -7
- uk_bin_collection-0.127.4/uk_bin_collection/uk_bin_collection/councils/LondonBoroughOfRichmondUponThames.py +98 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +2 -2
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +2 -2
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/PowysCouncil.py +10 -7
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +20 -11
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +6 -6
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +8 -3
- uk_bin_collection-0.127.4/uk_bin_collection/uk_bin_collection/councils/SurreyHeathBoroughCouncil.py +116 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +9 -6
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +18 -7
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WestOxfordshireDistrictCouncil.py +3 -3
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/LICENSE +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/README.md +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/README.rst +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/features/environment.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/output.schema +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/test_collect_data.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/test_common_functions.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/test_conftest.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/test_get_data.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/common.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BaberghDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BlaenauGwentCountyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BraintreeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BrecklandCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BrentCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BromsgroveDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BurnleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CheltenhamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CopelandBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CotswoldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CoventryCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CumberlandAllerdaleCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/CumberlandCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DenbighshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DerbyCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DudleyCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DundeeCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EastAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EastHertsCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EdinburghCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ExeterCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/FifeCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/FlintshireCountyCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/FolkstoneandHytheDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/GraveshamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/GwyneddCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HackneyCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HarboroughDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HartDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HartlepoolBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/KingsLynnandWestNorfolkBC.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LichfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LincolnCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHarrow.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHavering.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLewisham.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MidDevonCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MonmouthshireCountyCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/MorayCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NewcastleUnderLymeCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthHertfordshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/NuneatonBedworthBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/OadbyAndWigstonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/OxfordCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/PerthAndKinrossCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/PlymouthCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RedditchBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RotherDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RoyalBoroughofGreenwich.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SandwellBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SeftonCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthHamsDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthStaffordshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/StevenageBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/StocktonOnTeesCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/SwindonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ThanetDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/ThurrockCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/TunbridgeWellsCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WandsworthCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WestDunbartonshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WestLancashireBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WirralCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WolverhamptonCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WorcesterCityCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/WyreForestDistrictCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
- {uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/uk_bin_collection/get_bin_data.py +0 -0
@@ -1030,6 +1030,13 @@
|
|
1030
1030
|
"wiki_name": "London Borough Ealing",
|
1031
1031
|
"wiki_note": "Pass the UPRN. You can find it using [FindMyAddress](https://www.findmyaddress.co.uk/search)."
|
1032
1032
|
},
|
1033
|
+
"LondonBoroughOfRichmondUponThames": {
|
1034
|
+
"house_number": "March Road",
|
1035
|
+
"skip_get_url": true,
|
1036
|
+
"url": "https://www.richmond.gov.uk/services/waste_and_recycling/collection_days/",
|
1037
|
+
"wiki_name": "London Borough Of Richmond Upon Thames",
|
1038
|
+
"wiki_note": "Pass the name of the street ONLY in the house number parameter, unfortunately post code's are not allowed. "
|
1039
|
+
},
|
1033
1040
|
"LondonBoroughHarrow": {
|
1034
1041
|
"url": "https://www.harrow.gov.uk",
|
1035
1042
|
"wiki_command_url_override": "https://www.harrow.gov.uk",
|
@@ -1208,8 +1215,8 @@
|
|
1208
1215
|
"wiki_note": "Pass the postcode and UPRN. This parser requires a Selenium webdriver."
|
1209
1216
|
},
|
1210
1217
|
"NewarkAndSherwoodDC": {
|
1211
|
-
"url": "http://app.newark-sherwooddc.gov.uk/bincollection/calendar?pid=200004258529
|
1212
|
-
"wiki_command_url_override": "http://app.newark-sherwooddc.gov.uk/bincollection/calendar?pid=XXXXXXXX
|
1218
|
+
"url": "http://app.newark-sherwooddc.gov.uk/bincollection/calendar?pid=200004258529",
|
1219
|
+
"wiki_command_url_override": "http://app.newark-sherwooddc.gov.uk/bincollection/calendar?pid=XXXXXXXX",
|
1213
1220
|
"wiki_name": "Newark and Sherwood District Council",
|
1214
1221
|
"wiki_note": "Replace XXXXXXXX with your UPRN."
|
1215
1222
|
},
|
@@ -1409,15 +1416,6 @@
|
|
1409
1416
|
"wiki_name": "Portsmouth City Council",
|
1410
1417
|
"wiki_note": "Pass the postcode and UPRN. This parser requires a Selenium webdriver."
|
1411
1418
|
},
|
1412
|
-
"PowysCouncil": {
|
1413
|
-
"house_number": "LANE COTTAGE",
|
1414
|
-
"postcode": "HR3 5JS",
|
1415
|
-
"skip_get_url": true,
|
1416
|
-
"url": "https://www.powys.gov.uk",
|
1417
|
-
"web_driver": "http://selenium:4444",
|
1418
|
-
"wiki_name": "Powys Council",
|
1419
|
-
"wiki_note": "Pass the house name/number and postcode in their respective parameters. This parser requires a Selenium webdriver."
|
1420
|
-
},
|
1421
1419
|
"PowysCouncil": {
|
1422
1420
|
"house_number": "LANE COTTAGE",
|
1423
1421
|
"postcode": "HR3 5JS",
|
@@ -1768,6 +1766,14 @@
|
|
1768
1766
|
"wiki_name": "Sunderland City Council",
|
1769
1767
|
"wiki_note": "Provide your house number (without quotes) and postcode (wrapped in double quotes with a space)."
|
1770
1768
|
},
|
1769
|
+
"SurreyHeathBoroughCouncil": {
|
1770
|
+
"house_number": "36",
|
1771
|
+
"postcode": "GU20 6PN",
|
1772
|
+
"skip_get_url": true,
|
1773
|
+
"url": "https://asjwsw-wrpsurreyheathmunicipal-live.whitespacews.com/",
|
1774
|
+
"wiki_name": "Surrey Heath Borough Council / Joint Waste Solutions",
|
1775
|
+
"wiki_note": "Provide your house number in the `house_number` parameter and postcode in the `postcode` parameter."
|
1776
|
+
},
|
1771
1777
|
"SwaleBoroughCouncil": {
|
1772
1778
|
"postcode": "ME12 2NQ",
|
1773
1779
|
"skip_get_url": true,
|
@@ -34,10 +34,10 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
34
34
|
|
35
35
|
# Find the next collection date
|
36
36
|
date_tag = container.find(class_="font11 text-center")
|
37
|
-
if date_tag
|
38
|
-
continue
|
39
|
-
else:
|
37
|
+
if date_tag:
|
40
38
|
collection_date = date_tag.text.strip()
|
39
|
+
else:
|
40
|
+
continue
|
41
41
|
|
42
42
|
dict_data = {
|
43
43
|
"type": bin_type,
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import datetime
|
2
|
+
|
1
3
|
from bs4 import BeautifulSoup
|
2
4
|
|
3
5
|
from uk_bin_collection.uk_bin_collection.common import *
|
@@ -32,15 +34,24 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
32
34
|
for p in ps:
|
33
35
|
collection = p.text.strip().replace("Your next ", "").split(".")[0]
|
34
36
|
bin_type = collection.split(" day is")[0]
|
35
|
-
collection_date =
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
collection_date = remove_ordinal_indicator_from_date_string(
|
38
|
+
collection
|
39
|
+
).split("day is ")[1]
|
40
|
+
if collection_date == "Today":
|
41
|
+
collection_date = datetime.today().strftime(date_format)
|
42
|
+
elif collection_date == "Tomorrow":
|
43
|
+
collection_date = (datetime.today() + timedelta(days=1)).strftime(
|
44
|
+
date_format
|
45
|
+
)
|
46
|
+
print(collection_date)
|
47
|
+
else:
|
48
|
+
collection_date = datetime.strptime(
|
49
|
+
collection_date,
|
50
|
+
"%A %d %B %Y",
|
51
|
+
).strftime(date_format)
|
41
52
|
dict_data = {
|
42
53
|
"type": bin_type,
|
43
|
-
"collectionDate": collection_date
|
54
|
+
"collectionDate": collection_date,
|
44
55
|
}
|
45
56
|
data["bins"].append(dict_data)
|
46
57
|
|
@@ -0,0 +1,98 @@
|
|
1
|
+
from selenium.webdriver.common.by import By
|
2
|
+
from selenium.webdriver.support import expected_conditions as EC
|
3
|
+
from datetime import datetime
|
4
|
+
from selenium.webdriver.support.wait import WebDriverWait
|
5
|
+
from selenium.webdriver.common.keys import Keys
|
6
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
7
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
8
|
+
|
9
|
+
|
10
|
+
class CouncilClass(AbstractGetBinDataClass):
|
11
|
+
|
12
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
13
|
+
print(f"Arguments are f{kwargs}")
|
14
|
+
driver = None
|
15
|
+
try:
|
16
|
+
page = kwargs["url"]
|
17
|
+
street_name = kwargs.get("paon")
|
18
|
+
web_driver = kwargs.get("web_driver")
|
19
|
+
headless = kwargs.get("headless")
|
20
|
+
|
21
|
+
driver = create_webdriver(web_driver, headless, None, __name__)
|
22
|
+
driver.get(page)
|
23
|
+
|
24
|
+
wait = WebDriverWait(driver, 60)
|
25
|
+
|
26
|
+
self.dismiss_cookie_banner(wait)
|
27
|
+
self.input_street_name(street_name, wait)
|
28
|
+
self.submit(wait)
|
29
|
+
bin_types, collection_days = self.get_bins(driver)
|
30
|
+
bindata = self.get_collection_days(bin_types, collection_days)
|
31
|
+
|
32
|
+
print(bindata)
|
33
|
+
|
34
|
+
except Exception as e:
|
35
|
+
# Here you can log the exception if needed
|
36
|
+
print(f"An error occurred: {e}")
|
37
|
+
# Optionally, re-raise the exception if you want it to propagate
|
38
|
+
raise
|
39
|
+
finally:
|
40
|
+
# This block ensures that the driver is closed regardless of an exception
|
41
|
+
if driver:
|
42
|
+
driver.quit()
|
43
|
+
return bindata
|
44
|
+
|
45
|
+
def get_collection_days(self, bin_types, collection_days):
|
46
|
+
bindata = {"bins": []}
|
47
|
+
WEEKLY_COLLECTION = 0
|
48
|
+
GARDEN_COLLECTION = 1
|
49
|
+
|
50
|
+
for index, bin_type in enumerate(bin_types):
|
51
|
+
# currently only handled weekly and garden collection, special collections like Christmas Day need to be added
|
52
|
+
if index == WEEKLY_COLLECTION:
|
53
|
+
next_collection_date = get_next_day_of_week(collection_days[index].text.strip(), date_format)
|
54
|
+
elif index == GARDEN_COLLECTION:
|
55
|
+
split_date_part = collection_days[index].text.split("More dates")[0]
|
56
|
+
next_collection_date = datetime.strptime(split_date_part.strip(), "%d %B %Y").strftime(date_format)
|
57
|
+
else:
|
58
|
+
next_collection_date = datetime.strptime(collection_days[index].text.strip(), "%d %B %Y").strftime(date_format)
|
59
|
+
|
60
|
+
dict_data = {
|
61
|
+
"type": bin_type.text.strip(),
|
62
|
+
"collectionDate": next_collection_date,
|
63
|
+
}
|
64
|
+
bindata["bins"].append(dict_data)
|
65
|
+
return bindata
|
66
|
+
|
67
|
+
def get_bins(self, driver):
|
68
|
+
table = driver.find_element(By.XPATH, ".//div[@id='maincontent']//table")
|
69
|
+
table_rows = table.find_elements(by=By.TAG_NAME, value="tr")
|
70
|
+
headerRow = table_rows[0]
|
71
|
+
table_info_row = table_rows[1]
|
72
|
+
bin_types = headerRow.find_elements(by=By.TAG_NAME, value="th")[2:]
|
73
|
+
collection_days = table_info_row.find_elements(by=By.TAG_NAME, value="td")[2:]
|
74
|
+
return bin_types, collection_days
|
75
|
+
|
76
|
+
def submit(self, wait):
|
77
|
+
main_content_submit_button = wait.until(
|
78
|
+
EC.element_to_be_clickable(
|
79
|
+
(By.XPATH, ".//div[@id='maincontent']//input[@type='submit']")
|
80
|
+
)
|
81
|
+
)
|
82
|
+
main_content_submit_button.send_keys(Keys.ENTER)
|
83
|
+
|
84
|
+
def input_street_name(self, street_name, wait):
|
85
|
+
input_element_postcodesearch = wait.until(
|
86
|
+
EC.visibility_of_element_located(
|
87
|
+
(By.ID, "Street")
|
88
|
+
)
|
89
|
+
)
|
90
|
+
input_element_postcodesearch.send_keys(street_name)
|
91
|
+
|
92
|
+
def dismiss_cookie_banner(self, wait):
|
93
|
+
cookie_banner = wait.until(
|
94
|
+
EC.visibility_of_element_located(
|
95
|
+
(By.ID, "ccc-dismiss-button")
|
96
|
+
)
|
97
|
+
)
|
98
|
+
cookie_banner.send_keys(Keys.ENTER)
|
@@ -47,10 +47,10 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
47
47
|
bin_type = cells[0].get_text().strip()
|
48
48
|
# Date is on the second cell, second paragraph, wrapped in p
|
49
49
|
collectionDate = None
|
50
|
-
for
|
50
|
+
for format in possible_formats:
|
51
51
|
try:
|
52
52
|
collectionDate = datetime.strptime(
|
53
|
-
cells[1].select("p > b")[2].get_text(strip=True),
|
53
|
+
cells[1].select("p > b")[2].get_text(strip=True), format
|
54
54
|
)
|
55
55
|
break # Exit the loop if parsing is successful
|
56
56
|
except ValueError:
|
@@ -125,10 +125,10 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
125
125
|
)
|
126
126
|
|
127
127
|
# Garden waste
|
128
|
-
garden_waste = soup.find("
|
128
|
+
garden_waste = soup.find("div", class_="eb-2HIpCnWC-Override-EditorInput")
|
129
129
|
if garden_waste:
|
130
130
|
match = re.search(
|
131
|
-
r"
|
131
|
+
r"(\d{2}/\d{2}/\d{4})", garden_waste.text
|
132
132
|
)
|
133
133
|
if match:
|
134
134
|
bins.append(
|
@@ -127,12 +127,15 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
127
127
|
li.text for li in garden_waste_section.find_next("ul").find_all("li")
|
128
128
|
]
|
129
129
|
for date in garden_waste_dates:
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
130
|
+
try:
|
131
|
+
dict_data = {
|
132
|
+
"type": "Garden Waste",
|
133
|
+
"collectionDate": datetime.strptime(
|
134
|
+
remove_ordinal_indicator_from_date_string(date), "%d %B %Y"
|
135
|
+
).strftime(date_format),
|
136
|
+
}
|
137
|
+
data["bins"].append(dict_data)
|
138
|
+
except:
|
139
|
+
continue
|
137
140
|
|
138
141
|
return data
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import requests
|
2
2
|
from bs4 import BeautifulSoup
|
3
|
+
|
3
4
|
from uk_bin_collection.uk_bin_collection.common import *
|
4
5
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
5
6
|
|
@@ -54,6 +55,9 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
54
55
|
|
55
56
|
data = {"bins": []}
|
56
57
|
|
58
|
+
current_year = datetime.now().year
|
59
|
+
next_year = current_year + 1
|
60
|
+
|
57
61
|
# Page has slider info side by side, which are two instances of this class
|
58
62
|
for bin in soup.find_all("div", {"class": "binextra"}):
|
59
63
|
bin_info = list(bin.stripped_strings)
|
@@ -62,27 +66,32 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
62
66
|
if contains_date(bin_info[0]):
|
63
67
|
bin_date = get_next_occurrence_from_day_month(
|
64
68
|
datetime.strptime(
|
65
|
-
bin_info[0]
|
66
|
-
"%A %d %B -
|
69
|
+
bin_info[0],
|
70
|
+
"%A %d %B -",
|
67
71
|
)
|
68
|
-
)
|
69
|
-
bin_type = str.capitalize(
|
72
|
+
)
|
73
|
+
bin_type = str.capitalize(" ".join(bin_info[1:]))
|
70
74
|
# On exceptional collection schedule (e.g. around English Bank Holidays), date will be contained in the second stripped string
|
71
75
|
else:
|
72
76
|
bin_date = get_next_occurrence_from_day_month(
|
73
77
|
datetime.strptime(
|
74
|
-
bin_info[1]
|
75
|
-
"%A %d %B -
|
78
|
+
bin_info[1],
|
79
|
+
"%A %d %B -",
|
76
80
|
)
|
77
|
-
)
|
78
|
-
str.capitalize(
|
79
|
-
except
|
80
|
-
|
81
|
+
)
|
82
|
+
str.capitalize(" ".join(bin_info[2:]))
|
83
|
+
except:
|
84
|
+
continue
|
85
|
+
|
86
|
+
if (datetime.now().month == 12) and (bin_date.month == 1):
|
87
|
+
bin_date = bin_date.replace(year=next_year)
|
88
|
+
else:
|
89
|
+
bin_date = bin_date.replace(year=current_year)
|
81
90
|
|
82
91
|
# Build data dict for each entry
|
83
92
|
dict_data = {
|
84
93
|
"type": bin_type,
|
85
|
-
"collectionDate": bin_date,
|
94
|
+
"collectionDate": bin_date.strftime(date_format),
|
86
95
|
}
|
87
96
|
data["bins"].append(dict_data)
|
88
97
|
|
@@ -30,12 +30,12 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
30
30
|
driver.get("https://www.staffsmoorlands.gov.uk/findyourbinday")
|
31
31
|
|
32
32
|
# Close cookies banner
|
33
|
-
cookieAccept = WebDriverWait(driver, 10).until(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
)
|
38
|
-
cookieAccept.click()
|
33
|
+
# cookieAccept = WebDriverWait(driver, 10).until(
|
34
|
+
# EC.presence_of_element_located(
|
35
|
+
# (By.CSS_SELECTOR, ".cookiemessage__link--close")
|
36
|
+
# )
|
37
|
+
# )
|
38
|
+
# cookieAccept.click()
|
39
39
|
|
40
40
|
# Wait for the postcode field to appear then populate it
|
41
41
|
inputElement_postcode = WebDriverWait(driver, 30).until(
|
@@ -1,8 +1,10 @@
|
|
1
|
+
from datetime import datetime, timedelta
|
2
|
+
from typing import Any, Dict
|
3
|
+
|
1
4
|
from bs4 import BeautifulSoup
|
5
|
+
|
2
6
|
from uk_bin_collection.uk_bin_collection.common import *
|
3
7
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
4
|
-
from datetime import datetime, timedelta
|
5
|
-
from typing import Dict, Any
|
6
8
|
|
7
9
|
|
8
10
|
class CouncilClass(AbstractGetBinDataClass):
|
@@ -78,7 +80,10 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
78
80
|
formatted_date = self.get_next_weekday(day_name)
|
79
81
|
else:
|
80
82
|
# Convert date format from "Tuesday 28 May 2024" to "28/05/2024"
|
81
|
-
|
83
|
+
try:
|
84
|
+
date_obj = datetime.strptime(value, "%A %d %B %Y")
|
85
|
+
except:
|
86
|
+
continue
|
82
87
|
formatted_date = date_obj.strftime("%d/%m/%Y")
|
83
88
|
|
84
89
|
bin_entry = {
|
uk_bin_collection-0.127.4/uk_bin_collection/uk_bin_collection/councils/SurreyHeathBoroughCouncil.py
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
import urllib
|
2
|
+
|
3
|
+
from bs4 import BeautifulSoup
|
4
|
+
|
5
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
6
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
7
|
+
|
8
|
+
|
9
|
+
class CouncilClass(AbstractGetBinDataClass):
|
10
|
+
"""
|
11
|
+
Concrete classes have to implement all abstract operations of the
|
12
|
+
base class. They can also override some operations with a default
|
13
|
+
implementation.
|
14
|
+
"""
|
15
|
+
|
16
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
17
|
+
requests.packages.urllib3.disable_warnings()
|
18
|
+
root_url = "https://asjwsw-wrpsurreyheathmunicipal-live.whitespacews.com/"
|
19
|
+
# Get the house number and postcode from the commandline
|
20
|
+
user_paon = kwargs.get("paon")
|
21
|
+
user_postcode = kwargs.get("postcode")
|
22
|
+
check_postcode(user_postcode)
|
23
|
+
|
24
|
+
# Start a new session for the form, and get the chosen URL from the commandline
|
25
|
+
session = requests.Session()
|
26
|
+
req = session.get(root_url)
|
27
|
+
|
28
|
+
# Parse the requested URL to get a link to the "View My Collections" portal with a unique service ID
|
29
|
+
start = BeautifulSoup(req.text, features="html.parser")
|
30
|
+
start.prettify()
|
31
|
+
base_link = start.select(
|
32
|
+
"#menu-content > div > div:nth-child(1) > p.govuk-body.govuk-\\!-margin-bottom-0.colorblue.lineheight15 > a"
|
33
|
+
)[0].attrs.get("href")
|
34
|
+
|
35
|
+
# We need to reorder the query parts from the unique URL, so split them up to make it easier
|
36
|
+
query_parts = urllib.parse.urlparse(base_link).query.split("&")
|
37
|
+
parts = base_link.split("?")
|
38
|
+
addr_link = (
|
39
|
+
parts[0] + "/mop.php?" + query_parts[1] + "&" + query_parts[0] + "&seq=2"
|
40
|
+
)
|
41
|
+
|
42
|
+
# Bring in some headers to emulate a browser, and put the UPRN and postcode into the form data.
|
43
|
+
# This is sent in a POST request, emulating browser behaviour.
|
44
|
+
headers = {
|
45
|
+
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
46
|
+
"Accept-Language": "en-GB,en;q=0.9",
|
47
|
+
"Cache-Control": "no-cache",
|
48
|
+
"Connection": "keep-alive",
|
49
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
50
|
+
"Origin": "https://asjwsw-wrpsurreyheathmunicipal-live.whitespacews.com",
|
51
|
+
"Pragma": "no-cache",
|
52
|
+
"Referer": "https://asjwsw-wrpsurreyheathmunicipal-live.whitespacews.com/",
|
53
|
+
"Sec-Fetch-Dest": "document",
|
54
|
+
"Sec-Fetch-Mode": "navigate",
|
55
|
+
"Sec-Fetch-Site": "same-origin",
|
56
|
+
"Sec-Fetch-User": "?1",
|
57
|
+
"Upgrade-Insecure-Requests": "1",
|
58
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 OPR/98.0.0.0",
|
59
|
+
"sec-ch-ua": '"Chromium";v="112", "Not_A Brand";v="24", "Opera GX";v="98"',
|
60
|
+
"sec-ch-ua-mobile": "?0",
|
61
|
+
"sec-ch-ua-platform": '"Windows"',
|
62
|
+
}
|
63
|
+
data = {
|
64
|
+
"address_name_number": user_paon,
|
65
|
+
"address_street": "",
|
66
|
+
"street_town": "",
|
67
|
+
"address_postcode": user_postcode,
|
68
|
+
}
|
69
|
+
addr_page = session.post(addr_link, headers=headers, data=data)
|
70
|
+
addr = BeautifulSoup(addr_page.text, features="html.parser")
|
71
|
+
addr.prettify()
|
72
|
+
|
73
|
+
# This page should only have one address, but regardless, select the first one and make a request to load the
|
74
|
+
# calendar page.
|
75
|
+
cal_link = root_url + addr.select("#property_list > ul > li > a")[0].attrs.get(
|
76
|
+
"href"
|
77
|
+
)
|
78
|
+
cal_page = session.get(cal_link)
|
79
|
+
|
80
|
+
# Parse the calendar page
|
81
|
+
soup = BeautifulSoup(cal_page.text, features="html.parser")
|
82
|
+
soup.prettify()
|
83
|
+
data = {"bins": []}
|
84
|
+
|
85
|
+
# For whatever reason, each row contains all the information for that row, and each one after it. This code
|
86
|
+
# essentially gets all items from each row, but ignores the whitespace that you get when splitting using \n.
|
87
|
+
# This produces a big list of dates then bin types, so we split them up into a list of lists - each pair is
|
88
|
+
# a date and the bin type.
|
89
|
+
items = [
|
90
|
+
i
|
91
|
+
for i in soup.find(
|
92
|
+
"u1",
|
93
|
+
{
|
94
|
+
"class": "displayinlineblock justifycontentleft alignitemscenter margin0 padding0"
|
95
|
+
},
|
96
|
+
).text.split("\n")
|
97
|
+
if i != ""
|
98
|
+
]
|
99
|
+
pairs = [items[i : i + 2] for i in range(0, len(items), 2)]
|
100
|
+
|
101
|
+
# Loop through the paired bin dates and types
|
102
|
+
for pair in pairs:
|
103
|
+
# This isn't necessary, but better safe than sorry
|
104
|
+
collection_date = datetime.strptime(pair[0], date_format).strftime(
|
105
|
+
date_format
|
106
|
+
)
|
107
|
+
# Change the formatting of the purple bins to replace the hyphens with slashes
|
108
|
+
if pair[1] == "Batteries-small electricals-textiles":
|
109
|
+
bin_type = pair[1].replace("-", "/").strip()
|
110
|
+
else:
|
111
|
+
bin_type = pair[1]
|
112
|
+
|
113
|
+
# Add the data into the dictionary
|
114
|
+
data["bins"].append({"type": bin_type, "collectionDate": collection_date})
|
115
|
+
|
116
|
+
return data
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from bs4 import BeautifulSoup
|
2
|
+
|
2
3
|
from uk_bin_collection.uk_bin_collection.common import *
|
3
4
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
4
5
|
|
@@ -31,12 +32,12 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
31
32
|
params = {
|
32
33
|
"RequestType": "LocalInfo",
|
33
34
|
"ms": "ValeOfGlamorgan/AllMaps",
|
34
|
-
"group": "
|
35
|
-
"type": "
|
35
|
+
"group": "Waste|new_refuse",
|
36
|
+
"type": "jsonp",
|
36
37
|
"callback": "AddressInfoCallback",
|
37
38
|
"uid": user_uprn,
|
38
|
-
"import": "
|
39
|
-
"_": "
|
39
|
+
"import": "jQuery35107288886041176057_1736292844067",
|
40
|
+
"_": "1736292844068",
|
40
41
|
}
|
41
42
|
|
42
43
|
# Get a response from the council
|
@@ -46,13 +47,15 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
46
47
|
headers=headers,
|
47
48
|
).text
|
48
49
|
|
50
|
+
response = response.replace("AddressInfoCallback(", "").rstrip(");")
|
51
|
+
|
49
52
|
# Load the JSON and seek out the bin week text, then add it to the calendar URL. Also take the weekly
|
50
53
|
# collection type and generate dates for it. Then make a GET request for the calendar
|
51
54
|
bin_week = str(
|
52
|
-
json.loads(response)["Results"]["
|
55
|
+
json.loads(response)["Results"]["waste"]["roundday_residual"]
|
53
56
|
).replace(" ", "-")
|
54
57
|
weekly_collection = str(
|
55
|
-
json.loads(response)["Results"]["
|
58
|
+
json.loads(response)["Results"]["waste"]["recycling_code"]
|
56
59
|
).capitalize()
|
57
60
|
weekly_dates = get_weekday_dates_in_period(
|
58
61
|
datetime.now(), days_of_week.get(bin_week.split("-")[0].strip()), amount=48
|
@@ -53,6 +53,9 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
53
53
|
|
54
54
|
data = {"bins": []}
|
55
55
|
|
56
|
+
current_year = datetime.now().year
|
57
|
+
next_year = current_year + 1
|
58
|
+
|
56
59
|
# Page has slider info side by side, which are two instances of this class
|
57
60
|
for bin in soup.find_all("div", {"class": "bintxt"}):
|
58
61
|
try:
|
@@ -74,23 +77,31 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
74
77
|
if contains_date(bin_date_info[0]):
|
75
78
|
bin_date = get_next_occurrence_from_day_month(
|
76
79
|
datetime.strptime(
|
77
|
-
bin_date_info[0]
|
78
|
-
"%A %d %B -
|
80
|
+
bin_date_info[0],
|
81
|
+
"%A %d %B -",
|
79
82
|
)
|
80
|
-
)
|
83
|
+
)
|
81
84
|
# On exceptional collection schedule (e.g. around English Bank Holidays), date will be contained in the second stripped string
|
82
85
|
else:
|
83
86
|
bin_date = get_next_occurrence_from_day_month(
|
84
87
|
datetime.strptime(
|
85
|
-
bin_date_info[1]
|
86
|
-
"%A %d %B -
|
88
|
+
bin_date_info[1],
|
89
|
+
"%A %d %B -",
|
87
90
|
)
|
88
|
-
)
|
91
|
+
)
|
89
92
|
except Exception as ex:
|
90
93
|
raise ValueError(f"Error parsing bin data: {ex}")
|
91
94
|
|
95
|
+
if (datetime.now().month == 12) and (bin_date.month == 1):
|
96
|
+
bin_date = bin_date.replace(year=next_year)
|
97
|
+
else:
|
98
|
+
bin_date = bin_date.replace(year=current_year)
|
99
|
+
|
92
100
|
# Build data dict for each entry
|
93
|
-
dict_data = {
|
101
|
+
dict_data = {
|
102
|
+
"type": bin_type,
|
103
|
+
"collectionDate": bin_date.strftime(date_format),
|
104
|
+
}
|
94
105
|
data["bins"].append(dict_data)
|
95
106
|
|
96
107
|
data["bins"].sort(
|
@@ -42,14 +42,14 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
42
42
|
wait = WebDriverWait(driver, 60)
|
43
43
|
address_entry_field = wait.until(
|
44
44
|
EC.presence_of_element_located(
|
45
|
-
(By.XPATH, '//*[@id="combobox-input-
|
45
|
+
(By.XPATH, '//*[@id="combobox-input-20"]')
|
46
46
|
)
|
47
47
|
)
|
48
48
|
|
49
49
|
address_entry_field.send_keys(str(full_address))
|
50
50
|
|
51
51
|
address_entry_field = wait.until(
|
52
|
-
EC.element_to_be_clickable((By.XPATH, '//*[@id="combobox-input-
|
52
|
+
EC.element_to_be_clickable((By.XPATH, '//*[@id="combobox-input-20"]'))
|
53
53
|
)
|
54
54
|
address_entry_field.click()
|
55
55
|
address_entry_field.send_keys(Keys.BACKSPACE)
|
@@ -57,7 +57,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
57
57
|
|
58
58
|
first_found_address = wait.until(
|
59
59
|
EC.element_to_be_clickable(
|
60
|
-
(By.XPATH, '//*[@id="dropdown-element-
|
60
|
+
(By.XPATH, '//*[@id="dropdown-element-20"]/ul')
|
61
61
|
)
|
62
62
|
)
|
63
63
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/output.schema
RENAMED
File without changes
|
File without changes
|
File without changes
|
{uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/test_collect_data.py
RENAMED
File without changes
|
File without changes
|
{uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/test_conftest.py
RENAMED
File without changes
|
{uk_bin_collection-0.127.2 → uk_bin_collection-0.127.4}/uk_bin_collection/tests/test_get_data.py
RENAMED
File without changes
|