uk_bin_collection 0.94.0__tar.gz → 0.96.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.94.0 → uk_bin_collection-0.96.0}/PKG-INFO +1 -1
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/pyproject.toml +1 -1
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/input.json +34 -0
- uk_bin_collection-0.96.0/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +91 -0
- uk_bin_collection-0.96.0/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +88 -0
- uk_bin_collection-0.96.0/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +50 -0
- uk_bin_collection-0.96.0/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +60 -0
- uk_bin_collection-0.96.0/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +136 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/LICENSE +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/README.md +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/README.rst +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/features/environment.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/output.schema +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/test_conftest.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/test_get_data.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/common.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
- {uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/uk_bin_collection/get_bin_data.py +0 -0
@@ -399,6 +399,13 @@
|
|
399
399
|
"url": "https://www.eastleigh.gov.uk/waste-bins-and-recycling/collection-dates/your-waste-bin-and-recycling-collections?uprn=",
|
400
400
|
"wiki_name": "Eastleigh Borough Council"
|
401
401
|
},
|
402
|
+
"ElmbridgeBoroughCouncil": {
|
403
|
+
"url": "https://www.elmbridge.gov.uk",
|
404
|
+
"wiki_command_url_override": "https://www.elmbridge.gov.uk",
|
405
|
+
"uprn": "10013119164",
|
406
|
+
"wiki_name": "Elmbridge Borough Council",
|
407
|
+
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
408
|
+
},
|
402
409
|
"EnfieldCouncil": {
|
403
410
|
"house_number": "111",
|
404
411
|
"postcode": "N13 5AJ",
|
@@ -509,6 +516,13 @@
|
|
509
516
|
"wiki_name": "Harrogate Borough Council",
|
510
517
|
"wiki_note": "Pass the UPRN which can be found at https://secure.harrogate.gov.uk/inmyarea URL doesn't need to be passed."
|
511
518
|
},
|
519
|
+
"HighlandCouncil": {
|
520
|
+
"url": "https://www.highland.gov.uk",
|
521
|
+
"wiki_command_url_override": "https://www.highland.gov.uk",
|
522
|
+
"uprn": "130072429",
|
523
|
+
"wiki_name": "Highland Council",
|
524
|
+
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
525
|
+
},
|
512
526
|
"HighPeakCouncil": {
|
513
527
|
"house_number": "9 Ellison Street, Glossop",
|
514
528
|
"postcode": "SK13 8BX",
|
@@ -598,6 +612,12 @@
|
|
598
612
|
"wiki_name": "Liverpool City Council",
|
599
613
|
"wiki_note": "Replace XXXXXXXX with your property's UPRN."
|
600
614
|
},
|
615
|
+
"LondonBoroughEaling": {
|
616
|
+
"skip_get_url": true,
|
617
|
+
"uprn": "12081498",
|
618
|
+
"url": "https://www.ealing.gov.uk/site/custom_scripts/WasteCollectionWS/home/FindCollection",
|
619
|
+
"wiki_name": "London Borough Ealing"
|
620
|
+
},
|
601
621
|
"LondonBoroughHounslow": {
|
602
622
|
"skip_get_url": true,
|
603
623
|
"uprn": "100021577765",
|
@@ -955,6 +975,13 @@
|
|
955
975
|
"url": "https://www.scambs.gov.uk/recycling-and-bins/find-your-household-bin-collection-day/",
|
956
976
|
"wiki_name": "South Cambridgeshire Council"
|
957
977
|
},
|
978
|
+
"SouthDerbyshireDistrictCouncil": {
|
979
|
+
"url": "https://maps.southderbyshire.gov.uk/iShareLIVE.web//getdata.aspx?RequestType=LocalInfo&ms=mapsources/MyHouse&format=JSONP&group=Recycling%20Bins%20and%20Waste|Next%20Bin%20Collections&uid=",
|
980
|
+
"wiki_command_url_override": "https://maps.southderbyshire.gov.uk/iShareLIVE.web//getdata.aspx?RequestType=LocalInfo&ms=mapsources/MyHouse&format=JSONP&group=Recycling%20Bins%20and%20Waste|Next%20Bin%20Collections&uid=XXXXXXXX",
|
981
|
+
"uprn": "10000820668",
|
982
|
+
"wiki_name": "South Derbyshire District Council",
|
983
|
+
"wiki_note": "Replace XXXXXXXX with UPRN. You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
984
|
+
},
|
958
985
|
"SouthGloucestershireCouncil": {
|
959
986
|
"skip_get_url": true,
|
960
987
|
"uprn": "566419",
|
@@ -995,6 +1022,13 @@
|
|
995
1022
|
"url": "https://www.southtyneside.gov.uk/article/33352/Bin-collection-dates",
|
996
1023
|
"wiki_name": "South Tyneside Council"
|
997
1024
|
},
|
1025
|
+
"SouthwarkCouncil": {
|
1026
|
+
"url": "https://www.southwark.gov.uk/bins/lookup/",
|
1027
|
+
"wiki_command_url_override": "https://www.southwark.gov.uk/bins/lookup/XXXXXXXX",
|
1028
|
+
"uprn": "200003469271",
|
1029
|
+
"wiki_name": "Southwark Council",
|
1030
|
+
"wiki_note": "Replace XXXXXXXX with UPRN. You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
1031
|
+
},
|
998
1032
|
"StAlbansCityAndDistrictCouncil": {
|
999
1033
|
"skip_get_url": true,
|
1000
1034
|
"uprn": "100081153583",
|
uk_bin_collection-0.96.0/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
import time
|
2
|
+
|
3
|
+
import requests
|
4
|
+
|
5
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
6
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
7
|
+
|
8
|
+
|
9
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
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
|
+
|
19
|
+
user_uprn = kwargs.get("uprn")
|
20
|
+
check_uprn(user_uprn)
|
21
|
+
bindata = {"bins": []}
|
22
|
+
|
23
|
+
BASE_URL = "https://elmbridge-self.achieveservice.com"
|
24
|
+
INTIAL_URL = f"{BASE_URL}/service/Your_bin_collection_days"
|
25
|
+
AUTH_URL = f"{BASE_URL}/authapi/isauthenticated"
|
26
|
+
AUTH_TEST = f"{BASE_URL}/apibroker/domain/elmbridge-self.achieveservice.com"
|
27
|
+
API_URL = f"{BASE_URL}/apibroker/runLookup"
|
28
|
+
|
29
|
+
self._session = requests.Session()
|
30
|
+
r = self._session.get(INTIAL_URL)
|
31
|
+
r.raise_for_status()
|
32
|
+
params: dict[str, str | int] = {
|
33
|
+
"uri": r.url,
|
34
|
+
"hostname": "elmbridge-self.achieveservice.com",
|
35
|
+
"withCredentials": "true",
|
36
|
+
}
|
37
|
+
r = self._session.get(AUTH_URL, params=params)
|
38
|
+
r.raise_for_status()
|
39
|
+
data = r.json()
|
40
|
+
session_key = data["auth-session"]
|
41
|
+
|
42
|
+
params = {
|
43
|
+
"sid": session_key,
|
44
|
+
"_": int(datetime.now().timestamp() * 1000),
|
45
|
+
}
|
46
|
+
r = self._session.get(AUTH_TEST, params=params)
|
47
|
+
r.raise_for_status()
|
48
|
+
|
49
|
+
params: dict[str, int | str] = {
|
50
|
+
"id": "663b557cdaece",
|
51
|
+
"repeat_against": "",
|
52
|
+
"noRetry": "false",
|
53
|
+
"getOnlyTokens": "undefined",
|
54
|
+
"log_id": "",
|
55
|
+
"app_name": "AF-Renderer::Self",
|
56
|
+
"_": int(datetime.now().timestamp() * 1000),
|
57
|
+
"sid": session_key,
|
58
|
+
}
|
59
|
+
payload = {
|
60
|
+
"formValues": {
|
61
|
+
"Section 1": {
|
62
|
+
"UPRN": {"value": user_uprn},
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}
|
66
|
+
r = self._session.post(API_URL, params=params, json=payload)
|
67
|
+
r.raise_for_status()
|
68
|
+
|
69
|
+
data = r.json()
|
70
|
+
collections = list(r.json()["integration"]["transformed"]["rows_data"].values())
|
71
|
+
|
72
|
+
for collection in collections:
|
73
|
+
date = collection["Date"]
|
74
|
+
for service in [
|
75
|
+
collection["Service1"],
|
76
|
+
collection["Service2"],
|
77
|
+
collection["Service3"],
|
78
|
+
]:
|
79
|
+
if not service:
|
80
|
+
continue
|
81
|
+
service = service.removesuffix(" Collection Service")
|
82
|
+
|
83
|
+
dict_data = {
|
84
|
+
"type": service,
|
85
|
+
"collectionDate": datetime.strptime(
|
86
|
+
date, "%d/%m/%Y %H:%M:%S"
|
87
|
+
).strftime("%d/%m/%Y"),
|
88
|
+
}
|
89
|
+
bindata["bins"].append(dict_data)
|
90
|
+
|
91
|
+
return bindata
|
@@ -0,0 +1,88 @@
|
|
1
|
+
import time
|
2
|
+
|
3
|
+
import requests
|
4
|
+
|
5
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
6
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
7
|
+
|
8
|
+
|
9
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
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
|
+
|
19
|
+
user_uprn = kwargs.get("uprn")
|
20
|
+
check_uprn(user_uprn)
|
21
|
+
bindata = {"bins": []}
|
22
|
+
|
23
|
+
SESSION_URL = "https://highland-self.achieveservice.com/authapi/isauthenticated?uri=https%3A%2F%2Fhighland-self.achieveservice.com%2Fen%2Fservice%2FCheck_your_household_bin_collection_days&hostname=highland-self.achieveservice.com&withCredentials=true"
|
24
|
+
|
25
|
+
API_URL = "https://highland-self.achieveservice.com/apibroker/runLookup"
|
26
|
+
|
27
|
+
data = {
|
28
|
+
"formValues": {"Your address": {"propertyuprn": {"value": user_uprn}}},
|
29
|
+
}
|
30
|
+
headers = {
|
31
|
+
"Content-Type": "application/json",
|
32
|
+
"Accept": "application/json",
|
33
|
+
"User-Agent": "Mozilla/5.0",
|
34
|
+
"X-Requested-With": "XMLHttpRequest",
|
35
|
+
"Referer": "https://highland-self.achieveservice.com/fillform/?iframe_id=fillform-frame-1&db_id=",
|
36
|
+
}
|
37
|
+
s = requests.session()
|
38
|
+
r = s.get(SESSION_URL)
|
39
|
+
r.raise_for_status()
|
40
|
+
session_data = r.json()
|
41
|
+
sid = session_data["auth-session"]
|
42
|
+
params = {
|
43
|
+
"id": "660d44a698632",
|
44
|
+
"repeat_against": "",
|
45
|
+
"noRetry": "false",
|
46
|
+
"getOnlyTokens": "undefined",
|
47
|
+
"log_id": "",
|
48
|
+
"app_name": "AF-Renderer::Self",
|
49
|
+
# unix_timestamp
|
50
|
+
"_": str(int(time.time() * 1000)),
|
51
|
+
"sid": sid,
|
52
|
+
}
|
53
|
+
|
54
|
+
r = s.post(API_URL, json=data, headers=headers, params=params)
|
55
|
+
r.raise_for_status()
|
56
|
+
|
57
|
+
data = r.json()
|
58
|
+
rows_data = data["integration"]["transformed"]["rows_data"]["0"]
|
59
|
+
if not isinstance(rows_data, dict):
|
60
|
+
raise ValueError("Invalid data returned from API")
|
61
|
+
|
62
|
+
use_new = any(k.endswith("New") and v for k, v in rows_data.items())
|
63
|
+
next_date_key = "NextDateNew" if use_new else "NextDateOld"
|
64
|
+
|
65
|
+
for key, value in rows_data.items():
|
66
|
+
if not (key.endswith("NextDate") or key.endswith(next_date_key)):
|
67
|
+
continue
|
68
|
+
|
69
|
+
bin_type = key.split("NextDate")[0]
|
70
|
+
if bin_type == "refuse":
|
71
|
+
bin_type = "Non-recyclable waste"
|
72
|
+
if bin_type == "fibres":
|
73
|
+
bin_type = "Paper, card and cardboard recycling"
|
74
|
+
if bin_type == "containers":
|
75
|
+
bin_type = "Plastics, metals and cartons recycling"
|
76
|
+
if bin_type == "garden":
|
77
|
+
bin_type = "Garden waste"
|
78
|
+
if bin_type == "food":
|
79
|
+
bin_type = "Food waste"
|
80
|
+
|
81
|
+
try:
|
82
|
+
date = datetime.strptime(value, "%Y-%m-%d").strftime("%d/%m/%Y")
|
83
|
+
except ValueError:
|
84
|
+
continue
|
85
|
+
dict_data = {"type": bin_type, "collectionDate": date}
|
86
|
+
bindata["bins"].append(dict_data)
|
87
|
+
|
88
|
+
return bindata
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import requests
|
2
|
+
from requests.structures import CaseInsensitiveDict
|
3
|
+
|
4
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
5
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
6
|
+
|
7
|
+
|
8
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
9
|
+
class CouncilClass(AbstractGetBinDataClass):
|
10
|
+
"""
|
11
|
+
Concrete classes have to implement all abstract operations of the
|
12
|
+
base class. They can also override some operations with a default
|
13
|
+
implementation.
|
14
|
+
"""
|
15
|
+
|
16
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
17
|
+
|
18
|
+
user_uprn = kwargs.get("uprn")
|
19
|
+
check_uprn(user_uprn)
|
20
|
+
data = {"bins": []}
|
21
|
+
|
22
|
+
url = "https://www.ealing.gov.uk/site/custom_scripts/WasteCollectionWS/home/FindCollection"
|
23
|
+
|
24
|
+
headers = CaseInsensitiveDict()
|
25
|
+
headers["Content-Type"] = "application/json"
|
26
|
+
|
27
|
+
body = {"uprn": user_uprn}
|
28
|
+
json_data = json.dumps(body)
|
29
|
+
|
30
|
+
res = requests.post(url, headers=headers, data=json_data)
|
31
|
+
|
32
|
+
if res.status_code != 200:
|
33
|
+
raise ConnectionRefusedError("Cannot connect to API!")
|
34
|
+
|
35
|
+
json_data = res.json()
|
36
|
+
|
37
|
+
if "param2" in json_data:
|
38
|
+
param2 = json_data["param2"]
|
39
|
+
for service in param2:
|
40
|
+
Bin_Type = service["Service"]
|
41
|
+
NextCollectionDate = service["collectionDateString"]
|
42
|
+
dict_data = {
|
43
|
+
"type": Bin_Type,
|
44
|
+
"collectionDate": datetime.strptime(
|
45
|
+
NextCollectionDate, "%d/%m/%Y"
|
46
|
+
).strftime(date_format),
|
47
|
+
}
|
48
|
+
data["bins"].append(dict_data)
|
49
|
+
|
50
|
+
return data
|
@@ -0,0 +1,60 @@
|
|
1
|
+
import requests
|
2
|
+
|
3
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
4
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
5
|
+
|
6
|
+
|
7
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
8
|
+
class CouncilClass(AbstractGetBinDataClass):
|
9
|
+
"""
|
10
|
+
Concrete classes have to implement all abstract operations of the
|
11
|
+
base class. They can also override some operations with a default
|
12
|
+
implementation.
|
13
|
+
"""
|
14
|
+
|
15
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
16
|
+
|
17
|
+
user_uprn = kwargs.get("uprn")
|
18
|
+
check_uprn(user_uprn)
|
19
|
+
data = {"bins": []}
|
20
|
+
|
21
|
+
baseurl = "https://maps.southderbyshire.gov.uk/iShareLIVE.web//getdata.aspx?RequestType=LocalInfo&ms=mapsources/MyHouse&format=JSONP&group=Recycling%20Bins%20and%20Waste|Next%20Bin%20Collections&uid="
|
22
|
+
url = baseurl + user_uprn
|
23
|
+
|
24
|
+
# Make the web request
|
25
|
+
response = requests.get(url).text
|
26
|
+
|
27
|
+
# Remove the JSONP wrapper using a regular expression
|
28
|
+
jsonp_pattern = r"\{.*\}"
|
29
|
+
json_match = re.search(jsonp_pattern, response)
|
30
|
+
|
31
|
+
if json_match:
|
32
|
+
# Extract the JSON part
|
33
|
+
json_data = json_match.group(0)
|
34
|
+
|
35
|
+
# Parse the JSON
|
36
|
+
parsed_data = json.loads(json_data)
|
37
|
+
|
38
|
+
# Extract the embedded HTML string
|
39
|
+
html_content = parsed_data["Results"]["Next_Bin_Collections"]["_"]
|
40
|
+
|
41
|
+
# Parse the HTML to extract dates and bin types using regex
|
42
|
+
matches = re.findall(
|
43
|
+
r"<span.*?>(\d{2} \w+ \d{4})</span>.*?<span.*?>(.*?)</span>",
|
44
|
+
html_content,
|
45
|
+
re.S,
|
46
|
+
)
|
47
|
+
|
48
|
+
# Output the parsed bin collection details
|
49
|
+
for match in matches:
|
50
|
+
dict_data = {
|
51
|
+
"type": match[1],
|
52
|
+
"collectionDate": datetime.strptime(match[0], "%d %B %Y").strftime(
|
53
|
+
"%d/%m/%Y"
|
54
|
+
),
|
55
|
+
}
|
56
|
+
data["bins"].append(dict_data)
|
57
|
+
else:
|
58
|
+
print("No valid JSON found in the response.")
|
59
|
+
|
60
|
+
return data
|
@@ -0,0 +1,136 @@
|
|
1
|
+
import requests
|
2
|
+
from bs4 import BeautifulSoup
|
3
|
+
|
4
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
5
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
6
|
+
|
7
|
+
|
8
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
9
|
+
class CouncilClass(AbstractGetBinDataClass):
|
10
|
+
"""
|
11
|
+
Concrete classes have to implement all abstract operations of the
|
12
|
+
base class. They can also override some operations with a default
|
13
|
+
implementation.
|
14
|
+
"""
|
15
|
+
|
16
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
17
|
+
|
18
|
+
user_uprn = kwargs.get("uprn")
|
19
|
+
check_uprn(user_uprn)
|
20
|
+
data = {"bins": []}
|
21
|
+
|
22
|
+
baseurl = "https://www.southwark.gov.uk/bins/lookup/"
|
23
|
+
url = baseurl + user_uprn
|
24
|
+
|
25
|
+
headers = {
|
26
|
+
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
|
27
|
+
}
|
28
|
+
|
29
|
+
# Make the web request
|
30
|
+
response = requests.get(url, headers=headers).text
|
31
|
+
|
32
|
+
soup = BeautifulSoup(response, "html.parser")
|
33
|
+
|
34
|
+
# Extract recycling collection information
|
35
|
+
recycling_section = soup.find(
|
36
|
+
"div", {"aria-labelledby": "recyclingCollectionTitle"}
|
37
|
+
)
|
38
|
+
if recycling_section:
|
39
|
+
recycling_title = recycling_section.find(
|
40
|
+
"p", {"id": "recyclingCollectionTitle"}
|
41
|
+
).text
|
42
|
+
recycling_next_collection = (
|
43
|
+
recycling_section.find(text=lambda text: "Next collection" in text)
|
44
|
+
.strip()
|
45
|
+
.split(": ")[1]
|
46
|
+
)
|
47
|
+
|
48
|
+
dict_data = {
|
49
|
+
"type": recycling_title,
|
50
|
+
"collectionDate": datetime.strptime(
|
51
|
+
recycling_next_collection, "%a, %d %B %Y"
|
52
|
+
).strftime("%d/%m/%Y"),
|
53
|
+
}
|
54
|
+
data["bins"].append(dict_data)
|
55
|
+
|
56
|
+
# Extract refuse collection information
|
57
|
+
refuse_section = soup.find("div", {"aria-labelledby": "refuseCollectionTitle"})
|
58
|
+
if refuse_section:
|
59
|
+
refuse_title = refuse_section.find(
|
60
|
+
"p", {"id": "refuseCollectionTitle"}
|
61
|
+
).text
|
62
|
+
refuse_next_collection = (
|
63
|
+
refuse_section.find(text=lambda text: "Next collection" in text)
|
64
|
+
.strip()
|
65
|
+
.split(": ")[1]
|
66
|
+
)
|
67
|
+
|
68
|
+
dict_data = {
|
69
|
+
"type": refuse_title,
|
70
|
+
"collectionDate": datetime.strptime(
|
71
|
+
refuse_next_collection, "%a, %d %B %Y"
|
72
|
+
).strftime("%d/%m/%Y"),
|
73
|
+
}
|
74
|
+
data["bins"].append(dict_data)
|
75
|
+
|
76
|
+
# Extract food waste collection information
|
77
|
+
food_section = soup.find("div", {"aria-labelledby": "organicsCollectionTitle"})
|
78
|
+
if food_section:
|
79
|
+
food_title = food_section.find("p", {"id": "organicsCollectionTitle"}).text
|
80
|
+
food_next_collection = (
|
81
|
+
food_section.find(text=lambda text: "Next collection" in text)
|
82
|
+
.strip()
|
83
|
+
.split(": ")[1]
|
84
|
+
)
|
85
|
+
|
86
|
+
dict_data = {
|
87
|
+
"type": food_title,
|
88
|
+
"collectionDate": datetime.strptime(
|
89
|
+
food_next_collection, "%a, %d %B %Y"
|
90
|
+
).strftime("%d/%m/%Y"),
|
91
|
+
}
|
92
|
+
data["bins"].append(dict_data)
|
93
|
+
|
94
|
+
comrec_section = soup.find(
|
95
|
+
"div", {"aria-labelledby": "recyclingCommunalCollectionTitle"}
|
96
|
+
)
|
97
|
+
if comrec_section:
|
98
|
+
comrec_title = comrec_section.find(
|
99
|
+
"p", {"id": "recyclingCommunalCollectionTitle"}
|
100
|
+
).text
|
101
|
+
comrec_next_collection = (
|
102
|
+
comrec_section.find(text=lambda text: "Next collection" in text)
|
103
|
+
.strip()
|
104
|
+
.split(": ")[1]
|
105
|
+
)
|
106
|
+
|
107
|
+
dict_data = {
|
108
|
+
"type": comrec_title,
|
109
|
+
"collectionDate": datetime.strptime(
|
110
|
+
comrec_next_collection, "%a, %d %B %Y"
|
111
|
+
).strftime("%d/%m/%Y"),
|
112
|
+
}
|
113
|
+
data["bins"].append(dict_data)
|
114
|
+
|
115
|
+
comref_section = soup.find(
|
116
|
+
"div", {"aria-labelledby": "refuseCommunalCollectionTitle"}
|
117
|
+
)
|
118
|
+
if comref_section:
|
119
|
+
comref_title = comref_section.find(
|
120
|
+
"p", {"id": "refuseCommunalCollectionTitle"}
|
121
|
+
).text
|
122
|
+
comref_next_collection = (
|
123
|
+
comref_section.find(text=lambda text: "Next collection" in text)
|
124
|
+
.strip()
|
125
|
+
.split(": ")[1]
|
126
|
+
)
|
127
|
+
|
128
|
+
dict_data = {
|
129
|
+
"type": comref_title,
|
130
|
+
"collectionDate": datetime.strptime(
|
131
|
+
comref_next_collection, "%a, %d %B %Y"
|
132
|
+
).strftime("%d/%m/%Y"),
|
133
|
+
}
|
134
|
+
data["bins"].append(dict_data)
|
135
|
+
|
136
|
+
return data
|
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.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/test_collect_data.py
RENAMED
File without changes
|
File without changes
|
{uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/test_conftest.py
RENAMED
File without changes
|
{uk_bin_collection-0.94.0 → uk_bin_collection-0.96.0}/uk_bin_collection/tests/test_get_data.py
RENAMED
File without changes
|
File without changes
|
{uk_bin_collection-0.94.0 → uk_bin_collection-0.96.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
|