uk_bin_collection 0.130.0__tar.gz → 0.130.1__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (315) hide show
  1. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/PKG-INFO +1 -1
  2. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/pyproject.toml +1 -1
  3. uk_bin_collection-0.130.1/uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py +115 -0
  4. uk_bin_collection-0.130.1/uk_bin_collection/uk_bin_collection/councils/PowysCouncil.py +150 -0
  5. uk_bin_collection-0.130.1/uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py +68 -0
  6. uk_bin_collection-0.130.0/uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py +0 -105
  7. uk_bin_collection-0.130.0/uk_bin_collection/uk_bin_collection/councils/PowysCouncil.py +0 -141
  8. uk_bin_collection-0.130.0/uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py +0 -59
  9. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/LICENSE +0 -0
  10. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/README.md +0 -0
  11. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/README.rst +0 -0
  12. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
  13. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/features/environment.py +0 -0
  14. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
  15. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/input.json +0 -0
  16. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/output.schema +0 -0
  17. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
  18. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
  19. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/test_collect_data.py +0 -0
  20. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/test_common_functions.py +0 -0
  21. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/test_conftest.py +0 -0
  22. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/tests/test_get_data.py +0 -0
  23. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
  24. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/common.py +0 -0
  25. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py +0 -0
  26. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py +0 -0
  27. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
  28. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py +0 -0
  29. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py +0 -0
  30. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py +0 -0
  31. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py +0 -0
  32. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
  33. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py +0 -0
  34. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
  35. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
  36. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BaberghDistrictCouncil.py +0 -0
  37. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
  38. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
  39. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
  40. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
  41. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
  42. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
  43. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
  44. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
  45. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
  46. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
  47. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py +0 -0
  48. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
  49. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BlaenauGwentCountyBoroughCouncil.py +0 -0
  50. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
  51. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BostonBoroughCouncil.py +0 -0
  52. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
  53. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
  54. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BraintreeDistrictCouncil.py +0 -0
  55. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BrecklandCouncil.py +0 -0
  56. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BrentCouncil.py +0 -0
  57. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
  58. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
  59. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
  60. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BromsgroveDistrictCouncil.py +0 -0
  61. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py +0 -0
  62. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
  63. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
  64. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BurnleyBoroughCouncil.py +0 -0
  65. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
  66. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
  67. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
  68. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py +0 -0
  69. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
  70. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py +0 -0
  71. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
  72. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
  73. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
  74. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CheltenhamBoroughCouncil.py +0 -0
  75. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
  76. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
  77. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py +0 -0
  78. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
  79. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
  80. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
  81. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
  82. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CopelandBoroughCouncil.py +0 -0
  83. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
  84. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CotswoldDistrictCouncil.py +0 -0
  85. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CoventryCityCouncil.py +0 -0
  86. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
  87. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
  88. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CumberlandAllerdaleCouncil.py +0 -0
  89. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/CumberlandCouncil.py +0 -0
  90. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
  91. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
  92. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DenbighshireCouncil.py +0 -0
  93. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DerbyCityCouncil.py +0 -0
  94. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
  95. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
  96. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
  97. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
  98. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DudleyCouncil.py +0 -0
  99. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DundeeCityCouncil.py +0 -0
  100. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
  101. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
  102. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastAyrshireCouncil.py +0 -0
  103. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
  104. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
  105. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastHertsCouncil.py +0 -0
  106. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
  107. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastLothianCouncil.py +0 -0
  108. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
  109. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
  110. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastStaffordshireBoroughCouncil.py +0 -0
  111. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
  112. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
  113. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EdinburghCityCouncil.py +0 -0
  114. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +0 -0
  115. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
  116. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
  117. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
  118. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
  119. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ExeterCityCouncil.py +0 -0
  120. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py +0 -0
  121. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
  122. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
  123. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/FifeCouncil.py +0 -0
  124. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/FlintshireCountyCouncil.py +0 -0
  125. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/FolkstoneandHytheDistrictCouncil.py +0 -0
  126. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
  127. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
  128. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
  129. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
  130. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
  131. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/GraveshamBoroughCouncil.py +0 -0
  132. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
  133. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/GwyneddCouncil.py +0 -0
  134. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HackneyCouncil.py +0 -0
  135. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
  136. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HarboroughDistrictCouncil.py +0 -0
  137. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
  138. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
  139. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HartDistrictCouncil.py +0 -0
  140. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HartlepoolBoroughCouncil.py +0 -0
  141. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HerefordshireCouncil.py +0 -0
  142. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py +0 -0
  143. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
  144. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +0 -0
  145. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py +0 -0
  146. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
  147. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
  148. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
  149. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
  150. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/KingsLynnandWestNorfolkBC.py +0 -0
  151. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
  152. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
  153. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
  154. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
  155. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
  156. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LeicesterCityCouncil.py +0 -0
  157. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LichfieldDistrictCouncil.py +0 -0
  158. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LincolnCouncil.py +0 -0
  159. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
  160. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
  161. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +0 -0
  162. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHarrow.py +0 -0
  163. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHavering.py +0 -0
  164. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
  165. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
  166. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLewisham.py +0 -0
  167. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughOfRichmondUponThames.py +0 -0
  168. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
  169. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py +0 -0
  170. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py +0 -0
  171. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
  172. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
  173. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
  174. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
  175. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MedwayCouncil.py +0 -0
  176. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
  177. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
  178. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MidDevonCouncil.py +0 -0
  179. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py +0 -0
  180. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
  181. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py +0 -0
  182. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
  183. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
  184. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MonmouthshireCountyCouncil.py +0 -0
  185. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/MorayCouncil.py +0 -0
  186. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
  187. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
  188. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
  189. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
  190. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NewcastleUnderLymeCouncil.py +0 -0
  191. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
  192. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
  193. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py +0 -0
  194. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
  195. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
  196. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthHertfordshireDistrictCouncil.py +0 -0
  197. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
  198. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
  199. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
  200. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
  201. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
  202. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
  203. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
  204. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
  205. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
  206. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
  207. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py +0 -0
  208. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
  209. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/NuneatonBedworthBoroughCouncil.py +0 -0
  210. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/OadbyAndWigstonBoroughCouncil.py +0 -0
  211. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
  212. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/OxfordCityCouncil.py +0 -0
  213. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/PerthAndKinrossCouncil.py +0 -0
  214. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/PlymouthCouncil.py +0 -0
  215. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
  216. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
  217. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
  218. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RedditchBoroughCouncil.py +0 -0
  219. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
  220. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
  221. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
  222. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
  223. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
  224. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RotherDistrictCouncil.py +0 -0
  225. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
  226. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RoyalBoroughofGreenwich.py +0 -0
  227. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
  228. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
  229. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
  230. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
  231. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SandwellBoroughCouncil.py +0 -0
  232. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SeftonCouncil.py +0 -0
  233. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
  234. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
  235. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
  236. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
  237. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
  238. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
  239. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
  240. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +0 -0
  241. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
  242. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthHamsDistrictCouncil.py +0 -0
  243. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
  244. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
  245. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
  246. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
  247. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py +0 -0
  248. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthStaffordshireDistrictCouncil.py +0 -0
  249. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
  250. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +0 -0
  251. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
  252. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
  253. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
  254. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
  255. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/StevenageBoroughCouncil.py +0 -0
  256. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
  257. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/StocktonOnTeesCouncil.py +0 -0
  258. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
  259. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
  260. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
  261. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
  262. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SurreyHeathBoroughCouncil.py +0 -0
  263. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
  264. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
  265. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/SwindonBoroughCouncil.py +0 -0
  266. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
  267. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
  268. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
  269. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
  270. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
  271. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ThanetDistrictCouncil.py +0 -0
  272. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
  273. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ThurrockCouncil.py +0 -0
  274. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
  275. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
  276. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
  277. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/TunbridgeWellsCouncil.py +0 -0
  278. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
  279. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
  280. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
  281. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
  282. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +0 -0
  283. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
  284. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WandsworthCouncil.py +0 -0
  285. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py +0 -0
  286. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
  287. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py +0 -0
  288. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
  289. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
  290. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
  291. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
  292. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WestDunbartonshireCouncil.py +0 -0
  293. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WestLancashireBoroughCouncil.py +0 -0
  294. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
  295. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
  296. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py +0 -0
  297. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
  298. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WestOxfordshireDistrictCouncil.py +0 -0
  299. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
  300. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
  301. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
  302. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
  303. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
  304. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WirralCouncil.py +0 -0
  305. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
  306. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
  307. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WolverhamptonCityCouncil.py +0 -0
  308. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WorcesterCityCouncil.py +0 -0
  309. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
  310. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
  311. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/WyreForestDistrictCouncil.py +0 -0
  312. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
  313. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
  314. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
  315. {uk_bin_collection-0.130.0 → uk_bin_collection-0.130.1}/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.130.0
