uk_bin_collection 0.127.1__tar.gz → 0.127.3__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (305) hide show
  1. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/PKG-INFO +66 -2
  2. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/README.md +65 -1
  3. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/pyproject.toml +1 -1
  4. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/input.json +10 -11
  5. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py +3 -3
  6. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +18 -7
  7. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +2 -2
  8. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/PowysCouncil.py +10 -7
  9. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +20 -11
  10. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +6 -6
  11. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +8 -3
  12. uk_bin_collection-0.127.3/uk_bin_collection/uk_bin_collection/councils/SurreyHeathBoroughCouncil.py +116 -0
  13. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +9 -6
  14. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +18 -7
  15. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WestOxfordshireDistrictCouncil.py +3 -3
  16. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/LICENSE +0 -0
  17. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/README.rst +0 -0
  18. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
  19. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/features/environment.py +0 -0
  20. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
  21. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/output.schema +0 -0
  22. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
  23. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
  24. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/test_collect_data.py +0 -0
  25. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/test_common_functions.py +0 -0
  26. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/test_conftest.py +0 -0
  27. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/tests/test_get_data.py +0 -0
  28. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
  29. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/common.py +0 -0
  30. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py +0 -0
  31. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py +0 -0
  32. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
  33. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py +0 -0
  34. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py +0 -0
  35. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py +0 -0
  36. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py +0 -0
  37. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
  38. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py +0 -0
  39. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py +0 -0
  40. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
  41. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
  42. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BaberghDistrictCouncil.py +0 -0
  43. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
  44. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
  45. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
  46. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
  47. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
  48. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
  49. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
  50. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
  51. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
  52. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
  53. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py +0 -0
  54. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
  55. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BlaenauGwentCountyBoroughCouncil.py +0 -0
  56. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
  57. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
  58. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
  59. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BraintreeDistrictCouncil.py +0 -0
  60. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BrecklandCouncil.py +0 -0
  61. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BrentCouncil.py +0 -0
  62. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
  63. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
  64. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
  65. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BromsgroveDistrictCouncil.py +0 -0
  66. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py +0 -0
  67. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
  68. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
  69. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BurnleyBoroughCouncil.py +0 -0
  70. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
  71. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
  72. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
  73. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py +0 -0
  74. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
  75. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
  76. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
  77. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
  78. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CheltenhamBoroughCouncil.py +0 -0
  79. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
  80. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
  81. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py +0 -0
  82. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
  83. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
  84. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
  85. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
  86. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CopelandBoroughCouncil.py +0 -0
  87. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
  88. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CotswoldDistrictCouncil.py +0 -0
  89. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CoventryCityCouncil.py +0 -0
  90. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
  91. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
  92. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CumberlandAllerdaleCouncil.py +0 -0
  93. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/CumberlandCouncil.py +0 -0
  94. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
  95. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
  96. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DenbighshireCouncil.py +0 -0
  97. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DerbyCityCouncil.py +0 -0
  98. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
  99. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
  100. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
  101. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
  102. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DudleyCouncil.py +0 -0
  103. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DundeeCityCouncil.py +0 -0
  104. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
  105. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
  106. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EastAyrshireCouncil.py +0 -0
  107. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
  108. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
  109. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EastHertsCouncil.py +0 -0
  110. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
  111. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
  112. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
  113. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
  114. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
  115. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EdinburghCityCouncil.py +0 -0
  116. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +0 -0
  117. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
  118. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
  119. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
  120. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
  121. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ExeterCityCouncil.py +0 -0
  122. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py +0 -0
  123. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
  124. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
  125. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/FifeCouncil.py +0 -0
  126. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/FlintshireCountyCouncil.py +0 -0
  127. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/FolkstoneandHytheDistrictCouncil.py +0 -0
  128. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
  129. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
  130. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
  131. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
  132. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/GraveshamBoroughCouncil.py +0 -0
  133. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
  134. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/GwyneddCouncil.py +0 -0
  135. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HackneyCouncil.py +0 -0
  136. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
  137. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HarboroughDistrictCouncil.py +0 -0
  138. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
  139. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
  140. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HartDistrictCouncil.py +0 -0
  141. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HartlepoolBoroughCouncil.py +0 -0
  142. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py +0 -0
  143. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
  144. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +0 -0
  145. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py +0 -0
  146. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
  147. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
  148. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
  149. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
  150. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/KingsLynnandWestNorfolkBC.py +0 -0
  151. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
  152. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
  153. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
  154. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
  155. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
  156. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LichfieldDistrictCouncil.py +0 -0
  157. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LincolnCouncil.py +0 -0
  158. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
  159. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
  160. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +0 -0
  161. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHarrow.py +0 -0
  162. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHavering.py +0 -0
  163. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
  164. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
  165. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLewisham.py +0 -0
  166. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
  167. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py +0 -0
  168. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py +0 -0
  169. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
  170. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
  171. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
  172. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
  173. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
  174. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MidDevonCouncil.py +0 -0
  175. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py +0 -0
  176. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
  177. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py +0 -0
  178. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
  179. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
  180. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MonmouthshireCountyCouncil.py +0 -0
  181. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/MorayCouncil.py +0 -0
  182. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
  183. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
  184. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
  185. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
  186. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NewcastleUnderLymeCouncil.py +0 -0
  187. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
  188. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
  189. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py +0 -0
  190. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
  191. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
  192. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthHertfordshireDistrictCouncil.py +0 -0
  193. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
  194. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
  195. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
  196. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
  197. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
  198. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
  199. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
  200. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
  201. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
  202. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
  203. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py +0 -0
  204. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
  205. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/NuneatonBedworthBoroughCouncil.py +0 -0
  206. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/OadbyAndWigstonBoroughCouncil.py +0 -0
  207. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
  208. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/OxfordCityCouncil.py +0 -0
  209. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/PerthAndKinrossCouncil.py +0 -0
  210. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/PlymouthCouncil.py +0 -0
  211. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
  212. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
  213. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
  214. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RedditchBoroughCouncil.py +0 -0
  215. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
  216. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
  217. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
  218. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
  219. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
  220. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RotherDistrictCouncil.py +0 -0
  221. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
  222. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RoyalBoroughofGreenwich.py +0 -0
  223. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
  224. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
  225. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
  226. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
  227. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SandwellBoroughCouncil.py +0 -0
  228. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SeftonCouncil.py +0 -0
  229. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
  230. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
  231. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
  232. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
  233. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
  234. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
  235. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
  236. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +0 -0
  237. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
  238. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthHamsDistrictCouncil.py +0 -0
  239. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
  240. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
  241. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
  242. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py +0 -0
  243. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthStaffordshireDistrictCouncil.py +0 -0
  244. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
  245. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +0 -0
  246. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
  247. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
  248. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
  249. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/StevenageBoroughCouncil.py +0 -0
  250. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
  251. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/StocktonOnTeesCouncil.py +0 -0
  252. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
  253. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
  254. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
  255. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
  256. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
  257. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/SwindonBoroughCouncil.py +0 -0
  258. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
  259. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
  260. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py +0 -0
  261. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
  262. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
  263. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
  264. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ThanetDistrictCouncil.py +0 -0
  265. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
  266. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/ThurrockCouncil.py +0 -0
  267. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
  268. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
  269. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
  270. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/TunbridgeWellsCouncil.py +0 -0
  271. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
  272. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
  273. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +0 -0
  274. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
  275. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WandsworthCouncil.py +0 -0
  276. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py +0 -0
  277. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
  278. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py +0 -0
  279. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
  280. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
  281. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
  282. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
  283. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WestDunbartonshireCouncil.py +0 -0
  284. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WestLancashireBoroughCouncil.py +0 -0
  285. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
  286. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
  287. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py +0 -0
  288. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
  289. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
  290. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
  291. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
  292. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
  293. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
  294. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WirralCouncil.py +0 -0
  295. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
  296. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
  297. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WolverhamptonCityCouncil.py +0 -0
  298. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WorcesterCityCouncil.py +0 -0
  299. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
  300. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
  301. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/WyreForestDistrictCouncil.py +0 -0
  302. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
  303. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
  304. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
  305. {uk_bin_collection-0.127.1 → uk_bin_collection-0.127.3}/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.127.1
