uk_bin_collection 0.91.2__tar.gz → 0.93.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/PKG-INFO +17 -12
  2. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/README.md +16 -11
  3. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/pyproject.toml +1 -1
  4. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/input.json +39 -5
  5. uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +81 -0
  6. uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +115 -0
  7. uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +103 -0
  8. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +38 -32
  9. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +2 -1
  10. uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +114 -0
  11. uk_bin_collection-0.93.0/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +99 -0
  12. uk_bin_collection-0.91.2/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -98
  13. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/LICENSE +0 -0
  14. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/README.rst +0 -0
  15. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
  16. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/features/environment.py +0 -0
  17. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
  18. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/output.schema +0 -0
  19. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
  20. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
  21. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
  22. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
  23. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/test_conftest.py +0 -0
  24. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/tests/test_get_data.py +0 -0
  25. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
  26. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/common.py +0 -0
  27. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
  28. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
  29. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
  30. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
  31. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
  32. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
  33. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
  34. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
  35. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
  36. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
  37. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
  38. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
  39. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
  40. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
  41. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
  42. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
  43. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
  44. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
  45. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
  46. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
  47. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
  48. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
  49. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
  50. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
  51. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
  52. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
  53. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
  54. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
  55. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
  56. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
  57. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
  58. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
  59. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
  60. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
  61. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
  62. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
  63. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
  64. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
  65. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
  66. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
  67. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
  68. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
  69. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
  70. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
  71. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
  72. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
  73. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
  74. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
  75. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
  76. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
  77. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
  78. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
  79. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
  80. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
  81. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
  82. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
  83. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
  84. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
  85. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
  86. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
  87. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
  88. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
  89. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
  90. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
  91. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
  92. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
  93. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
  94. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
  95. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
  96. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
  97. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
  98. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
  99. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
  100. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
  101. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
  102. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
  103. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
  104. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
  105. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
  106. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
  107. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
  108. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
  109. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
  110. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
  111. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
  112. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
  113. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
  114. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
  115. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
  116. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
  117. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
  118. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
  119. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
  120. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
  121. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
  122. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
  123. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
  124. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
  125. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
  126. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
  127. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
  128. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
  129. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
  130. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
  131. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
  132. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
  133. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
  134. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
  135. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
  136. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
  137. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
  138. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
  139. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
  140. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
  141. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
  142. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
  143. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
  144. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
  145. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
  146. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
  147. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
  148. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
  149. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
  150. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
  151. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
  152. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
  153. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
  154. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
  155. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
  156. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
  157. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
  158. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
  159. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
  160. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
  161. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
  162. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
  163. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
  164. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
  165. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
  166. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
  167. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
  168. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
  169. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
  170. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
  171. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
  172. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
  173. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
  174. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
  175. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
  176. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
  177. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
  178. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
  179. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
  180. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
  181. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
  182. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
  183. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
  184. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
  185. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
  186. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
  187. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
  188. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
  189. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
  190. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
  191. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
  192. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
  193. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
  194. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
  195. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
  196. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
  197. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
  198. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
  199. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
  200. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
  201. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
  202. {uk_bin_collection-0.91.2 → uk_bin_collection-0.93.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.91.2
3
+ Version: 0.93.0
4
4
  Summary: Python Lib to collect UK Bin Data
5
5
  Author: Robert Bradley
6
6
  Author-email: robbrad182@gmail.com
@@ -53,6 +53,21 @@ Most scripts make use of [Beautiful Soup 4](https://pypi.org/project/beautifulso
53
53
 
54
54
  ---
55
55
 
56
+ ## Requesting your council
57
+ > :warning: Please check that a request for your council has not already been made. You can do this by searching on the [Issues](https://github.com/robbrad/UKBinCollectionData/issues) page.
58
+
59
+ If an issue already exists, please comment on that issue to express your interest. Please do not open a new issue, as it will be closed as a duplicate.
60
+
61
+ If an issue does not already exist, please fill in a new [Council Request](https://github.com/robbrad/UKBinCollectionData/issues/new/choose) form, including as much information as possible, including:
62
+ - Name of the council
63
+ - URL to bin collections
64
+ - An example postcode and/or UPRN (whichever is relevant)
65
+ - Any further information
66
+
67
+ Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council will get added.
68
+
69
+ ---
70
+
56
71
  ## Home Assistant Usage
57
72
 
58
73
  ### Install with HACS (recommended)
@@ -255,17 +270,6 @@ docker pull selenium/standalone-chrome docker run -d -p 4444:4444 --name seleniu
255
270
 
256
271
  ---
257
272
 
258
- ## Requesting your council
259
- To make a request for your council, first check the [Issues](https://github.com/robbrad/UKBinCollectionData/issues) page to make sure it has not already been requested. If not, please fill in a new [Council Request](https://github.com/robbrad/UKBinCollectionData/issues/new/choose) form, including as much information as possible, including:
260
- - Name of the council
261
- - URL to bin collections
262
- - An example postcode and/or UPRN (whichever is relevant)
263
- - Any further information
264
-
265
- Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council will get a script.
266
-
267
- ---
268
-
269
273
  ## Reports
270
274
 
271
275
  - [3.11](https://robbrad.github.io/UKBinCollectionData/3.11/)
@@ -371,3 +375,4 @@ Contributions are always welcome! See ```CONTRIBUTING.md``` to get started. Plea
371
375
  <img src="https://contrib.rocks/image?repo=robbrad/UKBinCollectionData" alt="Image of contributors"/>
372
376
  </a>
373
377
 
378
+
@@ -30,6 +30,21 @@ Most scripts make use of [Beautiful Soup 4](https://pypi.org/project/beautifulso
30
30
 
31
31
  ---
32
32
 
33
+ ## Requesting your council
34
+ > :warning: Please check that a request for your council has not already been made. You can do this by searching on the [Issues](https://github.com/robbrad/UKBinCollectionData/issues) page.
35
+
36
+ If an issue already exists, please comment on that issue to express your interest. Please do not open a new issue, as it will be closed as a duplicate.
37
+
38
+ If an issue does not already exist, please fill in a new [Council Request](https://github.com/robbrad/UKBinCollectionData/issues/new/choose) form, including as much information as possible, including:
39
+ - Name of the council
40
+ - URL to bin collections
41
+ - An example postcode and/or UPRN (whichever is relevant)
42
+ - Any further information
43
+
44
+ Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council will get added.
45
+
46
+ ---
47
+
33
48
  ## Home Assistant Usage
34
49
 
35
50
  ### Install with HACS (recommended)
@@ -232,17 +247,6 @@ docker pull selenium/standalone-chrome docker run -d -p 4444:4444 --name seleniu
232
247
 
233
248
  ---
234
249
 
235
- ## Requesting your council
236
- To make a request for your council, first check the [Issues](https://github.com/robbrad/UKBinCollectionData/issues) page to make sure it has not already been requested. If not, please fill in a new [Council Request](https://github.com/robbrad/UKBinCollectionData/issues/new/choose) form, including as much information as possible, including:
237
- - Name of the council
238
- - URL to bin collections
239
- - An example postcode and/or UPRN (whichever is relevant)
240
- - Any further information
241
-
242
- Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council will get a script.
243
-
244
- ---
245
-
246
250
  ## Reports
247
251
 
248
252
  - [3.11](https://robbrad.github.io/UKBinCollectionData/3.11/)
@@ -347,3 +351,4 @@ Contributions are always welcome! See ```CONTRIBUTING.md``` to get started. Plea
347
351
  <a href="https://github.com/robbrad/UKBinCollectionData/graphs/contributors">
348
352
  <img src="https://contrib.rocks/image?repo=robbrad/UKBinCollectionData" alt="Image of contributors"/>
349
353
  </a>
354
+
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "uk_bin_collection"
3
- version = "0.91.2"
3
+ version = "0.93.0"
4
4
  description = "Python Lib to collect UK Bin Data"
5
5
  readme = "README.md"
6
6
  authors = ["Robert Bradley <robbrad182@gmail.com>"]
@@ -42,7 +42,13 @@
42
42
  "wiki_name": "Barnsley Metropolitan Borough Council",
43
43
  "wiki_note": "To get the UPRN, you will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search)."
44
44
  },
45
- "BasingstokeCouncil": {
45
+ "BasildonCouncil": {
46
+ "skip_get_url": true,
47
+ "uprn": "10013350430",
48
+ "url": "https://basildonportal.azurewebsites.net/api/getPropertyRefuseInformation",
49
+ "wiki_name": "Basildon Council"
50
+ },
51
+ "BasingstokeCouncil": {
46
52
  "skip_get_url": true,
47
53
  "uprn": "100060220926",
48
54
  "url": "https://www.basingstoke.gov.uk/bincollection",
@@ -109,6 +115,7 @@
109
115
  "wiki_note": "To get the UPRN, you will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search). Previously required single field that was UPRN and full address, now requires UPRN and postcode as separate fields."
110
116
  },
111
117
  "BracknellForestCouncil": {
118
+ "house_number": "57",
112
119
  "paon": "57",
113
120
  "postcode": "GU47 9BS",
114
121
  "skip_get_url": true,
@@ -155,10 +162,10 @@
155
162
  "wiki_name": "Broxtowe Borough Council"
156
163
  },
157
164
  "BuckinghamshireCouncil": {
158
- "house_number": "HUGHENDEN MANOR, MANOR ROAD, HUGHENDEN VALLEY, HIGH WYCOMBE",
159
- "postcode": "HP14 4LA",
165
+ "house_number": "2",
166
+ "postcode": "HP13 7BA",
160
167
  "skip_get_url": true,
161
- "url": "https://chiltern.gov.uk/collection-dates",
168
+ "url": "https://iapp.itouchvision.com/iappcollectionday/collection-day/?uuid=FA353FC74600CBE61BE409534D00A8EC09BDA3AC&lang=en",
162
169
  "web_driver": "http://selenium:4444",
163
170
  "wiki_name": "Buckinghamshire Council (Chiltern, South Bucks, Wycombe)",
164
171
  "wiki_note": "Pass the name of the street with the house number parameter, wrapped in double quotes"
@@ -247,6 +254,16 @@
247
254
  "wiki_name": "Chorley Council",
248
255
  "wiki_note": "Chorley needs to be passed both a Postcode & UPRN in the format of UPRNXXXXXX to work. Find this on [FindMyAddress](https://www.findmyaddress.co.uk/search)"
249
256
  },
257
+ "ColchesterCityCouncil": {
258
+ "house_number": "29",
259
+ "paon": "29",
260
+ "postcode": "CO2 8UN",
261
+ "skip_get_url": false,
262
+ "url": "https://www.colchester.gov.uk/your-recycling-calendar",
263
+ "web_driver": "http://selenium:4444",
264
+ "wiki_name": "Colchester City Council",
265
+ "wiki_note": "Pass the house name/number in the house number parameter, wrapped in double quotes"
266
+ },
250
267
  "ConwyCountyBorough": {
251
268
  "postcode": "LL30 2DF",
252
269
  "uprn": "100100429249",
@@ -649,9 +666,9 @@
649
666
  "wiki_note": "UPRN can only be parsed with a valid postcode."
650
667
  },
651
668
  "NeathPortTalbotCouncil": {
669
+ "house_number": "2",
652
670
  "postcode": "SA13 3BA",
653
671
  "skip_get_url": true,
654
- "uprn": "10023947752",
655
672
  "url": "https://www.npt.gov.uk",
656
673
  "web_driver": "http://selenium:4444",
657
674
  "wiki_name": "Neath Port Talbot Council"
@@ -1219,6 +1236,16 @@
1219
1236
  "url": "https://ilambassadorformsprod.azurewebsites.net/wastecollectiondays/index",
1220
1237
  "wiki_name": "Wiltshire Council"
1221
1238
  },
1239
+ "WinchesterCityCouncil": {
1240
+ "house_number": "12",
1241
+ "paon": "12",
1242
+ "postcode": "SO23 7GA",
1243
+ "skip_get_url": false,
1244
+ "url": "https://iportal.itouchvision.com/icollectionday/collection-day",
1245
+ "web_driver": "http://selenium:4444",
1246
+ "wiki_name": "Winchester City Council",
1247
+ "wiki_note": "Pass the house name/number in the house number parameter, wrapped in double quotes"
1248
+ },
1222
1249
  "WindsorAndMaidenheadCouncil": {
1223
1250
  "web_driver": "http://selenium:4444",
1224
1251
  "uprn": "100080371082",
@@ -1234,6 +1261,13 @@
1234
1261
  "wiki_name": "Woking Borough Council/Joint Waste Solutions",
1235
1262
  "wiki_note": "Works with all collection areas that use Joint Waste Solutions. Just use the correct URL."
1236
1263
  },
1264
+ "WokinghamBoroughCouncil": {
1265
+ "house_number": "90",
1266
+ "postcode": "RG40 2HR",
1267
+ "skip_get_url": true,
1268
+ "url": "https://www.wokingham.gov.uk/rubbish-and-recycling/waste-collection/find-your-bin-collection-day",
1269
+ "wiki_name": "Wokingham Borough Council"
1270
+ },
1237
1271
  "WychavonDistrictCouncil": {
1238
1272
  "postcode": "WR3 7RU",
1239
1273
  "skip_get_url": true,
@@ -0,0 +1,81 @@
1
+ from uk_bin_collection.uk_bin_collection.common import *
2
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
3
+
4
+
5
+ # import the wonderful Beautiful Soup and the URL grabber
6
+ class CouncilClass(AbstractGetBinDataClass):
7
+ """
8
+ Concrete classes have to implement all abstract operations of the
9
+ base class. They can also override some operations with a default
10
+ implementation.
11
+ """
12
+
13
+ def parse_data(self, page: str, **kwargs) -> dict:
14
+ url_base = "https://basildonportal.azurewebsites.net/api/getPropertyRefuseInformation"
15
+
16
+ uprn = kwargs.get("uprn")
17
+ # Check the UPRN is valid
18
+ check_uprn(uprn)
19
+
20
+ payload = {
21
+ # Add your payload details here (replace this with the actual payload structure if required)
22
+ "uprn": uprn
23
+ }
24
+
25
+ # Headers for the request
26
+ headers = {
27
+ "Content-Type": "application/json"
28
+ }
29
+
30
+ response = requests.post(url_base, data=json.dumps(payload), headers=headers)
31
+
32
+ # Ensure the request was successful
33
+ if response.status_code == 200:
34
+ data = response.json()
35
+
36
+ # Initialize an empty list to store the bin collection details
37
+
38
+ bins = []
39
+
40
+ # Function to add collection details to bins list
41
+ def add_collection(service_name, collection_data):
42
+ bins.append({
43
+ "type": service_name,
44
+ "collectionDate": collection_data.get("current_collection_date")
45
+ })
46
+
47
+ # Extract refuse information
48
+ available_services = data["refuse"]["available_services"]
49
+
50
+ for service_name, service_data in available_services.items():
51
+ # Append the service name and current collection date to the "bins" list
52
+ match service_data["container"]:
53
+ case "Green Wheelie Bin":
54
+ subscription_status = service_data["subscription"]["active"] if service_data["subscription"] else False
55
+ type_descr = f"Green Wheelie Bin ({"Active" if subscription_status else "Expired"})"
56
+ case "N/A":
57
+ type_descr = service_data["name"]
58
+ case _:
59
+ type_descr = service_data["container"]
60
+
61
+
62
+ date_str = service_data.get("current_collection_date")
63
+ # Parse the date string into a datetime object
64
+ date_obj = datetime.strptime(date_str, "%Y-%m-%d")
65
+
66
+ # Convert the datetime object to the desired format
67
+ formatted_date = date_obj.strftime(date_format)
68
+
69
+ bins.append({
70
+ "type": type_descr, # Use service name from the data
71
+ "collectionDate": formatted_date
72
+ })
73
+
74
+ else:
75
+ print(f"Failed to fetch data. Status code: {response.status_code}")
76
+
77
+ data = {
78
+ "bins": bins
79
+ }
80
+
81
+ return data
@@ -0,0 +1,115 @@
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
+ driver = None
19
+ try:
20
+ data = {"bins": []}
21
+ user_paon = kwargs.get("paon")
22
+ user_postcode = kwargs.get("postcode")
23
+ web_driver = kwargs.get("web_driver")
24
+ headless = kwargs.get("headless")
25
+ check_paon(user_paon)
26
+ check_postcode(user_postcode)
27
+
28
+ # Create Selenium webdriver
29
+ driver = create_webdriver(web_driver, headless, None, __name__)
30
+ driver.get(
31
+ "https://iapp.itouchvision.com/iappcollectionday/collection-day/?uuid=FA353FC74600CBE61BE409534D00A8EC09BDA3AC&lang=en"
32
+ )
33
+
34
+ # Wait for the postcode field to appear then populate it
35
+ inputElement_postcode = WebDriverWait(driver, 10).until(
36
+ EC.presence_of_element_located((By.ID, "postcodeSearch"))
37
+ )
38
+ inputElement_postcode.send_keys(user_postcode)
39
+
40
+ # Click search button
41
+ findAddress = WebDriverWait(driver, 10).until(
42
+ EC.presence_of_element_located(
43
+ (By.XPATH, '//button[@class="govuk-button mt-4"]')
44
+ )
45
+ )
46
+ findAddress.click()
47
+
48
+ # Wait for the 'Select address' dropdown to appear and select option matching the house name/number
49
+ WebDriverWait(driver, 10).until(
50
+ EC.element_to_be_clickable(
51
+ (
52
+ By.XPATH,
53
+ "//select[@id='addressSelect']//option[contains(., '"
54
+ + user_paon
55
+ + "')]",
56
+ )
57
+ )
58
+ ).click()
59
+
60
+ # Wait for the collections table to appear
61
+ WebDriverWait(driver, 10).until(
62
+ EC.presence_of_element_located(
63
+ (
64
+ By.XPATH,
65
+ '//div[@class="ant-row d-flex justify-content-between mb-4 mt-2 css-2rgkd4"]',
66
+ )
67
+ )
68
+ )
69
+
70
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
71
+
72
+ recyclingcalendar = soup.find(
73
+ "div",
74
+ {
75
+ "class": "ant-row d-flex justify-content-between mb-4 mt-2 css-2rgkd4"
76
+ },
77
+ )
78
+
79
+ rows = recyclingcalendar.find_all(
80
+ "div",
81
+ {
82
+ "class": "ant-col ant-col-xs-12 ant-col-sm-12 ant-col-md-12 ant-col-lg-12 ant-col-xl-12 css-2rgkd4"
83
+ },
84
+ )
85
+
86
+ current_year = datetime.now().year
87
+ current_month = datetime.now().month
88
+
89
+ for row in rows:
90
+ BinType = row.find("h3").text
91
+ collectiondate = datetime.strptime(
92
+ row.find("div", {"class": "text-white fw-bold"}).text,
93
+ "%A %d %B",
94
+ )
95
+ if (current_month > 10) and (collectiondate.month < 3):
96
+ collectiondate = collectiondate.replace(year=(current_year + 1))
97
+ else:
98
+ collectiondate = collectiondate.replace(year=current_year)
99
+
100
+ dict_data = {
101
+ "type": BinType,
102
+ "collectionDate": collectiondate.strftime("%d/%m/%Y"),
103
+ }
104
+ data["bins"].append(dict_data)
105
+
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 data
@@ -0,0 +1,103 @@
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
+ data = {"bins": []}
22
+ user_paon = kwargs.get("paon")
23
+ user_postcode = kwargs.get("postcode")
24
+ web_driver = kwargs.get("web_driver")
25
+ headless = kwargs.get("headless")
26
+ check_paon(user_paon)
27
+ check_postcode(user_postcode)
28
+
29
+ # Create Selenium webdriver
30
+ driver = create_webdriver(web_driver, headless, None, __name__)
31
+ driver.get(
32
+ "https://www.colchester.gov.uk/your-recycling-calendar/?start=true"
33
+ )
34
+
35
+ accept_button = WebDriverWait(driver, timeout=30).until(
36
+ EC.element_to_be_clickable((By.ID, "ccc-notify-accept"))
37
+ )
38
+ accept_button.click()
39
+
40
+ # Wait for the postcode field to appear then populate it
41
+ inputElement_postcode = WebDriverWait(driver, 10).until(
42
+ EC.presence_of_element_located((By.CLASS_NAME, "input-text"))
43
+ )
44
+ inputElement_postcode.send_keys(user_postcode)
45
+
46
+ # Click search button
47
+ findAddress = WebDriverWait(driver, 10).until(
48
+ EC.presence_of_element_located((By.CLASS_NAME, "button-small"))
49
+ )
50
+ findAddress.click()
51
+
52
+ # Wait for the 'Select address' dropdown to appear and select option matching the house name/number
53
+ WebDriverWait(driver, 10).until(
54
+ EC.element_to_be_clickable(
55
+ (
56
+ By.XPATH,
57
+ "//select[@class='input-select']//option[contains(., '"
58
+ + user_paon
59
+ + "')]",
60
+ )
61
+ )
62
+ ).click()
63
+
64
+ WebDriverWait(driver, 10).until(
65
+ EC.presence_of_element_located((By.CLASS_NAME, "button-small"))
66
+ ).click()
67
+
68
+ # Wait for the collections table to appear
69
+ WebDriverWait(driver, 10).until(
70
+ EC.presence_of_element_located((By.CLASS_NAME, "recycling-calendar"))
71
+ )
72
+
73
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
74
+
75
+ recyclingcalendar = soup.find("div", {"class": "recycling-calendar"})
76
+
77
+ rows = recyclingcalendar.find_all(
78
+ "div", {"class": "recycling-calendar-row"}
79
+ )
80
+
81
+ for row in rows:
82
+ collectiondate = datetime.strptime(
83
+ row.find("strong").get_text(),
84
+ "%d %B %Y",
85
+ )
86
+ listobj = row.find("ul")
87
+ for li in listobj.find_all("li"):
88
+ dict_data = {
89
+ "type": li.get_text().strip(),
90
+ "collectionDate": collectiondate.strftime("%d/%m/%Y"),
91
+ }
92
+ data["bins"].append(dict_data)
93
+
94
+ except Exception as e:
95
+ # Here you can log the exception if needed
96
+ print(f"An error occurred: {e}")
97
+ # Optionally, re-raise the exception if you want it to propagate
98
+ raise
99
+ finally:
100
+ # This block ensures that the driver is closed regardless of an exception
101
+ if driver:
102
+ driver.quit()
103
+ return data
@@ -22,16 +22,16 @@ class CouncilClass(AbstractGetBinDataClass):
22
22
  driver = None
23
23
  try:
24
24
  data = {"bins": []}
25
- user_uprn = kwargs.get("uprn")
25
+ user_paon = kwargs.get("paon")
26
26
  user_postcode = kwargs.get("postcode")
27
27
  web_driver = kwargs.get("web_driver")
28
28
  headless = kwargs.get("headless")
29
- check_uprn(user_uprn)
29
+ check_paon(user_paon)
30
30
  check_postcode(user_postcode)
31
31
 
32
32
  # Create Selenium webdriver
33
33
  driver = create_webdriver(web_driver, headless, None, __name__)
34
- driver.get("https://www.npt.gov.uk/2195")
34
+ driver.get("https://beta.npt.gov.uk/bins-and-recycling/bin-day-finder/")
35
35
 
36
36
  # Accept cookies banner
37
37
  cookieAccept = WebDriverWait(driver, 10).until(
@@ -40,9 +40,13 @@ class CouncilClass(AbstractGetBinDataClass):
40
40
  cookieAccept.click()
41
41
 
42
42
  # Populate postcode field
43
- inputElement_postcode = driver.find_element(
44
- By.ID,
45
- "ContentPlaceHolderDefault_ctl13_nptLLPG2_25_addresslookup_txtTmpPostcode",
43
+ inputElement_postcode = WebDriverWait(driver, 10).until(
44
+ EC.presence_of_element_located(
45
+ (
46
+ By.ID,
47
+ "PostCode",
48
+ )
49
+ )
46
50
  )
47
51
  inputElement_postcode.send_keys(user_postcode)
48
52
 
@@ -50,67 +54,69 @@ class CouncilClass(AbstractGetBinDataClass):
50
54
  findAddress = WebDriverWait(driver, 10).until(
51
55
  EC.presence_of_element_located(
52
56
  (
53
- By.ID,
54
- "ContentPlaceHolderDefault_ctl13_nptLLPG2_25_addresslookup_btnFindAddress",
57
+ By.XPATH,
58
+ "//button[@value='Find address']",
55
59
  )
56
60
  )
57
61
  )
58
62
  findAddress.click()
59
63
 
60
- time.sleep(1)
61
-
62
64
  # Wait for the 'Select address' dropdown to appear and select option matching UPRN
63
65
  dropdown = WebDriverWait(driver, 10).until(
64
66
  EC.presence_of_element_located(
65
67
  (
66
68
  By.ID,
67
- "ContentPlaceHolderDefault_ctl13_nptLLPG2_25_addresslookup_ddlAddressLookup",
69
+ "Address",
68
70
  )
69
71
  )
70
72
  )
71
- # Create a 'Select' for it, then select the matching URPN option
72
- dropdownSelect = Select(dropdown)
73
- dropdownSelect.select_by_value(user_uprn)
74
-
75
- # Remove back to top button if exists
76
- driver.execute_script(
77
- """
78
- if (document.contains(document.querySelector(".backtotop"))) {
79
- document.querySelector(".backtotop").remove();
80
- }
81
- """
82
- )
73
+ # Wait for the 'Select address' dropdown to appear and select option matching the house name/number
74
+ WebDriverWait(driver, 10).until(
75
+ EC.presence_of_element_located(
76
+ (
77
+ By.XPATH,
78
+ "//select[@ID='Address']//option[contains(., '"
79
+ + user_paon
80
+ + "')]",
81
+ )
82
+ )
83
+ ).click()
83
84
 
84
85
  # Wait for the submit button to appear, then click it to get the collection dates
85
86
  submit = WebDriverWait(driver, 10).until(
86
87
  EC.presence_of_element_located(
87
- (By.ID, "ContentPlaceHolderDefault_ctl13_nptLLPG2_25_btnDisplay")
88
+ (
89
+ By.XPATH,
90
+ "//input[@value='Find bin day']",
91
+ )
88
92
  )
89
93
  )
90
94
  submit.click()
91
95
 
92
96
  soup = BeautifulSoup(driver.page_source, features="html.parser")
93
97
 
94
- # Get the property details
95
- property_details = soup.find(
98
+ soup = soup.find(
96
99
  "div",
97
- {
98
- "id": "ContentPlaceHolderDefault_ctl13_nptLLPG2_25_divPropertyDetails"
99
- },
100
+ {"id": "contentInner"},
100
101
  )
101
102
 
102
103
  # Get the dates
103
- for date in property_details.find_all("h2"):
104
+ for date in soup.find_all("h2"):
104
105
  if date.get_text(strip=True) != "Bank Holidays":
105
106
  bin_date = datetime.strptime(
106
- date.get_text(strip=True).replace("&nbsp", " ")
107
+ date.get_text(strip=True)
108
+ .removesuffix("(Today)")
109
+ .replace("&nbsp", " ")
107
110
  + " "
108
111
  + datetime.now().strftime("%Y"),
109
112
  "%A, %d %B %Y",
110
113
  )
111
114
  bin_types_wrapper = date.find_next_sibling("div")
112
115
  for bin_type_wrapper in bin_types_wrapper.find_all(
113
- "div", {"class": "card"}
116
+ "div",
117
+ {
118
+ "class": "card-body ps-5 ps-md-4 ps-lg-5 position-relative bg-white"
119
+ },
114
120
  ):
115
121
  if bin_date and bin_type_wrapper:
116
122
  bin_type = bin_type_wrapper.find("a").get_text(strip=True)
@@ -36,7 +36,8 @@ class CouncilClass(AbstractGetBinDataClass):
36
36
  collection_date = datetime.strptime(
37
37
  remove_ordinal_indicator_from_date_string(
38
38
  week_text[0].split(" - ")[0]
39
- ),
39
+ )
40
+ .strip(),
40
41
  "%A %d %B",
41
42
  )
42
43
  next_collection = collection_date.replace(year=datetime.now().year)