uk_bin_collection 0.150.1__tar.gz → 0.152.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/PKG-INFO +1 -1
  2. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/pyproject.toml +1 -1
  3. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/input.json +46 -8
  4. uk_bin_collection-0.152.0/uk_bin_collection/uk_bin_collection/councils/AngusCouncil.py +149 -0
  5. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py +0 -2
  6. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BarkingDagenham.py +11 -2
  7. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BrentCouncil.py +47 -33
  8. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +11 -2
  9. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BroadlandDistrictCouncil.py +21 -6
  10. uk_bin_collection-0.152.0/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +162 -0
  11. uk_bin_collection-0.152.0/uk_bin_collection/uk_bin_collection/councils/FermanaghOmaghDistrictCouncil.py +102 -0
  12. uk_bin_collection-0.152.0/uk_bin_collection/uk_bin_collection/councils/MaidstoneBoroughCouncil.py +115 -0
  13. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +61 -39
  14. uk_bin_collection-0.152.0/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +146 -0
  15. uk_bin_collection-0.152.0/uk_bin_collection/uk_bin_collection/councils/SloughBoroughCouncil.py +140 -0
  16. uk_bin_collection-0.152.0/uk_bin_collection/uk_bin_collection/councils/TewkesburyBoroughCouncil.py +40 -0
  17. uk_bin_collection-0.150.1/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -110
  18. uk_bin_collection-0.150.1/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -89
  19. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/LICENSE +0 -0
  20. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/README.md +0 -0
  21. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/Local_Authority_Boundaries.geojson +0 -0
  22. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/README.rst +0 -0
  23. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/compare_lad_codes.py +0 -0
  24. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/map.html +0 -0
  25. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/check_selenium_url_in_input.json.py +0 -0
  26. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
  27. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/features/environment.py +0 -0
  28. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
  29. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/generate_map_test_results.py +0 -0
  30. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/output.schema +0 -0
  31. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
  32. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
  33. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
  34. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
  35. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/test_conftest.py +0 -0
  36. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/tests/test_get_data.py +0 -0
  37. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
  38. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/common.py +0 -0
  39. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py +0 -0
  40. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py +0 -0
  41. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
  42. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/AmberValleyBoroughCouncil.py +0 -0
  43. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py +0 -0
  44. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py +0 -0
  45. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py +0 -0
  46. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
  47. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py +0 -0
  48. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py +0 -0
  49. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
  50. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
  51. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BaberghDistrictCouncil.py +0 -0
  52. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
  53. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
  54. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
  55. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
  56. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
  57. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
  58. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
  59. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
  60. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
  61. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
  62. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py +0 -0
  63. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
  64. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BlaenauGwentCountyBoroughCouncil.py +0 -0
  65. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BolsoverCouncil.py +0 -0
  66. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
  67. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BostonBoroughCouncil.py +0 -0
  68. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
  69. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
  70. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BraintreeDistrictCouncil.py +0 -0
  71. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BrecklandCouncil.py +0 -0
  72. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
  73. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
  74. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BromsgroveDistrictCouncil.py +0 -0
  75. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py +0 -0
  76. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
  77. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
  78. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BurnleyBoroughCouncil.py +0 -0
  79. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
  80. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
  81. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CambridgeCityCouncil.py +0 -0
  82. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
  83. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py +0 -0
  84. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
  85. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py +0 -0
  86. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
  87. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CeredigionCountyCouncil.py +0 -0
  88. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
  89. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
  90. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CheltenhamBoroughCouncil.py +0 -0
  91. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CherwellDistrictCouncil.py +0 -0
  92. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
  93. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
  94. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py +0 -0
  95. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
  96. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
  97. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
  98. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CopelandBoroughCouncil.py +0 -0
  99. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
  100. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CotswoldDistrictCouncil.py +0 -0
  101. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CoventryCityCouncil.py +0 -0
  102. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
  103. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
  104. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CumberlandAllerdaleCouncil.py +0 -0
  105. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/CumberlandCouncil.py +0 -0
  106. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
  107. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
  108. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DenbighshireCouncil.py +0 -0
  109. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DerbyCityCouncil.py +0 -0
  110. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
  111. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
  112. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
  113. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
  114. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DudleyCouncil.py +0 -0
  115. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DundeeCityCouncil.py +0 -0
  116. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
  117. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
  118. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastAyrshireCouncil.py +0 -0
  119. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
  120. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
  121. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastHertsCouncil.py +0 -0
  122. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
  123. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastLothianCouncil.py +0 -0
  124. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
  125. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
  126. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastStaffordshireBoroughCouncil.py +0 -0
  127. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
  128. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
  129. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EdinburghCityCouncil.py +0 -0
  130. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +0 -0
  131. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
  132. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
  133. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
  134. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/EpsomandEwellBoroughCouncil.py +0 -0
  135. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
  136. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ExeterCityCouncil.py +0 -0
  137. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py +0 -0
  138. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
  139. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
  140. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/FifeCouncil.py +0 -0
  141. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/FlintshireCountyCouncil.py +0 -0
  142. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/FolkstoneandHytheDistrictCouncil.py +0 -0
  143. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
  144. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/FyldeCouncil.py +0 -0
  145. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
  146. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
  147. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
  148. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
  149. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/GooglePublicCalendarCouncil.py +0 -0
  150. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/GraveshamBoroughCouncil.py +0 -0
  151. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/GreatYarmouthBoroughCouncil.py +0 -0
  152. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
  153. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/GwyneddCouncil.py +0 -0
  154. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HackneyCouncil.py +0 -0
  155. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
  156. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HarboroughDistrictCouncil.py +0 -0
  157. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
  158. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
  159. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HartDistrictCouncil.py +0 -0
  160. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HartlepoolBoroughCouncil.py +0 -0
  161. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HastingsBoroughCouncil.py +0 -0
  162. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HerefordshireCouncil.py +0 -0
  163. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py +0 -0
  164. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
  165. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +0 -0
  166. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/Hillingdon.py +0 -0
  167. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py +0 -0
  168. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HorshamDistrictCouncil.py +0 -0
  169. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
  170. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
  171. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/HyndburnBoroughCouncil.py +0 -0
  172. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/IpswichBoroughCouncil.py +0 -0
  173. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
  174. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/KingsLynnandWestNorfolkBC.py +0 -0
  175. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
  176. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
  177. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
  178. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
  179. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
  180. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LeicesterCityCouncil.py +0 -0
  181. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LichfieldDistrictCouncil.py +0 -0
  182. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LincolnCouncil.py +0 -0
  183. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
  184. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
  185. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +0 -0
  186. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHarrow.py +0 -0
  187. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHavering.py +0 -0
  188. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
  189. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
  190. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLewisham.py +0 -0
  191. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughOfRichmondUponThames.py +0 -0
  192. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
  193. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py +0 -0
  194. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py +0 -0
  195. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
  196. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
  197. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
  198. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
  199. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MedwayCouncil.py +0 -0
  200. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MeltonBoroughCouncil.py +0 -0
  201. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
  202. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
  203. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MidDevonCouncil.py +0 -0
  204. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py +0 -0
  205. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
  206. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MidUlsterDistrictCouncil.py +0 -0
  207. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MiddlesbroughCouncil.py +0 -0
  208. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py +0 -0
  209. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
  210. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
  211. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MonmouthshireCountyCouncil.py +0 -0
  212. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/MorayCouncil.py +0 -0
  213. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
  214. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
  215. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
  216. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
  217. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleUnderLymeCouncil.py +0 -0
  218. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
  219. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
  220. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py +0 -0
  221. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthDevonCountyCouncil.py +0 -0
  222. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
  223. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthHertfordshireDistrictCouncil.py +0 -0
  224. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
  225. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
  226. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
  227. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
  228. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
  229. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
  230. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
  231. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
  232. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
  233. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
  234. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py +0 -0
  235. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
  236. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/NuneatonBedworthBoroughCouncil.py +0 -0
  237. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/OadbyAndWigstonBoroughCouncil.py +0 -0
  238. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
  239. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/OxfordCityCouncil.py +0 -0
  240. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/PembrokeshireCountyCouncil.py +0 -0
  241. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/PerthAndKinrossCouncil.py +0 -0
  242. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/PeterboroughCityCouncil.py +0 -0
  243. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/PlymouthCouncil.py +0 -0
  244. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
  245. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/PowysCouncil.py +0 -0
  246. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
  247. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
  248. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RedcarandClevelandCouncil.py +0 -0
  249. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RedditchBoroughCouncil.py +0 -0
  250. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
  251. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
  252. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
  253. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
  254. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
  255. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RotherDistrictCouncil.py +0 -0
  256. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
  257. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RoyalBoroughofGreenwich.py +0 -0
  258. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RunnymedeBoroughCouncil.py +0 -0
  259. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
  260. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
  261. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
  262. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SandwellBoroughCouncil.py +0 -0
  263. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SeftonCouncil.py +0 -0
  264. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
  265. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
  266. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
  267. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
  268. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
  269. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
  270. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
  271. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +0 -0
  272. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
  273. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthHamsDistrictCouncil.py +0 -0
  274. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthHollandDistrictCouncil.py +0 -0
  275. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
  276. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
  277. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
  278. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
  279. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py +0 -0
  280. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthStaffordshireDistrictCouncil.py +0 -0
  281. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
  282. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthamptonCityCouncil.py +0 -0
  283. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +0 -0
  284. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SpelthorneBoroughCouncil.py +0 -0
  285. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
  286. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
  287. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
  288. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
  289. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StevenageBoroughCouncil.py +0 -0
  290. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StirlingCouncil.py +0 -0
  291. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
  292. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StocktonOnTeesCouncil.py +0 -0
  293. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
  294. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
  295. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
  296. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
  297. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SurreyHeathBoroughCouncil.py +0 -0
  298. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
  299. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
  300. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/SwindonBoroughCouncil.py +0 -0
  301. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
  302. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
  303. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py +0 -0
  304. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
  305. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
  306. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
  307. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ThanetDistrictCouncil.py +0 -0
  308. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
  309. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ThurrockCouncil.py +0 -0
  310. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
  311. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
  312. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
  313. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/TunbridgeWellsCouncil.py +0 -0
  314. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
  315. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
  316. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
  317. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
  318. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +0 -0
  319. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
  320. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WandsworthCouncil.py +0 -0
  321. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py +0 -0
  322. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
  323. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py +0 -0
  324. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
  325. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
  326. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
  327. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
  328. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WestDunbartonshireCouncil.py +0 -0
  329. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WestLancashireBoroughCouncil.py +0 -0
  330. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
  331. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
  332. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py +0 -0
  333. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
  334. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WestOxfordshireDistrictCouncil.py +0 -0
  335. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
  336. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
  337. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
  338. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
  339. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
  340. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WirralCouncil.py +0 -0
  341. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
  342. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
  343. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WolverhamptonCityCouncil.py +0 -0
  344. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WorcesterCityCouncil.py +0 -0
  345. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WrexhamCountyBoroughCouncil.py +0 -0
  346. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
  347. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
  348. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/WyreForestDistrictCouncil.py +0 -0
  349. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
  350. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
  351. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
  352. {uk_bin_collection-0.150.1 → uk_bin_collection-0.152.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.150.1
3
+ Version: 0.152.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.150.1"
3
+ version = "0.152.0"
4
4
  description = "Python Lib to collect UK Bin Data"
5
5
  readme = "README.md"
6
6
  authors = ["Robert Bradley <robbrad182@gmail.com>"]
@@ -28,6 +28,16 @@
28
28
  "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN.",
29
29
  "LAD24CD": "E07000032"
30
30
  },
