uk_bin_collection 0.128.6__tar.gz → 0.130.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (312) hide show
  1. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/PKG-INFO +1 -1
  2. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/pyproject.toml +1 -1
  3. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/input.json +37 -30
  4. uk_bin_collection-0.130.0/uk_bin_collection/uk_bin_collection/councils/BostonBoroughCouncil.py +149 -0
  5. uk_bin_collection-0.130.0/uk_bin_collection/uk_bin_collection/councils/EastLothianCouncil.py +83 -0
  6. uk_bin_collection-0.130.0/uk_bin_collection/uk_bin_collection/councils/EastStaffordshireBoroughCouncil.py +86 -0
  7. uk_bin_collection-0.130.0/uk_bin_collection/uk_bin_collection/councils/HerefordshireCouncil.py +53 -0
  8. uk_bin_collection-0.130.0/uk_bin_collection/uk_bin_collection/councils/LeicesterCityCouncil.py +62 -0
  9. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py +24 -0
  10. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +17 -6
  11. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/LICENSE +0 -0
  12. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/README.md +0 -0
  13. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/README.rst +0 -0
  14. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
  15. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/features/environment.py +0 -0
  16. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
  17. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/output.schema +0 -0
  18. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
  19. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
  20. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
  21. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
  22. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/test_conftest.py +0 -0
  23. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/tests/test_get_data.py +0 -0
  24. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
  25. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/common.py +0 -0
  26. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py +0 -0
  27. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py +0 -0
  28. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
  29. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py +0 -0
  30. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py +0 -0
  31. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py +0 -0
  32. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py +0 -0
  33. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
  34. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py +0 -0
  35. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py +0 -0
  36. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
  37. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
  38. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BaberghDistrictCouncil.py +0 -0
  39. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
  40. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
  41. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
  42. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
  43. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
  44. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
  45. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
  46. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
  47. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
  48. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
  49. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py +0 -0
  50. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
  51. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BlaenauGwentCountyBoroughCouncil.py +0 -0
  52. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
  53. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
  54. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
  55. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BraintreeDistrictCouncil.py +0 -0
  56. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BrecklandCouncil.py +0 -0
  57. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BrentCouncil.py +0 -0
  58. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
  59. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
  60. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
  61. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BromsgroveDistrictCouncil.py +0 -0
  62. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py +0 -0
  63. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
  64. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
  65. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BurnleyBoroughCouncil.py +0 -0
  66. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
  67. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
  68. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
  69. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py +0 -0
  70. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
  71. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py +0 -0
  72. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
  73. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
  74. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
  75. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CheltenhamBoroughCouncil.py +0 -0
  76. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
  77. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
  78. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py +0 -0
  79. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
  80. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
  81. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
  82. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
  83. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CopelandBoroughCouncil.py +0 -0
  84. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
  85. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CotswoldDistrictCouncil.py +0 -0
  86. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CoventryCityCouncil.py +0 -0
  87. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
  88. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
  89. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CumberlandAllerdaleCouncil.py +0 -0
  90. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/CumberlandCouncil.py +0 -0
  91. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
  92. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
  93. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DenbighshireCouncil.py +0 -0
  94. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DerbyCityCouncil.py +0 -0
  95. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
  96. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
  97. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
  98. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
  99. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DudleyCouncil.py +0 -0
  100. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DundeeCityCouncil.py +0 -0
  101. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
  102. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
  103. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EastAyrshireCouncil.py +0 -0
  104. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
  105. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
  106. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EastHertsCouncil.py +0 -0
  107. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
  108. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
  109. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
  110. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
  111. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
  112. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EdinburghCityCouncil.py +0 -0
  113. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +0 -0
  114. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
  115. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
  116. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
  117. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
  118. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ExeterCityCouncil.py +0 -0
  119. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py +0 -0
  120. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
  121. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
  122. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/FifeCouncil.py +0 -0
  123. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/FlintshireCountyCouncil.py +0 -0
  124. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/FolkstoneandHytheDistrictCouncil.py +0 -0
  125. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
  126. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
  127. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
  128. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
  129. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
  130. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/GraveshamBoroughCouncil.py +0 -0
  131. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
  132. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/GwyneddCouncil.py +0 -0
  133. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HackneyCouncil.py +0 -0
  134. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
  135. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HarboroughDistrictCouncil.py +0 -0
  136. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
  137. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
  138. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HartDistrictCouncil.py +0 -0
  139. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HartlepoolBoroughCouncil.py +0 -0
  140. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py +0 -0
  141. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
  142. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +0 -0
  143. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py +0 -0
  144. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
  145. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
  146. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
  147. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
  148. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/KingsLynnandWestNorfolkBC.py +0 -0
  149. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
  150. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
  151. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
  152. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
  153. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
  154. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LichfieldDistrictCouncil.py +0 -0
  155. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LincolnCouncil.py +0 -0
  156. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
  157. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
  158. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +0 -0
  159. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHarrow.py +0 -0
  160. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHavering.py +0 -0
  161. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
  162. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
  163. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLewisham.py +0 -0
  164. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughOfRichmondUponThames.py +0 -0
  165. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
  166. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py +0 -0
  167. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py +0 -0
  168. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
  169. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
  170. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
  171. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
  172. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MedwayCouncil.py +0 -0
  173. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
  174. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
  175. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MidDevonCouncil.py +0 -0
  176. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py +0 -0
  177. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
  178. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
  179. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
  180. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MonmouthshireCountyCouncil.py +0 -0
  181. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/MorayCouncil.py +0 -0
  182. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
  183. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
  184. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
  185. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
  186. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleUnderLymeCouncil.py +0 -0
  187. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
  188. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
  189. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py +0 -0
  190. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
  191. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
  192. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthHertfordshireDistrictCouncil.py +0 -0
  193. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
  194. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
  195. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
  196. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
  197. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
  198. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
  199. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
  200. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
  201. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
  202. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
  203. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py +0 -0
  204. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
  205. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/NuneatonBedworthBoroughCouncil.py +0 -0
  206. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/OadbyAndWigstonBoroughCouncil.py +0 -0
  207. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
  208. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/OxfordCityCouncil.py +0 -0
  209. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/PerthAndKinrossCouncil.py +0 -0
  210. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/PlymouthCouncil.py +0 -0
  211. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
  212. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/PowysCouncil.py +0 -0
  213. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
  214. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
  215. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RedditchBoroughCouncil.py +0 -0
  216. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
  217. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
  218. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
  219. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
  220. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
  221. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RotherDistrictCouncil.py +0 -0
  222. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
  223. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RoyalBoroughofGreenwich.py +0 -0
  224. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
  225. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
  226. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
  227. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
  228. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SandwellBoroughCouncil.py +0 -0
  229. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SeftonCouncil.py +0 -0
  230. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
  231. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
  232. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
  233. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
  234. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
  235. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
  236. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
  237. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +0 -0
  238. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
  239. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthHamsDistrictCouncil.py +0 -0
  240. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
  241. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
  242. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
  243. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
  244. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py +0 -0
  245. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthStaffordshireDistrictCouncil.py +0 -0
  246. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
  247. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +0 -0
  248. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
  249. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
  250. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
  251. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
  252. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/StevenageBoroughCouncil.py +0 -0
  253. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
  254. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/StocktonOnTeesCouncil.py +0 -0
  255. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
  256. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
  257. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
  258. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
  259. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SurreyHeathBoroughCouncil.py +0 -0
  260. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
  261. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/SwindonBoroughCouncil.py +0 -0
  262. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
  263. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
  264. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py +0 -0
  265. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
  266. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
  267. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
  268. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ThanetDistrictCouncil.py +0 -0
  269. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
  270. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ThurrockCouncil.py +0 -0
  271. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
  272. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
  273. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
  274. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/TunbridgeWellsCouncil.py +0 -0
  275. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
  276. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
  277. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
  278. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
  279. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +0 -0
  280. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
  281. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WandsworthCouncil.py +0 -0
  282. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py +0 -0
  283. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
  284. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py +0 -0
  285. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
  286. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
  287. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
  288. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
  289. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WestDunbartonshireCouncil.py +0 -0
  290. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WestLancashireBoroughCouncil.py +0 -0
  291. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
  292. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
  293. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py +0 -0
  294. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
  295. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WestOxfordshireDistrictCouncil.py +0 -0
  296. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
  297. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
  298. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
  299. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
  300. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
  301. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WirralCouncil.py +0 -0
  302. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
  303. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
  304. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WolverhamptonCityCouncil.py +0 -0
  305. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WorcesterCityCouncil.py +0 -0
  306. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
  307. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
  308. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/WyreForestDistrictCouncil.py +0 -0
  309. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
  310. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
  311. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
  312. {uk_bin_collection-0.128.6 → uk_bin_collection-0.130.0}/uk_bin_collection/uk_bin_collection/get_bin_data.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: uk_bin_collection
