uk_bin_collection 0.106.0__tar.gz → 0.107.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (241) hide show
  1. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/PKG-INFO +1 -1
  2. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/pyproject.toml +1 -1
  3. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/input.json +37 -0
  4. uk_bin_collection-0.107.0/uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py +103 -0
  5. uk_bin_collection-0.107.0/uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py +124 -0
  6. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +3 -9
  7. uk_bin_collection-0.107.0/uk_bin_collection/uk_bin_collection/councils/EastHertsCouncil.py +117 -0
  8. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +10 -3
  9. uk_bin_collection-0.107.0/uk_bin_collection/uk_bin_collection/councils/PowysCouncil.py +138 -0
  10. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +30 -17
  11. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +19 -6
  12. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WestOxfordshireDistrictCouncil.py +7 -0
  13. uk_bin_collection-0.107.0/uk_bin_collection/uk_bin_collection/councils/WorcesterCityCouncil.py +58 -0
  14. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/LICENSE +0 -0
  15. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/README.md +0 -0
  16. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/README.rst +0 -0
  17. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
  18. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/features/environment.py +0 -0
  19. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
  20. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/output.schema +0 -0
  21. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
  22. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
  23. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
  24. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
  25. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/test_conftest.py +0 -0
  26. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/tests/test_get_data.py +0 -0
  27. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
  28. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/common.py +0 -0
  29. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py +0 -0
  30. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
  31. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py +0 -0
  32. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
  33. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
  34. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
  35. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
  36. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
  37. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
  38. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
  39. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
  40. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
  41. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
  42. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
  43. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
  44. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
  45. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
  46. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
  47. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
  48. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
  49. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
  50. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
  51. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
  52. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
  53. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
  54. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
  55. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
  56. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
  57. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py +0 -0
  58. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
  59. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
  60. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
  61. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
  62. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
  63. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
  64. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
  65. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
  66. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
  67. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
  68. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
  69. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CoventryCityCouncil.py +0 -0
  70. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
  71. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
  72. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
  73. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
  74. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
  75. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
  76. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
  77. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/DudleyCouncil.py +0 -0
  78. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
  79. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
  80. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
  81. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
  82. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
  83. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
  84. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
  85. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
  86. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
  87. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +0 -0
  88. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
  89. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
  90. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
  91. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
  92. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py +0 -0
  93. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
  94. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
  95. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/FifeCouncil.py +0 -0
  96. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/FlintshireCountyCouncil.py +0 -0
  97. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
  98. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
  99. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
  100. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
  101. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
  102. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
  103. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/HarboroughDistrictCouncil.py +0 -0
  104. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
  105. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
  106. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
  107. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +0 -0
  108. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
  109. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
  110. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
  111. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
  112. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
  113. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
  114. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
  115. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
  116. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
  117. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LichfieldDistrictCouncil.py +0 -0
  118. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LincolnCouncil.py +0 -0
  119. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
  120. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
  121. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +0 -0
  122. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHarrow.py +0 -0
  123. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
  124. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
  125. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
  126. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py +0 -0
  127. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
  128. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
  129. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
  130. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
  131. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
  132. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
  133. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
  134. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py +0 -0
  135. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
  136. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
  137. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
  138. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
  139. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
  140. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
  141. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
  142. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
  143. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py +0 -0
  144. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
  145. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
  146. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
  147. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
  148. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
  149. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
  150. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
  151. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
  152. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
  153. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
  154. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
  155. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
  156. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py +0 -0
  157. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
  158. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
  159. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/PerthAndKinrossCouncil.py +0 -0
  160. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/PlymouthCouncil.py +0 -0
  161. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
  162. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
  163. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
  164. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
  165. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
  166. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
  167. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
  168. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
  169. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
  170. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
  171. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
  172. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
  173. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
  174. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
  175. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
  176. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
  177. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
  178. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
  179. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
  180. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
  181. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +0 -0
  182. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
  183. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
  184. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
  185. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py +0 -0
  186. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
  187. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +0 -0
  188. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
  189. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
  190. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
  191. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
  192. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
  193. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/StocktonOnTeesCouncil.py +0 -0
  194. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
  195. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
  196. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
  197. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
  198. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
  199. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
  200. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/SwindonBoroughCouncil.py +0 -0
  201. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
  202. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
  203. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py +0 -0
  204. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
  205. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
  206. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
  207. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
  208. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
  209. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
  210. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
  211. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/TunbridgeWellsCouncil.py +0 -0
  212. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
  213. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
  214. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
  215. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
  216. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +0 -0
  217. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
  218. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
  219. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py +0 -0
  220. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
  221. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
  222. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
  223. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
  224. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
  225. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
  226. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py +0 -0
  227. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
  228. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
  229. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
  230. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
  231. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
  232. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
  233. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WirralCouncil.py +0 -0
  234. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
  235. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
  236. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
  237. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
  238. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
  239. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
  240. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
  241. {uk_bin_collection-0.106.0 → uk_bin_collection-0.107.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.106.0
3
+ Version: 0.107.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.106.0"
3
+ version = "0.107.0"
4
4
  description = "Python Lib to collect UK Bin Data"
5
5
  readme = "README.md"
6
6
  authors = ["Robert Bradley <robbrad182@gmail.com>"]
@@ -12,6 +12,13 @@
12
12
  "wiki_name": "Adur and Worthing Councils",
13
13
  "wiki_note": "Replace XXXXXXXX with UPRN. You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
14
14
  },
