uk_bin_collection 0.97.1__tar.gz → 0.98.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 (216) hide show
  1. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/PKG-INFO +1 -1
  2. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/pyproject.toml +1 -1
  3. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/input.json +35 -0
  4. uk_bin_collection-0.98.0/uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py +72 -0
  5. uk_bin_collection-0.98.0/uk_bin_collection/uk_bin_collection/councils/LichfieldDistrictCouncil.py +60 -0
  6. uk_bin_collection-0.98.0/uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +56 -0
  7. uk_bin_collection-0.98.0/uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py +65 -0
  8. uk_bin_collection-0.98.0/uk_bin_collection/uk_bin_collection/councils/WirralCouncil.py +64 -0
  9. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/LICENSE +0 -0
  10. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/README.md +0 -0
  11. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/README.rst +0 -0
  12. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/council_feature_input_parity.py +0 -0
  13. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/features/environment.py +0 -0
  14. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/features/validate_council_outputs.feature +0 -0
  15. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/output.schema +0 -0
  16. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/step_defs/step_helpers/file_handler.py +0 -0
  17. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/step_defs/test_validate_council.py +0 -0
  18. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/test_collect_data.py +0 -0
  19. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/test_common_functions.py +0 -0
  20. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/test_conftest.py +0 -0
  21. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/tests/test_get_data.py +0 -0
  22. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/collect_data.py +0 -0
  23. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/common.py +0 -0
  24. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py +0 -0
  25. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py +0 -0
  26. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py +0 -0
  27. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py +0 -0
  28. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py +0 -0
  29. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py +0 -0
  30. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py +0 -0
  31. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py +0 -0
  32. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py +0 -0
  33. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py +0 -0
  34. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py +0 -0
  35. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py +0 -0
  36. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py +0 -0
  37. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py +0 -0
  38. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +0 -0
  39. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py +0 -0
  40. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py +0 -0
  41. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +0 -0
  42. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +0 -0
  43. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py +0 -0
  44. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +0 -0
  45. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py +0 -0
  46. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py +0 -0
  47. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py +0 -0
  48. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py +0 -0
  49. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py +0 -0
  50. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py +0 -0
  51. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +0 -0
  52. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py +0 -0
  53. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py +0 -0
  54. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py +0 -0
  55. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +0 -0
  56. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +0 -0
  57. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py +0 -0
  58. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py +0 -0
  59. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py +0 -0
  60. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/CornwallCouncil.py +0 -0
  61. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py +0 -0
  62. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py +0 -0
  63. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +0 -0
  64. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py +0 -0
  65. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py +0 -0
  66. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py +0 -0
  67. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py +0 -0
  68. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/DoverDistrictCouncil.py +0 -0
  69. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/DurhamCouncil.py +0 -0
  70. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py +0 -0
  71. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py +0 -0
  72. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py +0 -0
  73. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py +0 -0
  74. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EastRenfrewshireCouncil.py +0 -0
  75. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EastRidingCouncil.py +0 -0
  76. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EastSuffolkCouncil.py +0 -0
  77. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EastleighBoroughCouncil.py +0 -0
  78. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ElmbridgeBoroughCouncil.py +0 -0
  79. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EnfieldCouncil.py +0 -0
  80. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EnvironmentFirst.py +0 -0
  81. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/EppingForestDistrictCouncil.py +0 -0
  82. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ErewashBoroughCouncil.py +0 -0
  83. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py +0 -0
  84. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py +0 -0
  85. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py +0 -0
  86. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py +0 -0
  87. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py +0 -0
  88. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py +0 -0
  89. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +0 -0
  90. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py +0 -0
  91. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py +0 -0
  92. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py +0 -0
  93. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py +0 -0
  94. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py +0 -0
  95. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +0 -0
  96. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py +0 -0
  97. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py +0 -0
  98. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py +0 -0
  99. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py +0 -0
  100. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +0 -0
  101. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py +0 -0
  102. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +0 -0
  103. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py +0 -0
  104. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +0 -0
  105. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py +0 -0
  106. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/LisburnCastlereaghCityCouncil.py +0 -0
  107. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/LiverpoolCityCouncil.py +0 -0
  108. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughEaling.py +0 -0
  109. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHarrow.py +0 -0
  110. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughHounslow.py +0 -0
  111. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py +0 -0
  112. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py +0 -0
  113. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py +0 -0
  114. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py +0 -0
  115. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py +0 -0
  116. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py +0 -0
  117. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py +0 -0
  118. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py +0 -0
  119. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py +0 -0
  120. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +0 -0
  121. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py +0 -0
  122. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py +0 -0
  123. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +0 -0
  124. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py +0 -0
  125. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py +0 -0
  126. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py +0 -0
  127. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +0 -0
  128. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py +0 -0
  129. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +0 -0
  130. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py +0 -0
  131. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py +0 -0
  132. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthLanarkshireCouncil.py +0 -0
  133. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthLincolnshireCouncil.py +0 -0
  134. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorfolkDistrictCouncil.py +0 -0
  135. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthNorthamptonshireCouncil.py +0 -0
  136. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py +0 -0
  137. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py +0 -0
  138. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py +0 -0
  139. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py +0 -0
  140. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +0 -0
  141. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py +0 -0
  142. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py +0 -0
  143. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/PortsmouthCityCouncil.py +0 -0
  144. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/PrestonCityCouncil.py +0 -0
  145. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py +0 -0
  146. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py +0 -0
  147. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +0 -0
  148. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py +0 -0
  149. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py +0 -0
  150. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py +0 -0
  151. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +0 -0
  152. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +0 -0
  153. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py +0 -0
  154. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py +0 -0
  155. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py +0 -0
  156. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py +0 -0
  157. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py +0 -0
  158. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py +0 -0
  159. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py +0 -0
  160. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +0 -0
  161. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py +0 -0
  162. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py +0 -0
  163. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py +0 -0
  164. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +0 -0
  165. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py +0 -0
  166. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py +0 -0
  167. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py +0 -0
  168. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py +0 -0
  169. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py +0 -0
  170. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py +0 -0
  171. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py +0 -0
  172. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/StHelensBC.py +0 -0
  173. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py +0 -0
  174. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/StaffordshireMoorlandsDistrictCouncil.py +0 -0
  175. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/StockportBoroughCouncil.py +0 -0
  176. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py +0 -0
  177. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py +0 -0
  178. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py +0 -0
  179. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py +0 -0
  180. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +0 -0
  181. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py +0 -0
  182. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py +0 -0
  183. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py +0 -0
  184. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py +0 -0
  185. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py +0 -0
  186. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +0 -0
  187. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py +0 -0
  188. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/TonbridgeAndMallingBC.py +0 -0
  189. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/TorbayCouncil.py +0 -0
  190. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/TorridgeDistrictCouncil.py +0 -0
  191. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py +0 -0
  192. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py +0 -0
  193. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py +0 -0
  194. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +0 -0
  195. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WalthamForest.py +0 -0
  196. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +0 -0
  197. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py +0 -0
  198. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py +0 -0
  199. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py +0 -0
  200. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +0 -0
  201. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +0 -0
  202. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py +0 -0
  203. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py +0 -0
  204. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WestSuffolkCouncil.py +0 -0
  205. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WiganBoroughCouncil.py +0 -0
  206. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WiltshireCouncil.py +0 -0
  207. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WinchesterCityCouncil.py +0 -0
  208. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WindsorAndMaidenheadCouncil.py +0 -0
  209. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WokingBoroughCouncil.py +0 -0
  210. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WokinghamBoroughCouncil.py +0 -0
  211. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WychavonDistrictCouncil.py +0 -0
  212. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/WyreCouncil.py +0 -0
  213. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py +0 -0
  214. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py +0 -0
  215. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.0}/uk_bin_collection/uk_bin_collection/create_new_council.py +0 -0
  216. {uk_bin_collection-0.97.1 → uk_bin_collection-0.98.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.97.1
3
+ Version: 0.98.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.97.1"
3
+ version = "0.98.0"
4
4
  description = "Python Lib to collect UK Bin Data"
5
5
  readme = "README.md"
6
6
  authors = ["Robert Bradley <robbrad182@gmail.com>"]
@@ -5,6 +5,13 @@
5
5
  "wiki_name": "Adur and Worthing Councils",
6
6
  "wiki_note": "Replace XXXXXXXX with UPRN. You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
7
7
  },
