uk_bin_collection 0.105.1__tar.gz → 0.106.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/PKG-INFO +1 -1
  2. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/pyproject.toml +1 -1
  3. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/input.json +24 -2
  4. uk_bin_collection-0.106.0/uk_bin_collection/uk_bin_collection/councils/FifeCouncil.py +68 -0
  5. uk_bin_collection-0.106.0/uk_bin_collection/uk_bin_collection/councils/FlintshireCountyCouncil.py +60 -0
  6. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +7 -3
  7. uk_bin_collection-0.106.0/uk_bin_collection/uk_bin_collection/councils/StocktonOnTeesCouncil.py +159 -0
  8. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +14 -24
  9. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/LICENSE +0 -0
  10. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/README.md +0 -0
  11. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/README.rst +0 -0
  12. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
  13. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/features/environment.py +0 -0
  14. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
  15. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/output.schema +0 -0
  16. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
  17. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
  18. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
  19. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
  20. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/test_conftest.py +0 -0
  21. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/tests/test_get_data.py +0 -0
  22. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
  23. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/common.py +0 -0
  24. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py +0 -0
  25. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
  26. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py +0 -0
  27. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
  28. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
  29. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
  30. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
  31. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
  32. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
  33. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
  34. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
  35. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
  36. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
  37. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
  38. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
  39. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
  40. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
  41. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
  42. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
  43. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
  44. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
  45. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
  46. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
  47. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
  48. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
  49. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
  50. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
  51. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
  52. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py +0 -0
  53. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
  54. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
  55. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
  56. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
  57. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
  58. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
  59. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
  60. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
  61. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
  62. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
  63. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
  64. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CoventryCityCouncil.py +0 -0
  65. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
  66. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
  67. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
  68. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
  69. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
  70. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
  71. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
  72. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
  73. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/DudleyCouncil.py +0 -0
  74. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
  75. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
  76. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
  77. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
  78. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
  79. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
  80. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
  81. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
  82. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
  83. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +0 -0
  84. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
  85. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
  86. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
  87. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
  88. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py +0 -0
  89. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
  90. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
  91. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
  92. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
  93. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
  94. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
  95. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
  96. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
  97. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
  98. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/HarboroughDistrictCouncil.py +0 -0
  99. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
  100. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
  101. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
  102. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +0 -0
  103. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
  104. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
  105. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
  106. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
  107. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
  108. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
  109. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
  110. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
  111. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
  112. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LichfieldDistrictCouncil.py +0 -0
  113. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LincolnCouncil.py +0 -0
  114. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
  115. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
  116. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +0 -0
  117. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHarrow.py +0 -0
  118. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
  119. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
  120. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
  121. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py +0 -0
  122. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
  123. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
  124. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
  125. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
  126. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
  127. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
  128. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
  129. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py +0 -0
  130. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
  131. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
  132. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
  133. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
  134. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
  135. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
  136. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
  137. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
  138. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py +0 -0
  139. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
  140. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
  141. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
  142. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
  143. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
  144. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
  145. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
  146. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
  147. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
  148. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
  149. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
  150. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
  151. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py +0 -0
  152. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
  153. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
  154. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/PerthAndKinrossCouncil.py +0 -0
  155. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/PlymouthCouncil.py +0 -0
  156. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
  157. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
  158. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
  159. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
  160. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
  161. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
  162. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
  163. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
  164. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
  165. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
  166. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
  167. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
  168. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
  169. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
  170. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
  171. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
  172. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
  173. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
  174. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
  175. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
  176. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +0 -0
  177. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
  178. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
  179. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
  180. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
  181. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
  182. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py +0 -0
  183. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
  184. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
  185. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
  186. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
  187. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
  188. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
  189. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
  190. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
  191. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
  192. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
  193. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
  194. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
  195. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/SwindonBoroughCouncil.py +0 -0
  196. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
  197. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
  198. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py +0 -0
  199. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
  200. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
  201. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
  202. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
  203. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
  204. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
  205. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
  206. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/TunbridgeWellsCouncil.py +0 -0
  207. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
  208. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
  209. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
  210. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
  211. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +0 -0
  212. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
  213. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
  214. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py +0 -0
  215. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
  216. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
  217. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
  218. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
  219. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
  220. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py +0 -0
  221. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
  222. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WestOxfordshireDistrictCouncil.py +0 -0
  223. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
  224. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
  225. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
  226. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
  227. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
  228. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WirralCouncil.py +0 -0
  229. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
  230. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
  231. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
  232. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
  233. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
  234. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
  235. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
  236. {uk_bin_collection-0.105.1 → uk_bin_collection-0.106.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.105.1
3
+ Version: 0.106.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.105.1"
3
+ version = "0.106.0"
4
4
  description = "Python Lib to collect UK Bin Data"
5
5
  readme = "README.md"
6
6
  authors = ["Robert Bradley <robbrad182@gmail.com>"]
@@ -484,6 +484,20 @@
484
484
  "url": "https://www.fenland.gov.uk/article/13114/",
485
485
  "wiki_name": "Fenland District Council"
486
486
  },