15
+ "ArdsAndNorthDownCouncil": {
16
+ "url": "https://www.ardsandnorthdown.gov.uk",
17
+ "wiki_command_url_override": "https://www.ardsandnorthdown.gov.uk",
18
+ "uprn": "187136177",
19
+ "wiki_name": "Ards and North Down Council",
20
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
21
+ },
15
22
  "ArmaghBanbridgeCraigavonCouncil": {
16
23
  "url": "https://www.armaghbanbridgecraigavon.gov.uk/",
17
24
  "wiki_command_url_override": "https://www.armaghbanbridgecraigavon.gov.uk/",
@@ -27,6 +34,14 @@
27
34
  "web_driver": "http://selenium:4444",
28
35
  "wiki_name": "Arun Council"
29
36
  },
37
+ "AshfordBoroughCouncil": {
38
+ "url": "https://ashford.gov.uk",
39
+ "wiki_command_url_override": "https://ashford.gov.uk",
40
+ "postcode": "TN23 7SP",
41
+ "uprn": "100060777899",
42
+ "wiki_name": "Ashford Borough Council",
43
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
44
+ },
30
45
  "AylesburyValeCouncil": {
31
46
  "skip_get_url": true,
32
47
  "uprn": "766252532",
@@ -391,6 +406,13 @@
391
406
  "wiki_name": "East Devon District Council",
392
407
  "wiki_note": "Replace XXXXXXXX with UPRN."
393
408
  },
409
+ "EastHertsCouncil": {
410
+ "house_number": "1",
411
+ "postcode": "CM20 2FZ",
412
+ "skip_get_url": true,
413
+ "url": "https://www.eastherts.gov.uk",
414
+ "wiki_name": "East Herts Council"
415
+ },
394
416
  "EastLindseyDistrictCouncil": {
395
417
  "house_number": "Raf Coningsby",
396
418
  "postcode": "LN4 4SY",
@@ -971,6 +993,14 @@
971
993
  "web_driver": "http://selenium:4444",
972
994
  "wiki_name": "Portsmouth City Council"
973
995
  },
996
+ "PowysCouncil": {
997
+ "house_number": "LANE COTTAGE",
998
+ "postcode": "HR3 5JS",
999
+ "skip_get_url": true,
1000
+ "url": "https://www.powys.gov.uk",
1001
+ "web_driver": "http://selenium:4444",
1002
+ "wiki_name": "Powys Council"
1003
+ },
974
1004
  "PrestonCityCouncil": {
975
1005
  "house_number": "Town Hall",
976
1006
  "postcode": "PR1 2RL",
@@ -1519,6 +1549,13 @@
1519
1549
  "web_driver": "http://selenium:4444",
1520
1550
  "wiki_name": "Wokingham Borough Council"
1521
1551
  },