3
+ Version: 0.127.3
4
4
  Summary: Python Lib to collect UK Bin Data
5
5
  Author: Robert Bradley
6
6
  Author-email: robbrad182@gmail.com
@@ -256,7 +256,6 @@ Some councils need Selenium to run the scrape on behalf of Home Assistant. The e
256
256
  ```bash
257
257
  docker run -d -p 4444:4444 --name selenium-chrome selenium/standalone-chrome
258
258
  ```
259
-
260
259
 
261
260
  #### Step 3: Test the Selenium Server
262
261
 
@@ -288,6 +287,71 @@ docker pull selenium/standalone-chrome docker run -d -p 4444:4444 --name seleniu
288
287
 
289
288
  ---
290
289
 
290
+ ### Instructions for Home Assistant OS
291
+
292
+ If you're running Home Assistant Supervised, it's possible to host the Selenium instance on the same system.
293
+
294
+ This guide is based on a Raspberry Pi 4. Instructions for other systems may vary.
295
+
296
+ #### Prerequisites
297
+ 1. Install **Portainer** from Alex Belgium's add-on repository:
298
+ [github.com/alexbelgium/hassio-addons](https://github.com/alexbelgium/hassio-addons)
299
+
300
+ ---
301
+
302
+ #### Step 1: Pull and Run Docker Image
303
+
304
+ Since the Raspberry Pi 4 uses an ARM64-based architecture, use the `seleniarm/standalone-chromium:latest` Docker image.
305
+
306
+ 1. Open **Portainer** and navigate to the **Images** tab.
307
+ 2. In the **Image** text box, enter:
308
+
309
+ ```
310
+ seleniarm/standalone-chromium:latest
311
+ ```
312
+
313
+ 3. Click **Pull the image**.
314
+
315
+ 4. Once the image is pulled, navigate to the **Containers** tab and click **Add container**.
316
+
317
+ 5. Configure the container:
318
+ - **Name:** Give it a clear and descriptive name (e.g., `selenium-chromium`).
319
+ - **Image:** Enter:
320
+
321
+ ```
322
+ seleniarm/standalone-chromium
323
+ ```
324
+
325
+ Make sure to uncheck **Always pull the image**.
326
+
327
+ - **Network ports configuration:**
328
+ - Click **Map additional port**.
329
+ - Set both the **Host** and **Container** ports to `4444`.
330
+
331
+ 6. Click **Deploy the container**.
332
+
333
+ ---
334
+
335
+ #### Step 2: Configure UKBinCollectionData Integration
336
+
337
+ 1. **Add the integration** in Home Assistant.
338
+
339
+ 2. On the second stage of the integration setup wizard:
340
+ - Ensure that `http://localhost:4444` shows as accessible.
341
+ - If not, verify that the Selenium container is running in Portainer.
342
+
343
+ 3. Enter the required information for the integration.
344
+
345
+ 4. In the **Remote Selenium Server** text box, enter:
346
+
347
+ ```
348
+ http://<HA IP address>:4444
349
+ ```
350
+
351
+ Replace `<HA IP address>` with the IP address of your Home Assistant system.
352
+
353
+ ---
354
+
291
355
  ## Reports
292
356
 
293
357
  ### Nightly Full Integration Test Reports:
@@ -233,7 +233,6 @@ Some councils need Selenium to run the scrape on behalf of Home Assistant. The e
233
233
  ```bash
234
234
  docker run -d -p 4444:4444 --name selenium-chrome selenium/standalone-chrome
235
235
  ```
236
-
237
236
 
238
237
  #### Step 3: Test the Selenium Server
239
238
 
@@ -265,6 +264,71 @@ docker pull selenium/standalone-chrome docker run -d -p 4444:4444 --name seleniu
265
264
 
266
265
  ---
267
266
 
267
+ ### Instructions for Home Assistant OS
268
+
269
+ If you're running Home Assistant Supervised, it's possible to host the Selenium instance on the same system.
270
+
271
+ This guide is based on a Raspberry Pi 4. Instructions for other systems may vary.
272
+
273
+ #### Prerequisites
274
+ 1. Install **Portainer** from Alex Belgium's add-on repository:
275
+ [github.com/alexbelgium/hassio-addons](https://github.com/alexbelgium/hassio-addons)
276
+
277
+ ---
278
+
279
+ #### Step 1: Pull and Run Docker Image
280
+
281
+ Since the Raspberry Pi 4 uses an ARM64-based architecture, use the `seleniarm/standalone-chromium:latest` Docker image.
282
+
283
+ 1. Open **Portainer** and navigate to the **Images** tab.
284
+ 2. In the **Image** text box, enter:
285
+
286
+ ```
287
+ seleniarm/standalone-chromium:latest
288
+ ```
289
+
290
+ 3. Click **Pull the image**.
291
+
292
+ 4. Once the image is pulled, navigate to the **Containers** tab and click **Add container**.
293
+
294
+ 5. Configure the container:
295
+ - **Name:** Give it a clear and descriptive name (e.g., `selenium-chromium`).
296
+ - **Image:** Enter:
297
+
298
+ ```
299
+ seleniarm/standalone-chromium
300
+ ```
301
+
302
+ Make sure to uncheck **Always pull the image**.
303
+
304
+ - **Network ports configuration:**
305
+ - Click **Map additional port**.
306
+ - Set both the **Host** and **Container** ports to `4444`.
307
+
308
+ 6. Click **Deploy the container**.
309
+
310
+ ---
311
+
312
+ #### Step 2: Configure UKBinCollectionData Integration
313
+
314
+ 1. **Add the integration** in Home Assistant.
315
+
316
+ 2. On the second stage of the integration setup wizard:
317
+ - Ensure that `http://localhost:4444` shows as accessible.
318
+ - If not, verify that the Selenium container is running in Portainer.
319
+
320
+ 3. Enter the required information for the integration.
321
+
322
+ 4. In the **Remote Selenium Server** text box, enter:
323
+
324
+ ```
325
+ http://<HA IP address>:4444
326
+ ```
327
+
328
+ Replace `<HA IP address>` with the IP address of your Home Assistant system.
329
+
330
+ ---
331
+
268
332
  ## Reports
269
333
 
270
334
  ### Nightly Full Integration Test Reports:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "uk_bin_collection"
3
- version = "0.127.1"
3
+ version = "0.127.3"
4
4
  description = "Python Lib to collect UK Bin Data"
5
5
  readme = "README.md"
6
6
  authors = ["Robert Bradley <robbrad182@gmail.com>"]
@@ -1208,8 +1208,8 @@
1208
1208
  "wiki_note": "Pass the postcode and UPRN. This parser requires a Selenium webdriver."
1209
1209
  },
1210
1210
  "NewarkAndSherwoodDC": {
1211
- "url": "http://app.newark-sherwooddc.gov.uk/bincollection/calendar?pid=200004258529&nc=1",
1212
- "wiki_command_url_override": "http://app.newark-sherwooddc.gov.uk/bincollection/calendar?pid=XXXXXXXX&nc=1",
1211
+ "url": "http://app.newark-sherwooddc.gov.uk/bincollection/calendar?pid=200004258529",
1212
+ "wiki_command_url_override": "http://app.newark-sherwooddc.gov.uk/bincollection/calendar?pid=XXXXXXXX",
1213
1213
  "wiki_name": "Newark and Sherwood District Council",
1214
1214
  "wiki_note": "Replace XXXXXXXX with your UPRN."
1215
1215
  },
@@ -1409,15 +1409,6 @@
1409
1409
  "wiki_name": "Portsmouth City Council",
1410
1410
  "wiki_note": "Pass the postcode and UPRN. This parser requires a Selenium webdriver."
1411
1411
  },