3
- Version: 0.128.6
3
+ Version: 0.130.0
4
4
  Summary: Python Lib to collect UK Bin Data
5
5
  Author: Robert Bradley
6
6
  Author-email: robbrad182@gmail.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "uk_bin_collection"
3
- version = "0.128.6"
3
+ version = "0.130.0"
4
4
  description = "Python Lib to collect UK Bin Data"
5
5
  readme = "README.md"
6
6
  authors = ["Robert Bradley <robbrad182@gmail.com>"]
@@ -31,13 +31,6 @@
31
31
  "wiki_name": "Ards and North Down Council",
32
32
  "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
33
33
  },
34
- "ArdsAndNorthDownCouncil": {
35
- "url": "https://www.ardsandnorthdown.gov.uk",
36
- "wiki_command_url_override": "https://www.ardsandnorthdown.gov.uk",
37
- "uprn": "187136177",
38
- "wiki_name": "Ards and North Down Council",
39
- "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
40
- },
41
34
  "ArgyllandButeCouncil": {
42
35
  "uprn": "125061759",
43
36
  "skip_get_url": true,
@@ -212,6 +205,15 @@
212
205
  "wiki_name": "Bolton Council",
213
206
  "wiki_note": "To get the UPRN, you will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search). Previously required a single field that was UPRN and full address; now requires UPRN and postcode as separate fields."
214
207
  },