31
+ "AngusCouncil": {
32
+ "uprn": "117053733",
33
+ "skip_get_url": true,
34
+ "postcode": "DD7 7LE",
35
+ "url": "https://www.angus.gov.uk/bins_litter_and_recycling/bin_collection_days",
36
+ "web_driver": "http://selenium:4444",
37
+ "wiki_name": "Angus",
38
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN. Requires Selenium",
39
+ "LAD24CD": "S12000041"
40
+ },
31
41
  "AntrimAndNewtonabbeyCouncil": {
32
42
  "LAD24CD": "N09000001",
33
43
  "url": "https://antrimandnewtownabbey.gov.uk/residents/bins-recycling/bins-schedule/?Id=643",
@@ -117,13 +127,13 @@
117
127
  "LAD24CD": "E07000200"
118
128
  },
119
129
  "BarkingDagenham": {
120
- "house_number": "19 KELLY WAY, CHADWELL HEATH, RM6 6XH",
130
+ "house_number": "19",
121
131
  "postcode": "RM6 6XH",
122
132
  "skip_get_url": true,
123
133
  "web_driver": "http://selenium:4444",
124
134
  "url": "https://www.lbbd.gov.uk/rubbish-recycling/household-bin-collection/check-your-bin-collection-days",
125
135
  "wiki_name": "Barking and Dagenham",
126
- "wiki_note": "Use the full address as it appears on the drop-down on the site when you search by postcode.",
136
+ "wiki_note": "Use house number and postcode. Requires Selenium.",
127
137
  "LAD24CD": "E09000002"
128
138
  },