487
+ "FifeCouncil": {
488
+ "url": "https://www.fife.gov.uk",
489
+ "wiki_command_url_override": "https://www.fife.gov.uk",
490
+ "uprn": "320203521",
491
+ "wiki_name": "Fife Council",
492
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
493
+ },
494
+ "FlintshireCountyCouncil": {
495
+ "url": "https://digital.flintshire.gov.uk",
496
+ "wiki_command_url_override": "https://digital.flintshire.gov.uk",
497
+ "uprn": "100100213710",
498
+ "wiki_name": "Flintshire County Council",
499
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
500
+ },
487
501
  "ForestOfDeanDistrictCouncil": {
488
502
  "house_number": "ELMOGAL, PARKEND ROAD, BREAM, LYDNEY",
489
503
  "postcode": "GL15 6JT",
@@ -1143,8 +1157,8 @@
1143
1157
  "wiki_name": "South Tyneside Council"
1144
1158
  },
1145
1159
  "SouthwarkCouncil": {
1146
- "url": "https://www.southwark.gov.uk/bins/lookup/",
1147
- "wiki_command_url_override": "https://www.southwark.gov.uk/bins/lookup/XXXXXXXX",
1160
+ "url": "https://services.southwark.gov.uk/bins/lookup/",
1161
+ "wiki_command_url_override": "https://services.southwark.gov.uk/bins/lookup/XXXXXXXX",
1148
1162
  "uprn": "200003469271",
1149
1163
  "wiki_name": "Southwark Council",
1150
1164
  "wiki_note": "Replace XXXXXXXX with UPRN. You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
@@ -1182,6 +1196,14 @@
1182
1196
  "wiki_name": "Stockport Borough Council",
1183
1197
  "wiki_note": "Replace XXXXXXXX with UPRN."
1184
1198
  },