208
+ "BostonBoroughCouncil": {
209
+ "postcode": "PE20 1AY",
210
+ "skip_get_url": true,
211
+ "house_number": "CEDAR",
212
+ "web_driver": "http://selenium:4444",
213
+ "url": "https://www.boston.gov.uk/findwastecollections",
214
+ "wiki_name": "Boston Borough Council",
215
+ "wiki_note": "Provide your house number in the `house_number` parameter and postcode in the `postcode` parameter."
216
+ },
215
217
  "BracknellForestCouncil": {
216
218
  "house_number": "57",
217
219
  "paon": "57",
@@ -348,7 +350,7 @@
348
350
  "CardiffCouncil": {
349
351
  "skip_get_url": true,
350
352
  "uprn": "100100112419",
351
- "url": "https://www.cardiff.gov.uk/ENG/resident/Rubbish-and-recycling/When-are-my-bins-collected/Pages/default.aspx",
353
+ "url": "https://www.gov.uk",
352
354
  "wiki_name": "Cardiff Council",
353
355
  "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
354
356
  },
@@ -611,13 +613,6 @@
611
613
  "wiki_name": "East Herts Council",
612
614
  "wiki_note": "Pass the house number and postcode in their respective parameters."
613
615
  },
614
- "EastHertsCouncil": {
615
- "house_number": "1",
616
- "postcode": "CM20 2FZ",
617
- "skip_get_url": true,
618
- "url": "https://www.eastherts.gov.uk",
619
- "wiki_name": "East Herts Council"
620
- },
621
616
  "EastLindseyDistrictCouncil": {
622
617
  "house_number": "1",
623
618
  "postcode": "PE22 0YD",
@@ -627,6 +622,14 @@
627
622
  "wiki_name": "East Lindsey District Council",
628
623
  "wiki_note": "Pass the house name/number and postcode in their respective parameters. This parser requires a Selenium webdriver."
629
624
  },
625
+ "EastLothianCouncil": {
626
+ "house_number": "Flat 1",
627
+ "postcode": "EH21 6QA",
628
+ "skip_get_url": true,
629
+ "url": "https://eastlothian.gov.uk",
630
+ "wiki_name": "East Lothian Council",
631
+ "wiki_note": "Pass the house number and postcode in their respective parameters"
632
+ },
630
633
  "EastRenfrewshireCouncil": {
631
634
  "house_number": "23",
632
635
  "postcode": "G46 6RG",
@@ -645,6 +648,12 @@
645
648
  "wiki_name": "East Riding Council",
646
649
  "wiki_note": "Put the full address as it displays on the council website dropdown when you do the check manually."
647
650
  },
