uk_bin_collection 0.154.0__py3-none-any.whl → 0.158.0__py3-none-any.whl

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 (22) hide show
  1. uk_bin_collection/tests/input.json +21 -10
  2. uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py +0 -1
  3. uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py +22 -13
  4. uk_bin_collection/uk_bin_collection/councils/EastDunbartonshireCouncil.py +52 -0
  5. uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py +8 -5
  6. uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py +23 -10
  7. uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py +60 -49
  8. uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py +70 -92
  9. uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py +104 -47
  10. uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py +138 -21
  11. uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py +182 -3
  12. uk_bin_collection/uk_bin_collection/councils/OxfordCityCouncil.py +1 -0
  13. uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py +170 -13
  14. uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py +70 -38
  15. uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py +136 -21
  16. uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py +18 -22
  17. uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py +138 -21
  18. {uk_bin_collection-0.154.0.dist-info → uk_bin_collection-0.158.0.dist-info}/METADATA +1 -1
  19. {uk_bin_collection-0.154.0.dist-info → uk_bin_collection-0.158.0.dist-info}/RECORD +22 -21
  20. {uk_bin_collection-0.154.0.dist-info → uk_bin_collection-0.158.0.dist-info}/LICENSE +0 -0
  21. {uk_bin_collection-0.154.0.dist-info → uk_bin_collection-0.158.0.dist-info}/WHEEL +0 -0
  22. {uk_bin_collection-0.154.0.dist-info → uk_bin_collection-0.158.0.dist-info}/entry_points.txt +0 -0
@@ -1,4 +1,9 @@
1
+ import datetime
2
+
1
3
  from bs4 import BeautifulSoup
4
+ from selenium.webdriver.common.by import By
5
+ from selenium.webdriver.support import expected_conditions as EC
6
+ from selenium.webdriver.support.wait import WebDriverWait
2
7
 
3
8
  from uk_bin_collection.uk_bin_collection.common import *
4
9
  from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