1199
+ "StocktonOnTeesCouncil": {
1200
+ "house_number": "24",
1201
+ "postcode": "TS20 2RD",
1202
+ "skip_get_url": true,
1203
+ "url": "https://www.stockton.gov.uk",
1204
+ "web_driver": "http://selenium:4444",
1205
+ "wiki_name": "Stockton On Tees Council"
1206
+ },
1185
1207
  "StokeOnTrentCityCouncil": {
1186
1208
  "url": "https://www.stoke.gov.uk/jadu/custom/webserviceLookUps/BarTecWebServices_missed_bin_calendar.php?UPRN=3455121482",
1187
1209
  "wiki_command_url_override": "https://www.stoke.gov.uk/jadu/custom/webserviceLookUps/BarTecWebServices_missed_bin_calendar.php?UPRN=XXXXXXXXXX",
@@ -0,0 +1,68 @@
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 = "https://www.fife.gov.uk/api/custom?action=powersuite_bin_calendar_collections&actionedby=bin_calendar&loadform=true&access=citizen&locale=en"
24
+ AUTH_URL = "https://www.fife.gov.uk/api/citizen?preview=false&locale=en"
25
+ AUTH_KEY = "Authorization"
26
+
27
+ r = requests.get(AUTH_URL)
28
+ r.raise_for_status()
29
+ auth_token = r.headers[AUTH_KEY]
30
+
31
+ post_data = {
32
+ "name": "bin_calendar",
33
+ "data": {
34
+ "uprn": user_uprn,
35
+ },
36
+ "email": "",
37
+ "caseid": "",
38
+ "xref": "",
39
+ "xref1": "",
40
+ "xref2": "",
41
+ }
42
+
43
+ headers = {
44
+ "referer": "https://www.fife.gov.uk/services/forms/bin-calendar",
45
+ "accept": "application/json",
46
+ "content-type": "application/json",
47
+ AUTH_KEY: auth_token,
48
+ }
49
+
50
+ r = requests.post(API_URL, data=json.dumps(post_data), headers=headers)
51
+ r.raise_for_status()
52
+
53
+ result = r.json()
54
+
55
+ for collection in result["data"]["tab_collections"]:
56
+ dict_data = {
57
+ "type": collection["colour"],
58
+ "collectionDate": datetime.strptime(
59
+ collection["date"],
60
+ "%A, %B %d, %Y",
61
+ ).strftime("%d/%m/%Y"),
62
+ }
63
+ bindata["bins"].append(dict_data)
64
+
65
+ bindata["bins"].sort(
66
+ key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
67
+ )
68
+ return bindata
@@ -0,0 +1,60 @@
1
+ import requests
2
+ from bs4 import BeautifulSoup
3
+
4
+ from uk_bin_collection.uk_bin_collection.common import *
5
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
6
+
7
+
8
+ # import the wonderful Beautiful Soup and the URL grabber
9
+ class CouncilClass(AbstractGetBinDataClass):
10
+ """
11
+ Concrete classes have to implement all abstract operations of the
12
+ base class. They can also override some operations with a default
13
+ implementation.
14
+ """
15
+
16
+ def parse_data(self, page: str, **kwargs) -> dict:
17
+
18
+ user_uprn = kwargs.get("uprn")
19
+ check_uprn(user_uprn)
20
+ bindata = {"bins": []}
21
+
22
+ URI = f"https://digital.flintshire.gov.uk/FCC_BinDay/Home/Details2/{user_uprn}"
23
+
24
+ # Make the GET request
25
+ response = requests.get(URI)
26
+
27
+ # Parse the HTML content
28
+ soup = BeautifulSoup(response.content, "html.parser")
29
+
30
+ # Adjust these tags and classes based on actual structure
31
+ # Example for finding collection dates and types
32
+ bin_collections = soup.find_all(
33
+ "div", class_="col-md-12 col-lg-12 col-sm-12 col-xs-12"
34
+ ) # Replace with actual class name
35
+
36
+ # Extracting and printing the schedule data
37
+ schedule = []
38
+ for collection in bin_collections:
39
+ dates = collection.find_all("div", class_="col-lg-2 col-md-2 col-sm-2")
40
+ bin_type = collection.find("div", class_="col-lg-3 col-md-3 col-sm-3")
41
+
42
+ if dates[0].text.strip() == "Date of Collection":
43
+ continue
44
+
45
+ bin_types = bin_type.text.strip().split(" / ")
46
+ date = dates[0].text.strip()
47
+
48
+ # Loop through the dates for each collection type
49
+ for bin_type in bin_types:
50
+
51
+ dict_data = {
52
+ "type": bin_type,
53
+ "collectionDate": date,
54
+ }
55
+ bindata["bins"].append(dict_data)
56
+
57
+ bindata["bins"].sort(
58
+ key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
59
+ )
60
+ return bindata
@@ -19,7 +19,7 @@ class CouncilClass(AbstractGetBinDataClass):
19
19
  check_uprn(user_uprn)
20
20
  data = {"bins": []}
21
21
 
22
- baseurl = "https://www.southwark.gov.uk/bins/lookup/"
22
+ baseurl = "https://services.southwark.gov.uk/bins/lookup/"
23
23
  url = baseurl + user_uprn
24
24
 
25
25
  headers = {
@@ -74,9 +74,13 @@ class CouncilClass(AbstractGetBinDataClass):
74
74
  data["bins"].append(dict_data)
75
75
 
76
76
  # Extract food waste collection information
77
- food_section = soup.find("div", {"aria-labelledby": "organicsCollectionTitle"})
77
+ food_section = soup.find(
78
+ "div", {"aria-labelledby": "domesticFoodCollectionTitle"}
79
+ )
78
80
  if food_section:
79
- food_title = food_section.find("p", {"id": "organicsCollectionTitle"}).text
81
+ food_title = food_section.find(
82
+ "p", {"id": "domesticFoodCollectionTitle"}
83
+ ).text
80
84
  food_next_collection = (
81
85
  food_section.find(text=lambda text: "Next collection" in text)
82
86
  .strip()
@@ -0,0 +1,159 @@
1
+ import time
2
+
3
+ from bs4 import BeautifulSoup
4
+ from dateutil.relativedelta import relativedelta
5
+ from selenium.webdriver.common.by import By
6
+ from selenium.webdriver.support import expected_conditions as EC
7
+ from selenium.webdriver.support.ui import Select
8
+ from selenium.webdriver.support.wait import WebDriverWait
9
+
10
+ from uk_bin_collection.uk_bin_collection.common import *
11
+ from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
12
+
13
+
14
+ # import the wonderful Beautiful Soup and the URL grabber
15
+ class CouncilClass(AbstractGetBinDataClass):
16
+ """
17
+ Concrete classes have to implement all abstract operations of the
18
+ base class. They can also override some operations with a default
19
+ implementation.
20
+ """
21
+
22
+ def parse_data(self, page: str, **kwargs) -> dict:
23
+ driver = None
24
+ try:
25
+ data = {"bins": []}
26
+ collections = []
27
+ user_paon = kwargs.get("paon")
28
+ user_postcode = kwargs.get("postcode")
29
+ web_driver = kwargs.get("web_driver")
30
+ headless = kwargs.get("headless")
31
+ check_paon(user_paon)
32
+ check_postcode(user_postcode)
33
+
34
+ # Create Selenium webdriver
35
+ driver = create_webdriver(web_driver, headless, None, __name__)
36
+ driver.get("https://www.stockton.gov.uk/bin-collection-days")
37
+
38
+ # Wait for the postcode field to appear then populate it
39
+ inputElement_postcode = WebDriverWait(driver, 30).until(
40
+ EC.presence_of_element_located(
41
+ (
42
+ By.ID,
43
+ "LOOKUPBINDATESBYADDRESSSKIPOUTOFREGION_ADDRESSLOOKUPPOSTCODE",
44
+ )
45
+ )
46
+ )
47
+ inputElement_postcode.send_keys(user_postcode)
48
+
49
+ # Click search button
50
+ findAddress = WebDriverWait(driver, 10).until(
51
+ EC.presence_of_element_located(
52
+ (
53
+ By.ID,
54
+ "LOOKUPBINDATESBYADDRESSSKIPOUTOFREGION_ADDRESSLOOKUPSEARCH",
55
+ )
56
+ )
57
+ )
58
+ findAddress.click()
59
+
60
+ WebDriverWait(driver, 10).until(
61
+ EC.element_to_be_clickable(
62
+ (
63
+ By.XPATH,
64
+ ""
65
+ "//*[@id='LOOKUPBINDATESBYADDRESSSKIPOUTOFREGION_ADDRESSLOOKUPADDRESS']//option[contains(., '"
66
+ + user_paon
67
+ + "')]",
68
+ )
69
+ )
70
+ ).click()
71
+
72
+ # Wait for the submit button to appear, then click it to get the collection dates
73
+ WebDriverWait(driver, 30).until(
74
+ EC.presence_of_element_located(
75
+ (
76
+ By.XPATH,
77
+ '//*[@id="LOOKUPBINDATESBYADDRESSSKIPOUTOFREGION_COLLECTIONDETAILS2"]/div',
78
+ )
79
+ )
80
+ )
81
+ time.sleep(2)
82
+
83
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
84
+ soup.prettify()
85
+
86
+ rubbish_div = soup.find(
87
+ "p",
88
+ {
89
+ "class": "myaccount-block__date myaccount-block__date--bin myaccount-block__date--waste"
90
+ },
91
+ )
92
+ rubbish_date = rubbish_div.text
93
+ if rubbish_date == "Today":
94
+ rubbish_date = datetime.now()
95
+ else:
96
+ rubbish_date = datetime.strptime(
97
+ remove_ordinal_indicator_from_date_string(rubbish_date).strip(),
98
+ "%a %d %B %Y",
99
+ ).replace(year=datetime.now().year)
100
+
101
+ recycling_div = soup.find(
102
+ "p",
103
+ {
104
+ "class": "myaccount-block__date myaccount-block__date--bin myaccount-block__date--recycling"
105
+ },
106
+ )
107
+ recycling_date = recycling_div.text
108
+ if recycling_date == "Today":
109
+ recycling_date = datetime.now()
110
+ else:
111
+ recycling_date = datetime.strptime(
112
+ remove_ordinal_indicator_from_date_string(recycling_date).strip(),
113
+ "%a %d %B %Y",
114
+ )
115
+
116
+ garden_div = soup.find(
117
+ "div",
118
+ {
119
+ "class": "myaccount-block__item myaccount-block__item--bin myaccount-block__item--garden"
120
+ },
121
+ )
122
+ garden_date = garden_div.find("strong")
123
+ if garden_date.text.strip() == "Date not available":
124
+ print("Garden waste unavailable")
125
+ else:
126
+ if garden_date.text == "Today":
127
+ garden_date = datetime.now()
128
+ collections.append(("Garden waste bin", garden_date))
129
+ else:
130
+ garden_date = datetime.strptime(
131
+ remove_ordinal_indicator_from_date_string(
132
+ garden_date.text
133
+ ).strip(),
134
+ "%a %d %B %Y",
135
+ )
136
+ collections.append(("Garden waste bin", garden_date))
137
+
138
+ collections.append(("Rubbish bin", rubbish_date))
139
+ collections.append(("Recycling bin", recycling_date))
140
+
141
+ ordered_data = sorted(collections, key=lambda x: x[1])
142
+ for item in ordered_data:
143
+ dict_data = {
144
+ "type": item[0].capitalize(),
145
+ "collectionDate": item[1].strftime(date_format),
146
+ }
147
+ data["bins"].append(dict_data)
148
+
149
+ print()
150
+ except Exception as e:
151
+ # Here you can log the exception if needed
152
+ print(f"An error occurred: {e}")
153
+ # Optionally, re-raise the exception if you want it to propagate
154
+ raise
155
+ finally:
156
+ # This block ensures that the driver is closed regardless of an exception
157
+ if driver:
158
+ driver.quit()
159
+ return data
@@ -77,44 +77,34 @@ class CouncilClass(AbstractGetBinDataClass):
77
77
  rubbish_div = soup.find(
78
78
  "div", {"id": "FINDYOURBINDAYS_RUBBISHDATE_OUTERDIV"}
79
79
  )
80
- try:
81
- rubbish_date = rubbish_div.find_all("div")[2]
82
- rubbish_date = datetime.strptime(
83
- rubbish_date.text,
84
- "%A %d %B",
85
- ).replace(year=datetime.now().year)
86
- except:
87
- rubbish_date = rubbish_div.find_all("div")[3]
80
+ rubbish_date = rubbish_div.find_all("div")[2]
81
+ if rubbish_date.text == "Today":
82
+ rubbish_date = datetime.now()
83
+ else:
88
84
  rubbish_date = datetime.strptime(
89
85
  rubbish_date.text,
90
86
  "%A %d %B",
91
87
  ).replace(year=datetime.now().year)
88
+
92
89
  recycling_div = soup.find(
93
90
  "div", {"id": "FINDYOURBINDAYS_RECYCLINGDATE_OUTERDIV"}
94
91
  )
95
- try:
96
- recycling_date = recycling_div.find_all("div")[2]
92
+ recycling_date = recycling_div.find_all("div")[2]
93
+ if recycling_date.text == "Today":
94
+ recycling_date = datetime.now()
95
+ else:
97
96
  recycling_date = datetime.strptime(
98
97
  recycling_date.text,
99
98
  "%A %d %B",
100
99
  ).replace(year=datetime.now().year)
101
- except:
102
- rubbish_date = recycling_div.find_all("div")[3]
103
- rubbish_date = datetime.strptime(
104
- rubbish_date.text,
105
- "%A %d %B",
106
- ).replace(year=datetime.now().year)
100
+
107
101
  food_div = soup.find(
108
102
  "div", {"id": "FINDYOURBINDAYS_RECYCLINGDATE_OUTERDIV"}
109
103
  )
110
- try:
111
- food_date = food_div.find_all("div")[2]
112
- food_date = datetime.strptime(
113
- food_date.text,
114
- "%A %d %B",
115
- ).replace(year=datetime.now().year)
116
- except:
117
- food_date = food_div.find_all("div")[3]
104
+ food_date = food_div.find_all("div")[2]
105
+ if food_date.text == "Today":
106
+ food_date = datetime.now()
107
+ else:
118
108
  food_date = datetime.strptime(
119
109
  food_date.text,
120
110
  "%A %d %B",