129
139
  "BarnetCouncil": {
@@ -311,13 +321,13 @@
311
321
  "LAD24CD": "E09000005"
312
322
  },
313
323
  "BrightonandHoveCityCouncil": {
314
- "house_number": "44 Carden Avenue, Brighton, BN1 8NE",
324
+ "house_number": "44",
315
325
  "postcode": "BN1 8NE",
316
326
  "skip_get_url": true,
317
327
  "url": "https://cityclean.brighton-hove.gov.uk/link/collections",
318
328
  "web_driver": "http://selenium:4444",
319
329
  "wiki_name": "Brighton and Hove",
320
- "wiki_note": "Use the full address as it appears on the drop-down on the site when you search by postcode.",
330
+ "wiki_note": "Use house number and postcode. Requires Selenium",
321
331
  "LAD24CD": "E06000043"
322
332
  },
323
333
  "BristolCityCouncil": {
@@ -330,12 +340,12 @@
330
340
  },
331
341
  "BroadlandDistrictCouncil": {
332
342
  "skip_get_url": true,
333
- "house_number": "1 Park View, Horsford, Norfolk, NR10 3FD",
343
+ "house_number": "1",
334
344
  "postcode": "NR10 3FD",
335
345
  "url": "https://area.southnorfolkandbroadland.gov.uk/FindAddress",
336
346
  "web_driver": "http://selenium:4444",
337
347
  "wiki_name": "Broadland",
338
- "wiki_note": "Use the full address as it appears on the drop-down on the site when you search by postcode.",
348
+ "wiki_note": "Use house number and postcode. Requires Selenium.",
339
349
  "LAD24CD": "E07000144"
340
350
  },