1552
+ "WorcesterCityCouncil": {
1553
+ "url": "https://www.Worcester.gov.uk",
1554
+ "wiki_command_url_override": "https://www.Worcester.gov.uk",
1555
+ "uprn": "100120650345",
1556
+ "wiki_name": "Worcester City Council",
1557
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
1558
+ },
1522
1559
  "WychavonDistrictCouncil": {
1523
1560
  "postcode": "WR3 7RU",
1524
1561
  "skip_get_url": true,
@@ -0,0 +1,103 @@
1
+ from datetime import datetime
2
+
3
+ import requests
4
+ from bs4 import BeautifulSoup
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
+ class CouncilClass(AbstractGetBinDataClass):
11
+ """
12
+ Concrete classes have to implement all abstract operations of the
13
+ base class. They can also override some operations with a default
14
+ implementation.
15
+ """
16
+
17
+ def parse_data(self, page: str, **kwargs) -> dict:
18
+ # Get and check UPRN
19
+ user_uprn = kwargs.get("uprn")
20
+ check_uprn(user_uprn)
21
+ bindata = {"bins": []}
22
+
23
+ API_URL = (
24
+ "https://collections-ardsandnorthdown.azurewebsites.net/WSCollExternal.asmx"
25
+ )
26
+
27
+ # council seems to always be ARD no matter what the old council was
28
+ PAYLOAD = f"""<?xml version="1.0" encoding="utf-8" ?>
29
+ <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
30
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
31
+ xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
32
+ <soap:Body>
33
+ <getRoundCalendarForUPRN xmlns="http://webaspx-collections.azurewebsites.net/">
34
+ <council>ARD</council>
35
+ <UPRN>{user_uprn}</UPRN>
36
+ <from>Chtml</from>
37
+ </getRoundCalendarForUPRN >
38
+ </soap:Body>
39
+ </soap:Envelope>
40
+ """
41
+
42
+ r = requests.post(
43
+ API_URL,
44
+ data=PAYLOAD,
45
+ headers={"Content-Type": "text/xml; charset=utf-8"},
46
+ )
47
+ r.raise_for_status()
48
+
49
+ # html unescape text
50
+ text = (
51
+ (r.text.replace("&lt;", "<").replace("&gt;", ">").replace("&amp;", "&"))
52
+ .split("<getRoundCalendarForUPRNResult>")[-1]
53
+ .split("</getRoundCalendarForUPRNResult>")[0]
54
+ )
55
+
56
+ soup = BeautifulSoup(text, "html.parser")
57
+
58
+ # Initialize dictionary to store bin dates
59
+ bin_schedule = {}
60
+
61
+ # Define regex pattern to capture day and date (e.g., Tue 5 Nov)
62
+ date_pattern = re.compile(r"\b\w{3} \d{1,2} \w{3}\b")
63
+
64
+ current_year = datetime.now().year
65
+
66
+ # Find each bin collection line, parse date, and add to dictionary
67
+ for bin_info in soup.find_all("b"):
68
+ bin_type = bin_info.text.strip()
69
+ bin_details = bin_info.next_sibling.strip() if bin_info.next_sibling else ""
70
+ # Check for "Today" or "Tomorrow"
71
+ if "Today" in bin_details:
72
+ collection_date = datetime.now().strftime("%a %d %b")
73
+ bin_schedule[bin_type] = collection_date
74
+ elif "Tomorrow" in bin_details:
75
+ collection_date = (datetime.now() + timedelta(days=1)).strftime(
76
+ "%a %d %b"
77
+ )
78
+ bin_schedule[bin_type] = collection_date
79
+ else:
80
+ # Extract date if it's a full date format
81
+ date_match = date_pattern.search(bin_details)
82
+ if date_match:
83
+ bin_schedule[bin_type] = date_match.group()
84
+
85
+ # Display the parsed schedule with dates only
86
+ for bin_type, collection_date in bin_schedule.items():
87
+ date = datetime.strptime(collection_date, "%a %d %b")
88
+
89
+ if date.month == 1 and datetime.now().month > 1:
90
+ date = date.replace(year=current_year + 1)
91
+ else:
92
+ date = date.replace(year=current_year)
93
+
94
+ dict_data = {
95
+ "type": bin_type,
96
+ "collectionDate": date.strftime("%d/%m/%Y"),
97
+ }
98
+ bindata["bins"].append(dict_data)
99
+
100
+ bindata["bins"].sort(
101
+ key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
102
+ )
103
+ return bindata
@@ -0,0 +1,124 @@
1
+ from datetime import datetime
2
+
3
+ import requests
4
+ from bs4 import BeautifulSoup
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
+ 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_uprn = kwargs.get("uprn")
24
+ user_postcode = kwargs.get("postcode")
25
+ check_uprn(user_uprn)
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://secure.ashford.gov.uk/waste/collectiondaylookup/"
32
+
33
+ # Create Selenium webdriver
34
+ driver = create_webdriver(web_driver, headless, None, __name__)
35
+ driver.get(API_URL)
36
+
37
+ # Wait for the postcode field to appear then populate it
38
+ inputElement_postcode = WebDriverWait(driver, 30).until(
39
+ EC.presence_of_element_located(
40
+ (By.ID, "ContentPlaceHolder1_CollectionDayLookup2_TextBox_PostCode")
41
+ )
42
+ )
43
+ inputElement_postcode.send_keys(user_postcode)
44
+
45
+ # Click search button
46
+ findAddress = WebDriverWait(driver, 10).until(
47
+ EC.presence_of_element_located(
48
+ (
49
+ By.ID,
50
+ "ContentPlaceHolder1_CollectionDayLookup2_Button_PostCodeSearch",
51
+ )
52
+ )
53
+ )
54
+ findAddress.click()
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.ID,
61
+ "ContentPlaceHolder1_CollectionDayLookup2_DropDownList_Addresses",
62
+ )
63
+ )
64
+ )
65
+
66
+ # Create a 'Select' for it, then select the first address in the list
67
+ # (Index 0 is "Make a selection from the list")
68
+ dropdownSelect = Select(dropdown)
69
+ dropdownSelect.select_by_value(str(user_uprn))
70
+
71
+ # Click search button
72
+ findAddress = WebDriverWait(driver, 10).until(
73
+ EC.presence_of_element_located(
74
+ (By.ID, "ContentPlaceHolder1_CollectionDayLookup2_Button_SelectAddress")
75
+ )
76
+ )
77
+ findAddress.click()
78
+
79
+ h4_element = WebDriverWait(driver, 10).until(
80
+ EC.presence_of_element_located(
81
+ (By.XPATH, "//h4[contains(text(), 'Collection Dates')]")
82
+ )
83
+ )
84
+
85
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
86
+
87
+ bin_tables = soup.find_all("table")
88
+
89
+ for bin_table in bin_tables:
90
+ bin_text = bin_table.find("td", id=re.compile("CollectionDayLookup2_td_"))
91
+ if not bin_text:
92
+ continue
93
+
94
+ bin_type_soup = bin_text.find("b")
95
+
96
+ if not bin_type_soup:
97
+ continue
98
+ bin_type: str = bin_type_soup.text.strip().split(" (")[0]
99
+
100
+ date_soup = bin_text.find(
101
+ "span", id=re.compile(r"CollectionDayLookup2_Label_\w*_Date")
102
+ )
103
+ if not date_soup or (
104
+ " " not in date_soup.text.strip()
105
+ and date_soup.text.strip().lower() != "today"
106
+ ):
107
+ continue
108
+ date_str: str = date_soup.text.strip()
109
+ try:
110
+ if date_soup.text.strip().lower() == "today":
111
+ date = datetime.now().date()
112
+ else:
113
+ date = datetime.strptime(date_str.split(" ")[1], "%d/%m/%Y").date()
114
+
115
+ except ValueError:
116
+ continue
117
+
118
+ dict_data = {
119
+ "type": bin_type,
120
+ "collectionDate": date.strftime("%d/%m/%Y"),
121
+ }
122
+ bindata["bins"].append(dict_data)
123
+
124
+ return bindata
@@ -267,18 +267,12 @@ class CouncilClass(AbstractGetBinDataClass):
267
267
  data = {"bins": []}