651
+ "EastStaffordshireBoroughCouncil": {
652
+ "url": "https://www.eaststaffsbc.gov.uk/bins-rubbish-recycling/collection-dates/68382",
653
+ "wiki_command_url_override": "https://www.eaststaffsbc.gov.uk/bins-rubbish-recycling/collection-dates/XXXXX",
654
+ "wiki_name": "East Staffordshire Borough Council",
655
+ "wiki_note": "Replace `XXXXX` with your property's ID when selecting from https://www.eaststaffsbc.gov.uk/bins-rubbish-recycling/collection-dates."
656
+ },
648
657
  "EastSuffolkCouncil": {
649
658
  "postcode": "IP11 9FJ",
650
659
  "skip_get_url": true,
@@ -745,20 +754,6 @@
745
754
  "wiki_name": "Flintshire County Council",
746
755
  "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
747
756
  },
748
- "FifeCouncil": {
749
- "url": "https://www.fife.gov.uk",
750
- "wiki_command_url_override": "https://www.fife.gov.uk",
751
- "uprn": "320203521",
752
- "wiki_name": "Fife Council",
753
- "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
754
- },
755
- "FlintshireCountyCouncil": {
756
- "url": "https://digital.flintshire.gov.uk",
757
- "wiki_command_url_override": "https://digital.flintshire.gov.uk",
758
- "uprn": "100100213710",
759
- "wiki_name": "Flintshire County Council",
760
- "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
761
- },
762
757
  "FolkstoneandHytheDistrictCouncil": {
763
758
  "skip_get_url": true,
764
759
  "uprn": "50032097",
@@ -887,6 +882,12 @@
887
882
  "wiki_name": "Hartlepool Borough Council",
888
883
  "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find your UPRN."
889
884
  },
885
+ "HerefordshireCouncil": {
886
+ "url": "https://www.herefordshire.gov.uk/rubbish-recycling/check-bin-collection-day?blpu_uprn=10096232662",
887
+ "wiki_command_url_override": "https://www.herefordshire.gov.uk/rubbish-recycling/check-bin-collection-day?blpu_uprn=XXXXXXXXXXXX",
888
+ "wiki_name": "Herefordshire Council",
889
+ "wiki_note": "Replace 'XXXXXXXXXX' with your property's UPRN. You can find it using [FindMyAddress](https://www.findmyaddress.co.uk/search)."
890
+ },
890
891
  "HertsmereBoroughCouncil": {
891
892
  "house_number": "1",
892
893
  "postcode": "WD7 9HZ",
@@ -994,6 +995,12 @@
994
995
  "wiki_name": "Leeds City Council",
995
996
  "wiki_note": "Pass the house number, postcode, and UPRN. This parser requires a Selenium webdriver."
996
997
  },
998
+ "LeicesterCityCouncil": {
999
+ "url": "https://biffaleicester.co.uk",
1000
+ "uprn": "2465027976",
1001
+ "wiki_name": "Leicester City Council",
1002
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
1003
+ },
997
1004
  "LichfieldDistrictCouncil": {
998
1005
  "url": "https://www.lichfielddc.gov.uk",
999
1006
  "wiki_command_url_override": "https://www.lichfielddc.gov.uk",
@@ -1231,7 +1238,7 @@
1231
1238
  "url": "https://community.newcastle.gov.uk/my-neighbourhood/ajax/getBinsNew.php?uprn=004510730634",
1232
1239
  "wiki_command_url_override": "https://community.newcastle.gov.uk/my-neighbourhood/ajax/getBinsNew.php?uprn=XXXXXXXX",
1233
1240
  "wiki_name": "Newcastle City Council",
1234
- "wiki_note": "Replace XXXXXXXX with your UPRN."
1241
+ "wiki_note": "Replace XXXXXXXX with your UPRN. UPRNs need to be 12 digits long so please pad the left hand side with 0s if your UPRN is not long enough"
1235
1242
  },
