uk_bin_collection 0.91.2__tar.gz → 0.93.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.91.2 → uk_bin_collection-0.93.0}/PKG-INFO +17 -12
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/README.md +16 -11
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/pyproject.toml +1 -1
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/input.json +39 -5
- uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +81 -0
- uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +115 -0
- uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +103 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +38 -32
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +2 -1
- uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +114 -0
- uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +99 -0
- uk_bin_collection-0.91.2/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -98
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/LICENSE +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/README.rst +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/features/environment.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/output.schema +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/test_conftest.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/test_get_data.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/common.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
- {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/get_bin_data.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: uk_bin_collection
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.93.0
|
4
4
|
Summary: Python Lib to collect UK Bin Data
|
5
5
|
Author: Robert Bradley
|
6
6
|
Author-email: robbrad182@gmail.com
|
@@ -53,6 +53,21 @@ Most scripts make use of [Beautiful Soup 4](https://pypi.org/project/beautifulso
|
|
53
53
|
|
54
54
|
---
|
55
55
|
|
56
|
+
## Requesting your council
|
57
|
+
> :warning: Please check that a request for your council has not already been made. You can do this by searching on the [Issues](https://github.com/robbrad/UKBinCollectionData/issues) page.
|
58
|
+
|
59
|
+
If an issue already exists, please comment on that issue to express your interest. Please do not open a new issue, as it will be closed as a duplicate.
|
60
|
+
|
61
|
+
If an issue does not already exist, please fill in a new [Council Request](https://github.com/robbrad/UKBinCollectionData/issues/new/choose) form, including as much information as possible, including:
|
62
|
+
- Name of the council
|
63
|
+
- URL to bin collections
|
64
|
+
- An example postcode and/or UPRN (whichever is relevant)
|
65
|
+
- Any further information
|
66
|
+
|
67
|
+
Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council will get added.
|
68
|
+
|
69
|
+
---
|
70
|
+
|
56
71
|
## Home Assistant Usage
|
57
72
|
|
58
73
|
### Install with HACS (recommended)
|
@@ -255,17 +270,6 @@ docker pull selenium/standalone-chrome docker run -d -p 4444:4444 --name seleniu
|
|
255
270
|
|
256
271
|
---
|
257
272
|
|
258
|
-
## Requesting your council
|
259
|
-
To make a request for your council, first check the [Issues](https://github.com/robbrad/UKBinCollectionData/issues) page to make sure it has not already been requested. If not, please fill in a new [Council Request](https://github.com/robbrad/UKBinCollectionData/issues/new/choose) form, including as much information as possible, including:
|
260
|
-
- Name of the council
|
261
|
-
- URL to bin collections
|
262
|
-
- An example postcode and/or UPRN (whichever is relevant)
|
263
|
-
- Any further information
|
264
|
-
|
265
|
-
Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council will get a script.
|
266
|
-
|
267
|
-
---
|
268
|
-
|
269
273
|
## Reports
|
270
274
|
|
271
275
|
- [3.11](https://robbrad.github.io/UKBinCollectionData/3.11/)
|
@@ -371,3 +375,4 @@ Contributions are always welcome! See ```CONTRIBUTING.md``` to get started. Plea
|
|
371
375
|
<img src="https://contrib.rocks/image?repo=robbrad/UKBinCollectionData" alt="Image of contributors"/>
|
372
376
|
</a>
|
373
377
|
|
378
|
+
|
@@ -30,6 +30,21 @@ Most scripts make use of [Beautiful Soup 4](https://pypi.org/project/beautifulso
|
|
30
30
|
|
31
31
|
---
|
32
32
|
|
33
|
+
## Requesting your council
|
34
|
+
> :warning: Please check that a request for your council has not already been made. You can do this by searching on the [Issues](https://github.com/robbrad/UKBinCollectionData/issues) page.
|
35
|
+
|
36
|
+
If an issue already exists, please comment on that issue to express your interest. Please do not open a new issue, as it will be closed as a duplicate.
|
37
|
+
|
38
|
+
If an issue does not already exist, please fill in a new [Council Request](https://github.com/robbrad/UKBinCollectionData/issues/new/choose) form, including as much information as possible, including:
|
39
|
+
- Name of the council
|
40
|
+
- URL to bin collections
|
41
|
+
- An example postcode and/or UPRN (whichever is relevant)
|
42
|
+
- Any further information
|
43
|
+
|
44
|
+
Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council will get added.
|
45
|
+
|
46
|
+
---
|
47
|
+
|
33
48
|
## Home Assistant Usage
|
34
49
|
|
35
50
|
### Install with HACS (recommended)
|
@@ -232,17 +247,6 @@ docker pull selenium/standalone-chrome docker run -d -p 4444:4444 --name seleniu
|
|
232
247
|
|
233
248
|
---
|
234
249
|
|
235
|
-
## Requesting your council
|
236
|
-
To make a request for your council, first check the [Issues](https://github.com/robbrad/UKBinCollectionData/issues) page to make sure it has not already been requested. If not, please fill in a new [Council Request](https://github.com/robbrad/UKBinCollectionData/issues/new/choose) form, including as much information as possible, including:
|
237
|
-
- Name of the council
|
238
|
-
- URL to bin collections
|
239
|
-
- An example postcode and/or UPRN (whichever is relevant)
|
240
|
-
- Any further information
|
241
|
-
|
242
|
-
Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council will get a script.
|
243
|
-
|
244
|
-
---
|
245
|
-
|
246
250
|
## Reports
|
247
251
|
|
248
252
|
- [3.11](https://robbrad.github.io/UKBinCollectionData/3.11/)
|
@@ -347,3 +351,4 @@ Contributions are always welcome! See ```CONTRIBUTING.md``` to get started. Plea
|
|
347
351
|
<a href="https://github.com/robbrad/UKBinCollectionData/graphs/contributors">
|
348
352
|
<img src="https://contrib.rocks/image?repo=robbrad/UKBinCollectionData" alt="Image of contributors"/>
|
349
353
|
</a>
|
354
|
+
|
@@ -42,7 +42,13 @@
|
|
42
42
|
"wiki_name": "Barnsley Metropolitan Borough Council",
|
43
43
|
"wiki_note": "To get the UPRN, you will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search)."
|
44
44
|
},
|
45
|
-
|
45
|
+
"BasildonCouncil": {
|
46
|
+
"skip_get_url": true,
|
47
|
+
"uprn": "10013350430",
|
48
|
+
"url": "https://basildonportal.azurewebsites.net/api/getPropertyRefuseInformation",
|
49
|
+
"wiki_name": "Basildon Council"
|
50
|
+
},
|
51
|
+
"BasingstokeCouncil": {
|
46
52
|
"skip_get_url": true,
|
47
53
|
"uprn": "100060220926",
|
48
54
|
"url": "https://www.basingstoke.gov.uk/bincollection",
|
@@ -109,6 +115,7 @@
|
|
109
115
|
"wiki_note": "To get the UPRN, you will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search). Previously required single field that was UPRN and full address, now requires UPRN and postcode as separate fields."
|
110
116
|
},
|
111
117
|
"BracknellForestCouncil": {
|
118
|
+
"house_number": "57",
|
112
119
|
"paon": "57",
|
113
120
|
"postcode": "GU47 9BS",
|
114
121
|
"skip_get_url": true,
|
@@ -155,10 +162,10 @@
|
|
155
162
|
"wiki_name": "Broxtowe Borough Council"
|
156
163
|
},
|
157
164
|
"BuckinghamshireCouncil": {
|
158
|
-
"house_number": "
|
159
|
-
"postcode": "
|
165
|
+
"house_number": "2",
|
166
|
+
"postcode": "HP13 7BA",
|
160
167
|
"skip_get_url": true,
|
161
|
-
"url": "https://
|
168
|
+
"url": "https://iapp.itouchvision.com/iappcollectionday/collection-day/?uuid=FA353FC74600CBE61BE409534D00A8EC09BDA3AC&lang=en",
|
162
169
|
"web_driver": "http://selenium:4444",
|
163
170
|
"wiki_name": "Buckinghamshire Council (Chiltern, South Bucks, Wycombe)",
|
164
171
|
"wiki_note": "Pass the name of the street with the house number parameter, wrapped in double quotes"
|
@@ -247,6 +254,16 @@
|
|
247
254
|
"wiki_name": "Chorley Council",
|
248
255
|
"wiki_note": "Chorley needs to be passed both a Postcode & UPRN in the format of UPRNXXXXXX to work. Find this on [FindMyAddress](https://www.findmyaddress.co.uk/search)"
|
249
256
|
},
|
257
|
+
"ColchesterCityCouncil": {
|
258
|
+
"house_number": "29",
|
259
|
+
"paon": "29",
|
260
|
+
"postcode": "CO2 8UN",
|
261
|
+
"skip_get_url": false,
|
262
|
+
"url": "https://www.colchester.gov.uk/your-recycling-calendar",
|
263
|
+
"web_driver": "http://selenium:4444",
|
264
|
+
"wiki_name": "Colchester City Council",
|
265
|
+
"wiki_note": "Pass the house name/number in the house number parameter, wrapped in double quotes"
|
266
|
+
},
|
250
267
|
"ConwyCountyBorough": {
|
251
268
|
"postcode": "LL30 2DF",
|
252
269
|
"uprn": "100100429249",
|
@@ -649,9 +666,9 @@
|
|
649
666
|
"wiki_note": "UPRN can only be parsed with a valid postcode."
|
650
667
|
},
|
651
668
|
"NeathPortTalbotCouncil": {
|
669
|
+
"house_number": "2",
|
652
670
|
"postcode": "SA13 3BA",
|
653
671
|
"skip_get_url": true,
|
654
|
-
"uprn": "10023947752",
|
655
672
|
"url": "https://www.npt.gov.uk",
|
656
673
|
"web_driver": "http://selenium:4444",
|
657
674
|
"wiki_name": "Neath Port Talbot Council"
|
@@ -1219,6 +1236,16 @@
|
|
1219
1236
|
"url": "https://ilambassadorformsprod.azurewebsites.net/wastecollectiondays/index",
|
1220
1237
|
"wiki_name": "Wiltshire Council"
|
1221
1238
|
},
|
1239
|
+
"WinchesterCityCouncil": {
|
1240
|
+
"house_number": "12",
|
1241
|
+
"paon": "12",
|
1242
|
+
"postcode": "SO23 7GA",
|
1243
|
+
"skip_get_url": false,
|
1244
|
+
"url": "https://iportal.itouchvision.com/icollectionday/collection-day",
|
1245
|
+
"web_driver": "http://selenium:4444",
|
1246
|
+
"wiki_name": "Winchester City Council",
|
1247
|
+
"wiki_note": "Pass the house name/number in the house number parameter, wrapped in double quotes"
|
1248
|
+
},
|
1222
1249
|
"WindsorAndMaidenheadCouncil": {
|
1223
1250
|
"web_driver": "http://selenium:4444",
|
1224
1251
|
"uprn": "100080371082",
|
@@ -1234,6 +1261,13 @@
|
|
1234
1261
|
"wiki_name": "Woking Borough Council/Joint Waste Solutions",
|
1235
1262
|
"wiki_note": "Works with all collection areas that use Joint Waste Solutions. Just use the correct URL."
|
1236
1263
|
},
|
1264
|
+
"WokinghamBoroughCouncil": {
|
1265
|
+
"house_number": "90",
|
1266
|
+
"postcode": "RG40 2HR",
|
1267
|
+
"skip_get_url": true,
|
1268
|
+
"url": "https://www.wokingham.gov.uk/rubbish-and-recycling/waste-collection/find-your-bin-collection-day",
|
1269
|
+
"wiki_name": "Wokingham Borough Council"
|
1270
|
+
},
|
1237
1271
|
"WychavonDistrictCouncil": {
|
1238
1272
|
"postcode": "WR3 7RU",
|
1239
1273
|
"skip_get_url": true,
|
@@ -0,0 +1,81 @@
|
|
1
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
2
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
3
|
+
|
4
|
+
|
5
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
6
|
+
class CouncilClass(AbstractGetBinDataClass):
|
7
|
+
"""
|
8
|
+
Concrete classes have to implement all abstract operations of the
|
9
|
+
base class. They can also override some operations with a default
|
10
|
+
implementation.
|
11
|
+
"""
|
12
|
+
|
13
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
14
|
+
url_base = "https://basildonportal.azurewebsites.net/api/getPropertyRefuseInformation"
|
15
|
+
|
16
|
+
uprn = kwargs.get("uprn")
|
17
|
+
# Check the UPRN is valid
|
18
|
+
check_uprn(uprn)
|
19
|
+
|
20
|
+
payload = {
|
21
|
+
# Add your payload details here (replace this with the actual payload structure if required)
|
22
|
+
"uprn": uprn
|
23
|
+
}
|
24
|
+
|
25
|
+
# Headers for the request
|
26
|
+
headers = {
|
27
|
+
"Content-Type": "application/json"
|
28
|
+
}
|
29
|
+
|
30
|
+
response = requests.post(url_base, data=json.dumps(payload), headers=headers)
|
31
|
+
|
32
|
+
# Ensure the request was successful
|
33
|
+
if response.status_code == 200:
|
34
|
+
data = response.json()
|
35
|
+
|
36
|
+
# Initialize an empty list to store the bin collection details
|
37
|
+
|
38
|
+
bins = []
|
39
|
+
|
40
|
+
# Function to add collection details to bins list
|
41
|
+
def add_collection(service_name, collection_data):
|
42
|
+
bins.append({
|
43
|
+
"type": service_name,
|
44
|
+
"collectionDate": collection_data.get("current_collection_date")
|
45
|
+
})
|
46
|
+
|
47
|
+
# Extract refuse information
|
48
|
+
available_services = data["refuse"]["available_services"]
|
49
|
+
|
50
|
+
for service_name, service_data in available_services.items():
|
51
|
+
# Append the service name and current collection date to the "bins" list
|
52
|
+
match service_data["container"]:
|
53
|
+
case "Green Wheelie Bin":
|
54
|
+
subscription_status = service_data["subscription"]["active"] if service_data["subscription"] else False
|
55
|
+
type_descr = f"Green Wheelie Bin ({"Active" if subscription_status else "Expired"})"
|
56
|
+
case "N/A":
|
57
|
+
type_descr = service_data["name"]
|
58
|
+
case _:
|
59
|
+
type_descr = service_data["container"]
|
60
|
+
|
61
|
+
|
62
|
+
date_str = service_data.get("current_collection_date")
|
63
|
+
# Parse the date string into a datetime object
|
64
|
+
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
|
65
|
+
|
66
|
+
# Convert the datetime object to the desired format
|
67
|
+
formatted_date = date_obj.strftime(date_format)
|
68
|
+
|
69
|
+
bins.append({
|
70
|
+
"type": type_descr, # Use service name from the data
|
71
|
+
"collectionDate": formatted_date
|
72
|
+
})
|
73
|
+
|
74
|
+
else:
|
75
|
+
print(f"Failed to fetch data. Status code: {response.status_code}")
|
76
|
+
|
77
|
+
data = {
|
78
|
+
"bins": bins
|
79
|
+
}
|
80
|
+
|
81
|
+
return data
|
uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
from bs4 import BeautifulSoup
|
2
|
+
from selenium.webdriver.common.by import By
|
3
|
+
from selenium.webdriver.support import expected_conditions as EC
|
4
|
+
from selenium.webdriver.support.wait import WebDriverWait
|
5
|
+
|
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
|
+
Concrete classes have to implement all abstract operations of the
|
13
|
+
base class. They can also override some operations with a default
|
14
|
+
implementation.
|
15
|
+
"""
|
16
|
+
|
17
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
18
|
+
driver = None
|
19
|
+
try:
|
20
|
+
data = {"bins": []}
|
21
|
+
user_paon = kwargs.get("paon")
|
22
|
+
user_postcode = kwargs.get("postcode")
|
23
|
+
web_driver = kwargs.get("web_driver")
|
24
|
+
headless = kwargs.get("headless")
|
25
|
+
check_paon(user_paon)
|
26
|
+
check_postcode(user_postcode)
|
27
|
+
|
28
|
+
# Create Selenium webdriver
|
29
|
+
driver = create_webdriver(web_driver, headless, None, __name__)
|
30
|
+
driver.get(
|
31
|
+
"https://iapp.itouchvision.com/iappcollectionday/collection-day/?uuid=FA353FC74600CBE61BE409534D00A8EC09BDA3AC&lang=en"
|
32
|
+
)
|
33
|
+
|
34
|
+
# Wait for the postcode field to appear then populate it
|
35
|
+
inputElement_postcode = WebDriverWait(driver, 10).until(
|
36
|
+
EC.presence_of_element_located((By.ID, "postcodeSearch"))
|
37
|
+
)
|
38
|
+
inputElement_postcode.send_keys(user_postcode)
|
39
|
+
|
40
|
+
# Click search button
|
41
|
+
findAddress = WebDriverWait(driver, 10).until(
|
42
|
+
EC.presence_of_element_located(
|
43
|
+
(By.XPATH, '//button[@class="govuk-button mt-4"]')
|
44
|
+
)
|
45
|
+
)
|
46
|
+
findAddress.click()
|
47
|
+
|
48
|
+
# Wait for the 'Select address' dropdown to appear and select option matching the house name/number
|
49
|
+
WebDriverWait(driver, 10).until(
|
50
|
+
EC.element_to_be_clickable(
|
51
|
+
(
|
52
|
+
By.XPATH,
|
53
|
+
"//select[@id='addressSelect']//option[contains(., '"
|
54
|
+
+ user_paon
|
55
|
+
+ "')]",
|
56
|
+
)
|
57
|
+
)
|
58
|
+
).click()
|
59
|
+
|
60
|
+
# Wait for the collections table to appear
|
61
|
+
WebDriverWait(driver, 10).until(
|
62
|
+
EC.presence_of_element_located(
|
63
|
+
(
|
64
|
+
By.XPATH,
|
65
|
+
'//div[@class="ant-row d-flex justify-content-between mb-4 mt-2 css-2rgkd4"]',
|
66
|
+
)
|
67
|
+
)
|
68
|
+
)
|
69
|
+
|
70
|
+
soup = BeautifulSoup(driver.page_source, features="html.parser")
|
71
|
+
|
72
|
+
recyclingcalendar = soup.find(
|
73
|
+
"div",
|
74
|
+
{
|
75
|
+
"class": "ant-row d-flex justify-content-between mb-4 mt-2 css-2rgkd4"
|
76
|
+
},
|
77
|
+
)
|
78
|
+
|
79
|
+
rows = recyclingcalendar.find_all(
|
80
|
+
"div",
|
81
|
+
{
|
82
|
+
"class": "ant-col ant-col-xs-12 ant-col-sm-12 ant-col-md-12 ant-col-lg-12 ant-col-xl-12 css-2rgkd4"
|
83
|
+
},
|
84
|
+
)
|
85
|
+
|
86
|
+
current_year = datetime.now().year
|
87
|
+
current_month = datetime.now().month
|
88
|
+
|
89
|
+
for row in rows:
|
90
|
+
BinType = row.find("h3").text
|
91
|
+
collectiondate = datetime.strptime(
|
92
|
+
row.find("div", {"class": "text-white fw-bold"}).text,
|
93
|
+
"%A %d %B",
|
94
|
+
)
|
95
|
+
if (current_month > 10) and (collectiondate.month < 3):
|
96
|
+
collectiondate = collectiondate.replace(year=(current_year + 1))
|
97
|
+
else:
|
98
|
+
collectiondate = collectiondate.replace(year=current_year)
|
99
|
+
|
100
|
+
dict_data = {
|
101
|
+
"type": BinType,
|
102
|
+
"collectionDate": collectiondate.strftime("%d/%m/%Y"),
|
103
|
+
}
|
104
|
+
data["bins"].append(dict_data)
|
105
|
+
|
106
|
+
except Exception as e:
|
107
|
+
# Here you can log the exception if needed
|
108
|
+
print(f"An error occurred: {e}")
|
109
|
+
# Optionally, re-raise the exception if you want it to propagate
|
110
|
+
raise
|
111
|
+
finally:
|
112
|
+
# This block ensures that the driver is closed regardless of an exception
|
113
|
+
if driver:
|
114
|
+
driver.quit()
|
115
|
+
return data
|
uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
from bs4 import BeautifulSoup
|
2
|
+
from selenium.webdriver.common.by import By
|
3
|
+
from selenium.webdriver.support import expected_conditions as EC
|
4
|
+
from selenium.webdriver.support.wait import WebDriverWait
|
5
|
+
|
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
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
11
|
+
class CouncilClass(AbstractGetBinDataClass):
|
12
|
+
"""
|
13
|
+
Concrete classes have to implement all abstract operations of the
|
14
|
+
base class. They can also override some operations with a default
|
15
|
+
implementation.
|
16
|
+
"""
|
17
|
+
|
18
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
19
|
+
driver = None
|
20
|
+
try:
|
21
|
+
data = {"bins": []}
|
22
|
+
user_paon = kwargs.get("paon")
|
23
|
+
user_postcode = kwargs.get("postcode")
|
24
|
+
web_driver = kwargs.get("web_driver")
|
25
|
+
headless = kwargs.get("headless")
|
26
|
+
check_paon(user_paon)
|
27
|
+
check_postcode(user_postcode)
|
28
|
+
|
29
|
+
# Create Selenium webdriver
|
30
|
+
driver = create_webdriver(web_driver, headless, None, __name__)
|
31
|
+
driver.get(
|
32
|
+
"https://www.colchester.gov.uk/your-recycling-calendar/?start=true"
|
33
|
+
)
|
34
|
+
|
35
|
+
accept_button = WebDriverWait(driver, timeout=30).until(
|
36
|
+
EC.element_to_be_clickable((By.ID, "ccc-notify-accept"))
|
37
|
+
)
|
38
|
+
accept_button.click()
|
39
|
+
|
40
|
+
# Wait for the postcode field to appear then populate it
|
41
|
+
inputElement_postcode = WebDriverWait(driver, 10).until(
|
42
|
+
EC.presence_of_element_located((By.CLASS_NAME, "input-text"))
|
43
|
+
)
|
44
|
+
inputElement_postcode.send_keys(user_postcode)
|
45
|
+
|
46
|
+
# Click search button
|
47
|
+
findAddress = WebDriverWait(driver, 10).until(
|
48
|
+
EC.presence_of_element_located((By.CLASS_NAME, "button-small"))
|
49
|
+
)
|
50
|
+
findAddress.click()
|
51
|
+
|
52
|
+
# Wait for the 'Select address' dropdown to appear and select option matching the house name/number
|
53
|
+
WebDriverWait(driver, 10).until(
|
54
|
+
EC.element_to_be_clickable(
|
55
|
+
(
|
56
|
+
By.XPATH,
|
57
|
+
"//select[@class='input-select']//option[contains(., '"
|
58
|
+
+ user_paon
|
59
|
+
+ "')]",
|
60
|
+
)
|
61
|
+
)
|
62
|
+
).click()
|
63
|
+
|
64
|
+
WebDriverWait(driver, 10).until(
|
65
|
+
EC.presence_of_element_located((By.CLASS_NAME, "button-small"))
|
66
|
+
).click()
|
67
|
+
|
68
|
+
# Wait for the collections table to appear
|
69
|
+
WebDriverWait(driver, 10).until(
|
70
|
+
EC.presence_of_element_located((By.CLASS_NAME, "recycling-calendar"))
|
71
|
+
)
|
72
|
+
|
73
|
+
soup = BeautifulSoup(driver.page_source, features="html.parser")
|
74
|
+
|
75
|
+
recyclingcalendar = soup.find("div", {"class": "recycling-calendar"})
|
76
|
+
|
77
|
+
rows = recyclingcalendar.find_all(
|
78
|
+
"div", {"class": "recycling-calendar-row"}
|
79
|
+
)
|
80
|
+
|
81
|
+
for row in rows:
|
82
|
+
collectiondate = datetime.strptime(
|
83
|
+
row.find("strong").get_text(),
|
84
|
+
"%d %B %Y",
|
85
|
+
)
|
86
|
+
listobj = row.find("ul")
|
87
|
+
for li in listobj.find_all("li"):
|
88
|
+
dict_data = {
|
89
|
+
"type": li.get_text().strip(),
|
90
|
+
"collectionDate": collectiondate.strftime("%d/%m/%Y"),
|
91
|
+
}
|
92
|
+
data["bins"].append(dict_data)
|
93
|
+
|
94
|
+
except Exception as e:
|
95
|
+
# Here you can log the exception if needed
|
96
|
+
print(f"An error occurred: {e}")
|
97
|
+
# Optionally, re-raise the exception if you want it to propagate
|
98
|
+
raise
|
99
|
+
finally:
|
100
|
+
# This block ensures that the driver is closed regardless of an exception
|
101
|
+
if driver:
|
102
|
+
driver.quit()
|
103
|
+
return data
|
@@ -22,16 +22,16 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
22
22
|
driver = None
|
23
23
|
try:
|
24
24
|
data = {"bins": []}
|
25
|
-
|
25
|
+
user_paon = kwargs.get("paon")
|
26
26
|
user_postcode = kwargs.get("postcode")
|
27
27
|
web_driver = kwargs.get("web_driver")
|
28
28
|
headless = kwargs.get("headless")
|
29
|
-
|
29
|
+
check_paon(user_paon)
|
30
30
|
check_postcode(user_postcode)
|
31
31
|
|
32
32
|
# Create Selenium webdriver
|
33
33
|
driver = create_webdriver(web_driver, headless, None, __name__)
|
34
|
-
driver.get("https://
|
34
|
+
driver.get("https://beta.npt.gov.uk/bins-and-recycling/bin-day-finder/")
|
35
35
|
|
36
36
|
# Accept cookies banner
|
37
37
|
cookieAccept = WebDriverWait(driver, 10).until(
|
@@ -40,9 +40,13 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
40
40
|
cookieAccept.click()
|
41
41
|
|
42
42
|
# Populate postcode field
|
43
|
-
inputElement_postcode = driver.
|
44
|
-
|
45
|
-
|
43
|
+
inputElement_postcode = WebDriverWait(driver, 10).until(
|
44
|
+
EC.presence_of_element_located(
|
45
|
+
(
|
46
|
+
By.ID,
|
47
|
+
"PostCode",
|
48
|
+
)
|
49
|
+
)
|
46
50
|
)
|
47
51
|
inputElement_postcode.send_keys(user_postcode)
|
48
52
|
|
@@ -50,67 +54,69 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
50
54
|
findAddress = WebDriverWait(driver, 10).until(
|
51
55
|
EC.presence_of_element_located(
|
52
56
|
(
|
53
|
-
By.
|
54
|
-
"
|
57
|
+
By.XPATH,
|
58
|
+
"//button[@value='Find address']",
|
55
59
|
)
|
56
60
|
)
|
57
61
|
)
|
58
62
|
findAddress.click()
|
59
63
|
|
60
|
-
time.sleep(1)
|
61
|
-
|
62
64
|
# Wait for the 'Select address' dropdown to appear and select option matching UPRN
|
63
65
|
dropdown = WebDriverWait(driver, 10).until(
|
64
66
|
EC.presence_of_element_located(
|
65
67
|
(
|
66
68
|
By.ID,
|
67
|
-
"
|
69
|
+
"Address",
|
68
70
|
)
|
69
71
|
)
|
70
72
|
)
|
71
|
-
#
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
)
|
73
|
+
# Wait for the 'Select address' dropdown to appear and select option matching the house name/number
|
74
|
+
WebDriverWait(driver, 10).until(
|
75
|
+
EC.presence_of_element_located(
|
76
|
+
(
|
77
|
+
By.XPATH,
|
78
|
+
"//select[@ID='Address']//option[contains(., '"
|
79
|
+
+ user_paon
|
80
|
+
+ "')]",
|
81
|
+
)
|
82
|
+
)
|
83
|
+
).click()
|
83
84
|
|
84
85
|
# Wait for the submit button to appear, then click it to get the collection dates
|
85
86
|
submit = WebDriverWait(driver, 10).until(
|
86
87
|
EC.presence_of_element_located(
|
87
|
-
(
|
88
|
+
(
|
89
|
+
By.XPATH,
|
90
|
+
"//input[@value='Find bin day']",
|
91
|
+
)
|
88
92
|
)
|
89
93
|
)
|
90
94
|
submit.click()
|
91
95
|
|
92
96
|
soup = BeautifulSoup(driver.page_source, features="html.parser")
|
93
97
|
|
94
|
-
|
95
|
-
property_details = soup.find(
|
98
|
+
soup = soup.find(
|
96
99
|
"div",
|
97
|
-
{
|
98
|
-
"id": "ContentPlaceHolderDefault_ctl13_nptLLPG2_25_divPropertyDetails"
|
99
|
-
},
|
100
|
+
{"id": "contentInner"},
|
100
101
|
)
|
101
102
|
|
102
103
|
# Get the dates
|
103
|
-
for date in
|
104
|
+
for date in soup.find_all("h2"):
|
104
105
|
if date.get_text(strip=True) != "Bank Holidays":
|
105
106
|
bin_date = datetime.strptime(
|
106
|
-
date.get_text(strip=True)
|
107
|
+
date.get_text(strip=True)
|
108
|
+
.removesuffix("(Today)")
|
109
|
+
.replace(" ", " ")
|
107
110
|
+ " "
|
108
111
|
+ datetime.now().strftime("%Y"),
|
109
112
|
"%A, %d %B %Y",
|
110
113
|
)
|
111
114
|
bin_types_wrapper = date.find_next_sibling("div")
|
112
115
|
for bin_type_wrapper in bin_types_wrapper.find_all(
|
113
|
-
"div",
|
116
|
+
"div",
|
117
|
+
{
|
118
|
+
"class": "card-body ps-5 ps-md-4 ps-lg-5 position-relative bg-white"
|
119
|
+
},
|
114
120
|
):
|
115
121
|
if bin_date and bin_type_wrapper:
|
116
122
|
bin_type = bin_type_wrapper.find("a").get_text(strip=True)
|
@@ -36,7 +36,8 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
36
36
|
collection_date = datetime.strptime(
|
37
37
|
remove_ordinal_indicator_from_date_string(
|
38
38
|
week_text[0].split(" - ")[0]
|
39
|
-
)
|
39
|
+
)
|
40
|
+
.strip(),
|
40
41
|
"%A %d %B",
|
41
42
|
)
|
42
43
|
next_collection = collection_date.replace(year=datetime.now().year)
|