1412
- "PowysCouncil": {
1413
- "house_number": "LANE COTTAGE",
1414
- "postcode": "HR3 5JS",
1415
- "skip_get_url": true,
1416
- "url": "https://www.powys.gov.uk",
1417
- "web_driver": "http://selenium:4444",
1418
- "wiki_name": "Powys Council",
1419
- "wiki_note": "Pass the house name/number and postcode in their respective parameters. This parser requires a Selenium webdriver."
1420
- },
1421
1412
  "PowysCouncil": {
1422
1413
  "house_number": "LANE COTTAGE",
1423
1414
  "postcode": "HR3 5JS",
@@ -1768,6 +1759,14 @@
1768
1759
  "wiki_name": "Sunderland City Council",
1769
1760
  "wiki_note": "Provide your house number (without quotes) and postcode (wrapped in double quotes with a space)."
1770
1761
  },
1762
+ "SurreyHeathBoroughCouncil": {
1763
+ "house_number": "36",
1764
+ "postcode": "GU20 6PN",
1765
+ "skip_get_url": true,
1766
+ "url": "https://asjwsw-wrpsurreyheathmunicipal-live.whitespacews.com/",
1767
+ "wiki_name": "Surrey Heath Borough Council / Joint Waste Solutions",
1768
+ "wiki_note": "Provide your house number in the `house_number` parameter and postcode in the `postcode` parameter."
1769
+ },
1771
1770
  "SwaleBoroughCouncil": {
1772
1771
  "postcode": "ME12 2NQ",
1773
1772
  "skip_get_url": true,
@@ -34,10 +34,10 @@ class CouncilClass(AbstractGetBinDataClass):
34
34
 
35
35
  # Find the next collection date
36
36
  date_tag = container.find(class_="font11 text-center")
37
- if date_tag.text.strip() == "":
38
- continue
39
- else:
37
+ if date_tag:
40
38
  collection_date = date_tag.text.strip()
39
+ else:
40
+ continue
41
41
 
42
42
  dict_data = {
43
43
  "type": bin_type,
@@ -1,3 +1,5 @@
1
+ import datetime
2
+
1
3
  from bs4 import BeautifulSoup
2
4
 
3
5
  from uk_bin_collection.uk_bin_collection.common import *
@@ -32,15 +34,24 @@ class CouncilClass(AbstractGetBinDataClass):
32
34
  for p in ps:
33
35
  collection = p.text.strip().replace("Your next ", "").split(".")[0]
34
36
  bin_type = collection.split(" day is")[0]
35
- collection_date = datetime.strptime(
36
- remove_ordinal_indicator_from_date_string(collection).split("day is ")[
37
- 1
38
- ],
39
- "%A %d %B %Y",
40
- )
37
+ collection_date = remove_ordinal_indicator_from_date_string(
38
+ collection
39
+ ).split("day is ")[1]
40
+ if collection_date == "Today":
41
+ collection_date = datetime.today().strftime(date_format)
42
+ elif collection_date == "Tomorrow":
43
+ collection_date = (datetime.today() + timedelta(days=1)).strftime(
44
+ date_format
45
+ )
46
+ print(collection_date)
47
+ else:
48
+ collection_date = datetime.strptime(
49
+ collection_date,
50
+ "%A %d %B %Y",
51
+ ).strftime(date_format)
41
52
  dict_data = {
42
53
  "type": bin_type,
43
- "collectionDate": collection_date.strftime(date_format),
54
+ "collectionDate": collection_date,
44
55
  }
45
56
  data["bins"].append(dict_data)
46
57
 
@@ -47,10 +47,10 @@ class CouncilClass(AbstractGetBinDataClass):
47
47
  bin_type = cells[0].get_text().strip()
48
48
  # Date is on the second cell, second paragraph, wrapped in p
49
49
  collectionDate = None
50
- for date_format in possible_formats:
50
+ for format in possible_formats:
51
51
  try:
52
52
  collectionDate = datetime.strptime(
53
- cells[1].select("p > b")[2].get_text(strip=True), date_format
53
+ cells[1].select("p > b")[2].get_text(strip=True), format
54
54
  )
55
55
  break # Exit the loop if parsing is successful
56
56
  except ValueError:
@@ -127,12 +127,15 @@ class CouncilClass(AbstractGetBinDataClass):
127
127
  li.text for li in garden_waste_section.find_next("ul").find_all("li")
128
128
  ]
129
129
  for date in garden_waste_dates:
130
- dict_data = {
131
- "type": "Garden Waste",
132
- "collectionDate": datetime.strptime(
133
- remove_ordinal_indicator_from_date_string(date), "%d %B %Y"
134
- ).strftime(date_format),
135
- }
136
- data["bins"].append(dict_data)
130
+ try:
131
+ dict_data = {
132
+ "type": "Garden Waste",
133
+ "collectionDate": datetime.strptime(
134
+ remove_ordinal_indicator_from_date_string(date), "%d %B %Y"
135
+ ).strftime(date_format),
136
+ }
137
+ data["bins"].append(dict_data)
138
+ except:
139
+ continue
137
140
 
138
141
  return data
@@ -1,5 +1,6 @@
1
1
  import requests
2
2
  from bs4 import BeautifulSoup
3
+
3
4
  from uk_bin_collection.uk_bin_collection.common import *
4
5
  from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
5
6
 
@@ -54,6 +55,9 @@ class CouncilClass(AbstractGetBinDataClass):
54
55
 
55
56
  data = {"bins": []}
56
57
 
58
+ current_year = datetime.now().year
59
+ next_year = current_year + 1
60
+
57
61
  # Page has slider info side by side, which are two instances of this class
58
62
  for bin in soup.find_all("div", {"class": "binextra"}):
59
63
  bin_info = list(bin.stripped_strings)
@@ -62,27 +66,32 @@ class CouncilClass(AbstractGetBinDataClass):
62
66
  if contains_date(bin_info[0]):
63
67
  bin_date = get_next_occurrence_from_day_month(
64
68
  datetime.strptime(
65
- bin_info[0] + " " + datetime.today().strftime("%Y"),
66
- "%A %d %B - %Y",
69
+ bin_info[0],
70
+ "%A %d %B -",
67
71
  )
68
- ).strftime(date_format)
69
- bin_type = str.capitalize(bin_info[1])
72
+ )
73
+ bin_type = str.capitalize(" ".join(bin_info[1:]))
70
74
  # On exceptional collection schedule (e.g. around English Bank Holidays), date will be contained in the second stripped string