@@ -13,6 +18,7 @@ class CouncilClass(AbstractGetBinDataClass):
13
18
  """
14
19
 
15
20
  def parse_data(self, page: str, **kwargs) -> dict:
21
+ <<<<<<< HEAD
16
22
  user_postcode = kwargs.get("postcode")
17
23
  check_postcode(user_postcode)
18
24
  user_uprn = kwargs.get("uprn")
@@ -43,10 +49,16 @@ class CouncilClass(AbstractGetBinDataClass):
43
49
  i["data-for"]: i.get("value", "")
44
50
  for i in soup.select("input[data-for]")
45
51
  }
46
- payload_salt = soup.select_one('input[id="pSalt"]').get("value")
47
- payload_protected = soup.select_one('input[id="pPageItemsProtected"]').get(
48
- "value"
49
- )
52
+
53
+ # Check if required form elements exist
54
+ salt_element = soup.select_one('input[id="pSalt"]')
55
+ protected_element = soup.select_one('input[id="pPageItemsProtected"]')
56
+
57
+ if not salt_element or not protected_element:
58
+ raise Exception("Required form elements not found. The council website may have changed or be unavailable.")
59
+
60
+ payload_salt = salt_element.get("value")
61
+ payload_protected = protected_element.get("value")
50
62
 
51
63
  # Add the PostCode and 'SEARCH' to the payload
52
64
  payload["p_request"] = "SEARCH"
@@ -123,10 +135,16 @@ class CouncilClass(AbstractGetBinDataClass):
123
135
  i["data-for"]: i.get("value", "")
124
136
  for i in soup.select("input[data-for]")
125
137
  }
126
- payload_salt = soup.select_one('input[id="pSalt"]').get("value")
127
- payload_protected = soup.select_one('input[id="pPageItemsProtected"]').get(
128
- "value"
129
- )
138
+
139
+ # Check if required form elements exist
140
+ salt_element = soup.select_one('input[id="pSalt"]')
141
+ protected_element = soup.select_one('input[id="pPageItemsProtected"]')
142
+
143
+ if not salt_element or not protected_element:
144
+ raise Exception("Required form elements not found. The council website may have changed or be unavailable.")
145
+
146
+ payload_salt = salt_element.get("value")
147
+ payload_protected = protected_element.get("value")
130
148
 
131
149
  # Add the UPRN and 'SUBMIT' to the payload
132
150
  payload["p_request"] = "SUBMIT"
@@ -187,18 +205,117 @@ class CouncilClass(AbstractGetBinDataClass):
187
205
 
188
206
  # Create a BeautifulSoup object from the page's HTML
189
207
  soup = BeautifulSoup(resource.text, "html.parser")
208
+ =======
209
+ driver = None
210
+ try:
211
+ >>>>>>> master
190
212
  data = {"bins": []}
213
+ url = kwargs.get("url")
214
+ user_paon = kwargs.get("paon")
215
+ user_postcode = kwargs.get("postcode")
216
+ web_driver = kwargs.get("web_driver")
217
+ headless = kwargs.get("headless")
218
+ check_paon(user_paon)
219
+ check_postcode(user_postcode)
220
+
221
+ # Use a realistic user agent to help bypass Cloudflare
222
+ user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
223
+ driver = create_webdriver(web_driver, headless, user_agent, __name__)
224
+ driver.get(
225
+ "https://testvalley.gov.uk/wasteandrecycling/when-are-my-bins-collected/when-are-my-bins-collected"
226
+ )
227
+
228
+ # Wait for the postcode field to appear then populate it
229
+ inputElement_postcode = WebDriverWait(driver, 30).until(
230
+ EC.presence_of_element_located((By.ID, "postcodeSearch"))
231
+ )
232
+ inputElement_postcode.send_keys(user_postcode)
233
+
234
+ # Click search button
235
+ findAddress = WebDriverWait(driver, 10).until(
236
+ EC.presence_of_element_located((By.CLASS_NAME, "govuk-button"))
237
+ )
238
+ findAddress.click()
239
+
240
+ # Wait for the 'Select address' dropdown to appear and select option matching the house name/number
241
+ WebDriverWait(driver, 10).until(
242
+ EC.element_to_be_clickable(
243
+ (
244
+ By.XPATH,
245
+ "//select[@id='addressSelect']//option[contains(., '"
246
+ + user_paon
247
+ + "')]",
248
+ )
249
+ )
250
+ ).click()
251
+
252
+ # Wait for the collections table to appear
253
+ WebDriverWait(driver, 20).until(
254
+ EC.presence_of_element_located(
255
+ (
256
+ By.XPATH,
257
+ "//h2[contains(@class,'mt-4') and contains(@class,'govuk-heading-s') and normalize-space(.)='Your next collections']",
258
+ )
259
+ )
260
+ )
261
+
262
+ soup = BeautifulSoup(driver.page_source, features="html.parser")
263
+
264
+ collections = soup.find_all("div", {"class": "p-2"})
265
+
266
+ for collection in collections:
267
+ bin_type = collection.find("h3").get_text()
268
+
269
+ next_collection = soup.find("div", {"class": "fw-bold"}).get_text()
270
+
271
+ following_collection = soup.find(
272
+ lambda t: (
273
+ t.name == "div"
274
+ and t.get_text(strip=True).lower().startswith("followed by")
275
+ )
276
+ ).get_text()
277
+
278
+ next_collection_date = datetime.strptime(next_collection, "%A %d %B")
279
+
280
+ following_collection_date = datetime.strptime(
281
+ following_collection, "followed by %A %d %B"
282
+ )
283
+
284
+ current_date = datetime.now()
285
+ next_collection_date = next_collection_date.replace(
286
+ year=current_date.year
287
+ )
288
+ following_collection_date = following_collection_date.replace(
289
+ year=current_date.year
290
+ )
291
+
292
+ next_collection_date = get_next_occurrence_from_day_month(
293
+ next_collection_date
294
+ )
295
+
296
+ following_collection_date = get_next_occurrence_from_day_month(
297
+ following_collection_date
298
+ )
299
+
300
+ dict_data = {
301
+ "type": bin_type,
302
+ "collectionDate": next_collection_date.strftime(date_format),
303
+ }
304
+ data["bins"].append(dict_data)
305
+
306
+ dict_data = {
307
+ "type": bin_type,
308
+ "collectionDate": following_collection_date.strftime(date_format),
309
+ }
310
+ data["bins"].append(dict_data)
191
311
 
192
- # Loop through the items on the page and build a JSON object for ingestion
193
- for item in soup.select(".t-MediaList-item"):
194
- for value in item.select(".t-MediaList-body"):
195
- dict_data = {
196
- "type": value.select("span")[1].get_text(strip=True).title(),
197
- "collectionDate": datetime.strptime(
198
- value.select(".t-MediaList-desc")[0].get_text(strip=True),
199
- "%A, %d %B, %Y",
200
- ).strftime(date_format),
201
- }
202
- data["bins"].append(dict_data)
203
-
204
- return data
312
+ except Exception as e:
313
+ # Here you can log the exception if needed
314
+ print(f"An error occurred: {e}")
315
+ # Optionally, re-raise the exception if you want it to propagate
316
+ raise
317
+ finally:
318
+ # This block ensures that the driver is closed regardless of an exception
319
+ if driver:
320
+ driver.quit()
321
+ return data
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: uk_bin_collection
3
- Version: 0.154.0
3
+ Version: 0.158.0
4
4
  Summary: Python Lib to collect UK Bin Data
5
5
  Author: Robert Bradley
6
6
  Author-email: robbrad182@gmail.com
@@ -7,7 +7,7 @@ uk_bin_collection/tests/council_feature_input_parity.py,sha256=DO6Mk4ImYgM5ZCZ-c
7
7
  uk_bin_collection/tests/features/environment.py,sha256=VQZjJdJI_kZn08M0j5cUgvKT4k3iTw8icJge1DGOkoA,127
8
8
  uk_bin_collection/tests/features/validate_council_outputs.feature,sha256=SJK-Vc737hrf03tssxxbeg_JIvAH-ddB8f6gU1LTbuQ,251
9
9
  uk_bin_collection/tests/generate_map_test_results.py,sha256=CKnGK2ZgiSXomRGkomX90DitgMP-X7wkHhyKORDcL2E,1144
10
- uk_bin_collection/tests/input.json,sha256=pluVDZO3V_u2j6wQ9zgaVwp5-pUQWxjCnfZwUCDKoNs,132568
10
+ uk_bin_collection/tests/input.json,sha256=bURoXzL_7O2NEHrynHtLQ8GFX5PrrFyYdB3Dss2cjpI,132917
11
11
  uk_bin_collection/tests/output.schema,sha256=ZwKQBwYyTDEM4G2hJwfLUVM-5v1vKRvRK9W9SS1sd18,1086
12
12
  uk_bin_collection/tests/step_defs/step_helpers/file_handler.py,sha256=Ygzi4V0S1MIHqbdstUlIqtRIwnynvhu4UtpweJ6-5N8,1474
13
13
  uk_bin_collection/tests/step_defs/test_validate_council.py,sha256=VZ0a81sioJULD7syAYHjvK_-nT_Rd36tUyzPetSA0gk,3475
@@ -17,7 +17,7 @@ uk_bin_collection/tests/test_conftest.py,sha256=qI_zgGjNOnwE9gmZUiuirL1SYz3TFw5y
17
17
  uk_bin_collection/tests/test_get_data.py,sha256=sFJz_Fd6o-1r2gdmzY52JGwVi0Of_mDzvYSoc7a3RUw,7239
18
18
  uk_bin_collection/uk_bin_collection/collect_data.py,sha256=dB7wWXsJX4fm5bIf84lexkvHIcO54CZ3JPxqmS-60YY,4654
19
19
  uk_bin_collection/uk_bin_collection/common.py,sha256=izotgwavB08pUWisNL3wqcBrE9E1-bdrq-v6YKyriDE,11034
20
- uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py,sha256=Je8VwVLK9KnYl9vqf2gWJ7ZYDgUq3A7caDiIzk5Xof8,4194
20
+ uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py,sha256=1IV0qSSM5EcxsxcTwXnEdTmIUdzL_Xg4F5RYC_us4XE,4193
21
21
  uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py,sha256=aO1CSdyqa8oAD0fB79y1Q9bikAWCP_JFa7CsyTa2j9s,1655
22
22
  uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py,sha256=2fU4E2hnblgzlS-hGkaczbzg4I3-lwIU0Fiszp_WnqM,4406
23
23
  uk_bin_collection/uk_bin_collection/councils/AmberValleyBoroughCouncil.py,sha256=mTeluIIEcuxLxhfDQ95A1fp8RM6AkJT5tRGZPUbYGdk,1853
@@ -90,7 +90,7 @@ uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py,sha256=Oaj
90
90
  uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py,sha256=6UCT2Q75NANXPP7kR1ktM65lTKEDI2pDwfc5qnOL1io,5369
91
91
  uk_bin_collection/uk_bin_collection/councils/CumberlandAllerdaleCouncil.py,sha256=bPOmkyzNnHrOtUprbouHdOsgpu7WilUADcaccWTCPFI,2839
92
92
  uk_bin_collection/uk_bin_collection/councils/CumberlandCouncil.py,sha256=PwTbTVNDdGZnSkPcIHYf-LHItDyIbR68Avr96T1FrX8,3308
93
- uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py,sha256=Tm_6pvBPj-6qStbe6-02LXaoCOlnnDvVXAAocGVvf_E,3970
93
+ uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py,sha256=F3APItm4QJ5HroqCgIlTJFX37HvP3lE77wVMXIyYPGk,4817
94
94
  uk_bin_collection/uk_bin_collection/councils/DarlingtonBoroughCouncil.py,sha256=5rv6xiGkqBrCP57dw2vkrqyQlSX6qhGj_uB2nKrkHL4,2448
95
95
  uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py,sha256=3vuXYhoK3ZkFGtxIDJXCTeY8_kbaXDcKn0C2yk5g1kI,2056
96
96
  uk_bin_collection/uk_bin_collection/councils/DenbighshireCouncil.py,sha256=FtG0LMTY21RBQiBpeX4FihdMCEZ1knpARYyMfyCn9ng,2103
@@ -106,6 +106,7 @@ uk_bin_collection/uk_bin_collection/councils/EalingCouncil.py,sha256=UhNXGi-_6NY
106
106
  uk_bin_collection/uk_bin_collection/councils/EastAyrshireCouncil.py,sha256=i3AcWkeAnk7rD59nOm0QCSH7AggqjUAdwsXuSIC8ZJE,1614
107
107
  uk_bin_collection/uk_bin_collection/councils/EastCambridgeshireCouncil.py,sha256=aYUVE5QqTxdj8FHhCB4EiFVDJahWJD9Pq0d1upBEvXg,1501
108
108
  uk_bin_collection/uk_bin_collection/councils/EastDevonDC.py,sha256=5aZ4C2t-RBuygtqTRdcpGutjqJ2udrpKbW4F8RQ9r3M,3825
109
+ uk_bin_collection/uk_bin_collection/councils/EastDunbartonshireCouncil.py,sha256=qHZqCV6zu9CPcQ_heON-MKpLW0eP7VrqRwsGlJWweyw,1637
109
110
  uk_bin_collection/uk_bin_collection/councils/EastHertsCouncil.py,sha256=enESYQCaqZ5miaHCmeQUWw3VIE5HfD8K7Oq8gxUVYDA,3901
110
111
  uk_bin_collection/uk_bin_collection/councils/EastLindseyDistrictCouncil.py,sha256=Laf-j0LLr7M4xmKhk8kjPNTtt66oXKYWm0ppxdUX3F0,4326
111
112
  uk_bin_collection/uk_bin_collection/councils/EastLothianCouncil.py,sha256=5IqDnO5dvnOMNb3gNP1xp14xdPwFG3mb7MBhnSq2npI,2882
@@ -160,12 +161,12 @@ uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py,sha256=UHcesBoct
160
161
  uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py,sha256=TXDIlVvYMwWECiXXBmzUjm36L5Pmn3GHciUuRaKmfF0,2059
161
162
  uk_bin_collection/uk_bin_collection/councils/HyndburnBoroughCouncil.py,sha256=_lJ__EMcUBbE4QZvH-c1nCGeKxZTn5hhcpjVAYBbJZc,5403
162
163
  uk_bin_collection/uk_bin_collection/councils/IpswichBoroughCouncil.py,sha256=J9iQzZ4dc0VZhU_gTtMyiqpef6UYAPY_B7hQO5tY3Wg,2836
163
- uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py,sha256=xavzL6ZIU9DG8Xro3vN0CEnYmNU31OGnOvnq78wgpQc,1258
164
+ uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py,sha256=Zu6nrbM7IJY5De7qPE078dGj9wWTPHmFW907RPmA3QE,1464
164
165
  uk_bin_collection/uk_bin_collection/councils/KingsLynnandWestNorfolkBC.py,sha256=Shj18R-7NW4ivqJJFVJOLmf-EeN6hXP2Of30oI-SeAQ,1932
165
166
  uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py,sha256=8kKRhvdqs1hCymqmTtbi0FPJp2kd47JVmKTgRaWOGeY,3573
166
167
  uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py,sha256=WPM7koIqK5Wz-iT9Mds6AptihGZtl4KZhkVTcT9cx_c,2762
167
168
  uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py,sha256=PDC907dxifFSAuto-vLJLEPBJrxTqNsfoD07__iKiwM,5269
168
- uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py,sha256=FmHT6oyD4BwWuhxA80PHnGA7HPrLuyjP_54Cg8hT6k4,2537
169
+ uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py,sha256=G3Oepmebyg-YOlujaHQf3ffhS0xQ4VlASa-5SqZMc_g,3282
169
170
  uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py,sha256=VWdhw6qvCTj3EhFHf046xPWgc6szeFW2Xbt6W2J0e6w,4371
170
171
  uk_bin_collection/uk_bin_collection/councils/LeicesterCityCouncil.py,sha256=o3kE8sjThQa4_AvSK5NH8VH7jWFO9MMPgoqLOTjyh0w,1851
171
172
  uk_bin_collection/uk_bin_collection/councils/LewesDistrictCouncil.py,sha256=WZAxQ6TOGqQYYsRiL5SdzKdRA4k3GH5ygbKnau5KtDA,2658
@@ -181,7 +182,7 @@ uk_bin_collection/uk_bin_collection/councils/LondonBoroughLambeth.py,sha256=r9D5
181
182
  uk_bin_collection/uk_bin_collection/councils/LondonBoroughLewisham.py,sha256=d8rlJDTbY3nj-Zjg6iwvwfe-X13Gq86DGGW6QkQAUW0,5310
182
183
  uk_bin_collection/uk_bin_collection/councils/LondonBoroughOfRichmondUponThames.py,sha256=H1ej7Bw1zW3kvxCqz0W1137YIZCdG5AmhAyVK3cvp00,3987
183
184
  uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py,sha256=A_6Sis5hsF53Th04KeadHRasGbpAm6aoaWJ6X8eC4Y8,6604
184
- uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py,sha256=T0gCjpBQ9k3uNNIiJGphNiSXeh2n6bohflg9RwbL3NA,2565
185
+ uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py,sha256=xixtPqXJ6Wms14e-Sc5Nq8ybbcrvZ65mzgpOhNJw5tY,3646
185
186
  uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py,sha256=vScUi_R8FnBddii2_zLlZBLxuh85mKmCm8nKW3zxky0,2758
186
187
  uk_bin_collection/uk_bin_collection/councils/MaidstoneBoroughCouncil.py,sha256=T9R1_ciKitxGhGUcNu2UnSZszvUBuLVKReRA1rIlRIg,4280
187
188
  uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py,sha256=PMVt2XFggttPmbWyrBrHJ-W6R_6-0ux1BkY1kj1IKzg,1997
@@ -193,7 +194,7 @@ uk_bin_collection/uk_bin_collection/councils/MeltonBoroughCouncil.py,sha256=Xql_
193
194
  uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py,sha256=xsOSX4KCcUHHo4BHB5JhFC9r5Q-h586Vk-5-X2VAJl0,2809
194
195
  uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py,sha256=oOWwU5FSgGej2Mv7FQ66N-EzS5nZgmGsd0WnfLWUc1I,5238
195
196
  uk_bin_collection/uk_bin_collection/councils/MidDevonCouncil.py,sha256=8MxqGgOJVseMkrTmEMT0EyDW7UMbXMoa5ZcJ2nD55Ew,3367
196
- uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py,sha256=h6M-v5jVYe7OlQ47Vf-0pEgECZLOOacK3_XE6zbpsM4,6329
197
+ uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py,sha256=nefk3j3VOyN9jk-RP_-nLVRWj_Gn8wN12z2bU_15SVc,6559
197
198
  uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py,sha256=AZgC9wmDLEjUOtIFvf0ehF5LHturXTH4DkE3ioPSVBA,6254
198
199
  uk_bin_collection/uk_bin_collection/councils/MidUlsterDistrictCouncil.py,sha256=ev_T8LoI9tZzkymmAD9yEk2leKc4Y0Cqsde56aAJPa8,5114
199
200
  uk_bin_collection/uk_bin_collection/councils/MiddlesbroughCouncil.py,sha256=BiYexiZj-9PxRnB7sYRy0G-72s3L9jfh2vd1Y2NQwtg,4223
@@ -203,12 +204,12 @@ uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py,sha256
203
204
  uk_bin_collection/uk_bin_collection/councils/MonmouthshireCountyCouncil.py,sha256=PC2tui10S-DXmiKUqXZun5MInIgqqQjtT5wII1K_9a0,2532
204
205
  uk_bin_collection/uk_bin_collection/councils/MorayCouncil.py,sha256=B8unofp2x1HF72QT_3E0Iew78PWMywjzkNDJdWof2Tc,3309
205
206
  uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py,sha256=p95UYogx3_WJ_1kgfeH5kGQdrZ3YyEJjVuZ7WOOPAvs,5710
206
- uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py,sha256=Vdmv_p75OJwSeltWE5wZhE8wy5XW0CIKIn1cKNvI0pQ,5336
207
+ uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py,sha256=9z290ZV7-shw6Kv1nG-jKjQmwHB10sgiXF-ZV8X58cA,7411
207
208
  uk_bin_collection/uk_bin_collection/councils/NewarkAndSherwoodDC.py,sha256=lAleYfCGUWCKOi7Ye_cjgfpI3pWwTcFctlYmh0hjebM,2140
208
209
  uk_bin_collection/uk_bin_collection/councils/NewcastleCityCouncil.py,sha256=eJMX10CG9QO7FRhHSmUDL-jO_44qoK3_1ztNTAXhkbw,2085
209
210
  uk_bin_collection/uk_bin_collection/councils/NewcastleUnderLymeCouncil.py,sha256=feuQnAG80xVojQlUBLh8wjVPVU6yLZ6sQKKjfHBKIl8,2514
210
211
  uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py,sha256=zlkKm28E6zIRknAbyLeSd5LNeRctqlZ-2MIrAsdaqHg,2260
211
- uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py,sha256=dAcl5P97bttl2xCPvxof1a18kmqOrMmiElgtn3Ej7zs,8480
212
+ uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py,sha256=nWWoE_cI6TM7d_JlYO4mwnToOzBVy_JzfxWwWGBbgGc,13137
212
213
  uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py,sha256=o8zv40Wt19d51mrN5lsgLMCKMokMPmI1cMHBNT5yAho,1976
213
214
  uk_bin_collection/uk_bin_collection/councils/NorthDevonCountyCouncil.py,sha256=tgJKIvu7nnCAHu_HImfG5SQABD6ygKFqrZU-ZoC6ObY,6260
214
215
  uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py,sha256=BfNpYcjG3z0Yz8OYN6NkfzvZ5k1FI-80D-rv211kPPU,5449
@@ -223,13 +224,13 @@ uk_bin_collection/uk_bin_collection/councils/NorthSomersetCouncil.py,sha256=RNfv
223
224
  uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py,sha256=yqycVcGZ3oT0FOu7Dx6BzbO_VFRABdyjKBPF-uRlI2s,5929
224
225
  uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py,sha256=gJj0dyQc5QUefqusKGk2LLXfWbG5tlEXUOh8KAPh3RI,4584
225
226
  uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py,sha256=rwW6y5yhRiuYk3lVS7YFZxLaY_yfojdcn2dxiWaP4YA,2013
226
- uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py,sha256=64ujJAM0TuMl-0pTnFuG-MGXTI9bgr1Gb7-t1h09p-U,5529
227
+ uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py,sha256=2S-BeeT4A086RYUwfpVSZ7Bu9IqCg9boiYZcB3QMGag,14110
227
228
  uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py,sha256=mf2qB_YQlYUN_YLxC4JHNqpB3yAuUiFbVT1pFichZB4,2839
228
229
  uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py,sha256=panTCjnsBOQ98-TBO9xVZk_jcT_gjMhx3Gg5oWxBRLo,1254
229
230
  uk_bin_collection/uk_bin_collection/councils/NuneatonBedworthBoroughCouncil.py,sha256=thcKPPUgSFrr2_an4jWsFzlwNzVCVvRLGNPK5jSXgd0,38192
230
231
  uk_bin_collection/uk_bin_collection/councils/OadbyAndWigstonBoroughCouncil.py,sha256=Kgy5HA0xZ9hR4_cAydPfOfskhGUB4j93AQF2-9Fj-Cg,2179
231
232
  uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py,sha256=9dlesCxNoVXlmQaqZj7QFh00smnJbm1Gnjkr_Uvzurs,1771
232
- uk_bin_collection/uk_bin_collection/councils/OxfordCityCouncil.py,sha256=a6bPDZDh0RKcbyDoidI-PiIM5lw7Tr0AlApP4_hTbxQ,2419
233
+ uk_bin_collection/uk_bin_collection/councils/OxfordCityCouncil.py,sha256=3_VWPfvXcayQxZu7gIRyjHT1OVhSytsBqq6gHAAlBWw,2513
233
234
  uk_bin_collection/uk_bin_collection/councils/PembrokeshireCountyCouncil.py,sha256=GRAxjf_DuO5uZ660kEbZt_yCjP3n2maMxsYTPCTz3GQ,3324
234
235
  uk_bin_collection/uk_bin_collection/councils/PerthAndKinrossCouncil.py,sha256=Kos5GzN2co3Ij3tSHOXB9S71Yt78RROCfVRtnh7M1VU,3657
235
236
  uk_bin_collection/uk_bin_collection/councils/PeterboroughCityCouncil.py,sha256=lOrDD4jfJ-_C5UwCGqRcQ1G-U1F5X6rf255ypzYEBcg,6300
@@ -241,12 +242,12 @@ uk_bin_collection/uk_bin_collection/councils/ReadingBoroughCouncil.py,sha256=ZlQ
241
242
  uk_bin_collection/uk_bin_collection/councils/RedcarandClevelandCouncil.py,sha256=MV8CD1sj8fiy6PAVrIHO4TyTHodn45nDZp0rQfs7PiM,2829
242
243
  uk_bin_collection/uk_bin_collection/councils/RedditchBoroughCouncil.py,sha256=8QmcpStCT7c-CLhmiQ8ZeEyvtysU110VDiMQdfQTErk,2469
243
244
  uk_bin_collection/uk_bin_collection/councils/ReigateAndBansteadBoroughCouncil.py,sha256=HMLKdRUO5DdMJe1d1X5qtKtQsf6d5TAPViIZpMzAfes,3251
244
- uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py,sha256=VjjolGn0KemgIUnmF-JlB8gxNLyaQB5mP61NonxVJAo,5080
245
+ uk_bin_collection/uk_bin_collection/councils/RenfrewshireCouncil.py,sha256=GG84lU2lOe2AT1N3CrZlaOL8pR6Adc_7d6HEwChzx8k,13405
245
246
  uk_bin_collection/uk_bin_collection/councils/RhonddaCynonTaffCouncil.py,sha256=wInyVG_0wRrX_dRO9qbAzPhlXDseXapj2zQhsISw8gg,3233
246
247
  uk_bin_collection/uk_bin_collection/councils/RochdaleCouncil.py,sha256=UTSwSw515VehGn4xkjjRhUlzS4lDj4hgna6y-4VW3uM,2379
247
248
  uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py,sha256=a4sL2K3a0dAWeX74qW9bbsTC666ahNRz0rZg3fAn_C0,2623
248
249
  uk_bin_collection/uk_bin_collection/councils/RotherDistrictCouncil.py,sha256=-fdLvtik9ytfwXrrhwWdBxqQOMq2N1pvrIuvShhf8PU,3090
249
- uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py,sha256=dfAqXtmbptHGZGGWkurjY9snaVm1aH5CGjhzdtoe4JM,2058
250
+ uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py,sha256=CJYOJPLKGeWjwvw5_BJ3kanVqjGOS87jQ6kaP-4u-lg,3372
250
251
  uk_bin_collection/uk_bin_collection/councils/RoyalBoroughofGreenwich.py,sha256=AziuKhP6wKu_316MA4xXRN-ayDU6RSB21EfSWjmMqU8,3800
251
252
  uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py,sha256=WlmOD-xHJFdowI9fGuGDHOpnAVHGUWxGZqmJ6z4fGXs,5687
252
253
  uk_bin_collection/uk_bin_collection/councils/RunnymedeBoroughCouncil.py,sha256=-ZKQfpxviEcHM0j3QBGrKqJ-FbSouFHPuRnQSCoG5J0,1816
@@ -260,11 +261,11 @@ uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py,sha256=9g9A
260
261
  uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py,sha256=6OIEhJmv-zLJiEo8WaJePA7JuhNRGkh2WohFLhzN8Kk,1477
261
262
  uk_bin_collection/uk_bin_collection/councils/SloughBoroughCouncil.py,sha256=ADa-8bcTnD39Lof6FdRp_WAHQSYmHgXN3uz0uqKnW64,6367
262
263
  uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py,sha256=gbTHjbdV46evGfLfF8rxVMQIgNZD-XPHgZeuyje7kGY,1609
263
- uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py,sha256=CZJnkCGn4-yH31HH5_ix-8V2_vsjGuKYxgzAPGZdSAw,8480
264
+ uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py,sha256=dJkrO4w2b-4bm8BhWkreTenSD_t91Cqxbx1S-Jm9V48,13033
264
265
  uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py,sha256=03eapeXwxneKI4ccKPSHoviIbhmV1m90I-0WQ_s3KsY,2722
265
266
  uk_bin_collection/uk_bin_collection/councils/SouthCambridgeshireCouncil.py,sha256=xGSMcikxjS4UzqKs0X50LJKmn09C-XAAs98SPhNZgkQ,2308
266
267
  uk_bin_collection/uk_bin_collection/councils/SouthDerbyshireDistrictCouncil.py,sha256=irqelQSENPsZLlNtYtpt-Z7GwKUyvhp94kKKVIIDjQg,2087
267
- uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py,sha256=ytQot0J7i6DTJo6hb9koTB1UpXLATKVeRU4FBF9kHRo,2412
268
+ uk_bin_collection/uk_bin_collection/councils/SouthGloucestershireCouncil.py,sha256=ZfEGycAT4A4KsEKGHlUBmMP3GRkodWOtRNiE1T_kfN4,2397
268
269
  uk_bin_collection/uk_bin_collection/councils/SouthHamsDistrictCouncil.py,sha256=DiijlLisR8qwPSo-4XSAiNk5G31-fYr7bDHKSFjDT7o,3180
269
270
  uk_bin_collection/uk_bin_collection/councils/SouthHollandDistrictCouncil.py,sha256=KU5-d6imNEV89O9WcAP-5WLcXUsouf9A-_mEZNxl-vo,5165
270
271
  uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py,sha256=_26ouWln5VrKiIFcp2b6ZzuwCKpp3aNcS2n5d4-8NsA,6210
@@ -298,7 +299,7 @@ uk_bin_collection/uk_bin_collection/councils/TandridgeDistrictCouncil.py,sha256=
298
299
  uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py,sha256=-NowMNcxsnktzUxTk-XUfzFJgXKSSerCmdZ7cN4cE1s,2703
299
300
  uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py,sha256=p1ZS5R4EGxbEWlRBrkGXgKwE_lkyBT-R60yKFFhVObc,1844
300
301
  uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py,sha256=1_CkpWPTfRUEP5YJ9R4_dJRLtb-O9i83hfWJc1shw_c,4283
301
- uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py,sha256=Dtfkyrwt795W7gqFJxVGRR8t3R5WMNQZwTWJckLpZWE,8480
302
+ uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py,sha256=GQ_MaPpTd8DqDL4DpyaMjYGxqHm8Wi6qqTO9nCk7370,13117
302
303
  uk_bin_collection/uk_bin_collection/councils/TewkesburyBoroughCouncil.py,sha256=cSULCQBddk4tfaJZHv7mrNwM4sZkOYJpmlQXlvrZvPk,1396
303
304
  uk_bin_collection/uk_bin_collection/councils/ThanetDistrictCouncil.py,sha256=Cxrf0tUryDL-wFclPH5yovVt8i7Sc7g-ZFrU9_wg6KY,2717
304
305
  uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py,sha256=RHt3e9oeKzwxjjY-M8aC0nk-ZXhHIoyC81JzxkPVxsE,5531
@@ -346,8 +347,8 @@ uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py,sha256=I2kBYMlsD4bId
346
347
  uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py,sha256=QD4v4xpsEE0QheR_fGaNOIRMc2FatcUfKkkhAhseyVU,1159
347
348
  uk_bin_collection/uk_bin_collection/create_new_council.py,sha256=m-IhmWmeWQlFsTZC4OxuFvtw5ZtB8EAJHxJTH4O59lQ,1536
348
349
  uk_bin_collection/uk_bin_collection/get_bin_data.py,sha256=Qb76X46V0UMZJwO8zMNPvnVY7jNa-bmTlrirDi1tuJA,4553
349
- uk_bin_collection-0.154.0.dist-info/LICENSE,sha256=vABBUOzcrgfaTKpzeo-si9YVEun6juDkndqA8RKdKGs,1071
350
- uk_bin_collection-0.154.0.dist-info/METADATA,sha256=spy6a-d1hkF1PvMsXaLOtTYtoOdKIpXDnGgYrQ0NGiE,26688
351
- uk_bin_collection-0.154.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
352
- uk_bin_collection-0.154.0.dist-info/entry_points.txt,sha256=36WCSGMWSc916S3Hi1ZkazzDKHaJ6CD-4fCEFm5MIao,90
353
- uk_bin_collection-0.154.0.dist-info/RECORD,,
350
+ uk_bin_collection-0.158.0.dist-info/LICENSE,sha256=vABBUOzcrgfaTKpzeo-si9YVEun6juDkndqA8RKdKGs,1071
351
+ uk_bin_collection-0.158.0.dist-info/METADATA,sha256=ihuNsB2pzq5yFtT06ae1WmUvgPCkLc8gJHt-zAHNl0Q,26688
352
+ uk_bin_collection-0.158.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
353
+ uk_bin_collection-0.158.0.dist-info/entry_points.txt,sha256=36WCSGMWSc916S3Hi1ZkazzDKHaJ6CD-4fCEFm5MIao,90
354
+ uk_bin_collection-0.158.0.dist-info/RECORD,,