341
351
  "BromleyBoroughCouncil": {
@@ -521,7 +531,7 @@
521
531
  "LAD24CD": "E07000034"
522
532
  },
523
533
  "ChichesterDistrictCouncil": {
524
- "house_number": "7, Plaistow Road, Kirdford, Billingshurst, West Sussex",
534
+ "house_number": "7",
525
535
  "postcode": "RH14 0JT",
526
536
  "skip_get_url": true,
527
537
  "url": "https://www.chichester.gov.uk/checkyourbinday",
@@ -901,6 +911,15 @@
901
911
  "wiki_note": "Pass the UPRN. You can find it using [FindMyAddress](https://www.findmyaddress.co.uk/search).",
902
912
  "LAD24CD": "E07000010"
903
913
  },
914
+ "FermanaghOmaghDistrictCouncil": {
915
+ "house_number": "20",
916
+ "postcode": "BT74 6DQ",
917
+ "skip_get_url": true,
918
+ "url": "https://www.fermanaghomagh.com/services/environment-and-waste/waste-collection-calendar/",
919
+ "wiki_name": "Fermanagh and Omagh",
920
+ "wiki_note": "Pass the house number and postcode in their respective parameters.",
921
+ "LAD24CD": "N09000006"
922
+ },
904
923
  "FifeCouncil": {
905
924
  "uprn": "320203521",
906
925
  "url": "https://www.fife.gov.uk",
@@ -1199,6 +1218,7 @@
1199
1218
  "LAD24CD": "E07000120",
1200
1219
  "uprn": "100010448773",
1201
1220
  "url": "https://iapp.itouchvision.com/iappcollectionday/collection-day/?uuid=FEBA68993831481FD81B2E605364D00A8DC017A4",
1221
+ "skip_get_url": true,
1202
1222
  "web_driver": "http://selenium:4444",
1203
1223
  "wiki_name": "Hyndburn",
1204
1224
  "wiki_note": "Pass the UPRN. You can find it using [FindMyAddress](https://www.findmyaddress.co.uk/search). This parser requires a Selenium webdriver."
@@ -1622,7 +1642,7 @@
1622
1642
  "NorthEastDerbyshireDistrictCouncil": {
1623
1643
  "postcode": "S42 5RB",
1624
1644
  "skip_get_url": true,
1625
- "uprn": "010034492221",
1645
+ "uprn": "010034492222",
1626
1646
  "url": "https://myselfservice.ne-derbyshire.gov.uk/service/Check_your_Bin_Day",
1627
1647
  "web_driver": "http://selenium:4444",
1628
1648
  "wiki_name": "North East Derbyshire",
@@ -1935,6 +1955,7 @@
1935
1955
  "skip_get_url": true,
1936
1956
  "uprn": "100070182634",
1937
1957
  "url": "https://www.rugby.gov.uk/check-your-next-bin-day",
1958
+ "web_driver": "http://selenium:4444",
1938
1959
  "wiki_name": "Rugby",
1939
1960
  "wiki_note": "Provide your UPRN and postcode. You can find your UPRN using [FindMyAddress](https://www.findmyaddress.co.uk/search).",
1940
1961
  "LAD24CD": "E07000220"
@@ -2012,6 +2033,15 @@
2012
2033
  "wiki_note": "Follow the instructions [here](https://bins.shropshire.gov.uk/) until you get the page showing your bin collection dates, then copy the URL and replace the URL in the command.",
2013
2034
  "LAD24CD": "E06000051"
2014
2035
  },
2036
+ "SloughBoroughCouncil": {
2037
+ "postcode": "SL2 2EW",
2038
+ "skip_get_url": true,
2039
+ "url": "https://www.slough.gov.uk/bin-collections",
2040
+ "web_driver": "http://selenium:4444",
2041
+ "wiki_name": "Slough",
2042
+ "wiki_note": "Pass the UPRN and postcode in their respective parameters. This parser requires a Selenium webdriver.",
2043
+ "LAD24CD": "E06000039"
2044
+ },
2015
2045
  "SolihullCouncil": {
2016
2046
  "url": "https://digital.solihull.gov.uk/BinCollectionCalendar/Calendar.aspx?UPRN=100071005444",
2017
2047
  "wiki_command_url_override": "https://digital.solihull.gov.uk/BinCollectionCalendar/Calendar.aspx?UPRN=XXXXXXXX",
@@ -2331,6 +2361,14 @@
2331
2361
  "wiki_note": "Provide your UPRN. Find it using [FindMyAddress](https://www.findmyaddress.co.uk/search).",
2332
2362
  "LAD24CD": "E06000020"
2333
2363
  },
2364
+ "TewkesburyBoroughCouncil": {
2365
+ "skip_get_url": true,
2366
+ "uprn": "10067626314",
2367
+ "url": "https://tewkesbury.gov.uk/services/waste-and-recycling/",
2368
+ "wiki_name": "Tewkesbury",
2369
+ "wiki_note": "Provide your UPRN. Find it using [FindMyAddress](https://www.findmyaddress.co.uk/search).",
2370
+ "LAD24CD": "E07000083"
2371
+ },
2334
2372
  "TendringDistrictCouncil": {
2335
2373
  "postcode": "CO15 4EU",
2336
2374
  "skip_get_url": true,
@@ -0,0 +1,149 @@
1
+ import time
2
+ import re
3
+ from datetime import datetime
4
+
5
+ from bs4 import BeautifulSoup
6
+ from selenium.webdriver.common.by import By
7
+ from selenium.webdriver.common.keys import Keys
8
+ from selenium.webdriver.support import expected_conditions as EC
9
+ from selenium.webdriver.support.ui import Select, WebDriverWait
10
+
11
+ from uk_bin_collection.uk_bin_collection.common import *
12
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
13
+
14
+
15
+ class CouncilClass(AbstractGetBinDataClass):
16
+ def parse_data(self, page: str, **kwargs) -> dict:
17
+ driver = None
18
+ try:
19
+ user_postcode = kwargs.get("postcode")
20
+ if not user_postcode:
21
+ raise ValueError("No postcode provided.")
22
+ check_postcode(user_postcode)
23
+
24
+ user_uprn = kwargs.get("uprn")
25
+ check_uprn(user_uprn)
26
+
27
+ headless = kwargs.get("headless")
28
+ web_driver = kwargs.get("web_driver")
29
+ driver = create_webdriver(web_driver, headless, None, __name__)
30
+ page = "https://www.angus.gov.uk/bins_litter_and_recycling/bin_collection_days"
31
+
32
+ driver.get(page)
33
+
34
+ wait = WebDriverWait(driver, 10)
35
+ accept_cookies_button = wait.until(
36
+ EC.element_to_be_clickable((By.ID, "ccc-recommended-settings"))
37
+ )
38
+ accept_cookies_button.click()
39
+
40
+ find_your_collection_button = wait.until(
41
+ EC.element_to_be_clickable(
42
+ (By.XPATH, "/html/body/div[2]/div[2]/div/div/section/div[2]/div/article/div/div/p[2]/a")
43
+ )
44
+ )
45
+ find_your_collection_button.click()
46
+
47
+ iframe = wait.until(EC.presence_of_element_located((By.ID, "fillform-frame-1")))
48
+ driver.switch_to.frame(iframe)
49
+
50
+ postcode_input = wait.until(EC.presence_of_element_located((By.ID, "searchString")))
51
+ postcode_input.send_keys(user_postcode + Keys.TAB + Keys.ENTER)
52
+
53
+ time.sleep(15)
54
+
55
+ select_elem = wait.until(EC.presence_of_element_located((By.ID, "customerAddress")))
56
+ WebDriverWait(driver, 10).until(
57
+ lambda d: len(select_elem.find_elements(By.TAG_NAME, "option")) > 1
58
+ )
59
+ dropdown = Select(select_elem)
60
+ dropdown.select_by_value(user_uprn)
61
+
62
+ time.sleep(10)
63
+
64
+ wait.until(
65
+ EC.presence_of_element_located(
66
+ (By.CSS_SELECTOR, "span.fieldInput.content.html.non-input"))
67
+ )
68
+
69
+ soup = BeautifulSoup(driver.page_source, "html.parser")
70
+ bin_data = {"bins": []}
71
+ current_date = datetime.now()
72
+ current_formatted_date = None
73
+
74
+ spans = soup.select("span.fieldInput.content.html.non-input")
75
+ print(f"Found {len(spans)} bin info spans.")
76
+
77
+ for i, span in enumerate(spans):
78
+ try:
79
+ # Look for any non-empty <u> tag recursively
80
+ date_tag = next(
81
+ (u for u in span.find_all("u") if u and u.text.strip()),
82
+ None
83
+ )
84
+ bin_type_tag = span.find("b")
85
+
86
+ if date_tag:
87
+ raw_date = date_tag.text.strip().replace(",", "")
88
+ full_date_str = f"{raw_date} {current_date.year}"
89
+ full_date_str = re.sub(r"\s+", " ", full_date_str)
90
+
91
+ try:
92
+ parsed_date = datetime.strptime(full_date_str, "%A %d %B %Y")
93
+ if parsed_date.date() < current_date.date():
94
+ parsed_date = parsed_date.replace(year=current_date.year + 1)
95
+ current_formatted_date = parsed_date.strftime("%d/%m/%Y")
96
+ print(f"[{i}] Parsed date: {current_formatted_date}")
97
+ except ValueError as ve:
98
+ print(f"[{i}] Could not parse date: '{full_date_str}' - {ve}")
99
+ continue
100
+ else:
101
+ print(f"[{i}] No date tag found, using last valid date: {current_formatted_date}")
102
+
103
+ if not current_formatted_date:
104
+ print(f"[{i}] No current date to associate bin type with — skipping.")
105
+ continue
106
+
107
+ if not bin_type_tag or not bin_type_tag.text.strip():
108
+ print(f"[{i}] No bin type found — skipping.")
109
+ continue
110
+
111
+ bin_type = bin_type_tag.text.strip()
112
+
113
+ # Optional seasonal override
114
+ try:
115
+ overrides_dict = get_seasonal_overrides()
116
+ if current_formatted_date in overrides_dict:
117
+ current_formatted_date = overrides_dict[current_formatted_date]
118
+ except Exception:
119
+ pass
120
+
121
+ print(f"[{i}] Found bin: {bin_type} on {current_formatted_date}")
122
+
123
+ bin_data["bins"].append({
124
+ "type": bin_type,
125
+ "collectionDate": current_formatted_date
126
+ })
127
+
128
+ except Exception as inner_e:
129
+ print(f"[{i}] Skipping span due to error: {inner_e}")
130
+ continue
131
+
132
+ except Exception as inner_e:
133
+ print(f"Skipping span due to error: {inner_e}")
134
+ continue
135
+
136
+ if not bin_data["bins"]:
137
+ raise ValueError("No bin data found.")
138
+
139
+ print(bin_data)
140
+
141
+ return bin_data
142
+
143
+ except Exception as e:
144
+ print(f"An error occurred: {e}")
145
+ raise
146
+
147
+ finally:
148
+ if driver:
149
+ driver.quit()
@@ -8,8 +8,6 @@ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataC
8
8
 
9
9
 
10
10
  # import the wonderful Beautiful Soup and the URL grabber
11
-
12
-
13
11
  class CouncilClass(AbstractGetBinDataClass):
14
12
  """
15
13
  Concrete classes have to implement all abstract operations of the
@@ -84,10 +84,19 @@ class CouncilClass(AbstractGetBinDataClass):
84
84
  EC.element_to_be_clickable((By.ID, "address")),
85
85
  message="Address dropdown not found",
86
86
  )
87
+
87
88
  dropdown = Select(address_select)
88
89
 
89
- dropdown.select_by_visible_text(user_paon)
90
- print("Address selected successfully")
90
+ found = False
91
+ for option in dropdown.options:
92
+ if user_paon in option.text:
93
+ option.click()
94
+ found = True
95
+ print("Address selected successfully")
96
+ break
97
+
98
+ if not found:
99
+ raise Exception(f"No matching address containing '{user_paon}' found.")
91
100
 
92
101
  driver.switch_to.active_element.send_keys(Keys.TAB + Keys.ENTER)
93
102
  print("Pressed ENTER on Next button")
@@ -74,42 +74,56 @@ class CouncilClass(AbstractGetBinDataClass):
74
74
  )
75
75
 
76
76
  if service_details:
77
-
78
- # Extract next collection date
77
+ # Extract next collection date only
79
78
  next_collection_row = service_details.find(
80
79
  "dt", string="Next collection"
81
80
  )
82
- next_collection = (
83
- next_collection_row.find_next_sibling("dd").get_text(
84
- strip=True
85
- )
86
- if next_collection_row
87
- else "Unknown"
88
- )
89
-
90
- # Parse dates into standard dd/mm/yyyy format
91
- next_collection_date = datetime.strptime(
92
- remove_ordinal_indicator_from_date_string(next_collection),
93
- "%A, %d %B",
94
- )
95
-
96
- if (datetime.now().month == 12) and (
97
- next_collection.month == 1
98
- ):
99
- next_collection_date = next_collection_date.replace(
100
- year=next_year
81
+ if next_collection_row:
82
+ next_collection = next_collection_row.find_next_sibling(
83
+ "dd"
84
+ ).get_text(strip=True)
85
+
86
+ # Remove the adjusted collection time message
87
+ if (
88
+ "(this collection has been adjusted from its usual time)"
89
+ in next_collection
90
+ ):
91
+ next_collection = next_collection.replace(
92
+ "(this collection has been adjusted from its usual time)",
93
+ "",
94
+ ).strip()
95
+
96
+ # Parse date from format like "Wednesday, 7th May"
97
+ next_collection = remove_ordinal_indicator_from_date_string(
98
+ next_collection
101
99
  )
102
- else:
103
- next_collection_date = next_collection_date.replace(
104
- year=current_year
105
- )
106
-
107
- dict_data = {
108
- "type": collection_type.strip(),
109
- "collectionDate": next_collection_date.strftime(
110
- date_format
111
- ),
112
- }
113
- data["bins"].append(dict_data)
100
+ try:
101
+ next_collection_date = datetime.strptime(
102
+ next_collection, "%A, %d %B"
103
+ )
104
+
105
+ # Handle year rollover
106
+ if (
107
+ datetime.now().month == 12
108
+ and next_collection_date.month == 1
109
+ ):
110
+ next_collection_date = next_collection_date.replace(
111
+ year=next_year
112
+ )
113
+ else:
114
+ next_collection_date = next_collection_date.replace(
115
+ year=current_year
116
+ )
117
+
118
+ dict_data = {
119
+ "type": collection_type.strip(),
120
+ "collectionDate": next_collection_date.strftime(
121
+ date_format
122
+ ),
123
+ }
124
+ data["bins"].append(dict_data)
125
+ print(dict_data)
126
+ except ValueError as e:
127
+ print(f"Error parsing date {next_collection}: {e}")
114
128
 
115
129
  return data
@@ -63,8 +63,16 @@ class CouncilClass(AbstractGetBinDataClass):
63
63
 
64
64
  # Create a 'Select' for it, then select the first address in the list
65
65
  # (Index 0 is "Make a selection from the list")
66
- dropdownSelect = Select(parent_element)
67
- dropdownSelect.select_by_visible_text(str(user_paon))
66
+ options = parent_element.find_elements(By.TAG_NAME, "option")
67
+ found = False
68
+ for option in options:
69
+ if user_paon in option.text:
70
+ option.click()
71
+ found = True
72
+ break
73
+
74
+ if not found:
75
+ raise Exception(f"Address containing '{user_paon}' not found in dropdown options")
68
76
 
69
77
  submit_btn = wait.until(
70
78
  EC.presence_of_element_located(
@@ -125,6 +133,7 @@ class CouncilClass(AbstractGetBinDataClass):
125
133
  break
126
134
  dict_data = {"type": bin_type, "collectionDate": bin_date}
127
135
  data["bins"].append(dict_data)
136
+ print(data)
128
137
  except Exception as e:
129
138
  # Here you can log the exception if needed
130
139
  print(f"An error occurred: {e}")
@@ -83,15 +83,30 @@ class CouncilClass(AbstractGetBinDataClass):
83
83
  )
84
84
  print("Found address dropdown")
85
85
 
86
- # Create a Select object for the dropdown
87
86
  dropdown_select = Select(address_dropdown)
88
87
 
89
- # Search for the exact address
90
- print(f"Looking for address: {user_paon}")
88
+ print(f"Looking for address containing: {user_paon}")
91
89
 
92
- # Select the address by visible text
93
- dropdown_select.select_by_visible_text(user_paon)
94
- print(f"Selected address: {user_paon}")
90
+ found = False
91
+ user_paon_clean = user_paon.lower().strip()
92
+
93
+ for option in dropdown_select.options:
94
+ option_text_clean = option.text.lower().strip()
95
+
96
+ if (
97
+ option_text_clean == user_paon_clean # Exact match if full address given
98
+ or option_text_clean.startswith(f"{user_paon_clean} ") # Startswith match if just a number
99
+ ):
100
+ option.click()
101
+ found = True
102
+ print(f"Selected address: {option.text.strip()}")
103
+ break
104
+
105
+ if not found:
106
+ all_options = [opt.text for opt in dropdown_select.options]
107
+ raise Exception(
108
+ f"Could not find a matching address for '{user_paon}'. Available options: {all_options}"
109
+ )
95
110
 
96
111
  print("Looking for submit button after address selection...")
97
112
  submit_btn = wait.until(
@@ -0,0 +1,162 @@
1
+ import time
2
+ from datetime import datetime
3
+
4
+ from bs4 import BeautifulSoup
5
+ from selenium.webdriver.common.by import By
6
+ from selenium.webdriver.common.keys import Keys
7
+ from selenium.webdriver.support.ui import WebDriverWait, Select
8
+ from selenium.webdriver.support import expected_conditions as EC
9
+ from selenium.common.exceptions import StaleElementReferenceException, TimeoutException
10
+
11
+ from uk_bin_collection.uk_bin_collection.common import *
12
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
13
+
14
+ date_format = "%d/%m/%Y"
15
+
16
+ class CouncilClass(AbstractGetBinDataClass):
17
+ def parse_data(self, page: str, **kwargs) -> dict:
18
+ driver = None
19
+ try:
20
+ page = "https://www.chichester.gov.uk/checkyourbinday"
21
+
22
+ user_postcode = kwargs.get("postcode")
23
+ house_number = kwargs.get("paon")
24
+ web_driver = kwargs.get("web_driver")
25
+ headless = kwargs.get("headless")
26
+
27
+ driver = create_webdriver(web_driver, headless, None, __name__)
28
+ driver.get(page)
29
+
30
+ wait = WebDriverWait(driver, 60)
31
+
32
+ input_postcode = wait.until(
33
+ EC.visibility_of_element_located(
34
+ (By.ID, "WASTECOLLECTIONCALENDARV5_CALENDAR_ADDRESSLOOKUPPOSTCODE")
35
+ )
36
+ )
37
+ input_postcode.send_keys(user_postcode)
38
+
39
+ search_button = wait.until(
40
+ EC.element_to_be_clickable(
41
+ (By.ID, "WASTECOLLECTIONCALENDARV5_CALENDAR_ADDRESSLOOKUPSEARCH")
42
+ )
43
+ )
44
+ search_button.send_keys(Keys.ENTER)
45
+
46
+ self.smart_select_address(driver, house_number)
47
+
48
+ wait.until(
49
+ EC.presence_of_element_located(
50
+ (By.CLASS_NAME, "bin-collection-dates-container")
51
+ )
52
+ )
53
+
54
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
55
+ table = soup.find("table", class_="defaultgeneral bin-collection-dates")
56
+ rows = table.find_all("tr") if table else []
57
+
58
+ bin_collection_data = []
59
+ for row in rows:
60
+ cells = row.find_all("td")
61
+ if cells:
62
+ date_str = cells[0].text.strip()
63
+ bin_type = cells[1].text.strip()
64
+ date_obj = datetime.strptime(date_str, "%d %B %Y")
65
+ formatted_date = date_obj.strftime(date_format)
66
+ bin_collection_data.append({
67
+ "collectionDate": formatted_date,
68
+ "type": bin_type
69
+ })
70
+
71
+ print(bin_collection_data)
72
+
73
+ return {"bins": bin_collection_data}
74
+
75
+ except Exception as e:
76
+ print(f"An error occurred: {e}")
77
+ raise
78
+ finally:
79
+ if driver:
80
+ driver.quit()
81
+
82
+ def smart_select_address(self, driver, house_number: str):
83
+ dropdown_id = "WASTECOLLECTIONCALENDARV5_CALENDAR_ADDRESSLOOKUPADDRESS"
84
+
85
+ print("Waiting for address dropdown...")
86
+
87
+ def dropdown_has_addresses(d):
88
+ try:
89
+ dropdown_el = d.find_element(By.ID, dropdown_id)
90
+ select = Select(dropdown_el)
91
+ return len(select.options) > 1
92
+ except StaleElementReferenceException:
93
+ return False
94
+
95
+ WebDriverWait(driver, 30).until(dropdown_has_addresses)
96
+
97
+ dropdown_el = driver.find_element(By.ID, dropdown_id)
98
+ dropdown = Select(dropdown_el)
99
+
100
+ print("Address dropdown options:")
101
+ for opt in dropdown.options:
102
+ print(f"- {opt.text.strip()}")
103
+
104
+ user_input_clean = house_number.lower().strip()
105
+ found = False
106
+
107
+ for option in dropdown.options:
108
+ option_text_clean = option.text.lower().strip()
109
+ print(f"Comparing: {repr(option_text_clean)} == {repr(user_input_clean)}")
110
+
111
+ if (
112
+ option_text_clean == user_input_clean
113
+ or option_text_clean.startswith(f"{user_input_clean},")
114
+ ):
115
+ try:
116
+ option.click()
117
+ found = True
118
+ print(f"Strict match clicked: {option.text.strip()}")
119
+ break
120
+ except StaleElementReferenceException:
121
+ print("Stale during click, retrying...")
122
+ dropdown_el = driver.find_element(By.ID, dropdown_id)
123
+ dropdown = Select(dropdown_el)
124
+ for fresh_option in dropdown.options:
125
+ if fresh_option.text.lower().strip() == option_text_clean:
126
+ fresh_option.click()
127
+ found = True
128
+ print(f"Strict match clicked after refresh: {fresh_option.text.strip()}")
129
+ break
130
+
131
+ if found:
132
+ break
133
+
134
+ if not found:
135
+ print("No strict match found, trying fuzzy match...")
136
+ for option in dropdown.options:
137
+ option_text_clean = option.text.lower().strip()
138
+ if user_input_clean in option_text_clean:
139
+ try:
140
+ option.click()
141
+ found = True
142
+ print(f"Fuzzy match clicked: {option.text.strip()}")
143
+ break
144
+ except StaleElementReferenceException:
145
+ print("Stale during fuzzy click, retrying...")
146
+ dropdown_el = driver.find_element(By.ID, dropdown_id)
147
+ dropdown = Select(dropdown_el)
148
+ for fresh_option in dropdown.options:
149
+ if fresh_option.text.lower().strip() == option_text_clean:
150
+ fresh_option.click()
151
+ found = True
152
+ print(f"Fuzzy match clicked after refresh: {fresh_option.text.strip()}")
153
+ break
154
+
155
+ if found:
156
+ break
157
+
158
+ if not found:
159
+ all_opts = [opt.text.strip() for opt in dropdown.options]
160
+ raise Exception(
161
+ f"Could not find address '{house_number}' in options: {all_opts}"
162
+ )