268
268
 
269
269
  for e in collection_record_elements:
270
- collection_type = e.find_all(
271
- "div", {"class": "fragment_presenter_template_show"}
272
- )[0].text.strip()
273
- collection_date = (
274
- e.find("div", {"class": "bin-collection-next"})
275
- .attrs["data-current_value"]
276
- .strip()
277
- )
270
+ collection_type = e.find("h2").get_text()
271
+ collection_date = e.find("span", {"class": "value-as-text"}).get_text()
278
272
  dict_data = {
279
273
  "type": collection_type,
280
274
  "collectionDate": datetime.strptime(
281
- collection_date, "%d/%m/%Y %H:%M"
275
+ collection_date, "%A %d %B %Y"
282
276
  ).strftime(date_format),
283
277
  }
284
278
  data["bins"].append(dict_data)
@@ -0,0 +1,117 @@
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
+ class CouncilClass(AbstractGetBinDataClass):
11
+ """
12
+ Concrete classes have to implement all abstract operations of the
13
+ base class. They can also override some operations with a default
14
+ implementation.
15
+ """
16
+
17
+ def parse_data(self, page: str, **kwargs) -> dict:
18
+ # Get and check UPRN
19
+ user_postcode = kwargs.get("postcode")
20
+ user_paon = kwargs.get("paon")
21
+ check_paon(user_paon)
22
+ check_postcode(user_postcode)
23
+ web_driver = kwargs.get("web_driver")
24
+ headless = kwargs.get("headless")
25
+ bindata = {"bins": []}
26
+
27
+ API_URL = "https://uhte-wrp.whitespacews.com"
28
+
29
+ # Create Selenium webdriver
30
+ driver = create_webdriver(web_driver, headless, None, __name__)
31
+ driver.get(API_URL)
32
+
33
+ # Click Find my bin collection day button
34
+ collectionButton = WebDriverWait(driver, 10).until(
35
+ EC.element_to_be_clickable((By.LINK_TEXT, "Find my bin collection day"))
36
+ )
37
+ collectionButton.click()
38
+
39
+ main_content = WebDriverWait(driver, 10).until(
40
+ EC.presence_of_element_located((By.ID, "main-content"))
41
+ )
42
+
43
+ # Wait for the property number field to appear then populate it
44
+ inputElement_number = WebDriverWait(driver, 10).until(
45
+ EC.element_to_be_clickable(
46
+ (
47
+ By.ID,
48
+ "address_name_number",
49
+ )
50
+ )
51
+ )
52
+ inputElement_number.send_keys(user_paon)
53
+
54
+ # Wait for the postcode field to appear then populate it
55
+ inputElement_postcode = WebDriverWait(driver, 10).until(
56
+ EC.element_to_be_clickable(
57
+ (
58
+ By.ID,
59
+ "address_postcode",
60
+ )
61
+ )
62
+ )
63
+ inputElement_postcode.send_keys(user_postcode)
64
+
65
+ # Click search button
66
+ continueButton = WebDriverWait(driver, 10).until(
67
+ EC.element_to_be_clickable(
68
+ (
69
+ By.ID,
70
+ "Submit",
71
+ )
72
+ )
73
+ )
74
+ continueButton.click()
75
+
76
+ # Wait for the 'Search Results' to appear and select the first result
77
+ property = WebDriverWait(driver, 10).until(
78
+ EC.element_to_be_clickable(
79
+ (
80
+ By.CSS_SELECTOR,
81
+ "li.app-subnav__section-item a",
82
+ # "app-subnav__link govuk-link clicker colordarkblue fontfamilyArial fontsize12rem",
83
+ # "//a[starts-with(@aria-label, '{user_paon}')]",
84
+ )
85
+ )
86
+ )
87
+ property.click()
88
+
89
+ upcoming_scheduled_collections = WebDriverWait(driver, 10).until(
90
+ EC.presence_of_element_located((By.ID, "upcoming-scheduled-collections"))
91
+ )
92
+
93
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
94
+
95
+ collections = []
96
+ for collection in soup.find_all(
97
+ "u1",
98
+ class_="displayinlineblock justifycontentleft alignitemscenter margin0 padding0",
99
+ ):
100
+ date = collection.find(
101
+ "p", string=lambda text: text and "/" in text
102
+ ).text.strip() # Extract date
103
+ service = collection.find(
104
+ "p", string=lambda text: text and "Collection Service" in text
105
+ ).text.strip() # Extract service type
106
+ collections.append({"date": date, "service": service})
107
+
108
+ # Print the parsed data
109
+ for item in collections:
110
+
111
+ dict_data = {
112
+ "type": item["service"],
113
+ "collectionDate": item["date"],
114
+ }
115
+ bindata["bins"].append(dict_data)
116
+
117
+ return bindata
@@ -82,9 +82,16 @@ class CouncilClass(AbstractGetBinDataClass):
82
82
  columns = row.find_all("td")
83
83
  if columns:
84
84
  container_type = row.find("th").text.strip()
85
- collection_day = re.sub(
86
- r"[^a-zA-Z0-9,\s]", "", columns[0].get_text()
87
- ).strip()
85
+ if columns[0].get_text() == "Today":
86
+ collection_day = datetime.now().strftime("%a, %d %B")
87
+ elif columns[0].get_text() == "Tomorrow":
88
+ collection_day = (datetime.now() + timedelta(days=1)).strftime(
89
+ "%a, %d %B"
90
+ )
91
+ else:
92
+ collection_day = re.sub(
93
+ r"[^a-zA-Z0-9,\s]", "", columns[0].get_text()
94
+ ).strip()
88
95
 
89
96
  # Parse the date from the string
90
97
  parsed_date = datetime.strptime(collection_day, "%a, %d %B")
@@ -0,0 +1,138 @@
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
+ dict_data = {
131
+ "type": "Garden Waste",
132
+ "collectionDate": datetime.strptime(
133
+ remove_ordinal_indicator_from_date_string(date), "%d %B %Y"
134
+ ).strftime(date_format),
135
+ }
136
+ data["bins"].append(dict_data)
137
+
138
+ return data