8
+ "ArmaghBanbridgeCraigavonCouncil": {
9
+ "url": "https://www.armaghbanbridgecraigavon.gov.uk/",
10
+ "wiki_command_url_override": "https://www.armaghbanbridgecraigavon.gov.uk/",
11
+ "uprn": "185625284",
12
+ "wiki_name": "Armagh Banbridge Craigavon Council",
13
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
14
+ },
8
15
  "ArunCouncil": {
9
16
  "house_number": "1",
10
17
  "postcode": "BN16 4DA",
@@ -606,6 +613,13 @@
606
613
  "web_driver": "http://selenium:4444",
607
614
  "wiki_name": "Leeds City Council"
608
615
  },
616
+ "LichfieldDistrictCouncil": {
617
+ "url": "https://www.lichfielddc.gov.uk",
618
+ "wiki_command_url_override": "https://www.lichfielddc.gov.uk",
619
+ "uprn": "100031694085",
620
+ "wiki_name": "Lichfield District Council",
621
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
622
+ },
609
623
  "LisburnCastlereaghCityCouncil": {
610
624
  "house_number": "97",
611
625
  "postcode": "BT28 1JN",
@@ -1216,6 +1230,13 @@
1216
1230
  "wiki_name": "Wakefield City Council",
1217
1231
  "wiki_note": "Follow the instructions [here](https://www.wakefield.gov.uk/where-i-live/) until you get the page that includes a \"Bin Collections\" section then copy the URL and replace the URL in the command."
1218
1232
  },
