uk_bin_collection 0.125.2__py3-none-any.whl → 0.126.1__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.
- uk_bin_collection/tests/input.json +2 -2
- uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py +0 -1
- uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py +3 -3
- uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py +64 -53
- uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py +15 -10
- uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +2 -6
- uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py +11 -1
- uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py +12 -8
- uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py +1 -1
- uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py +9 -9
- {uk_bin_collection-0.125.2.dist-info → uk_bin_collection-0.126.1.dist-info}/METADATA +2 -2
- {uk_bin_collection-0.125.2.dist-info → uk_bin_collection-0.126.1.dist-info}/RECORD +15 -15
- {uk_bin_collection-0.125.2.dist-info → uk_bin_collection-0.126.1.dist-info}/LICENSE +0 -0
- {uk_bin_collection-0.125.2.dist-info → uk_bin_collection-0.126.1.dist-info}/WHEEL +0 -0
- {uk_bin_collection-0.125.2.dist-info → uk_bin_collection-0.126.1.dist-info}/entry_points.txt +0 -0
@@ -1993,8 +1993,8 @@
|
|
1993
1993
|
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
1994
1994
|
},
|
1995
1995
|
"WestLindseyDistrictCouncil": {
|
1996
|
-
"house_number": "
|
1997
|
-
"postcode": "LN8
|
1996
|
+
"house_number": "35",
|
1997
|
+
"postcode": "LN8 3AX",
|
1998
1998
|
"skip_get_url": true,
|
1999
1999
|
"url": "https://www.west-lindsey.gov.uk/",
|
2000
2000
|
"wiki_name": "West Lindsey District Council",
|
@@ -5,7 +5,6 @@ import requests
|
|
5
5
|
from uk_bin_collection.uk_bin_collection.common import *
|
6
6
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
7
7
|
|
8
|
-
|
9
8
|
# import the wonderful Beautiful Soup and the URL grabber
|
10
9
|
class CouncilClass(AbstractGetBinDataClass):
|
11
10
|
"""
|
@@ -21,7 +21,6 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
21
21
|
"""
|
22
22
|
|
23
23
|
def parse_data(self, page: str, **kwargs) -> dict:
|
24
|
-
# Make a BS4 object
|
25
24
|
driver = None
|
26
25
|
try:
|
27
26
|
bin_data_dict = {"bins": []}
|
@@ -76,12 +75,13 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
76
75
|
# Get the current year
|
77
76
|
current_year = datetime.now().year
|
78
77
|
|
78
|
+
# Append the year to the date
|
79
|
+
date_with_year = date_object.replace(year=current_year)
|
80
|
+
|
79
81
|
# Check if the parsed date is in the past compared to the current date
|
80
82
|
if date_object < datetime.now():
|
81
83
|
# If the parsed date is in the past, assume it's for the next year
|
82
84
|
current_year += 1
|
83
|
-
# Append the year to the date
|
84
|
-
date_with_year = date_object.replace(year=current_year)
|
85
85
|
|
86
86
|
# Format the date with the year
|
87
87
|
date_with_year_formatted = date_with_year.strftime(
|
@@ -1,12 +1,17 @@
|
|
1
|
+
import time
|
1
2
|
from datetime import datetime
|
2
3
|
from typing import Optional
|
3
4
|
|
5
|
+
from bs4 import BeautifulSoup
|
4
6
|
from selenium.common import TimeoutException
|
5
7
|
from selenium.webdriver.common.by import By
|
6
8
|
from selenium.webdriver.common.keys import Keys
|
7
9
|
from selenium.webdriver.remote.webdriver import WebDriver
|
8
10
|
from selenium.webdriver.support import expected_conditions as EC
|
9
11
|
from selenium.webdriver.support.wait import WebDriverWait
|
12
|
+
from webdriver_manager.drivers.chrome import ChromeDriver
|
13
|
+
|
14
|
+
from selenium import webdriver
|
10
15
|
|
11
16
|
from uk_bin_collection.uk_bin_collection.common import create_webdriver
|
12
17
|
from uk_bin_collection.uk_bin_collection.common import date_format
|
@@ -55,78 +60,84 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
55
60
|
|
56
61
|
- Extract info from the 'alt' attribute of the images on that page
|
57
62
|
"""
|
58
|
-
|
63
|
+
data = {"bins": []}
|
64
|
+
collections = []
|
59
65
|
|
60
66
|
user_paon = kwargs["paon"]
|
61
67
|
user_postcode = kwargs["postcode"]
|
62
68
|
|
63
|
-
self._driver = driver =
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
69
|
+
self._driver = driver = webdriver.Chrome()
|
70
|
+
# self._driver = driver = create_webdriver(
|
71
|
+
# web_driver=kwargs["web_driver"],
|
72
|
+
# headless=kwargs.get("headless", True),
|
73
|
+
# session_name=__name__,
|
74
|
+
# )
|
68
75
|
driver.implicitly_wait(1)
|
69
76
|
|
70
77
|
driver.get(
|
71
|
-
"https://
|
78
|
+
"https://my.kirklees.gov.uk/service/Bins_and_recycling___Manage_your_bins"
|
72
79
|
)
|
73
80
|
|
74
|
-
|
75
|
-
|
76
|
-
|
81
|
+
time.sleep(5)
|
82
|
+
|
83
|
+
# Switch to iframe
|
84
|
+
iframe = driver.find_element(By.CSS_SELECTOR, "#fillform-frame-1")
|
85
|
+
driver.switch_to.frame(iframe)
|
77
86
|
|
78
|
-
|
79
|
-
By.ID, "
|
87
|
+
wait_for_element(
|
88
|
+
driver, By.ID, "mandatory_Postcode", timeout=10
|
80
89
|
)
|
81
|
-
house_input.send_keys(user_paon)
|
82
90
|
|
83
91
|
postcode_input = driver.find_element(
|
84
|
-
By.ID, "
|
92
|
+
By.ID, "Postcode"
|
85
93
|
)
|
86
94
|
postcode_input.send_keys(user_postcode)
|
87
95
|
|
88
|
-
|
89
|
-
|
96
|
+
wait_for_element(driver, By.ID, "List")
|
97
|
+
time.sleep(2)
|
98
|
+
|
99
|
+
WebDriverWait(driver, 10).until(
|
100
|
+
EC.element_to_be_clickable(
|
101
|
+
(
|
102
|
+
By.XPATH,
|
103
|
+
"//select[@name='List']//option[contains(., '"
|
104
|
+
+ user_paon
|
105
|
+
+ "')]",
|
106
|
+
)
|
107
|
+
)
|
108
|
+
).click()
|
90
109
|
|
91
|
-
|
92
|
-
driver,
|
93
|
-
By.ID,
|
94
|
-
"cphPageBody_cphContent_wtcDomestic240__lnkAccordionAnchor",
|
95
|
-
# submitting can be slow
|
96
|
-
timeout=30,
|
97
|
-
)
|
110
|
+
time.sleep(10)
|
98
111
|
|
99
|
-
#
|
100
|
-
driver.find_element(
|
101
|
-
|
102
|
-
|
112
|
+
# For whatever reason, the page sometimes automatically goes to the next step
|
113
|
+
next_button = driver.find_element(By.XPATH, '/html/body/div/div/section/form/div/nav/div[2]/button')
|
114
|
+
if next_button.is_displayed():
|
115
|
+
next_button.click()
|
103
116
|
|
104
|
-
# Domestic waste calendar
|
105
|
-
wait_for_element(
|
106
|
-
driver, By.ID, "cphPageBody_cphContent_wtcDomestic240__LnkCalendar"
|
107
|
-
)
|
108
|
-
calendar_link = driver.find_element(
|
109
|
-
By.ID, "cphPageBody_cphContent_wtcDomestic240__LnkCalendar"
|
110
|
-
)
|
111
|
-
driver.execute_script("arguments[0].click();", calendar_link)
|
112
117
|
|
113
|
-
|
114
|
-
# <img alt="Domestic collection date 21 March 2024
|
115
|
-
date_strings = driver.find_elements(
|
116
|
-
By.CSS_SELECTOR, 'img[alt*="collection date"]'
|
117
|
-
)
|
118
|
+
time.sleep(5)
|
118
119
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
120
|
+
soup = BeautifulSoup(self._driver.page_source, features="html.parser")
|
121
|
+
soup.prettify()
|
122
|
+
|
123
|
+
radio_button_text = soup.find_all("label", {"class": "radio-label"})
|
124
|
+
for label in radio_button_text:
|
125
|
+
parsed_text = label.text.split("x ")
|
126
|
+
row = parsed_text[1].lower().split("collection date: ")
|
127
|
+
bin_type = row[0].split("(")[0].strip()
|
128
|
+
date_text = row[1].strip().replace(")", "")
|
129
|
+
if date_text == "today":
|
130
|
+
bin_date = datetime.now()
|
131
|
+
else:
|
132
|
+
bin_date = datetime.strptime(date_text, "%A %d %B %Y")
|
133
|
+
collections.append((bin_type, bin_date))
|
134
|
+
|
135
|
+
ordered_data = sorted(collections, key=lambda x: x[1])
|
136
|
+
for item in ordered_data:
|
137
|
+
dict_data = {
|
138
|
+
"type": item[0].replace("standard ", "").capitalize(),
|
139
|
+
"collectionDate": item[1].strftime(date_format),
|
140
|
+
}
|
141
|
+
data["bins"].append(dict_data)
|
131
142
|
|
132
|
-
return
|
143
|
+
return data
|
@@ -48,15 +48,13 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
48
48
|
alternateCheck = False
|
49
49
|
|
50
50
|
strong = soup.find_all("strong")
|
51
|
+
collections = []
|
51
52
|
|
52
53
|
if alternateCheck:
|
53
54
|
bin_types = strong[2].text.strip().replace(".", "").split(" and ")
|
54
55
|
for bin in bin_types:
|
55
|
-
|
56
|
-
|
57
|
-
"collectionDate": strong[1].text.strip(),
|
58
|
-
}
|
59
|
-
bindata["bins"].append(dict_data)
|
56
|
+
collections.append((bin.capitalize(), datetime.strptime(strong[1].text.strip(), date_format)))
|
57
|
+
|
60
58
|
else:
|
61
59
|
p_tag = soup.find_all("p")
|
62
60
|
i = 1
|
@@ -65,11 +63,18 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
65
63
|
p.text.split("Your ")[1].split(" is collected")[0].split(" and ")
|
66
64
|
)
|
67
65
|
for bin in bin_types:
|
68
|
-
|
69
|
-
"type": bin,
|
70
|
-
"collectionDate": strong[i].text.strip(),
|
71
|
-
}
|
72
|
-
bindata["bins"].append(dict_data)
|
66
|
+
collections.append((bin.capitalize(), datetime.strptime(strong[1].text.strip(), date_format)))
|
73
67
|
i += 2
|
74
68
|
|
69
|
+
if len(strong) > 3:
|
70
|
+
collections.append(("Garden", datetime.strptime(strong[4].text.strip(), date_format)))
|
71
|
+
|
72
|
+
ordered_data = sorted(collections, key=lambda x: x[1])
|
73
|
+
for item in ordered_data:
|
74
|
+
dict_data = {
|
75
|
+
"type": item[0] + " bin",
|
76
|
+
"collectionDate": item[1].strftime(date_format),
|
77
|
+
}
|
78
|
+
bindata["bins"].append(dict_data)
|
79
|
+
|
75
80
|
return bindata
|
@@ -13,11 +13,6 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
13
13
|
|
14
14
|
def parse_data(self, page: str, **kwargs) -> dict:
|
15
15
|
data = {"bins": []}
|
16
|
-
bin_types = {
|
17
|
-
"240L RUBBISH BIN": "Black bin",
|
18
|
-
"240L GARDEN BIN": "Green bin",
|
19
|
-
"180L RECYCLING BIN": "Blue lid bin",
|
20
|
-
}
|
21
16
|
collections = []
|
22
17
|
|
23
18
|
user_postcode = kwargs.get("postcode")
|
@@ -73,7 +68,8 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
73
68
|
|
74
69
|
for row in table_rows:
|
75
70
|
row_text = row.text.strip().split("\n")
|
76
|
-
|
71
|
+
bin_text = row_text[0].split(" ")
|
72
|
+
bin_type = ' '.join(bin_text[1:]).capitalize()
|
77
73
|
collections.append(
|
78
74
|
(bin_type, datetime.strptime(row_text[1], "%A %d %b %Y"))
|
79
75
|
)
|
@@ -6,8 +6,18 @@ from selenium.webdriver.support.wait import WebDriverWait
|
|
6
6
|
from uk_bin_collection.uk_bin_collection.common import *
|
7
7
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
8
8
|
|
9
|
-
# import the wonderful Beautiful Soup and the URL grabber
|
10
9
|
|
10
|
+
def parse_collection_date(date_string) -> datetime:
|
11
|
+
now = datetime.now()
|
12
|
+
if date_string == "is due today":
|
13
|
+
return now
|
14
|
+
|
15
|
+
parsed_date = datetime.strptime(date_string, "%A, %d %B").replace(year=now.year)
|
16
|
+
|
17
|
+
if now.month == 12 and parsed_date.month < 12:
|
18
|
+
parsed_date = parsed_date.replace(year=(now.year + 1))
|
19
|
+
|
20
|
+
return parsed_date
|
11
21
|
|
12
22
|
class CouncilClass(AbstractGetBinDataClass):
|
13
23
|
"""
|
@@ -28,21 +28,25 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
28
28
|
response = requests.get(URI, headers=headers)
|
29
29
|
|
30
30
|
soup = BeautifulSoup(response.text, "html.parser")
|
31
|
-
# Extract links to collection
|
32
|
-
schedule_links = soup.findAll("
|
31
|
+
# Extract links to collection schedule pages and iterate through the pages
|
32
|
+
schedule_links = soup.findAll("td")
|
33
|
+
|
33
34
|
for item in schedule_links:
|
34
|
-
if "roundname" in item["href"]:
|
35
|
+
if "roundname" in item.contents[1]["href"]:
|
35
36
|
# get bin colour
|
36
|
-
|
37
|
-
|
38
|
-
r = requests.get(
|
37
|
+
bin_colour = item.contents[1]["href"].split("=")[-1].split("%")[0].upper()
|
38
|
+
bin_url = "https://cag.walsall.gov.uk" + item.contents[1]["href"]
|
39
|
+
r = requests.get(bin_url, headers=headers)
|
40
|
+
if r.status_code != 200:
|
41
|
+
print(f"Collection details for {bin_colour.lower()} bin could not be retrieved.")
|
42
|
+
break
|
39
43
|
soup = BeautifulSoup(r.text, "html.parser")
|
40
44
|
table = soup.findAll("tr")
|
41
45
|
for tr in table:
|
42
46
|
td = tr.findAll("td")
|
43
47
|
if td:
|
44
48
|
dict_data = {
|
45
|
-
"type":
|
49
|
+
"type": bin_colour.capitalize() + " bin",
|
46
50
|
"collectionDate": datetime.strptime(
|
47
51
|
td[1].text.strip(), "%d/%m/%Y"
|
48
52
|
).strftime("%d/%m/%Y"),
|
@@ -50,7 +54,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
50
54
|
bindata["bins"].append(dict_data)
|
51
55
|
|
52
56
|
bindata["bins"].sort(
|
53
|
-
key=lambda x: datetime.strptime(x.get("collectionDate"),
|
57
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), date_format)
|
54
58
|
)
|
55
59
|
|
56
60
|
return bindata
|
@@ -99,7 +99,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
99
99
|
).replace(year=datetime.now().year)
|
100
100
|
|
101
101
|
food_div = soup.find(
|
102
|
-
"div", {"id": "
|
102
|
+
"div", {"id": "FINDYOURBINDAYS_FOODWASTEDATE_OUTERDIV"}
|
103
103
|
)
|
104
104
|
food_date = food_div.find_all("div")[2]
|
105
105
|
if food_date.text == "Today":
|
@@ -32,7 +32,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
32
32
|
|
33
33
|
# Strip data and parse the JSON
|
34
34
|
address_data = json.loads(
|
35
|
-
re.sub("getAddressesCallback\d+\(", "", address_data)[:-2]
|
35
|
+
re.sub(r"getAddressesCallback\d+\(", "", address_data)[:-2]
|
36
36
|
)
|
37
37
|
|
38
38
|
if address_data["TotalHits"] == 0:
|
@@ -48,9 +48,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
48
48
|
address_x = address_data["Locations"][0]["X"]
|
49
49
|
address_y = address_data["Locations"][0]["Y"]
|
50
50
|
|
51
|
-
stage2_url = "https://wlnk.statmap.co.uk/map/Cluster.svc/getpage?script=\Cluster\Cluster.AuroraScript$&taskId=bins&format=js&updateOnly=true&query=x%3D{}%3By%3D{}%3Bid%3D{}"
|
52
|
-
address_x, address_y, address_id
|
53
|
-
)
|
51
|
+
stage2_url = fr"https://wlnk.statmap.co.uk/map/Cluster.svc/getpage?script=\Cluster\Cluster.AuroraScript$&taskId=bins&format=js&updateOnly=true&query=x%3D{address_x}%3By%3D{address_y}%3Bid%3D{address_id}"
|
54
52
|
|
55
53
|
bin_query = requests.get(stage2_url).text
|
56
54
|
|
@@ -61,7 +59,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
61
59
|
)
|
62
60
|
|
63
61
|
# Return only the HTML contained within the Javascript function payload.
|
64
|
-
pattern = 'document\.getElementById\("DR1"\)\.innerHTML="(.+)";'
|
62
|
+
pattern = r'document\.getElementById\("DR1"\)\.innerHTML="(.+)";'
|
65
63
|
|
66
64
|
bin_html = re.findall(pattern, bin_query)
|
67
65
|
|
@@ -86,19 +84,20 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
86
84
|
|
87
85
|
# Get bin date
|
88
86
|
bin_date_text = row.text
|
89
|
-
pattern = "\d+\/\d+"
|
87
|
+
pattern = r"\d+\/\d+"
|
90
88
|
bin_dates = re.findall(pattern, bin_date_text)
|
91
89
|
|
92
90
|
for bin_date in bin_dates:
|
93
91
|
# Split the bin date into day and month and build a full date with the current year
|
94
92
|
split_date = bin_date.split("/")
|
93
|
+
if len(split_date[0]) < 1:
|
94
|
+
raise ValueError("Error parsing dates retrieved from website")
|
95
95
|
full_date = datetime(
|
96
96
|
datetime.now().year, int(split_date[1]), int(split_date[0])
|
97
97
|
)
|
98
|
-
|
99
98
|
# If the current month is December and one of the next collections is in January, increment the year
|
100
|
-
if datetime.now().month == 12 and int(split_date[1])
|
101
|
-
full_date =
|
99
|
+
if datetime.now().month == 12 and int(split_date[1]) < 12:
|
100
|
+
full_date = datetime(year=datetime.now().year + 1, month=int(split_date[1]), day=int(split_date[0]))
|
102
101
|
|
103
102
|
# Since data in unordered, add to a tuple
|
104
103
|
collections.append((bin_type.title(), full_date))
|
@@ -116,3 +115,4 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
116
115
|
data["bins"].append(dict_data)
|
117
116
|
|
118
117
|
return data
|
118
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: uk_bin_collection
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.126.1
|
4
4
|
Summary: Python Lib to collect UK Bin Data
|
5
5
|
Author: Robert Bradley
|
6
6
|
Author-email: robbrad182@gmail.com
|
@@ -115,7 +115,7 @@ If you miss this on the first setup you can reconfigure it.
|
|
115
115
|
"color": "blue"
|
116
116
|
}
|
117
117
|
}
|
118
|
-
|
118
|
+
```
|
119
119
|
---
|
120
120
|
|
121
121
|
## Standalone Usage
|
@@ -2,7 +2,7 @@ uk_bin_collection/README.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
|
|
2
2
|
uk_bin_collection/tests/council_feature_input_parity.py,sha256=DO6Mk4ImYgM5ZCZ-cutwz5RoYYWZRLYx2tr6zIs_9Rc,3843
|
3
3
|
uk_bin_collection/tests/features/environment.py,sha256=VQZjJdJI_kZn08M0j5cUgvKT4k3iTw8icJge1DGOkoA,127
|
4
4
|
uk_bin_collection/tests/features/validate_council_outputs.feature,sha256=SJK-Vc737hrf03tssxxbeg_JIvAH-ddB8f6gU1LTbuQ,251
|
5
|
-
uk_bin_collection/tests/input.json,sha256=
|
5
|
+
uk_bin_collection/tests/input.json,sha256=sx_MqqcCdD9-P6RKcn9Ekxi4EjRtFnr-vg5j3rts-lo,112972
|
6
6
|
uk_bin_collection/tests/output.schema,sha256=ZwKQBwYyTDEM4G2hJwfLUVM-5v1vKRvRK9W9SS1sd18,1086
|
7
7
|
uk_bin_collection/tests/step_defs/step_helpers/file_handler.py,sha256=Ygzi4V0S1MIHqbdstUlIqtRIwnynvhu4UtpweJ6-5N8,1474
|
8
8
|
uk_bin_collection/tests/step_defs/test_validate_council.py,sha256=VZ0a81sioJULD7syAYHjvK_-nT_Rd36tUyzPetSA0gk,3475
|
@@ -12,7 +12,7 @@ uk_bin_collection/tests/test_conftest.py,sha256=qI_zgGjNOnwE9gmZUiuirL1SYz3TFw5y
|
|
12
12
|
uk_bin_collection/tests/test_get_data.py,sha256=sFJz_Fd6o-1r2gdmzY52JGwVi0Of_mDzvYSoc7a3RUw,7239
|
13
13
|
uk_bin_collection/uk_bin_collection/collect_data.py,sha256=dB7wWXsJX4fm5bIf84lexkvHIcO54CZ3JPxqmS-60YY,4654
|
14
14
|
uk_bin_collection/uk_bin_collection/common.py,sha256=Wj6o2NaxYDE1lkpYzMFDIZiPARX0K3xmt-5bnt2kjSI,10970
|
15
|
-
uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py,sha256=
|
15
|
+
uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py,sha256=1IV0qSSM5EcxsxcTwXnEdTmIUdzL_Xg4F5RYC_us4XE,4193
|
16
16
|
uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py,sha256=aO1CSdyqa8oAD0fB79y1Q9bikAWCP_JFa7CsyTa2j9s,1655
|
17
17
|
uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py,sha256=ppbrmm-MzB1wOulK--CU_0j4P-djNf3ozMhHnmQFqLo,1511
|
18
18
|
uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py,sha256=Hp5pteaC5RjL5ZqPZ564S9WQ6ZTKLMO6Dl_fxip2TUc,1653
|
@@ -45,7 +45,7 @@ uk_bin_collection/uk_bin_collection/councils/BraintreeDistrictCouncil.py,sha256=
|
|
45
45
|
uk_bin_collection/uk_bin_collection/councils/BrecklandCouncil.py,sha256=PX6A_pDvaN109aSNWmEhm88GFKfkClIkmbwGURWvsks,1744
|
46
46
|
uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py,sha256=k6qt4cds-Ejd97Z-__pw2BYvGVbFdc9SUfF73PPrTNA,5823
|
47
47
|
uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py,sha256=kJmmDJz_kQ45DHmG7ocrUpNJonEn0kuXYEDQyZaf9ks,5576
|
48
|
-
uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py,sha256=
|
48
|
+
uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py,sha256=dii85JLmYU1uMidCEsWVo3stTcq_QqyC65DxG8u1UmE,4302
|
49
49
|
uk_bin_collection/uk_bin_collection/councils/BromsgroveDistrictCouncil.py,sha256=PUfxP8j5Oh9wFHkdjbrJzQli9UzMHZzwrZ2hkThrvhI,1781
|
50
50
|
uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py,sha256=NR1FoxLF0Ne61cJJmlVJhGfxjZ2sj60aLlOHBWWxtrM,2921
|
51
51
|
uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py,sha256=-Facq-ToQkcWUePpKBwq90LZUFxgUSydNL2sYaLX4yw,4473
|
@@ -131,7 +131,7 @@ uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py,sha256
|
|
131
131
|
uk_bin_collection/uk_bin_collection/councils/IslingtonCouncil.py,sha256=xavzL6ZIU9DG8Xro3vN0CEnYmNU31OGnOvnq78wgpQc,1258
|
132
132
|
uk_bin_collection/uk_bin_collection/councils/KingsLynnandWestNorfolkBC.py,sha256=Shj18R-7NW4ivqJJFVJOLmf-EeN6hXP2Of30oI-SeAQ,1932
|
133
133
|
uk_bin_collection/uk_bin_collection/councils/KingstonUponThamesCouncil.py,sha256=iZ7njIxccCGBhUUWWd9Azh7cxUAKaofebCm3lo-TuxA,3543
|
134
|
-
uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py,sha256=
|
134
|
+
uk_bin_collection/uk_bin_collection/councils/KirkleesCouncil.py,sha256=RnxwjkTfdMGZEdBwkUUxTVLAIEOKGnaHDkqWEUbk1Xk,4802
|
135
135
|
uk_bin_collection/uk_bin_collection/councils/KnowsleyMBCouncil.py,sha256=VdlWDESoHfr_X0r8-UMaLMUQhKZOa2BnpVPkX-1u3EQ,5605
|
136
136
|
uk_bin_collection/uk_bin_collection/councils/LancasterCityCouncil.py,sha256=FmHT6oyD4BwWuhxA80PHnGA7HPrLuyjP_54Cg8hT6k4,2537
|
137
137
|
uk_bin_collection/uk_bin_collection/councils/LeedsCityCouncil.py,sha256=iSZApZ9oSfSatQ6dAxmykSfti91jGuY6n2BwEkVMOiU,5144
|
@@ -183,7 +183,7 @@ uk_bin_collection/uk_bin_collection/councils/NorthTynesideCouncil.py,sha256=MHfc
|
|
183
183
|
uk_bin_collection/uk_bin_collection/councils/NorthWestLeicestershire.py,sha256=gJj0dyQc5QUefqusKGk2LLXfWbG5tlEXUOh8KAPh3RI,4584
|
184
184
|
uk_bin_collection/uk_bin_collection/councils/NorthYorkshire.py,sha256=2wTrr3VrZDp9-YtDPmWd649gXeWH4hbm2-Hw8Vau5Xs,1933
|
185
185
|
uk_bin_collection/uk_bin_collection/councils/NorthumberlandCouncil.py,sha256=KEFsxEvQ159fkuFo-fza67YCnnCZ5ElwE80zTrqDEWI,4990
|
186
|
-
uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py,sha256=
|
186
|
+
uk_bin_collection/uk_bin_collection/councils/NorwichCityCouncil.py,sha256=6w5-xKiyxTlJLaCkwUnAWjd5jnohonnNRr0sTlfACvk,2702
|
187
187
|
uk_bin_collection/uk_bin_collection/councils/NottinghamCityCouncil.py,sha256=panTCjnsBOQ98-TBO9xVZk_jcT_gjMhx3Gg5oWxBRLo,1254
|
188
188
|
uk_bin_collection/uk_bin_collection/councils/NuneatonBedworthBoroughCouncil.py,sha256=KqjQczn214ctkTsm-zimlDSDtgvcLQ23fte3kHiCEsg,19187
|
189
189
|
uk_bin_collection/uk_bin_collection/councils/OldhamCouncil.py,sha256=9dlesCxNoVXlmQaqZj7QFh00smnJbm1Gnjkr_Uvzurs,1771
|
@@ -203,7 +203,7 @@ uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py,sha256=rfhD66A9H
|
|
203
203
|
uk_bin_collection/uk_bin_collection/councils/RotherDistrictCouncil.py,sha256=-fdLvtik9ytfwXrrhwWdBxqQOMq2N1pvrIuvShhf8PU,3090
|
204
204
|
uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py,sha256=LtMPM8lj5bfReDR4buHEo-aRC_HTBIeo1nf8GE5-R80,1790
|
205
205
|
uk_bin_collection/uk_bin_collection/councils/RoyalBoroughofGreenwich.py,sha256=BZzLmWK_VONOmMpSrLrnKtJaOrrepm6aStfKGVcgf9Y,3487
|
206
|
-
uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py,sha256=
|
206
|
+
uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py,sha256=qwyi2K1p1erSawthC1QD1_oYghLfXFlXMdClszZTitU,4190
|
207
207
|
uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py,sha256=wMtiYRirT585vtsEOIyXHugk7aEj3pvyVWBaAePdqtE,4005
|
208
208
|
uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py,sha256=ZsGnXjoEaOS6U7fI0w7-uqxayAHdNVKsJi2fqIWEls8,3375
|
209
209
|
uk_bin_collection/uk_bin_collection/councils/SalfordCityCouncil.py,sha256=XUGemp2cdzsvkWjnv2m4YKTMcoKDUfIlVy3YucX-_o4,2601
|
@@ -238,7 +238,7 @@ uk_bin_collection/uk_bin_collection/councils/StokeOnTrentCityCouncil.py,sha256=K
|
|
238
238
|
uk_bin_collection/uk_bin_collection/councils/StratfordUponAvonCouncil.py,sha256=DMTAcXT_lay8Cl1hBbzf_LN7-GwTDGxT3Ug9QJkaF9Y,3936
|
239
239
|
uk_bin_collection/uk_bin_collection/councils/StroudDistrictCouncil.py,sha256=9bYWppi7ViLGHL4VEg--nFn28MLYJYbiEntull1uZxU,3561
|
240
240
|
uk_bin_collection/uk_bin_collection/councils/SunderlandCityCouncil.py,sha256=4DnKyyu56_AwuchD6_oL1dvpDStMvkkxQtYN79rUKOs,3825
|
241
|
-
uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py,sha256=
|
241
|
+
uk_bin_collection/uk_bin_collection/councils/SwaleBoroughCouncil.py,sha256=LNewGYrRHPforrsyZO7EaAy7Wx7VXi3I_tZ0SO9VcAA,4408
|
242
242
|
uk_bin_collection/uk_bin_collection/councils/SwanseaCouncil.py,sha256=nmVPoPhnFgVi--vczX2i4Sf3bqM5RWJuwfhioRUr5XE,2303
|
243
243
|
uk_bin_collection/uk_bin_collection/councils/SwindonBoroughCouncil.py,sha256=lSIykpkBjVwQSf3rrnrNuh7YRepgnkKQLbf1iErMuJs,1932
|
244
244
|
uk_bin_collection/uk_bin_collection/councils/TamesideMBCouncil.py,sha256=k2TAAZG7n2S1BWVyxbE_-4-lZuzhOimCNz4yimUCOGk,1995
|
@@ -258,7 +258,7 @@ uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py,sha256
|
|
258
258
|
uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py,sha256=Phgb_ECiUOOkqOx6OsfsTHMCW5VQfRmOC2zgYIQhuZA,5044
|
259
259
|
uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py,sha256=KBKGHcWAdPC_8-CfKnLOdP7Ww6RIvlxLIJGqBsq_77g,4208
|
260
260
|
uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py,sha256=vRfIU0Uloi1bgXqjOCpdb-EQ4oY-aismcANZRwOIFkc,4914
|
261
|
-
uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py,sha256=
|
261
|
+
uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py,sha256=wv-M3zZj0E6EIPoVB9AF_NCg_8XGM9uhqGa-F5yzoc4,2277
|
262
262
|
uk_bin_collection/uk_bin_collection/councils/WalthamForest.py,sha256=P7MMw0EhpRmDbbnHb25tY5_yvYuZUFwJ1br4TOv24sY,4997
|
263
263
|
uk_bin_collection/uk_bin_collection/councils/WandsworthCouncil.py,sha256=aQoJpC7YkhKewQyZlsv5m4__2IPoKRsOrPxjNH5xRNo,2594
|
264
264
|
uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py,sha256=AB9mrV1v4pKKhfsBS8MpjO8XXBifqojSk53J9Q74Guk,1583
|
@@ -267,9 +267,9 @@ uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py,sha256=zFk
|
|
267
267
|
uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py,sha256=tp9l7vdgSGRzNNG0pDfnNuFj4D2bpRJUJmAiTJ6bM0g,4662
|
268
268
|
uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py,sha256=SvSSaLkx7iJjzypAwKkaJwegXkSsIQtUOS2V605kz1A,3368
|
269
269
|
uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py,sha256=ikUft37dYNJghfe-_6Fskiq1JihqpLmLNj38QkKSUUA,2316
|
270
|
-
uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py,sha256=
|
270
|
+
uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py,sha256=pTNiyR4WoGdRnYPdMhv0T4ArVm5Blz82QBY1pSGh6eI,5513
|
271
271
|
uk_bin_collection/uk_bin_collection/councils/WestLancashireBoroughCouncil.py,sha256=iohI2NZSjsEnCpSGsCPZFC2EQZL5pyzcb9Ng_H0tMUE,4718
|
272
|
-
uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py,sha256=
|
272
|
+
uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py,sha256=ip7HWKl2ysHHwGbn4nZMQWfMSwq9eh-5DWO_Hjb7It0,4757
|
273
273
|
uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py,sha256=dq0jimtARvRkZiGbVFrXXZgY-BODtz3uYZ5UKn0bf64,4114
|
274
274
|
uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py,sha256=jbqV3460rn9D0yTBGWjpSe1IvWWcdGur5pzgj-hJcQ4,2513
|
275
275
|
uk_bin_collection/uk_bin_collection/councils/WestNorthamptonshireCouncil.py,sha256=Se3Cfn_6ADjhsUzEJI_JnGkVcIbXxSTferM4ZC6pZ0g,1166
|
@@ -291,8 +291,8 @@ uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py,sha256=I2kBYMlsD4bId
|
|
291
291
|
uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py,sha256=EQWRhZ2pEejlvm0fPyOTsOHKvUZmPnxEYO_OWRGKTjs,1158
|
292
292
|
uk_bin_collection/uk_bin_collection/create_new_council.py,sha256=m-IhmWmeWQlFsTZC4OxuFvtw5ZtB8EAJHxJTH4O59lQ,1536
|
293
293
|
uk_bin_collection/uk_bin_collection/get_bin_data.py,sha256=YvmHfZqanwrJ8ToGch34x-L-7yPe31nB_x77_Mgl_vo,4545
|
294
|
-
uk_bin_collection-0.
|
295
|
-
uk_bin_collection-0.
|
296
|
-
uk_bin_collection-0.
|
297
|
-
uk_bin_collection-0.
|
298
|
-
uk_bin_collection-0.
|
294
|
+
uk_bin_collection-0.126.1.dist-info/LICENSE,sha256=vABBUOzcrgfaTKpzeo-si9YVEun6juDkndqA8RKdKGs,1071
|
295
|
+
uk_bin_collection-0.126.1.dist-info/METADATA,sha256=fN8jdX3P00t50rKftM6CEXIrAps_JOUb9Mrb89TL9Rk,17745
|
296
|
+
uk_bin_collection-0.126.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
297
|
+
uk_bin_collection-0.126.1.dist-info/entry_points.txt,sha256=36WCSGMWSc916S3Hi1ZkazzDKHaJ6CD-4fCEFm5MIao,90
|
298
|
+
uk_bin_collection-0.126.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{uk_bin_collection-0.125.2.dist-info → uk_bin_collection-0.126.1.dist-info}/entry_points.txt
RENAMED
File without changes
|