uk_bin_collection 0.80.0__tar.gz → 0.81.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.80.0 → uk_bin_collection-0.81.0}/PKG-INFO +1 -1
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/pyproject.toml +1 -1
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/tests/input.json +13 -5
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +26 -13
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +6 -15
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +8 -6
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +13 -5
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +1 -1
- uk_bin_collection-0.81.0/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +156 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/LICENSE +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/README.md +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/README.rst +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/tests/features/environment.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/tests/output.schema +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/common.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
- {uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/get_bin_data.py +0 -0
@@ -1041,13 +1041,13 @@
|
|
1041
1041
|
"wiki_name": "Torridge District Council"
|
1042
1042
|
},
|
1043
1043
|
"UttlesfordDistrictCouncil": {
|
1044
|
-
"
|
1045
|
-
"wiki_name": "UttlesfordDistrictCouncil",
|
1046
|
-
"skip_get_url": true,
|
1044
|
+
"house_number": "72, Birchanger Lane",
|
1047
1045
|
"postcode": "CM23 5QF",
|
1046
|
+
"skip_get_url": true,
|
1048
1047
|
"uprn": "100090643434",
|
1049
|
-
"
|
1050
|
-
"web_driver": "http://selenium:4444"
|
1048
|
+
"url": "https://bins.uttlesford.gov.uk/",
|
1049
|
+
"web_driver": "http://selenium:4444",
|
1050
|
+
"wiki_name": "UttlesfordDistrictCouncil"
|
1051
1051
|
},
|
1052
1052
|
"ValeofGlamorganCouncil": {
|
1053
1053
|
"skip_get_url": true,
|
@@ -1175,6 +1175,14 @@
|
|
1175
1175
|
"wiki_name": "Woking Borough Council/Joint Waste Solutions",
|
1176
1176
|
"wiki_note": "Works with all collection areas that use Joint Waste Solutions. Just use the correct URL."
|
1177
1177
|
},
|
1178
|
+
"WychavonDistrictCouncil": {
|
1179
|
+
"url": "https://selfservice.wychavon.gov.uk/wdcroundlookup/wdc_search.jsp",
|
1180
|
+
"wiki_name": "WychavonDistrictCouncil",
|
1181
|
+
"web_driver": "http://selenium:4444",
|
1182
|
+
"skip_get_url": true,
|
1183
|
+
"postcode": "WR3 7RU",
|
1184
|
+
"uprn": "100120716273"
|
1185
|
+
},
|
1178
1186
|
"WyreCouncil": {
|
1179
1187
|
"postcode": "FY6 8HG",
|
1180
1188
|
"skip_get_url": true,
|
@@ -1,7 +1,14 @@
|
|
1
|
+
from typing import Dict, List, Any, Optional
|
1
2
|
from bs4 import BeautifulSoup
|
2
3
|
from dateutil.relativedelta import relativedelta
|
3
|
-
|
4
|
-
|
4
|
+
import requests
|
5
|
+
import logging
|
6
|
+
import re
|
7
|
+
from datetime import datetime
|
8
|
+
from uk_bin_collection.common import *
|
9
|
+
from dateutil.parser import parse
|
10
|
+
|
11
|
+
from uk_bin_collection.uk_bin_collection.common import check_uprn, check_postcode
|
5
12
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
6
13
|
|
7
14
|
|
@@ -24,7 +31,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
24
31
|
implementation.
|
25
32
|
"""
|
26
33
|
|
27
|
-
def get_data(self, url) -> str:
|
34
|
+
def get_data(self, url: str) -> str:
|
28
35
|
"""This method makes the request to the council
|
29
36
|
|
30
37
|
Keyword arguments:
|
@@ -45,21 +52,27 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
45
52
|
full_page = session.get(url)
|
46
53
|
return full_page
|
47
54
|
except requests.exceptions.HTTPError as errh:
|
48
|
-
|
55
|
+
logging.error(f"Http Error: {errh}")
|
49
56
|
raise
|
50
57
|
except requests.exceptions.ConnectionError as errc:
|
51
|
-
|
58
|
+
logging.error(f"Error Connecting: {errc}")
|
52
59
|
raise
|
53
60
|
except requests.exceptions.Timeout as errt:
|
54
|
-
|
61
|
+
logging.error(f"Timeout Error: {errt}")
|
55
62
|
raise
|
56
63
|
except requests.exceptions.RequestException as err:
|
57
|
-
|
64
|
+
logging.error(f"Oops: Something Else {err}")
|
58
65
|
raise
|
59
66
|
|
60
|
-
def parse_data(self, page: str, **kwargs) ->
|
61
|
-
uprn = kwargs.get("uprn")
|
62
|
-
postcode = kwargs.get("postcode")
|
67
|
+
def parse_data(self, page: str, **kwargs: Any) -> Dict[str, List[Dict[str, str]]]:
|
68
|
+
uprn: Optional[str] = kwargs.get("uprn")
|
69
|
+
postcode: Optional[str] = kwargs.get("postcode")
|
70
|
+
|
71
|
+
if uprn is None:
|
72
|
+
raise ValueError("UPRN is required and must be a non-empty string.")
|
73
|
+
if postcode is None:
|
74
|
+
raise ValueError("Postcode is required and must be a non-empty string.")
|
75
|
+
|
63
76
|
check_uprn(uprn)
|
64
77
|
check_postcode(postcode)
|
65
78
|
|
@@ -85,7 +98,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
85
98
|
rows = soup.find("table").find_all("tr")
|
86
99
|
|
87
100
|
# Form a JSON wrapper
|
88
|
-
data = {"bins": []}
|
101
|
+
data: Dict[str, List[Dict[str, str]]] = {"bins": []}
|
89
102
|
|
90
103
|
# Loops the Rows
|
91
104
|
for row in rows:
|
@@ -94,13 +107,13 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
94
107
|
bin_type = cells[0].get_text(strip=True)
|
95
108
|
collection_next = cells[1].get_text(strip=True)
|
96
109
|
|
97
|
-
collection_date = re.findall("\(.*?\)", collection_next)
|
110
|
+
collection_date = re.findall(r"\(.*?\)", collection_next)
|
98
111
|
|
99
112
|
if len(collection_date) != 1:
|
100
113
|
continue
|
101
114
|
|
102
115
|
collection_date_obj = parse(
|
103
|
-
re.sub("[()]", "", collection_date[0])
|
116
|
+
re.sub(r"[()]", "", collection_date[0])
|
104
117
|
).date()
|
105
118
|
|
106
119
|
# since we only have the next collection day, if the parsed date is in the past,
|
@@ -1,17 +1,14 @@
|
|
1
1
|
# This script pulls (in one hit) the data from Bromley Council Bins Data
|
2
2
|
import datetime
|
3
|
-
import time
|
4
3
|
from datetime import datetime
|
5
4
|
|
6
5
|
from bs4 import BeautifulSoup
|
7
6
|
from dateutil.relativedelta import relativedelta
|
8
7
|
from selenium.webdriver.common.by import By
|
9
|
-
from selenium.webdriver.common.keys import Keys
|
10
8
|
from selenium.webdriver.support import expected_conditions as EC
|
11
|
-
from selenium.webdriver.support.ui import
|
12
|
-
from selenium.webdriver.support.wait import WebDriverWait
|
9
|
+
from selenium.webdriver.support.ui import WebDriverWait
|
13
10
|
|
14
|
-
from uk_bin_collection.uk_bin_collection.common import
|
11
|
+
from uk_bin_collection.uk_bin_collection.common import create_webdriver
|
15
12
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
16
13
|
|
17
14
|
|
@@ -28,7 +25,6 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
28
25
|
driver = None
|
29
26
|
try:
|
30
27
|
bin_data_dict = {"bins": []}
|
31
|
-
collections = []
|
32
28
|
web_driver = kwargs.get("web_driver")
|
33
29
|
headless = kwargs.get("headless")
|
34
30
|
|
@@ -39,18 +35,14 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
39
35
|
driver.get(kwargs.get("url"))
|
40
36
|
|
41
37
|
wait = WebDriverWait(driver, 30)
|
42
|
-
|
38
|
+
wait.until(
|
43
39
|
EC.presence_of_element_located((By.CLASS_NAME, "waste-service-image"))
|
44
40
|
)
|
45
|
-
|
46
|
-
# Parse the HTML content
|
47
|
-
# Find all elements with the class 'container-name' to extract bin types
|
41
|
+
|
48
42
|
# Parse the HTML content
|
49
43
|
soup = BeautifulSoup(driver.page_source, "html.parser")
|
50
|
-
soup.prettify
|
51
44
|
|
52
45
|
# Find all elements with class 'govuk-summary-list'
|
53
|
-
bin_info = []
|
54
46
|
waste_services = soup.find_all(
|
55
47
|
"h3", class_="govuk-heading-m waste-service-name"
|
56
48
|
)
|
@@ -58,7 +50,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
58
50
|
for service in waste_services:
|
59
51
|
service_title = service.get_text(strip=True)
|
60
52
|
next_collection = service.find_next_sibling().find(
|
61
|
-
"dt",
|
53
|
+
"dt", string="Next collection"
|
62
54
|
)
|
63
55
|
|
64
56
|
if next_collection:
|
@@ -69,8 +61,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
69
61
|
next_collection_date_parse = next_collection_date.split(",")[
|
70
62
|
1
|
71
63
|
].strip()
|
72
|
-
day = next_collection_date_parse.split()[
|
73
|
-
month = next_collection_date_parse.split()[1]
|
64
|
+
day, month = next_collection_date_parse.split()[:2]
|
74
65
|
|
75
66
|
# Remove the suffix (e.g., 'th', 'nd', 'rd', 'st') from the day
|
76
67
|
if day.endswith(("th", "nd", "rd", "st")):
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import time
|
2
|
-
|
3
2
|
import pandas as pd
|
4
3
|
from selenium.webdriver.common.by import By
|
5
4
|
from selenium.webdriver.common.keys import Keys
|
6
5
|
from selenium.webdriver.support.ui import Select
|
6
|
+
from io import StringIO
|
7
7
|
|
8
|
-
from uk_bin_collection.uk_bin_collection.common import
|
8
|
+
from uk_bin_collection.uk_bin_collection.common import create_webdriver
|
9
9
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
10
10
|
|
11
11
|
|
@@ -16,7 +16,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
16
16
|
implementation.
|
17
17
|
"""
|
18
18
|
|
19
|
-
def get_data(self, df) -> dict:
|
19
|
+
def get_data(self, df: pd.DataFrame) -> dict:
|
20
20
|
# Create dictionary of data to be returned
|
21
21
|
data = {"bins": []}
|
22
22
|
|
@@ -69,7 +69,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
69
69
|
time.sleep(4)
|
70
70
|
|
71
71
|
# Submit address information and wait
|
72
|
-
|
72
|
+
driver.find_element(
|
73
73
|
By.ID, "COPYOFECHOCOLLECTIONDATES_ADDRESSSELECTION_NAV1_NEXT"
|
74
74
|
).click()
|
75
75
|
|
@@ -79,8 +79,10 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
79
79
|
table = driver.find_element(
|
80
80
|
By.ID, "COPYOFECHOCOLLECTIONDATES_PAGE1_DATES2"
|
81
81
|
).get_attribute("outerHTML")
|
82
|
-
|
83
|
-
|
82
|
+
|
83
|
+
# Wrap the HTML table in a StringIO object to address the warning
|
84
|
+
table_io = StringIO(table)
|
85
|
+
df = pd.read_html(table_io, header=[1])[0]
|
84
86
|
|
85
87
|
# Parse data into dict
|
86
88
|
data = self.get_data(df)
|
@@ -1,6 +1,10 @@
|
|
1
1
|
from bs4 import BeautifulSoup
|
2
|
+
import requests
|
3
|
+
import logging
|
4
|
+
import re
|
5
|
+
from typing import Dict, List, Any, Optional
|
2
6
|
|
3
|
-
from uk_bin_collection.uk_bin_collection.common import
|
7
|
+
from uk_bin_collection.uk_bin_collection.common import check_uprn
|
4
8
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
5
9
|
|
6
10
|
|
@@ -11,10 +15,14 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
11
15
|
implementation.
|
12
16
|
"""
|
13
17
|
|
14
|
-
def parse_data(self, page: str, **kwargs) ->
|
15
|
-
data = {"bins": []}
|
18
|
+
def parse_data(self, page: str, **kwargs: Any) -> Dict[str, List[Dict[str, str]]]:
|
19
|
+
data: Dict[str, List[Dict[str, str]]] = {"bins": []}
|
20
|
+
|
21
|
+
uprn: Optional[str] = kwargs.get("uprn")
|
22
|
+
|
23
|
+
if uprn is None:
|
24
|
+
raise ValueError("UPRN is required and must be a non-empty string.")
|
16
25
|
|
17
|
-
uprn = kwargs.get("uprn")
|
18
26
|
check_uprn(uprn) # Assuming check_uprn() raises an exception if UPRN is invalid
|
19
27
|
|
20
28
|
try:
|
@@ -42,7 +50,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
42
50
|
|
43
51
|
if service_name_element and next_service_element:
|
44
52
|
service = service_name_element.text
|
45
|
-
next_collection = next_service_element.find(
|
53
|
+
next_collection = next_service_element.find(string=date_regex)
|
46
54
|
|
47
55
|
if next_collection:
|
48
56
|
dict_data = {
|
@@ -29,7 +29,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
29
29
|
start = BeautifulSoup(req.text, features="html.parser")
|
30
30
|
start.prettify()
|
31
31
|
base_link = start.select(
|
32
|
-
"#menu-content > div > div:nth-child(1) > p.govuk-body.govuk
|
32
|
+
"#menu-content > div > div:nth-child(1) > p.govuk-body.govuk-\\!-margin-bottom-0.colorblue.lineheight15 > a"
|
33
33
|
)[0].attrs.get("href")
|
34
34
|
|
35
35
|
# We need to reorder the query parts from the unique URL, so split them up to make it easier
|
uk_bin_collection-0.81.0/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
import logging
|
2
|
+
import pickle
|
3
|
+
import time
|
4
|
+
|
5
|
+
import requests
|
6
|
+
from bs4 import BeautifulSoup
|
7
|
+
from selenium import webdriver
|
8
|
+
from selenium.webdriver.common.by import By
|
9
|
+
from selenium.webdriver.common.keys import Keys
|
10
|
+
from selenium.webdriver.support import expected_conditions as EC
|
11
|
+
from selenium.webdriver.support.ui import Select
|
12
|
+
from selenium.webdriver.support.wait import WebDriverWait
|
13
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
14
|
+
|
15
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
16
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
17
|
+
|
18
|
+
# Set up logging
|
19
|
+
logging.basicConfig(
|
20
|
+
level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
|
21
|
+
)
|
22
|
+
|
23
|
+
|
24
|
+
class CouncilClass(AbstractGetBinDataClass):
|
25
|
+
|
26
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
27
|
+
driver = None
|
28
|
+
try:
|
29
|
+
data = {"bins": []}
|
30
|
+
collections = []
|
31
|
+
user_uprn = kwargs.get("uprn")
|
32
|
+
user_postcode = kwargs.get("postcode")
|
33
|
+
web_driver = kwargs.get("web_driver")
|
34
|
+
headless = kwargs.get("headless")
|
35
|
+
check_postcode(user_postcode)
|
36
|
+
url = "https://selfservice.wychavon.gov.uk/wdcroundlookup/wdc_search.jsp"
|
37
|
+
|
38
|
+
# Get session cookies using requests
|
39
|
+
|
40
|
+
user_agent = """general.useragent.override", "userAgent=Mozilla/5.0
|
41
|
+
(iPhone; CPU iPhone OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like
|
42
|
+
Gecko) CriOS/101.0.4951.44 Mobile/15E148 Safari/604.1"""
|
43
|
+
|
44
|
+
# Create Selenium webdriver
|
45
|
+
driver = create_webdriver(web_driver, headless, user_agent, __name__)
|
46
|
+
|
47
|
+
# Navigate to the page first
|
48
|
+
driver.get(url)
|
49
|
+
|
50
|
+
wait = WebDriverWait(driver, 60)
|
51
|
+
|
52
|
+
logging.info("Accepting cookies")
|
53
|
+
|
54
|
+
try:
|
55
|
+
logging.info("Cookies")
|
56
|
+
cookie_window = wait.until(
|
57
|
+
EC.presence_of_element_located(
|
58
|
+
(By.XPATH, '//div[@id="ccc-content"]')
|
59
|
+
)
|
60
|
+
)
|
61
|
+
time.sleep(2)
|
62
|
+
accept_cookies = WebDriverWait(driver, timeout=10).until(
|
63
|
+
EC.presence_of_element_located(
|
64
|
+
(By.XPATH, '//button[@id="ccc-recommended-settings"]')
|
65
|
+
)
|
66
|
+
)
|
67
|
+
accept_cookies.send_keys(Keys.ENTER)
|
68
|
+
accept_cookies.click()
|
69
|
+
accept_cookies_close = WebDriverWait(driver, timeout=10).until(
|
70
|
+
EC.presence_of_element_located(
|
71
|
+
(By.XPATH, '//button[@id="ccc-close"]')
|
72
|
+
)
|
73
|
+
)
|
74
|
+
accept_cookies_close.send_keys(Keys.ENTER)
|
75
|
+
accept_cookies_close.click()
|
76
|
+
except:
|
77
|
+
print(
|
78
|
+
"Accept cookies banner not found or clickable within the specified time."
|
79
|
+
)
|
80
|
+
pass
|
81
|
+
|
82
|
+
logging.info("Entering postcode")
|
83
|
+
input_element_postcode = wait.until(
|
84
|
+
EC.presence_of_element_located((By.XPATH, '//input[@id="alAddrtxt"]'))
|
85
|
+
)
|
86
|
+
|
87
|
+
input_element_postcode.send_keys(user_postcode)
|
88
|
+
|
89
|
+
logging.info("Searching for postcode")
|
90
|
+
input_element_postcode_btn = wait.until(
|
91
|
+
EC.element_to_be_clickable((By.XPATH, '//button[@id="alAddrbtn"]'))
|
92
|
+
)
|
93
|
+
|
94
|
+
input_element_postcode_btn.click()
|
95
|
+
|
96
|
+
logging.info("Waiting for address dropdown")
|
97
|
+
input_element_postcode_dropdown = wait.until(
|
98
|
+
EC.presence_of_element_located((By.XPATH, '//select[@id="alAddrsel"]'))
|
99
|
+
)
|
100
|
+
|
101
|
+
logging.info("Selecting address")
|
102
|
+
drop_down_values = Select(input_element_postcode_dropdown)
|
103
|
+
option_element = wait.until(
|
104
|
+
EC.presence_of_element_located(
|
105
|
+
(By.CSS_SELECTOR, f'option[value="{str(user_uprn)}"]')
|
106
|
+
)
|
107
|
+
)
|
108
|
+
|
109
|
+
driver.execute_script("arguments[0].scrollIntoView();", option_element)
|
110
|
+
drop_down_values.select_by_value(str(user_uprn))
|
111
|
+
|
112
|
+
input_element_address_btn = wait.until(
|
113
|
+
EC.element_to_be_clickable((By.XPATH, '//input[@id="btnSubmit"]'))
|
114
|
+
)
|
115
|
+
|
116
|
+
input_element_address_btn.click()
|
117
|
+
|
118
|
+
logging.info("Waiting for bin collection page")
|
119
|
+
strong_element = wait.until(
|
120
|
+
EC.presence_of_element_located(
|
121
|
+
(By.XPATH, "//strong[contains(text(), 'Upcoming collections')]")
|
122
|
+
)
|
123
|
+
)
|
124
|
+
|
125
|
+
logging.info("Extracting bin collection data")
|
126
|
+
soup = BeautifulSoup(driver.page_source, features="html.parser")
|
127
|
+
bins = []
|
128
|
+
|
129
|
+
rows = soup.select("table tbody tr")
|
130
|
+
for row in rows:
|
131
|
+
bin_type = row.select_one("td:nth-of-type(2)").contents[0].strip()
|
132
|
+
date_elements = row.select("td:nth-of-type(3) strong")
|
133
|
+
if date_elements:
|
134
|
+
dates = [date.get_text(strip=True) for date in date_elements]
|
135
|
+
else:
|
136
|
+
dates = ["Not applicable"]
|
137
|
+
|
138
|
+
for date in dates:
|
139
|
+
if date != "Not applicable":
|
140
|
+
# Format the date to dd/mm/yyyy
|
141
|
+
formatted_date = re.search(r"\d{2}/\d{2}/\d{4}", date).group(0)
|
142
|
+
bins.append(
|
143
|
+
{"type": bin_type, "collectionDate": formatted_date}
|
144
|
+
)
|
145
|
+
|
146
|
+
bin_data = {"bins": bins}
|
147
|
+
|
148
|
+
return bin_data
|
149
|
+
|
150
|
+
except Exception as e:
|
151
|
+
logging.error(f"An error occurred: {e}")
|
152
|
+
raise
|
153
|
+
|
154
|
+
finally:
|
155
|
+
if driver:
|
156
|
+
driver.quit()
|
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
|
{uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/tests/test_collect_data.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{uk_bin_collection-0.80.0 → uk_bin_collection-0.81.0}/uk_bin_collection/uk_bin_collection/common.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
|
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
|
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
|