71
75
  else:
72
76
  bin_date = get_next_occurrence_from_day_month(
73
77
  datetime.strptime(
74
- bin_info[1] + " " + datetime.today().strftime("%Y"),
75
- "%A %d %B - %Y",
78
+ bin_info[1],
79
+ "%A %d %B -",
76
80
  )
77
- ).strftime(date_format)
78
- bin_type = str.capitalize(bin_info[2])
79
- except Exception as ex:
80
- raise ValueError(f"Error parsing bin data: {ex}")
81
+ )
82
+ str.capitalize(" ".join(bin_info[2:]))
83
+ except:
84
+ continue
85
+
86
+ if (datetime.now().month == 12) and (bin_date.month == 1):
87
+ bin_date = bin_date.replace(year=next_year)
88
+ else:
89
+ bin_date = bin_date.replace(year=current_year)
81
90
 
82
91
  # Build data dict for each entry
83
92
  dict_data = {
84
93
  "type": bin_type,
85
- "collectionDate": bin_date,
94
+ "collectionDate": bin_date.strftime(date_format),
86
95
  }
87
96
  data["bins"].append(dict_data)
88
97
 
@@ -30,12 +30,12 @@ class CouncilClass(AbstractGetBinDataClass):
30
30
  driver.get("https://www.staffsmoorlands.gov.uk/findyourbinday")