1233
+ "WalsallCouncil": {
1234
+ "url": "https://cag.walsall.gov.uk/",
1235
+ "wiki_command_url_override": "https://cag.walsall.gov.uk/",
1236
+ "uprn": "100071080513",
1237
+ "wiki_name": "Walsall Council",
1238
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
1239
+ },
1219
1240
  "WalthamForest": {
1220
1241
  "house_number": "17 Chingford Road, Walthamstow",
1221
1242
  "postcode": "E17 4PW",
@@ -1278,6 +1299,13 @@
1278
1299
  "wiki_name": "West Lothian Council",
1279
1300
  "wiki_note": "Pass the house name/number in the house number parameter, wrapped in double quotes"
1280
1301
  },
1302
+ "WestMorlandAndFurness": {
1303
+ "url": "https://www.westmorlandandfurness.gov.uk/",
1304
+ "wiki_command_url_override": "https://www.westmorlandandfurness.gov.uk/",
1305
+ "uprn": "100110353478",
1306
+ "wiki_name": "West Morland And Furness Council",
1307
+ "wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
1308
+ },
1281
1309
  "WestNorthamptonshireCouncil": {
1282
1310
  "postcode": "NN3 2JB",
1283
1311
  "skip_get_url": true,
@@ -1322,6 +1350,13 @@
1322
1350
  "url": "https://forms.rbwm.gov.uk/bincollections?uprn=",
1323
1351
  "wiki_name": "Windsor and Maidenhead Council"
1324
1352
  },