3
+ Version: 0.130.1
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.130.0"
3
+ version = "0.130.1"
4
4
  description = "Python Lib to collect UK Bin Data"
5
5
  readme = "README.md"
6
6
  authors = ["Robert Bradley <robbrad182@gmail.com>"]
@@ -0,0 +1,115 @@
1
+ import time
2
+ from datetime import datetime
3
+
4
+ from bs4 import BeautifulSoup
5
+ from selenium import webdriver
6
+ from selenium.webdriver.common.by import By
7
+ from selenium.webdriver.support import expected_conditions as EC
8
+ from selenium.webdriver.support.wait import WebDriverWait
9
+
10
+ from uk_bin_collection.uk_bin_collection.common import *
11
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
12
+
13
+
14
+ class CouncilClass(AbstractGetBinDataClass):
15
+ """
16
+ Concrete classes have to implement all abstract operations of the
17
+ base class. They can also override some operations with a default
18
+ implementation.
19
+ """
20
+
21
+ def parse_data(self, page: str, **kwargs) -> dict:
22
+ driver = None
23
+ try:
24
+ # Get and check UPRN
25
+ user_postcode = kwargs.get("postcode")
26
+ user_paon = kwargs.get("paon")
27
+ check_paon(user_paon)
28
+ check_postcode(user_postcode)
29
+ web_driver = kwargs.get("web_driver")
30
+ headless = kwargs.get("headless")
31
+ bindata = {"bins": []}
32
+
33
+ API_URL = "https://portal.digital.ashfield.gov.uk/w/webpage/raise-case?service=bin_calendar"
34
+
35
+ # Create Selenium webdriver
36
+ driver = create_webdriver(web_driver, headless, None, __name__)
37
+ driver.get(API_URL)
38
+
39
+ title = WebDriverWait(driver, 10).until(
40
+ EC.presence_of_element_located((By.ID, "sub_page_title"))
41
+ )
42
+
43
+ # Wait for the postcode field to appear then populate it
44
+ WebDriverWait(driver, 10).until(
45
+ EC.presence_of_element_located(
46
+ (By.CSS_SELECTOR, "input.relation_path_type_ahead_search")
47
+ )
48
+ )
49
+
50
+ inputElement_postcode = WebDriverWait(driver, 10).until(
51
+ EC.presence_of_element_located(
52
+ (By.CSS_SELECTOR, "input.relation_path_type_ahead_search")
53
+ )
54
+ )
55
+ inputElement_postcode.clear()
56
+ inputElement_postcode.send_keys(user_postcode)
57
+
58
+ # Wait for the 'Select your property' dropdown to appear and select the first result
59
+ dropdown = WebDriverWait(driver, 10).until(
60
+ EC.element_to_be_clickable(
61
+ (
62
+ By.CLASS_NAME,
63
+ "result_list ",
64
+ )
65
+ )
66
+ )
67
+
68
+ address_element = (
69
+ WebDriverWait(driver, 10)
70
+ .until(
71
+ EC.element_to_be_clickable(
72
+ (By.XPATH, f"//li[starts-with(@aria-label, '{user_paon}')]")
73
+ )
74
+ )
75
+ .click()
76
+ )
77
+
78
+ search_button = WebDriverWait(driver, 10).until(
79
+ EC.element_to_be_clickable(
80
+ (By.XPATH, "//input[@type='submit' and @value='Search']")
81
+ )
82
+ )
83
+ search_button.click()
84
+
85
+ time.sleep(10)
86
+
87
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
88
+ soup.prettify()
89
+
90
+ # Find the table by class name
91
+ table = soup.find("table", {"class": "table listing table-striped"})
92
+
93
+ # Iterate over each row in the tbody of the table
94
+ for row in table.find("tbody").find_all("tr"):
95
+ # Extract the service, day, and date for each row
96
+ service = row.find_all("td")[0].get_text(strip=True)
97
+ date = row.find_all("td")[2].get_text(strip=True)
98
+
99
+ dict_data = {
100
+ "type": service,
101
+ "collectionDate": datetime.strptime(date, "%a, %d %b %Y").strftime(
102
+ date_format
103
+ ),
104
+ }
105
+ bindata["bins"].append(dict_data)
106
+ except Exception as e:
107
+ # Here you can log the exception if needed
108
+ print(f"An error occurred: {e}")
109
+ # Optionally, re-raise the exception if you want it to propagate
110
+ raise
111
+ finally:
112
+ # This block ensures that the driver is closed regardless of an exception
113
+ if driver:
114
+ driver.quit()
115
+ return bindata
@@ -0,0 +1,150 @@
1
+ import time
2
+
3
+ from bs4 import BeautifulSoup
4
+ from dateutil.relativedelta import relativedelta
5
+ from selenium.webdriver.common.by import By
6
+ from selenium.webdriver.support import expected_conditions as EC
7
+ from selenium.webdriver.support.ui import Select
8
+ from selenium.webdriver.support.wait import WebDriverWait
9
+
10
+ from uk_bin_collection.uk_bin_collection.common import *
11
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
12
+
13
+
14
+ # import the wonderful Beautiful Soup and the URL grabber
15
+ class CouncilClass(AbstractGetBinDataClass):
16
+ """
17
+ Concrete classes have to implement all abstract operations of the
18
+ base class. They can also override some operations with a default
19
+ implementation.
20
+ """
21
+
22
+ def parse_data(self, page: str, **kwargs) -> dict:
23
+ driver = None
24
+ try:
25
+ data = {"bins": []}
26
+ user_paon = kwargs.get("paon")
27
+ user_postcode = kwargs.get("postcode")
28
+ web_driver = kwargs.get("web_driver")
29
+ headless = kwargs.get("headless")
30
+ check_paon(user_paon)
31
+ check_postcode(user_postcode)
32
+
33
+ user_paon = user_paon.upper()
34
+
35
+ # Create Selenium webdriver
36
+ driver = create_webdriver(web_driver, headless, None, __name__)
37
+ driver.get("https://en.powys.gov.uk/binday")
38
+
39
+ accept_button = WebDriverWait(driver, timeout=10).until(
40
+ EC.element_to_be_clickable(
41
+ (
42
+ By.NAME,
43
+ "acceptall",
44
+ )
45
+ )
46
+ )
47
+ accept_button.click()
48
+
49
+ # Wait for the postcode field to appear then populate it
50
+ inputElement_postcode = WebDriverWait(driver, 10).until(
51
+ EC.presence_of_element_located(
52
+ (By.ID, "BINDAYLOOKUP_ADDRESSLOOKUP_ADDRESSLOOKUPPOSTCODE")
53
+ )
54
+ )
55
+ inputElement_postcode.send_keys(user_postcode)
56
+
57
+ # Click search button
58
+ findAddress = WebDriverWait(driver, 10).until(
59
+ EC.presence_of_element_located(
60
+ (By.ID, "BINDAYLOOKUP_ADDRESSLOOKUP_ADDRESSLOOKUPSEARCH")
61
+ )
62
+ )
63
+ findAddress.click()
64
+
65
+ # Wait for the 'Select address' dropdown to appear and select option matching the house name/number
66
+ WebDriverWait(driver, 10).until(
67
+ EC.element_to_be_clickable(
68
+ (
69
+ By.XPATH,
70
+ "//select[@id='BINDAYLOOKUP_ADDRESSLOOKUP_ADDRESSLOOKUPADDRESS']//option[contains(., '"
71
+ + user_paon
72
+ + "')]",
73
+ )
74
+ )
75
+ ).click()
76
+
77
+ # Wait for the submit button to appear, then click it to get the collection dates
78
+ WebDriverWait(driver, 30).until(
79
+ EC.element_to_be_clickable(
80
+ (By.ID, "BINDAYLOOKUP_ADDRESSLOOKUP_ADDRESSLOOKUPBUTTONS_NEXT")
81
+ )
82
+ ).click()
83
+
84
+ # Wait for the collections table to appear
85
+ WebDriverWait(driver, 10).until(
86
+ EC.presence_of_element_located(
87
+ (By.ID, "BINDAYLOOKUP_COLLECTIONDATES_COLLECTIONDATES")
88
+ )
89
+ )
90
+
91
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
92
+
93
+ # General rubbish collection dates
94
+ general_rubbish_section = soup.find(
95
+ "h3", string="General Rubbish / Wheelie bin"
96
+ )
97
+ general_rubbish_dates = [
98
+ li.text for li in general_rubbish_section.find_next("ul").find_all("li")
99
+ ]
100
+
101
+ for date in general_rubbish_dates:
102
+ dict_data = {
103
+ "type": "General Rubbish / Wheelie bin",
104
+ "collectionDate": datetime.strptime(
105
+ remove_ordinal_indicator_from_date_string(date), "%d %B %Y"
106
+ ).strftime(date_format),
107
+ }
108
+ data["bins"].append(dict_data)
109
+
110
+ # Recycling and food waste collection dates
111
+ recycling_section = soup.find("h3", string="Recycling and Food Waste")
112
+ recycling_dates = [
113
+ li.text for li in recycling_section.find_next("ul").find_all("li")
114
+ ]
115
+
116
+ for date in recycling_dates:
117
+ dict_data = {
118
+ "type": "Recycling and Food Waste",
119
+ "collectionDate": datetime.strptime(
120
+ remove_ordinal_indicator_from_date_string(date), "%d %B %Y"
121
+ ).strftime(date_format),
122
+ }
123
+ data["bins"].append(dict_data)
124
+
125
+ # Garden waste collection dates
126
+ garden_waste_section = soup.find("h3", string="Garden Waste")
127
+ garden_waste_dates = [
128
+ li.text for li in garden_waste_section.find_next("ul").find_all("li")
129
+ ]
130
+ for date in garden_waste_dates:
131
+ try:
132
+ dict_data = {
133
+ "type": "Garden Waste",
134
+ "collectionDate": datetime.strptime(
135
+ remove_ordinal_indicator_from_date_string(date), "%d %B %Y"
136
+ ).strftime(date_format),
137
+ }
138
+ data["bins"].append(dict_data)
139
+ except:
140
+ continue
141
+ except Exception as e:
142
+ # Here you can log the exception if needed
143
+ print(f"An error occurred: {e}")
144
+ # Optionally, re-raise the exception if you want it to propagate
145
+ raise
146
+ finally:
147
+ # This block ensures that the driver is closed regardless of an exception
148
+ if driver:
149
+ driver.quit()
150
+ return data
@@ -0,0 +1,68 @@
1
+ from bs4 import BeautifulSoup
2
+ from selenium.webdriver.common.by import By
3
+ from selenium.webdriver.support import expected_conditions as EC
4
+ from selenium.webdriver.support.wait import WebDriverWait
5
+
6
+ from uk_bin_collection.uk_bin_collection.common import *
7
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
8
+
9
+
10
+ # import the wonderful Beautiful Soup and the URL grabber
11
+ class CouncilClass(AbstractGetBinDataClass):
12
+ """
13
+ Concrete classes have to implement all abstract operations of the
14
+ base class. They can also override some operations with a default
15
+ implementation.
16
+ """
17
+
18
+ def parse_data(self, page: str, **kwargs) -> dict:
19
+ driver = None
20
+ try:
21
+ user_uprn = kwargs.get("uprn")
22
+ web_driver = kwargs.get("web_driver")
23
+ headless = kwargs.get("headless")
24
+ check_uprn(user_uprn)
25
+ bindata = {"bins": []}
26
+
27
+ URI = f"https://www.teignbridge.gov.uk/repositories/hidden-pages/bin-finder?uprn={user_uprn}"
28
+
29
+ driver = create_webdriver(web_driver, headless, None, __name__)
30
+ driver.get(URI)
31
+
32
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
33
+
34
+ collection_dates = soup.find_all(
35
+ "h3"
36
+ ) # Assuming bin types are inside <h3> tags
37
+ bin_type_headers = soup.find_all(
38
+ "div", {"class": "binInfoContainer"}
39
+ ) # Assuming collection dates are inside <p> tags
40
+
41
+ # Iterate over the results and extract bin type and collection dates
42
+ for i, date in enumerate(collection_dates):
43
+ collection_date = date.get_text(strip=True)
44
+
45
+ bin_types = bin_type_headers[i].find_all("div")
46
+ for bin_type in bin_types:
47
+ dict_data = {
48
+ "type": bin_type.text.strip(),
49
+ "collectionDate": datetime.strptime(
50
+ collection_date,
51
+ "%d %B %Y%A",
52
+ ).strftime("%d/%m/%Y"),
53
+ }
54
+ bindata["bins"].append(dict_data)
55
+
56
+ bindata["bins"].sort(
57
+ key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
58
+ )
59
+ except Exception as e:
60
+ # Here you can log the exception if needed
61
+ print(f"An error occurred: {e}")
62
+ # Optionally, re-raise the exception if you want it to propagate
63
+ raise
64
+ finally:
65
+ # This block ensures that the driver is closed regardless of an exception
66
+ if driver:
67
+ driver.quit()
68
+ return bindata
@@ -1,105 +0,0 @@
1
- import time
2
- from datetime import datetime
3
-
4
- from bs4 import BeautifulSoup
5
- from selenium import webdriver
6
- from selenium.webdriver.common.by import By
7
- from selenium.webdriver.support import expected_conditions as EC
8
- from selenium.webdriver.support.wait import WebDriverWait
9
-
10
- from uk_bin_collection.uk_bin_collection.common import *
11
- from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
12
-
13
-
14
- class CouncilClass(AbstractGetBinDataClass):
15
- """
16
- Concrete classes have to implement all abstract operations of the
17
- base class. They can also override some operations with a default
18
- implementation.
19
- """
20
-
21
- def parse_data(self, page: str, **kwargs) -> dict:
22
- # Get and check UPRN
23
- user_postcode = kwargs.get("postcode")
24
- user_paon = kwargs.get("paon")
25
- check_paon(user_paon)
26
- check_postcode(user_postcode)
27
- web_driver = kwargs.get("web_driver")
28
- headless = kwargs.get("headless")
29
- bindata = {"bins": []}
30
-
31
- API_URL = "https://portal.digital.ashfield.gov.uk/w/webpage/raise-case?service=bin_calendar"
32
-
33
- # Create Selenium webdriver
34
- driver = create_webdriver(web_driver, headless, None, __name__)
35
- driver.get(API_URL)
36
-
37
- title = WebDriverWait(driver, 10).until(
38
- EC.presence_of_element_located((By.ID, "sub_page_title"))
39
- )
40
-
41
- # Wait for the postcode field to appear then populate it
42
- WebDriverWait(driver, 10).until(
43
- EC.presence_of_element_located(
44
- (By.CSS_SELECTOR, "input.relation_path_type_ahead_search")
45
- )
46
- )
47
-
48
- inputElement_postcode = WebDriverWait(driver, 10).until(
49
- EC.presence_of_element_located(
50
- (By.CSS_SELECTOR, "input.relation_path_type_ahead_search")
51
- )
52
- )
53
- inputElement_postcode.clear()
54
- inputElement_postcode.send_keys(user_postcode)
55
-
56
- # Wait for the 'Select your property' dropdown to appear and select the first result
57
- dropdown = WebDriverWait(driver, 10).until(
58
- EC.element_to_be_clickable(
59
- (
60
- By.CLASS_NAME,
61
- "result_list ",
62
- )
63
- )
64
- )
65
-
66
- address_element = (
67
- WebDriverWait(driver, 10)
68
- .until(
69
- EC.element_to_be_clickable(
70
- (By.XPATH, f"//li[starts-with(@aria-label, '{user_paon}')]")
71
- )
72
- )
73
- .click()
74
- )
75
-
76
- search_button = WebDriverWait(driver, 10).until(
77
- EC.element_to_be_clickable(
78
- (By.XPATH, "//input[@type='submit' and @value='Search']")
79
- )
80
- )
81
- search_button.click()
82
-
83
- time.sleep(10)
84
-
85
- soup = BeautifulSoup(driver.page_source, features="html.parser")
86
- soup.prettify()
87
-
88
- # Find the table by class name
89
- table = soup.find("table", {"class": "table listing table-striped"})
90
-
91
- # Iterate over each row in the tbody of the table
92
- for row in table.find("tbody").find_all("tr"):
93
- # Extract the service, day, and date for each row
94
- service = row.find_all("td")[0].get_text(strip=True)
95
- date = row.find_all("td")[2].get_text(strip=True)
96
-
97
- dict_data = {
98
- "type": service,
99
- "collectionDate": datetime.strptime(date, "%a, %d %b %Y").strftime(
100
- date_format
101
- ),
102
- }
103
- bindata["bins"].append(dict_data)
104
-
105
- return bindata
@@ -1,141 +0,0 @@
1
- import time
2
-
3
- from bs4 import BeautifulSoup
4
- from dateutil.relativedelta import relativedelta
5
- from selenium.webdriver.common.by import By
6
- from selenium.webdriver.support import expected_conditions as EC
7
- from selenium.webdriver.support.ui import Select
8
- from selenium.webdriver.support.wait import WebDriverWait
9
-
10
- from uk_bin_collection.uk_bin_collection.common import *
11
- from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
12
-
13
-
14
- # import the wonderful Beautiful Soup and the URL grabber
15
- class CouncilClass(AbstractGetBinDataClass):
16
- """
17
- Concrete classes have to implement all abstract operations of the
18
- base class. They can also override some operations with a default
19
- implementation.
20
- """
21
-
22
- def parse_data(self, page: str, **kwargs) -> dict:
23
- driver = None
24
- data = {"bins": []}
25
- user_paon = kwargs.get("paon")
26
- user_postcode = kwargs.get("postcode")
27
- web_driver = kwargs.get("web_driver")
28
- headless = kwargs.get("headless")
29
- check_paon(user_paon)
30
- check_postcode(user_postcode)
31
-
32
- user_paon = user_paon.upper()
33
-
34
- # Create Selenium webdriver
35
- driver = create_webdriver(web_driver, headless, None, __name__)
36
- driver.get("https://en.powys.gov.uk/binday")
37
-
38
- accept_button = WebDriverWait(driver, timeout=10).until(
39
- EC.element_to_be_clickable(
40
- (
41
- By.NAME,
42
- "acceptall",
43
- )
44
- )
45
- )
46
- accept_button.click()
47
-
48
- # Wait for the postcode field to appear then populate it
49
- inputElement_postcode = WebDriverWait(driver, 10).until(
50
- EC.presence_of_element_located(
51
- (By.ID, "BINDAYLOOKUP_ADDRESSLOOKUP_ADDRESSLOOKUPPOSTCODE")
52
- )
53
- )
54
- inputElement_postcode.send_keys(user_postcode)
55
-
56
- # Click search button
57
- findAddress = WebDriverWait(driver, 10).until(
58
- EC.presence_of_element_located(
59
- (By.ID, "BINDAYLOOKUP_ADDRESSLOOKUP_ADDRESSLOOKUPSEARCH")
60
- )
61
- )
62
- findAddress.click()
63
-
64
- # Wait for the 'Select address' dropdown to appear and select option matching the house name/number
65
- WebDriverWait(driver, 10).until(
66
- EC.element_to_be_clickable(
67
- (
68
- By.XPATH,
69
- "//select[@id='BINDAYLOOKUP_ADDRESSLOOKUP_ADDRESSLOOKUPADDRESS']//option[contains(., '"
70
- + user_paon
71
- + "')]",
72
- )
73
- )
74
- ).click()
75
-
76
- # Wait for the submit button to appear, then click it to get the collection dates
77
- WebDriverWait(driver, 30).until(
78
- EC.element_to_be_clickable(
79
- (By.ID, "BINDAYLOOKUP_ADDRESSLOOKUP_ADDRESSLOOKUPBUTTONS_NEXT")
80
- )
81
- ).click()
82
-
83
- # Wait for the collections table to appear
84
- WebDriverWait(driver, 10).until(
85
- EC.presence_of_element_located(
86
- (By.ID, "BINDAYLOOKUP_COLLECTIONDATES_COLLECTIONDATES")
87
- )
88
- )
89
-
90
- soup = BeautifulSoup(driver.page_source, features="html.parser")
91
-
92
- # General rubbish collection dates
93
- general_rubbish_section = soup.find(
94
- "h3", string="General Rubbish / Wheelie bin"
95
- )
96
- general_rubbish_dates = [
97
- li.text for li in general_rubbish_section.find_next("ul").find_all("li")
98
- ]
99
-
100
- for date in general_rubbish_dates:
101
- dict_data = {
102
- "type": "General Rubbish / Wheelie bin",
103
- "collectionDate": datetime.strptime(
104
- remove_ordinal_indicator_from_date_string(date), "%d %B %Y"
105
- ).strftime(date_format),
106
- }
107
- data["bins"].append(dict_data)
108
-
109
- # Recycling and food waste collection dates
110
- recycling_section = soup.find("h3", string="Recycling and Food Waste")
111
- recycling_dates = [
112
- li.text for li in recycling_section.find_next("ul").find_all("li")
113
- ]
114
-
115
- for date in recycling_dates:
116
- dict_data = {
117
- "type": "Recycling and Food Waste",
118
- "collectionDate": datetime.strptime(
119
- remove_ordinal_indicator_from_date_string(date), "%d %B %Y"
120
- ).strftime(date_format),
121
- }
122
- data["bins"].append(dict_data)
123
-
124
- # Garden waste collection dates
125
- garden_waste_section = soup.find("h3", string="Garden Waste")
126
- garden_waste_dates = [
127
- li.text for li in garden_waste_section.find_next("ul").find_all("li")
128
- ]
129
- for date in garden_waste_dates:
130
- try:
131
- dict_data = {
132
- "type": "Garden Waste",
133
- "collectionDate": datetime.strptime(
134
- remove_ordinal_indicator_from_date_string(date), "%d %B %Y"
135
- ).strftime(date_format),
136
- }
137
- data["bins"].append(dict_data)
138
- except:
139
- continue
140
-
141
- return data
@@ -1,59 +0,0 @@
1
- from bs4 import BeautifulSoup
2
- from selenium.webdriver.common.by import By
3
- from selenium.webdriver.support import expected_conditions as EC
4
- from selenium.webdriver.support.wait import WebDriverWait
5
-
6
- from uk_bin_collection.uk_bin_collection.common import *
7
- from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
8
-
9
-
10
- # import the wonderful Beautiful Soup and the URL grabber
11
- class CouncilClass(AbstractGetBinDataClass):
12
- """
13
- Concrete classes have to implement all abstract operations of the
14
- base class. They can also override some operations with a default
15
- implementation.
16
- """
17
-
18
- def parse_data(self, page: str, **kwargs) -> dict:
19
-
20
- user_uprn = kwargs.get("uprn")
21
- web_driver = kwargs.get("web_driver")
22
- headless = kwargs.get("headless")
23
- check_uprn(user_uprn)
24
- bindata = {"bins": []}
25
-
26
- URI = f"https://www.teignbridge.gov.uk/repositories/hidden-pages/bin-finder?uprn={user_uprn}"
27
-
28
- driver = create_webdriver(web_driver, headless, None, __name__)
29
- driver.get(URI)
30
-
31
- soup = BeautifulSoup(driver.page_source, features="html.parser")
32
-
33
- collection_dates = soup.find_all(
34
- "h3"
35
- ) # Assuming bin types are inside <h3> tags
36
- bin_type_headers = soup.find_all(
37
- "div", {"class": "binInfoContainer"}
38
- ) # Assuming collection dates are inside <p> tags
39
-
40
- # Iterate over the results and extract bin type and collection dates
41
- for i, date in enumerate(collection_dates):
42
- collection_date = date.get_text(strip=True)
43
-
44
- bin_types = bin_type_headers[i].find_all("div")
45
- for bin_type in bin_types:
46
- dict_data = {
47
- "type": bin_type.text.strip(),
48
- "collectionDate": datetime.strptime(
49
- collection_date,
50
- "%d %B %Y%A",
51
- ).strftime("%d/%m/%Y"),
52
- }
53
- bindata["bins"].append(dict_data)
54
-
55
- bindata["bins"].sort(
56
- key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
57
- )
58
-
59
- return bindata