1236
1243
  "NewcastleUnderLymeCouncil": {
1237
1244
  "url": "https://www.newcastle-staffs.gov.uk",
@@ -0,0 +1,149 @@
1
+ from bs4 import BeautifulSoup
2
+ from selenium.webdriver.common.by import By
3
+ from selenium.webdriver.support import expected_conditions as EC
4
+ from selenium.webdriver.support.ui import Select
5
+ from selenium.webdriver.support.wait import WebDriverWait
6
+
7
+ from uk_bin_collection.uk_bin_collection.common import *
8
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
9
+
10
+
11
+ # import the wonderful Beautiful Soup and the URL grabber
12
+ class CouncilClass(AbstractGetBinDataClass):
13
+ """
14
+ Concrete classes have to implement all abstract operations of the
15
+ base class. They can also override some operations with a default
16
+ implementation.
17
+ """
18
+
19
+ def parse_data(self, page: str, **kwargs) -> dict:
20
+ driver = None
21
+ try:
22
+ data = {"bins": []}
23
+ user_paon = kwargs.get("paon")
24
+ user_postcode = kwargs.get("postcode")
25
+ web_driver = kwargs.get("web_driver")
26
+ headless = kwargs.get("headless")
27
+ check_paon(user_paon)
28
+ check_postcode(user_postcode)
29
+
30
+ # Create Selenium webdriver
31
+ driver = create_webdriver(web_driver, headless, None, __name__)
32
+ driver.get("https://www.boston.gov.uk/findwastecollections")
33
+
34
+ accept_button = WebDriverWait(driver, timeout=30).until(
35
+ EC.element_to_be_clickable((By.NAME, "acceptall"))
36
+ )
37
+ accept_button.click()
38
+
39
+ # Wait for the postcode field to appear then populate it
40
+ inputElement_postcode = WebDriverWait(driver, 30).until(
41
+ EC.presence_of_element_located(
42
+ (By.ID, "BBCWASTECOLLECTIONS_START_SEARCHPOSTCODE")
43
+ )
44
+ )
45
+ inputElement_postcode.send_keys(user_postcode)
46
+
47
+ # Click search button
48
+ findAddress = WebDriverWait(driver, 10).until(
49
+ EC.presence_of_element_located(
50
+ (By.ID, "BBCWASTECOLLECTIONS_START_START10_NEXT")
51
+ )
52
+ )
53
+ findAddress.click()
54
+
55
+ # Wait for the custom dropdown container to be visible
56
+ WebDriverWait(driver, 10).until(
57
+ EC.element_to_be_clickable(
58
+ (By.ID, "BBCWASTECOLLECTIONS_COLLECTIONADDRESS_INCIDENTUPRN_chosen")
59
+ )
60
+ )
61
+
62
+ # Click on the dropdown to open it
63
+ dropdown = driver.find_element(
64
+ By.ID, "BBCWASTECOLLECTIONS_COLLECTIONADDRESS_INCIDENTUPRN_chosen"
65
+ )
66
+ dropdown.click()
67
+
68
+ # Wait for the dropdown options to be visible
69
+ WebDriverWait(driver, 10).until(
70
+ EC.visibility_of_element_located((By.CLASS_NAME, "chosen-results"))
71
+ )
72
+
73
+ # Locate the desired option using its text
74
+ desired_option = driver.find_element(
75
+ By.XPATH,
76
+ "//li[@class='active-result' and contains(text(), '"
77
+ + user_paon
78
+ + "')]",
79
+ )
80
+
81
+ # Click on the desired option
82
+ desired_option.click()
83
+
84
+ # dropdown.select_by_visible_text(user_paon)
85
+
86
+ # Click search button
87
+ findAddress = WebDriverWait(driver, 10).until(
88
+ EC.presence_of_element_located(
89
+ (By.ID, "BBCWASTECOLLECTIONS_COLLECTIONADDRESS_NEXT3_NEXT")
90
+ )
91
+ )
92
+ findAddress.click()
93
+
94
+ # Wait for the collections table to appear
95
+ WebDriverWait(driver, 10).until(
96
+ EC.presence_of_element_located(
97
+ (By.ID, "BBCWASTECOLLECTIONS_SERVICE_FIELD859_OUTER")
98
+ )
99
+ )
100
+
101
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
102
+
103
+ # Find the container with the bin information
104
+ bins = soup.find_all(
105
+ "div", class_="grid__cell grid__cell--listitem grid__cell--cols1"
106
+ )
107
+
108
+ current_year = datetime.now().year
109
+ next_year = current_year + 1
110
+
111
+ # Loop through each bin container to extract the details
112
+ for bin_div in bins:
113
+ # Find the bin type (title text)
114
+ bin_type = bin_div.find("h2", class_="item__title").text.strip()
115
+
116
+ # Find the next collection date
117
+ next_collection = (
118
+ bin_div.find("div", class_="item__content")
119
+ .find("div")
120
+ .text.strip()
121
+ .replace("Next: ", "")
122
+ )
123
+
124
+ next_collection = datetime.strptime(
125
+ remove_ordinal_indicator_from_date_string(next_collection),
126
+ "%A %d %B",
127
+ )
128
+
129
+ if (datetime.now().month == 12) and (next_collection.month == 1):
130
+ next_collection = next_collection.replace(year=next_year)
131
+ else:
132
+ next_collection = next_collection.replace(year=current_year)
133
+
134
+ dict_data = {
135
+ "type": bin_type,
136
+ "collectionDate": next_collection.strftime(date_format),
137
+ }
138
+ data["bins"].append(dict_data)
139
+
140
+ except Exception as e:
141
+ # Here you can log the exception if needed
142
+ print(f"An error occurred: {e}")
143
+ # Optionally, re-raise the exception if you want it to propagate
144
+ raise
145
+ finally:
146
+ # This block ensures that the driver is closed regardless of an exception
147
+ if driver:
148
+ driver.quit()
149
+ return data
@@ -0,0 +1,83 @@
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_postcode = kwargs.get("postcode")
19
+ user_paon = kwargs.get("paon")
20
+ check_postcode(user_postcode)
21
+ check_paon(user_paon)
22
+ bindata = {"bins": []}
23
+
24
+ URI = "http://collectiondates.eastlothian.gov.uk/ajax/your-calendar/load-streets-spring-2024.asp"
25
+
26
+ payload = {
27
+ "postcode": user_postcode,
28
+ }
29
+
30
+ headers = {
31
+ "Referer": "http://collectiondates.eastlothian.gov.uk/your-calendar",
32
+ "User-Agent": "Mozilla/5.0",
33
+ }
34
+
35
+ # Make the GET request
36
+ response = requests.get(URI, headers=headers, params=payload)
37
+
38
+ # Parse the HTML with BeautifulSoup
39
+ soup = BeautifulSoup(response.text, "html.parser")
40
+
41
+ # Find the select dropdown
42
+ select = soup.find("select", id="SelectStreet")
43
+
44
+ # Find the option that contains "Flat 1"
45
+ address = select.find("option", string=lambda text: text and user_paon in text)
46
+
47
+ URI = "http://collectiondates.eastlothian.gov.uk/ajax/your-calendar/load-recycling-summer-2024.asp"
48
+
49
+ payload = {
50
+ "id": address["value"],
51
+ }
52
+
53
+ # Make the GET request
54
+ response = requests.get(URI, headers=headers, params=payload)
55
+
56
+ # Parse the HTML with BeautifulSoup
57
+ soup = BeautifulSoup(response.text, "html.parser")
58
+
59
+ # Extract collection details
60
+ calendar_items = soup.find_all("div", class_="calendar-item")
61
+ for item in calendar_items:
62
+ waste_label = item.find("div", class_="waste-label").text.strip()
63
+ waste_value = item.find("div", class_="waste-value").find("h4").text.strip()
64
+
65
+ try:
66
+ collection_date = datetime.strptime(
67
+ remove_ordinal_indicator_from_date_string(waste_value),
68
+ "%A %d %B %Y",
69
+ )
70
+ except ValueError:
71
+ continue
72
+
73
+ dict_data = {
74
+ "type": waste_label.replace(" is:", ""),
75
+ "collectionDate": collection_date.strftime(date_format),
76
+ }
77
+ bindata["bins"].append(dict_data)
78
+
79
+ bindata["bins"].sort(
80
+ key=lambda x: datetime.strptime(x.get("collectionDate"), date_format)
81
+ )
82
+
83
+ return bindata
@@ -0,0 +1,86 @@
1
+ import requests
2
+ from bs4 import BeautifulSoup
3
+ from selenium.webdriver.common.by import By
4
+ from selenium.webdriver.support import expected_conditions as EC
5
+ from selenium.webdriver.support.ui import Select
6
+ from selenium.webdriver.support.wait import WebDriverWait
7
+
8
+ from uk_bin_collection.uk_bin_collection.common import *
9
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
10
+
11
+
12
+ # import the wonderful Beautiful Soup and the URL grabber
13
+ class CouncilClass(AbstractGetBinDataClass):
14
+ """
15
+ Concrete classes have to implement all abstract operations of the
16
+ base class. They can also override some operations with a default
17
+ implementation.
18
+ """
19
+
20
+ def parse_data(self, page: str, **kwargs) -> dict:
21
+
22
+ bindata = {"bins": []}
23
+
24
+ soup = BeautifulSoup(page.text, features="html.parser")
25
+
26
+ current_year = datetime.now().year
27
+ next_year = current_year + 1
28
+
29
+ # Extract next collection
30
+ next_collection_section = soup.find("div", class_="collection-next")
31
+ if next_collection_section:
32
+ next_collection_text = next_collection_section.find("h2").text.strip()
33
+ date_match = re.search(
34
+ r"(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d+)(?:st|nd|rd|th)? (\w+)",
35
+ next_collection_text,
36
+ )
37
+ if date_match:
38
+ collection_date = f"{date_match.group(1)} {remove_ordinal_indicator_from_date_string(date_match.group(2))} {date_match.group(3)}"
39
+
40
+ collection_date = datetime.strptime(collection_date, "%A %d %B")
41
+
42
+ if (datetime.now().month == 12) and (collection_date.month == 1):
43
+ collection_date = collection_date.replace(year=next_year)
44
+ else:
45
+ collection_date = collection_date.replace(year=current_year)
46
+
47
+ # Get bin types
48
+ bins = next_collection_section.find_all("div", class_="field__item")
49
+ for bin_type in bins:
50
+ dict_data = {
51
+ "type": bin_type.text.strip(),
52
+ "collectionDate": collection_date.strftime(date_format),
53
+ }
54
+ bindata["bins"].append(dict_data)
55
+
56
+ # Extract other collections
57
+ other_collections = soup.find_all("li")
58
+ for collection in other_collections:
59
+ date_text = collection.contents[0].strip()
60
+ date_match = re.search(
61
+ r"(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d+)(?:st|nd|rd|th)? (\w+)",
62
+ date_text,
63
+ )
64
+ if date_match:
65
+ collection_date = f"{date_match.group(1)} {remove_ordinal_indicator_from_date_string(date_match.group(2))} {date_match.group(3)}"
66
+ collection_date = datetime.strptime(collection_date, "%A %d %B")
67
+
68
+ if (datetime.now().month == 12) and (collection_date.month == 1):
69
+ collection_date = collection_date.replace(year=next_year)
70
+ else:
71
+ collection_date = collection_date.replace(year=current_year)
72
+
73
+ # Get bin types
74
+ bins = collection.find_all("div", class_="field__item")
75
+ for bin_type in bins:
76
+ dict_data = {
77
+ "type": bin_type.text.strip(),
78
+ "collectionDate": collection_date.strftime(date_format),
79
+ }
80
+ bindata["bins"].append(dict_data)
81
+
82
+ bindata["bins"].sort(
83
+ key=lambda x: datetime.strptime(x.get("collectionDate"), date_format)
84
+ )
85
+
86
+ return bindata
@@ -0,0 +1,53 @@
1
+ import logging
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
+ # 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
+ # Make a BS4 object
19
+ soup = BeautifulSoup(page.text, features="html.parser")
20
+ soup.prettify()
21
+
22
+ data = {"bins": []}
23
+
24
+ checkValid = soup.find("p", id="selectedAddressResult")
25
+ if checkValid is None:
26
+ raise ValueError("Address/UPRN not found")
27
+
28
+ collections = soup.find("div", id="wasteCollectionDates")
29
+
30
+ for bins in collections.select('div[class*="hc-island"]'):
31
+ bin_type = bins.h4.get_text(strip=True)
32
+
33
+ # Last div.hc-island is the calendar link, skip it
34
+ if bin_type == "Calendar":
35
+ continue
36
+
37
+ # Next collection date is in a span under the second p.hc-no-margin of the div.
38
+ bin_collection = re.search(
39
+ r"(.*) \(.*\)", bins.select("div > p > span")[0].get_text(strip=True)
40
+ ).group(1)
41
+ if bin_collection:
42
+ logging.info(
43
+ f"Bin type: {bin_type} - Collection date: {bin_collection}"
44
+ )
45
+ dict_data = {
46
+ "type": bin_type,
47
+ "collectionDate": datetime.strptime(
48
+ bin_collection, "%A %d %B %Y"
49
+ ).strftime(date_format),
50
+ }
51
+ data["bins"].append(dict_data)
52
+
53
+ return data
@@ -0,0 +1,62 @@
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
+ user_uprn = str(user_uprn).zfill(12)
24
+
25
+ URI = "https://biffaleicester.co.uk/wp-admin/admin-ajax.php"
26
+
27
+ payload = {
28
+ "action": "get_details_api",
29
+ "uprn": user_uprn,
30
+ }
31
+
32
+ headers = {
33
+ "Origin": "https://biffaleicester.co.uk",
34
+ "Referer": "https://biffaleicester.co.uk/services/waste-collection-days/",
35
+ "User-Agent": "Mozilla/5.0",
36
+ }
37
+
38
+ # Make the GET request
39
+ response = requests.post(URI, headers=headers, data=payload)
40
+
41
+ # Parse the JSON response
42
+ bin_collection = response.json()
43
+
44
+ # Loop through each collection in bin_collection
45
+ for collection in bin_collection["anyType"]:
46
+ bin_type = collection["ServiceModeDesc"]
47
+ date = collection["ServiceDueDate"]
48
+
49
+ dict_data = {
50
+ "type": bin_type,
51
+ "collectionDate": datetime.strptime(
52
+ date,
53
+ "%d/%m/%y",
54
+ ).strftime(date_format),
55
+ }
56
+ bindata["bins"].append(dict_data)
57
+
58
+ bindata["bins"].sort(
59
+ key=lambda x: datetime.strptime(x.get("collectionDate"), date_format)
60
+ )
61
+
62
+ return bindata
@@ -82,6 +82,30 @@ class CouncilClass(AbstractGetBinDataClass):
82
82
  if pattern.match(link_text):
83
83
  return address_link
84
84
 
85
+ try:
86
+ print("Finding next page link not found.")
87
+ # Find the 'Next page' link
88
+ next_page_link = soup.find("a", class_="button float-right")
89
+
90
+ # Ensure the link exists
91
+ if next_page_link:
92
+ # Extract the href attribute
93
+ next_page_url = next_page_link["href"]
94
+
95
+ # Send a GET request to the next page
96
+ next_response = requests.get(next_page_url)
97
+ next_response.raise_for_status() # Raise an exception for HTTP errors
98
+
99
+ # Parse the HTML content of the next page
100
+ soup = BeautifulSoup(next_response.text, "html.parser")
101
+ address_link = self._get_result_by_identifier(soup, identifier)
102
+ return address_link
103
+ else:
104
+ print("Next page link not found.")
105
+ except AttributeError as e:
106
+ print(f"Warning: Could not find the search results. Error: {e}")
107
+ return None # Return None if no result found
108
+
85
109
  print(f"Warning: No results found for identifier '{identifier}'.")
86
110
  return None # Return None if no match is found
87
111
 
@@ -19,6 +19,7 @@ def parse_collection_date(date_string) -> datetime:
19
19
 
20
20
  return parsed_date
21
21
 
22
+
22
23
  class CouncilClass(AbstractGetBinDataClass):
23
24
  """
24
25
  Concrete classes have to implement all abstract operations of the
@@ -84,6 +85,9 @@ class CouncilClass(AbstractGetBinDataClass):
84
85
 
85
86
  data = {"bins": []}
86
87
 
88
+ current_year = datetime.now().year
89
+ next_year = current_year + 1
90
+
87
91
  next_collection_date = soup.find(
88
92
  "strong", id="SBC-YBD-collectionDate"
89
93
  ).text.strip()
@@ -104,20 +108,27 @@ class CouncilClass(AbstractGetBinDataClass):
104
108
  future_bins = [li.text.strip() for li in soup.select("#FirstFutureBins li")]
105
109
 
106
110
  for bin in next_bins:
111
+ collection_date = datetime.strptime(next_collection_date, "%A, %d %B")
112
+ if (datetime.now().month == 12) and (collection_date.month == 1):
113
+ collection_date = collection_date.replace(year=next_year)
114
+ else:
115
+ collection_date = collection_date.replace(year=current_year)
116
+
107
117
  dict_data = {
108
118
  "type": bin,
109
- "collectionDate": datetime.strptime(
110
- next_collection_date, "%A, %d %B"
111
- ).strftime(date_format),
119
+ "collectionDate": collection_date.strftime(date_format),
112
120
  }
113
121
  data["bins"].append(dict_data)
114
122
 
115
123
  for bin in future_bins:
124
+ collection_date = datetime.strptime(future_collection_date, "%A, %d %B")
125
+ if (datetime.now().month == 12) and (collection_date.month == 1):
126
+ collection_date = collection_date.replace(year=next_year)
127
+ else:
128
+ collection_date = collection_date.replace(year=current_year)
116
129
  dict_data = {
117
130
  "type": bin,
118
- "collectionDate": datetime.strptime(
119
- future_collection_date, "%A, %d %B"
120
- ).strftime(date_format),
131
+ "collectionDate": collection_date.strftime(date_format),
121
132
  }
122
133
  data["bins"].append(dict_data)
123
134