1353
+ "WirralCouncil": {
1354
+ "url": "https://www.wirral.gov.uk",
1355
+ "wiki_command_url_override": "https://www.wirral.gov.uk",
1356
+ "uprn": "Vernon Avenue,Seacombe",
1357
+ "wiki_name": "Wirral Council",
1358
+ "wiki_note": "Please use the UPRN field to enter your street name and suburb separated by a comma, for example 'Vernon Avenue,Seacombe'"
1359
+ },
1325
1360
  "WokingBoroughCouncil": {
1326
1361
  "house_number": "2",
1327
1362
  "postcode": "GU214JY",
@@ -0,0 +1,72 @@
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
+ # Function to extract bin collection information
23
+ def extract_bin_schedule(soup, heading_class):
24
+ collections = []
25
+
26
+ # Find the relevant section based on the heading class
27
+ section_heading = soup.find("div", class_=heading_class)
28
+ if section_heading:
29
+ # Find all the bin collection dates in that section
30
+ collection_dates = section_heading.find_next(
31
+ "div", class_="col-sm-12 col-md-9"
32
+ ).find_all("h4")
33
+ for date in collection_dates:
34
+ # Clean and add the date to the list
35
+ collections.append(date.get_text(strip=True))
36
+
37
+ return collections
38
+
39
+ # URL for bin collection schedule
40
+ url = f"https://www.armaghbanbridgecraigavon.gov.uk/resident/binday-result/?address={user_uprn}"
41
+
42
+ # Send a GET request to fetch the page content
43
+ response = requests.get(url)
44
+
45
+ # Check if the request was successful
46
+ if response.status_code == 200:
47
+ # Parse the page content using BeautifulSoup
48
+ soup = BeautifulSoup(response.text, "html.parser")
49
+
50
+ # Extract bin collection schedules by their sections
51
+ domestic_collections = extract_bin_schedule(soup, "heading bg-black")
52
+ for collection in domestic_collections:
53
+ bindata["bins"].append(
54
+ {"collectionDate": collection, "type": "Domestic"}
55
+ )
56
+ recycling_collections = extract_bin_schedule(soup, "heading bg-green")
57
+ for collection in recycling_collections:
58
+ bindata["bins"].append(
59
+ {"collectionDate": collection, "type": "Recycling"}
60
+ )
61
+ garden_collections = extract_bin_schedule(soup, "heading bg-brown")
62
+ for collection in garden_collections:
63
+ bindata["bins"].append({"collectionDate": collection, "type": "Garden"})
64
+
65
+ else:
66
+ print(f"Failed to retrieve data. Status code: {response.status_code}")
67
+
68
+ bindata["bins"].sort(
69
+ key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
70
+ )
71
+
72
+ return bindata
@@ -0,0 +1,60 @@
1
+ import re
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
+ # import the wonderful Beautiful Soup and the URL grabber
11
+ class CouncilClass(AbstractGetBinDataClass):
12
+ """
13
+ Concrete classes have to implement all abstract operations of the
14
+ base class. They can also override some operations with a default
15
+ implementation.
16
+ """
17
+
18
+ def parse_data(self, page: str, **kwargs) -> dict:
19
+
20
+ user_uprn = kwargs.get("uprn")
21
+ check_uprn(user_uprn)
22
+ bindata = {"bins": []}
23
+
24
+ def solve(s):
25
+ return re.sub(r"(\d)(st|nd|rd|th)", r"\1", s)
26
+
27
+ URI = f"https://www.lichfielddc.gov.uk/homepage/6/bin-collection-dates?uprn={user_uprn}"
28
+
29
+ # Make the GET request
30
+ response = requests.get(URI)
31
+
32
+ soup = BeautifulSoup(response.text, "html.parser")
33
+
34
+ bins = soup.find_all("h3", class_="bin-collection-tasks__heading")
35
+ dates = soup.find_all("p", class_="bin-collection-tasks__date")
36
+
37
+ current_year = datetime.now().year
38
+ current_month = datetime.now().month
39
+
40
+ for i in range(len(dates)):
41
+ bint = " ".join(bins[i].text.split()[2:4])
42
+ date = dates[i].text
43
+
44
+ date = datetime.strptime(
45
+ solve(date),
46
+ "%d %B",
47
+ )
48
+
49
+ if (current_month > 10) and (date.month < 3):
50
+ date = date.replace(year=(current_year + 1))
51
+ else:
52
+ date = date.replace(year=current_year)
53
+
54
+ dict_data = {
55
+ "type": bint,
56
+ "collectionDate": date.strftime("%d/%m/%Y"),
57
+ }
58
+ bindata["bins"].append(dict_data)
59
+
60
+ return bindata
@@ -0,0 +1,56 @@
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://cag.walsall.gov.uk/BinCollections/GetBins?uprn={user_uprn}"
23
+
24
+ headers = {
25
+ "user-agent": "Mozilla/5.0",
26
+ }
27
+
28
+ response = requests.get(URI, headers=headers)
29
+
30
+ soup = BeautifulSoup(response.text, "html.parser")
31
+ # Extract links to collection shedule pages and iterate through the pages
32
+ schedule_links = soup.findAll("a", {"class": "nav-link"}, href=True)
33
+ for item in schedule_links:
34
+ if "roundname" in item["href"]:
35
+ # get bin colour
36
+ bincolour = item["href"].split("=")[-1].split("%")[0].upper()
37
+ binURL = "https://cag.walsall.gov.uk" + item["href"]
38
+ r = requests.get(binURL, headers=headers)
39
+ soup = BeautifulSoup(r.text, "html.parser")
40
+ table = soup.findAll("tr")
41
+ for tr in table:
42
+ td = tr.findAll("td")
43
+ if td:
44
+ dict_data = {
45
+ "type": bincolour,
46
+ "collectionDate": datetime.strptime(
47
+ td[1].text.strip(), "%d/%m/%Y"
48
+ ).strftime("%d/%m/%Y"),
49
+ }
50
+ bindata["bins"].append(dict_data)
51
+
52
+ bindata["bins"].sort(
53
+ key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
54
+ )
55
+
56
+ return bindata
@@ -0,0 +1,65 @@
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://www.westmorlandandfurness.gov.uk/bins-recycling-and-street-cleaning/waste-collection-schedule/view/{user_uprn}"
23
+
24
+ headers = {
25
+ "user-agent": "Mozilla/5.0",
26
+ }
27
+
28
+ current_year = datetime.now().year
29
+ current_month = datetime.now().month
30
+
31
+ response = requests.get(URI)
32
+
33
+ soup = BeautifulSoup(response.text, "html.parser")
34
+ # Extract links to collection shedule pages and iterate through the pages
35
+ schedule = soup.findAll("div", {"class": "waste-collection__month"})
36
+ for month in schedule:
37
+ collectionmonth = datetime.strptime(month.find("h3").text, "%B")
38
+ collectionmonth = collectionmonth.month
39
+ collectiondays = month.findAll("li", {"class": "waste-collection__day"})
40
+ for collectionday in collectiondays:
41
+ day = collectionday.find(
42
+ "span", {"class": "waste-collection__day--day"}
43
+ ).text.strip()
44
+ collectiondate = datetime.strptime(day, "%d")
45
+ collectiondate = collectiondate.replace(month=collectionmonth)
46
+ bintype = collectionday.find(
47
+ "span", {"class": "waste-collection__day--colour"}
48
+ ).text
49
+
50
+ if (current_month > 9) and (collectiondate.month < 4):
51
+ collectiondate = collectiondate.replace(year=(current_year + 1))
52
+ else:
53
+ collectiondate = collectiondate.replace(year=current_year)
54
+
55
+ dict_data = {
56
+ "type": bintype,
57
+ "collectionDate": collectiondate.strftime("%d/%m/%Y"),
58
+ }
59
+ bindata["bins"].append(dict_data)
60
+
61
+ bindata["bins"].sort(
62
+ key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
63
+ )
64
+
65
+ return bindata
@@ -0,0 +1,64 @@
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
+ bindata = {"bins": []}
20
+
21
+ street = user_uprn.split(",")[0]
22
+ suburb = user_uprn.split(",")[1]
23
+
24
+ if not street:
25
+ print("Street name could not be parsed"),
26
+ return
27
+ if not suburb:
28
+ print("Street name could not be parsed"),
29
+ return
30
+
31
+ wastes = {
32
+ "Non recycleable (green bin)",
33
+ "Garden waste (brown bin)",
34
+ "Paper and packaging (grey bin)",
35
+ }
36
+ DATE_REGEX = "^([0-9]{1,2} [A-Za-z]+ [0-9]{4})"
37
+
38
+ s = requests.Session()
39
+ # Loop through waste types
40
+ for waste in wastes:
41
+ r = s.get(
42
+ f"https://ww3.wirral.gov.uk//recycling/detailContentDru7.asp?s={street}&t={suburb}&c={waste}"
43
+ )
44
+ # extract dates
45
+ soup = BeautifulSoup(r.text, "html.parser")
46
+ dates = soup.findAll("li")
47
+ if len(dates) != 0:
48
+ for item in dates:
49
+ match = re.match(DATE_REGEX, item.text)
50
+ if match:
51
+ dict_data = {
52
+ "type": waste,
53
+ "collectionDate": datetime.strptime(
54
+ match.group(1),
55
+ "%d %B %Y",
56
+ ).strftime("%d/%m/%Y"),
57
+ }
58
+ bindata["bins"].append(dict_data)
59
+
60
+ bindata["bins"].sort(
61
+ key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
62
+ )
63
+
64
+ return bindata