31
31
 
32
32
  # Close cookies banner
33
- cookieAccept = WebDriverWait(driver, 10).until(
34
- EC.presence_of_element_located(
35
- (By.CSS_SELECTOR, ".cookiemessage__link--close")
36
- )
37
- )
38
- cookieAccept.click()
33
+ # cookieAccept = WebDriverWait(driver, 10).until(
34
+ # EC.presence_of_element_located(
35
+ # (By.CSS_SELECTOR, ".cookiemessage__link--close")
36
+ # )
37
+ # )
38
+ # cookieAccept.click()
39
39
 
40
40
  # Wait for the postcode field to appear then populate it
41
41
  inputElement_postcode = WebDriverWait(driver, 30).until(
@@ -1,8 +1,10 @@
1
+ from datetime import datetime, timedelta
2
+ from typing import Any, Dict
3
+
1
4
  from bs4 import BeautifulSoup
5
+
2
6
  from uk_bin_collection.uk_bin_collection.common import *
3
7
  from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
4
- from datetime import datetime, timedelta
5
- from typing import Dict, Any
6
8
 
7
9
 
8
10
  class CouncilClass(AbstractGetBinDataClass):
@@ -78,7 +80,10 @@ class CouncilClass(AbstractGetBinDataClass):
78
80
  formatted_date = self.get_next_weekday(day_name)
79
81
  else:
80
82
  # Convert date format from "Tuesday 28 May 2024" to "28/05/2024"
81
- date_obj = datetime.strptime(value, "%A %d %B %Y")
83
+ try:
84
+ date_obj = datetime.strptime(value, "%A %d %B %Y")
85
+ except:
86
+ continue
82
87
  formatted_date = date_obj.strftime("%d/%m/%Y")
83
88
 
84
89
  bin_entry = {
@@ -0,0 +1,116 @@
1
+ import urllib
2
+
3
+ from bs4 import BeautifulSoup
4
+
5
+ from uk_bin_collection.uk_bin_collection.common import *
6
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
7
+
8
+
9
+ class CouncilClass(AbstractGetBinDataClass):
10
+ """
11
+ Concrete classes have to implement all abstract operations of the
12
+ base class. They can also override some operations with a default
13
+ implementation.
14
+ """
15
+
16
+ def parse_data(self, page: str, **kwargs) -> dict:
17
+ requests.packages.urllib3.disable_warnings()
18
+ root_url = "https://asjwsw-wrpsurreyheathmunicipal-live.whitespacews.com/"
19
+ # Get the house number and postcode from the commandline
20
+ user_paon = kwargs.get("paon")
21
+ user_postcode = kwargs.get("postcode")
22
+ check_postcode(user_postcode)
23
+
24
+ # Start a new session for the form, and get the chosen URL from the commandline
25
+ session = requests.Session()
26
+ req = session.get(root_url)
27
+
28
+ # Parse the requested URL to get a link to the "View My Collections" portal with a unique service ID
29
+ start = BeautifulSoup(req.text, features="html.parser")
30
+ start.prettify()
31
+ base_link = start.select(
32
+ "#menu-content > div > div:nth-child(1) > p.govuk-body.govuk-\\!-margin-bottom-0.colorblue.lineheight15 > a"
33
+ )[0].attrs.get("href")
34
+
35
+ # We need to reorder the query parts from the unique URL, so split them up to make it easier
36
+ query_parts = urllib.parse.urlparse(base_link).query.split("&")
37
+ parts = base_link.split("?")
38
+ addr_link = (
39
+ parts[0] + "/mop.php?" + query_parts[1] + "&" + query_parts[0] + "&seq=2"
40
+ )
41
+
42
+ # Bring in some headers to emulate a browser, and put the UPRN and postcode into the form data.
43
+ # This is sent in a POST request, emulating browser behaviour.
44
+ headers = {
45
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
46
+ "Accept-Language": "en-GB,en;q=0.9",
47
+ "Cache-Control": "no-cache",
48
+ "Connection": "keep-alive",
49
+ "Content-Type": "application/x-www-form-urlencoded",
50
+ "Origin": "https://asjwsw-wrpsurreyheathmunicipal-live.whitespacews.com",
51
+ "Pragma": "no-cache",
52
+ "Referer": "https://asjwsw-wrpsurreyheathmunicipal-live.whitespacews.com/",
53
+ "Sec-Fetch-Dest": "document",
54
+ "Sec-Fetch-Mode": "navigate",
55
+ "Sec-Fetch-Site": "same-origin",
56
+ "Sec-Fetch-User": "?1",
57
+ "Upgrade-Insecure-Requests": "1",
58
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 OPR/98.0.0.0",
59
+ "sec-ch-ua": '"Chromium";v="112", "Not_A Brand";v="24", "Opera GX";v="98"',
60
+ "sec-ch-ua-mobile": "?0",
61
+ "sec-ch-ua-platform": '"Windows"',
62
+ }
63
+ data = {
64
+ "address_name_number": user_paon,
65
+ "address_street": "",
66
+ "street_town": "",
67
+ "address_postcode": user_postcode,
68
+ }
69
+ addr_page = session.post(addr_link, headers=headers, data=data)
70
+ addr = BeautifulSoup(addr_page.text, features="html.parser")
71
+ addr.prettify()
72
+
73
+ # This page should only have one address, but regardless, select the first one and make a request to load the
74
+ # calendar page.
75
+ cal_link = root_url + addr.select("#property_list > ul > li > a")[0].attrs.get(
76
+ "href"
77
+ )
78
+ cal_page = session.get(cal_link)
79
+
80
+ # Parse the calendar page
81
+ soup = BeautifulSoup(cal_page.text, features="html.parser")
82
+ soup.prettify()
83
+ data = {"bins": []}
84
+
85
+ # For whatever reason, each row contains all the information for that row, and each one after it. This code
86
+ # essentially gets all items from each row, but ignores the whitespace that you get when splitting using \n.
87
+ # This produces a big list of dates then bin types, so we split them up into a list of lists - each pair is
88
+ # a date and the bin type.
89
+ items = [
90
+ i
91
+ for i in soup.find(
92
+ "u1",
93
+ {
94
+ "class": "displayinlineblock justifycontentleft alignitemscenter margin0 padding0"
95
+ },
96
+ ).text.split("\n")
97
+ if i != ""
98
+ ]
99
+ pairs = [items[i : i + 2] for i in range(0, len(items), 2)]
100
+
101
+ # Loop through the paired bin dates and types
102
+ for pair in pairs:
103
+ # This isn't necessary, but better safe than sorry
104
+ collection_date = datetime.strptime(pair[0], date_format).strftime(
105
+ date_format
106
+ )
107
+ # Change the formatting of the purple bins to replace the hyphens with slashes
108
+ if pair[1] == "Batteries-small electricals-textiles":
109
+ bin_type = pair[1].replace("-", "/").strip()
110
+ else:
111
+ bin_type = pair[1]
112
+
113
+ # Add the data into the dictionary
114
+ data["bins"].append({"type": bin_type, "collectionDate": collection_date})
115
+
116
+ return data
@@ -1,4 +1,5 @@
1
1
  from bs4 import BeautifulSoup
2
+
2
3
  from uk_bin_collection.uk_bin_collection.common import *
3
4
  from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
4
5
 
@@ -31,12 +32,12 @@ class CouncilClass(AbstractGetBinDataClass):
31
32
  params = {
32
33
  "RequestType": "LocalInfo",
33
34
  "ms": "ValeOfGlamorgan/AllMaps",
34
- "group": "Community and Living|Refuse HIDE2",
35
- "type": "json",
35
+ "group": "Waste|new_refuse",
36
+ "type": "jsonp",
36
37
  "callback": "AddressInfoCallback",
37
38
  "uid": user_uprn,
38
- "import": "jQuery35108514154283927682_1673022974838",
39
- "_": "1673022974840",
39
+ "import": "jQuery35107288886041176057_1736292844067",
40
+ "_": "1736292844068",
40
41
  }
41
42
 
42
43
  # Get a response from the council
@@ -46,13 +47,15 @@ class CouncilClass(AbstractGetBinDataClass):
46
47
  headers=headers,
47
48
  ).text
48
49
 
50
+ response = response.replace("AddressInfoCallback(", "").rstrip(");")
51
+
49
52
  # Load the JSON and seek out the bin week text, then add it to the calendar URL. Also take the weekly
50
53
  # collection type and generate dates for it. Then make a GET request for the calendar
51
54
  bin_week = str(
52
- json.loads(response)["Results"]["Refuse_HIDE2"]["Your_Refuse_round_is"]
55
+ json.loads(response)["Results"]["waste"]["roundday_residual"]
53
56
  ).replace(" ", "-")
54
57
  weekly_collection = str(
55
- json.loads(response)["Results"]["Refuse_HIDE2"]["Recycling__type"]
58
+ json.loads(response)["Results"]["waste"]["recycling_code"]
56
59
  ).capitalize()
57
60
  weekly_dates = get_weekday_dates_in_period(
58
61
  datetime.now(), days_of_week.get(bin_week.split("-")[0].strip()), amount=48
@@ -53,6 +53,9 @@ class CouncilClass(AbstractGetBinDataClass):
53
53
 
54
54
  data = {"bins": []}
55
55
 
56
+ current_year = datetime.now().year
57
+ next_year = current_year + 1
58
+
56
59
  # Page has slider info side by side, which are two instances of this class
57
60
  for bin in soup.find_all("div", {"class": "bintxt"}):
58
61
  try:
@@ -74,23 +77,31 @@ class CouncilClass(AbstractGetBinDataClass):
74
77
  if contains_date(bin_date_info[0]):
75
78
  bin_date = get_next_occurrence_from_day_month(
76
79
  datetime.strptime(
77
- bin_date_info[0] + " " + datetime.today().strftime("%Y"),
78
- "%A %d %B - %Y",
80
+ bin_date_info[0],
81
+ "%A %d %B -",
79
82
  )
80
- ).strftime(date_format)
83
+ )
81
84
  # On exceptional collection schedule (e.g. around English Bank Holidays), date will be contained in the second stripped string
82
85
  else:
83
86
  bin_date = get_next_occurrence_from_day_month(
84
87
  datetime.strptime(
85
- bin_date_info[1] + " " + datetime.today().strftime("%Y"),
86
- "%A %d %B - %Y",
88
+ bin_date_info[1],
89
+ "%A %d %B -",
87
90
  )
88
- ).strftime(date_format)
91
+ )
89
92
  except Exception as ex:
90
93
  raise ValueError(f"Error parsing bin data: {ex}")
91
94
 
95
+ if (datetime.now().month == 12) and (bin_date.month == 1):
96
+ bin_date = bin_date.replace(year=next_year)
97
+ else:
98
+ bin_date = bin_date.replace(year=current_year)
99
+
92
100
  # Build data dict for each entry
93
- dict_data = {"type": bin_type, "collectionDate": bin_date}
101
+ dict_data = {
102
+ "type": bin_type,
103
+ "collectionDate": bin_date.strftime(date_format),
104
+ }
94
105
  data["bins"].append(dict_data)
95
106
 
96
107
  data["bins"].sort(
@@ -42,14 +42,14 @@ class CouncilClass(AbstractGetBinDataClass):
42
42
  wait = WebDriverWait(driver, 60)
43
43
  address_entry_field = wait.until(
44
44
  EC.presence_of_element_located(
45
- (By.XPATH, '//*[@id="combobox-input-19"]')
45
+ (By.XPATH, '//*[@id="combobox-input-20"]')
46
46
  )
47
47
  )
48
48
 
49
49
  address_entry_field.send_keys(str(full_address))
50
50
 
51
51
  address_entry_field = wait.until(
52
- EC.element_to_be_clickable((By.XPATH, '//*[@id="combobox-input-19"]'))
52
+ EC.element_to_be_clickable((By.XPATH, '//*[@id="combobox-input-20"]'))
53
53
  )
54
54
  address_entry_field.click()
55
55
  address_entry_field.send_keys(Keys.BACKSPACE)
@@ -57,7 +57,7 @@ class CouncilClass(AbstractGetBinDataClass):
57
57
 
58
58
  first_found_address = wait.until(
59
59
  EC.element_to_be_clickable(
60
- (By.XPATH, '//*[@id="dropdown-element-19"]/ul')
60
+ (By.XPATH, '//*[@id="dropdown-element-20"]/ul')
61
61
  )
62
62
  )
63
63