uk_bin_collection 0.135.4__py3-none-any.whl → 0.136.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.
- uk_bin_collection/tests/input.json +22 -3
- uk_bin_collection/uk_bin_collection/councils/CambridgeCityCouncil.py +61 -0
- uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py +6 -1
- uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py +25 -32
- uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py +1 -0
- uk_bin_collection/uk_bin_collection/councils/SouthamptonCityCouncil.py +52 -0
- uk_bin_collection/uk_bin_collection/councils/SpelthorneBoroughCouncil.py +161 -0
- uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py +3 -1
- {uk_bin_collection-0.135.4.dist-info → uk_bin_collection-0.136.0.dist-info}/METADATA +1 -1
- {uk_bin_collection-0.135.4.dist-info → uk_bin_collection-0.136.0.dist-info}/RECORD +13 -10
- {uk_bin_collection-0.135.4.dist-info → uk_bin_collection-0.136.0.dist-info}/LICENSE +0 -0
- {uk_bin_collection-0.135.4.dist-info → uk_bin_collection-0.136.0.dist-info}/WHEEL +0 -0
- {uk_bin_collection-0.135.4.dist-info → uk_bin_collection-0.136.0.dist-info}/entry_points.txt +0 -0
@@ -162,11 +162,10 @@
|
|
162
162
|
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
163
163
|
},
|
164
164
|
"BexleyCouncil": {
|
165
|
-
"house_number": "1
|
165
|
+
"house_number": "1",
|
166
166
|
"postcode": "DA5 3AH",
|
167
167
|
"skip_get_url": true,
|
168
|
-
"
|
169
|
-
"url": "https://mybexley.bexley.gov.uk/service/When_is_my_collection_day",
|
168
|
+
"url": "https://waste.bexley.gov.uk/waste",
|
170
169
|
"web_driver": "http://selenium:4444",
|
171
170
|
"wiki_name": "Bexley Council",
|
172
171
|
"wiki_note": "In order to use this parser, you will need to sign up to [Bexley's @Home app](https://www.bexley.gov.uk/services/rubbish-and-recycling/bexley-home-recycling-app/about-app). Complete the setup by entering your email and setting your address with postcode and address line. Once you can see the calendar, you should be good to run the parser. Just pass the email you used in quotes in the UPRN parameter."
|
@@ -345,6 +344,12 @@
|
|
345
344
|
"wiki_name": "Calderdale Council",
|
346
345
|
"wiki_note": "Pass the UPRN and postcode. To get the UPRN, you can use [FindMyAddress](https://www.findmyaddress.co.uk/search)."
|
347
346
|
},
|
347
|
+
"CambridgeCityCouncil": {
|
348
|
+
"uprn": "200004159750",
|
349
|
+
"url": "https://www.cambridge.gov.uk/",
|
350
|
+
"wiki_name": "Cambridge City Council",
|
351
|
+
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
352
|
+
},
|
348
353
|
"CannockChaseDistrictCouncil": {
|
349
354
|
"postcode": "WS15 1JA",
|
350
355
|
"skip_get_url": true,
|
@@ -1647,6 +1652,13 @@
|
|
1647
1652
|
"wiki_name": "Somerset Council",
|
1648
1653
|
"wiki_note": "Provide your UPRN and postcode. Find your UPRN using [FindMyAddress](https://www.findmyaddress.co.uk/search)."
|
1649
1654
|
},
|
1655
|
+
"SouthamptonCityCouncil": {
|
1656
|
+
"skip_get_url": true,
|
1657
|
+
"uprn": "100060731893",
|
1658
|
+
"url": "https://www.southampton.gov.uk",
|
1659
|
+
"wiki_name": "Southampton City Council",
|
1660
|
+
"wiki_note": "Pass the UPRN. You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search)."
|
1661
|
+
},
|
1650
1662
|
"SouthAyrshireCouncil": {
|
1651
1663
|
"postcode": "KA19 7BN",
|
1652
1664
|
"skip_get_url": true,
|
@@ -1740,6 +1752,13 @@
|
|
1740
1752
|
"wiki_name": "Southwark Council",
|
1741
1753
|
"wiki_note": "Replace `XXXXXXXX` with your UPRN. Use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find your UPRN."
|
1742
1754
|
},
|
1755
|
+
"SpelthorneBoroughCouncil": {
|
1756
|
+
"house_number": "1",
|
1757
|
+
"postcode": "TW18 2PR",
|
1758
|
+
"skip_get_url": true,
|
1759
|
+
"url": "https://www.spelthorne.gov.uk",
|
1760
|
+
"wiki_name": "Spelthorne Borough Council"
|
1761
|
+
},
|
1743
1762
|
"StAlbansCityAndDistrictCouncil": {
|
1744
1763
|
"skip_get_url": true,
|
1745
1764
|
"uprn": "100081153583",
|
@@ -0,0 +1,61 @@
|
|
1
|
+
import time
|
2
|
+
|
3
|
+
import requests
|
4
|
+
|
5
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
6
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
7
|
+
|
8
|
+
|
9
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
10
|
+
class CouncilClass(AbstractGetBinDataClass):
|
11
|
+
"""
|
12
|
+
Concrete classes have to implement all abstract operations of the
|
13
|
+
base class. They can also override some operations with a default
|
14
|
+
implementation.
|
15
|
+
"""
|
16
|
+
|
17
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
18
|
+
|
19
|
+
user_uprn = kwargs.get("uprn")
|
20
|
+
check_uprn(user_uprn)
|
21
|
+
bindata = {"bins": []}
|
22
|
+
|
23
|
+
URI = f"https://servicelayer3c.azure-api.net/wastecalendar/collection/search/{user_uprn}/?authority=CCC/?numberOfCollections=255"
|
24
|
+
|
25
|
+
# Make the GET request
|
26
|
+
response = requests.get(URI)
|
27
|
+
|
28
|
+
# Parse the JSON response
|
29
|
+
bin_collection = response.json()
|
30
|
+
|
31
|
+
# Loop through each collection in bin_collection
|
32
|
+
for collection in bin_collection["collections"]:
|
33
|
+
bin_types = collection["roundTypes"]
|
34
|
+
collection_date = collection["date"]
|
35
|
+
|
36
|
+
# Loop through the dates for each collection type
|
37
|
+
for bin_type in bin_types:
|
38
|
+
# print(f"Bin Type: {bin_type}")
|
39
|
+
# print(f"Collection Date: {collection_date}")
|
40
|
+
|
41
|
+
if bin_type == "ORGANIC":
|
42
|
+
bin_type = "Green Bin"
|
43
|
+
if bin_type == "RECYCLE":
|
44
|
+
bin_type = "Blue Bin"
|
45
|
+
if bin_type == "DOMESTIC":
|
46
|
+
bin_type = "Black Bin"
|
47
|
+
|
48
|
+
dict_data = {
|
49
|
+
"type": bin_type,
|
50
|
+
"collectionDate": datetime.strptime(
|
51
|
+
collection_date,
|
52
|
+
"%Y-%m-%dT%H:%M:%SZ",
|
53
|
+
).strftime("%d/%m/%Y"),
|
54
|
+
}
|
55
|
+
bindata["bins"].append(dict_data)
|
56
|
+
|
57
|
+
bindata["bins"].sort(
|
58
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
|
59
|
+
)
|
60
|
+
|
61
|
+
return bindata
|
@@ -22,12 +22,17 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
22
22
|
|
23
23
|
data = {"uprn": user_uprn, "usrn": "1"}
|
24
24
|
|
25
|
+
headers = {
|
26
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
|
27
|
+
"Accept": "application/json",
|
28
|
+
}
|
29
|
+
|
25
30
|
URI = (
|
26
31
|
"https://zbr7r13ke2.execute-api.eu-west-2.amazonaws.com/Beta/get-bin-dates"
|
27
32
|
)
|
28
33
|
|
29
34
|
# Make the GET request
|
30
|
-
response = requests.post(URI, json=data)
|
35
|
+
response = requests.post(URI, json=data, headers=headers)
|
31
36
|
response.raise_for_status()
|
32
37
|
|
33
38
|
# Parse the JSON response
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from bs4 import BeautifulSoup
|
2
|
+
|
2
3
|
from uk_bin_collection.uk_bin_collection.common import *
|
3
4
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
4
5
|
|
@@ -25,7 +26,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
25
26
|
uprn = kwargs.get("uprn")
|
26
27
|
check_uprn(uprn)
|
27
28
|
|
28
|
-
post_url = "https://apps.castlepoint.gov.uk/cpapps/index.cfm?fa=
|
29
|
+
post_url = "https://apps.castlepoint.gov.uk/cpapps/index.cfm?fa=myStreet.displayDetails"
|
29
30
|
post_header_str = (
|
30
31
|
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,"
|
31
32
|
"image/apng,"
|
@@ -41,7 +42,7 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
41
42
|
)
|
42
43
|
|
43
44
|
post_headers = parse_header(post_header_str)
|
44
|
-
form_data = {"
|
45
|
+
form_data = {"USRN": uprn}
|
45
46
|
post_response = requests.post(
|
46
47
|
post_url, headers=post_headers, data=form_data, verify=False
|
47
48
|
)
|
@@ -53,36 +54,28 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
53
54
|
data = {"bins": []}
|
54
55
|
collection_tuple = []
|
55
56
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
).
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
)
|
79
|
-
collection_tuple.append(("Pink collection", collection_date))
|
80
|
-
|
81
|
-
for day in black_days:
|
82
|
-
collection_date = datetime(
|
83
|
-
year=int(year), month=int(month), day=int(day)
|
84
|
-
)
|
85
|
-
collection_tuple.append(("Normal collection", collection_date))
|
57
|
+
calendar = soup.find("table", class_="calendar")
|
58
|
+
month = datetime.strptime(
|
59
|
+
soup.find("div", class_="calMonthCurrent").get_text(), "[%b]"
|
60
|
+
).strftime("%m")
|
61
|
+
year = datetime.strptime(
|
62
|
+
soup.find("h1").get_text(), "About my Street - %B %Y"
|
63
|
+
).strftime("%Y")
|
64
|
+
|
65
|
+
pink_days = [
|
66
|
+
day.get_text().strip() for day in calendar.find_all("td", class_="pink")
|
67
|
+
]
|
68
|
+
black_days = [
|
69
|
+
day.get_text().strip() for day in calendar.find_all("td", class_="normal")
|
70
|
+
]
|
71
|
+
|
72
|
+
for day in pink_days:
|
73
|
+
collection_date = datetime(year=int(year), month=int(month), day=int(day))
|
74
|
+
collection_tuple.append(("Pink collection", collection_date))
|
75
|
+
|
76
|
+
for day in black_days:
|
77
|
+
collection_date = datetime(year=int(year), month=int(month), day=int(day))
|
78
|
+
collection_tuple.append(("Normal collection", collection_date))
|
86
79
|
|
87
80
|
ordered_data = sorted(collection_tuple, key=lambda x: x[1])
|
88
81
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
import time
|
2
|
+
|
3
|
+
import requests
|
4
|
+
|
5
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
6
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
7
|
+
|
8
|
+
|
9
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
10
|
+
class CouncilClass(AbstractGetBinDataClass):
|
11
|
+
"""
|
12
|
+
Concrete classes have to implement all abstract operations of the
|
13
|
+
base class. They can also override some operations with a default
|
14
|
+
implementation.
|
15
|
+
"""
|
16
|
+
|
17
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
18
|
+
|
19
|
+
user_uprn = kwargs.get("uprn")
|
20
|
+
check_uprn(user_uprn)
|
21
|
+
bindata = {"bins": []}
|
22
|
+
|
23
|
+
REGEX = r"(Glass|Recycling|General Waste|Garden Waste).*?([0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4})"
|
24
|
+
|
25
|
+
s = requests.Session()
|
26
|
+
r = s.get(
|
27
|
+
f"https://www.southampton.gov.uk/whereilive/waste-calendar?UPRN={user_uprn}"
|
28
|
+
)
|
29
|
+
r.raise_for_status()
|
30
|
+
|
31
|
+
# Limit search scope to avoid duplicates
|
32
|
+
calendar_view_only = re.search(
|
33
|
+
r"#calendar1.*?listView", r.text, flags=re.DOTALL
|
34
|
+
)[0]
|
35
|
+
|
36
|
+
results = re.findall(REGEX, calendar_view_only)
|
37
|
+
|
38
|
+
for item in results:
|
39
|
+
|
40
|
+
dict_data = {
|
41
|
+
"type": item[0],
|
42
|
+
"collectionDate": datetime.strptime(item[1], "%m/%d/%Y").strftime(
|
43
|
+
"%d/%m/%Y"
|
44
|
+
),
|
45
|
+
}
|
46
|
+
bindata["bins"].append(dict_data)
|
47
|
+
|
48
|
+
bindata["bins"].sort(
|
49
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
|
50
|
+
)
|
51
|
+
|
52
|
+
return bindata
|
@@ -0,0 +1,161 @@
|
|
1
|
+
import time
|
2
|
+
|
3
|
+
import requests
|
4
|
+
from dateutil.relativedelta import relativedelta
|
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_postcode = kwargs.get("postcode")
|
21
|
+
check_postcode(user_postcode)
|
22
|
+
user_paon = kwargs.get("paon")
|
23
|
+
check_paon(user_paon)
|
24
|
+
bindata = {"bins": []}
|
25
|
+
|
26
|
+
SESSION_URL = "https://spelthorne-self.achieveservice.com/authapi/isauthenticated?uri=https%253A%252F%252Fspelthorne-self.achieveservice.com%252Fen%252FAchieveForms%252F%253Fmode%253Dfill%2526consentMessage%253Dyes%2526form_uri%253Dsandbox-publish%253A%252F%252FAF-Process-8d0df9d6-6bd0-487e-bbfe-38815dcc780d%252FAF-Stage-bce7fc80-bcd7-45f1-bf55-a76d38dbebba%252Fdefinition.json%2526process%253D1%2526process_uri%253Dsandbox-processes%253A%252F%252FAF-Process-8d0df9d6-6bd0-487e-bbfe-38815dcc780d%2526process_id%253DAF-Process-8d0df9d6-6bd0-487e-bbfe-38815dcc780d%2526noLoginPrompt%253D1&hostname=spelthorne-self.achieveservice.com&withCredentials=true"
|
27
|
+
|
28
|
+
API_URL = "https://spelthorne-self.achieveservice.com/apibroker/runLookup"
|
29
|
+
|
30
|
+
headers = {
|
31
|
+
"Content-Type": "application/json",
|
32
|
+
"Accept": "application/json",
|
33
|
+
"User-Agent": "Mozilla/5.0",
|
34
|
+
"X-Requested-With": "XMLHttpRequest",
|
35
|
+
"Referer": "https://spelthorne-self.achieveservice.com/fillform/?iframe_id=fillform-frame-1&db_id=",
|
36
|
+
}
|
37
|
+
s = requests.session()
|
38
|
+
r = s.get(SESSION_URL)
|
39
|
+
r.raise_for_status()
|
40
|
+
session_data = r.json()
|
41
|
+
sid = session_data["auth-session"]
|
42
|
+
data = {
|
43
|
+
"formValues": {
|
44
|
+
"Property details": {
|
45
|
+
"postalcode": {"value": user_postcode},
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
params = {
|
50
|
+
"id": "59b4477d6d84e",
|
51
|
+
"repeat_against": "",
|
52
|
+
"noRetry": "false",
|
53
|
+
"getOnlyTokens": "undefined",
|
54
|
+
"log_id": "",
|
55
|
+
"app_name": "AF-Renderer::Self",
|
56
|
+
# unix_timestamp
|
57
|
+
"_": str(int(time.time() * 1000)),
|
58
|
+
"sid": sid,
|
59
|
+
}
|
60
|
+
|
61
|
+
r = s.post(API_URL, json=data, headers=headers, params=params)
|
62
|
+
r.raise_for_status()
|
63
|
+
|
64
|
+
data = r.json()
|
65
|
+
|
66
|
+
rows_data = data["integration"]["transformed"]["rows_data"]
|
67
|
+
|
68
|
+
for key, value in rows_data.items():
|
69
|
+
|
70
|
+
address = value.get("display")
|
71
|
+
|
72
|
+
if address.startswith(user_paon):
|
73
|
+
user_uprn = value.get("value")
|
74
|
+
break
|
75
|
+
|
76
|
+
params = {
|
77
|
+
"id": "5f97e6e09fedd",
|
78
|
+
"repeat_against": "",
|
79
|
+
"noRetry": "true",
|
80
|
+
"getOnlyTokens": "undefined",
|
81
|
+
"log_id": "",
|
82
|
+
"app_name": "AF-Renderer::Self",
|
83
|
+
# unix_timestamp
|
84
|
+
"_": str(int(time.time() * 1000)),
|
85
|
+
"sid": sid,
|
86
|
+
}
|
87
|
+
|
88
|
+
r = s.post(API_URL, headers=headers, params=params)
|
89
|
+
r.raise_for_status()
|
90
|
+
|
91
|
+
data = r.json()
|
92
|
+
|
93
|
+
rows_data = data["integration"]["transformed"]["rows_data"]["0"]
|
94
|
+
|
95
|
+
token = rows_data.get("tokenString")
|
96
|
+
|
97
|
+
start_date = datetime.today() + relativedelta(weeks=2)
|
98
|
+
last2weeks = datetime.today() - relativedelta(weeks=2)
|
99
|
+
|
100
|
+
# Format as YYYY-MM-DD
|
101
|
+
formatted_date = start_date.strftime("%Y-%m-%d")
|
102
|
+
last2weeks = last2weeks.strftime("%Y-%m-%d")
|
103
|
+
|
104
|
+
data = {
|
105
|
+
"formValues": {
|
106
|
+
"Property details": {
|
107
|
+
"uprn1": {"value": user_uprn},
|
108
|
+
"endDate": {"value": formatted_date},
|
109
|
+
"last2Weeks": {"value": last2weeks},
|
110
|
+
"token": {"value": token},
|
111
|
+
}
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
params = {
|
116
|
+
"id": "66042a164c9a5",
|
117
|
+
"repeat_against": "",
|
118
|
+
"noRetry": "true",
|
119
|
+
"getOnlyTokens": "undefined",
|
120
|
+
"log_id": "",
|
121
|
+
"app_name": "AF-Renderer::Self",
|
122
|
+
# unix_timestamp
|
123
|
+
"_": str(int(time.time() * 1000)),
|
124
|
+
"sid": sid,
|
125
|
+
}
|
126
|
+
|
127
|
+
r = s.post(API_URL, json=data, headers=headers, params=params)
|
128
|
+
r.raise_for_status()
|
129
|
+
|
130
|
+
data = r.json()
|
131
|
+
|
132
|
+
rows_data = data["integration"]["transformed"]["rows_data"]["0"]
|
133
|
+
|
134
|
+
if not isinstance(rows_data, dict):
|
135
|
+
raise ValueError("Invalid data returned from API")
|
136
|
+
|
137
|
+
use_new = any(k.endswith("New") and v for k, v in rows_data.items())
|
138
|
+
next_date_key = "NextDateNew" if use_new else "NextDateOld"
|
139
|
+
|
140
|
+
for key, value in rows_data.items():
|
141
|
+
if not (key.endswith("NextCollection") or key.endswith(next_date_key)):
|
142
|
+
continue
|
143
|
+
|
144
|
+
bin_type = key.split("NextCollection")[0]
|
145
|
+
if bin_type == "Gw":
|
146
|
+
bin_type = ["Garden Waste"]
|
147
|
+
if bin_type == "Rec":
|
148
|
+
bin_type = ["Recycling Bin", "Food Waste Bin"]
|
149
|
+
if bin_type == "Ref":
|
150
|
+
bin_type = ["Rubbish Bin", "Food Waste Bin"]
|
151
|
+
|
152
|
+
try:
|
153
|
+
date = datetime.strptime(value, "%Y-%m-%d").strftime("%d/%m/%Y")
|
154
|
+
except ValueError:
|
155
|
+
continue
|
156
|
+
|
157
|
+
for bin in bin_type:
|
158
|
+
dict_data = {"type": bin, "collectionDate": date}
|
159
|
+
bindata["bins"].append(dict_data)
|
160
|
+
|
161
|
+
return bindata
|
@@ -1,7 +1,9 @@
|
|
1
|
+
from datetime import datetime
|
2
|
+
|
1
3
|
from bs4 import BeautifulSoup
|
4
|
+
|
2
5
|
from uk_bin_collection.uk_bin_collection.common import *
|
3
6
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
4
|
-
from datetime import datetime
|
5
7
|
|
6
8
|
|
7
9
|
class CouncilClass(AbstractGetBinDataClass):
|
@@ -3,7 +3,7 @@ uk_bin_collection/tests/check_selenium_url_in_input.json.py,sha256=Iecdja0I3XIiY
|
|
3
3
|
uk_bin_collection/tests/council_feature_input_parity.py,sha256=DO6Mk4ImYgM5ZCZ-cutwz5RoYYWZRLYx2tr6zIs_9Rc,3843
|
4
4
|
uk_bin_collection/tests/features/environment.py,sha256=VQZjJdJI_kZn08M0j5cUgvKT4k3iTw8icJge1DGOkoA,127
|
5
5
|
uk_bin_collection/tests/features/validate_council_outputs.feature,sha256=SJK-Vc737hrf03tssxxbeg_JIvAH-ddB8f6gU1LTbuQ,251
|
6
|
-
uk_bin_collection/tests/input.json,sha256=
|
6
|
+
uk_bin_collection/tests/input.json,sha256=69WL-6I_ph_YEnTj_EUbV5KYJI6S1x4_KwcGN3foYjQ,116985
|
7
7
|
uk_bin_collection/tests/output.schema,sha256=ZwKQBwYyTDEM4G2hJwfLUVM-5v1vKRvRK9W9SS1sd18,1086
|
8
8
|
uk_bin_collection/tests/step_defs/step_helpers/file_handler.py,sha256=Ygzi4V0S1MIHqbdstUlIqtRIwnynvhu4UtpweJ6-5N8,1474
|
9
9
|
uk_bin_collection/tests/step_defs/test_validate_council.py,sha256=VZ0a81sioJULD7syAYHjvK_-nT_Rd36tUyzPetSA0gk,3475
|
@@ -58,11 +58,12 @@ uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py,sha256=_E
|
|
58
58
|
uk_bin_collection/uk_bin_collection/councils/BurnleyBoroughCouncil.py,sha256=GJf1OPvUVj3vqsR3KjG0DFHZrSBu4ogIz_MJeVV8tNA,3192
|
59
59
|
uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py,sha256=H7wAxO1nfxkewVoRRolumq8bBJG04siE3jieFH3RGpQ,2632
|
60
60
|
uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py,sha256=OJZcHYlvZDzmBpjjPPm3J8CRK9Twc49vRj7O9c5fyQ4,4971
|
61
|
+
uk_bin_collection/uk_bin_collection/councils/CambridgeCityCouncil.py,sha256=CxmFCgaWN_kzQAo7uiE2tzMX8QGzbJl5FCUx9cvb2Jk,2048
|
61
62
|
uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py,sha256=ZamevXN8_Q8mRZOTESWtkb8jVyDXkTczcmhXMAVVSkM,2276
|
62
|
-
uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py,sha256=
|
63
|
+
uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py,sha256=Uz75GqCTFXv489-lZHN3a2r0G7A-PEKq-hWmcoXGuw4,1932
|
63
64
|
uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py,sha256=_k3sT_WR-gnjjt3tHQ-L2-keP9sdBV0ZeW7gHDzFPYo,7208
|
64
65
|
uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py,sha256=viiZprMos_qcD44dki5_RRVZgGE4cH4zSHAzYRKrjHw,1864
|
65
|
-
uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py,sha256=
|
66
|
+
uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py,sha256=AjxuIqKxx0tYHMaTBITXTcnN2L-Zrx78uwUkqTjI0xU,3599
|
66
67
|
uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py,sha256=tXfzMetN6wxahuGGRp2mIyCCDSL4F2aG61HhUxw6COQ,2172
|
67
68
|
uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py,sha256=EB88D0MNJwuDZ2GX1ENc5maGYx17mnHTCtNl6s-v11E,5090
|
68
69
|
uk_bin_collection/uk_bin_collection/councils/CheltenhamBoroughCouncil.py,sha256=fo9n2AuD8a174h3YMa9awa3S4YO2XU1KaInQ4ULz6s4,13686
|
@@ -138,7 +139,7 @@ uk_bin_collection/uk_bin_collection/councils/HerefordshireCouncil.py,sha256=JpQh
|
|
138
139
|
uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py,sha256=-ThSG6NIJP_wf2GmGL7SAvxbOujdhanZ8ECP4VSQCBs,5415
|
139
140
|
uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py,sha256=x7dfy8mdt2iGl8qJxHb-uBh4u0knmi9MJ6irOJw9WYA,4805
|
140
141
|
uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py,sha256=GNxDU65QuZHV5va2IrKtcJ6TQoDdwmV03JvkVqOauP4,3291
|
141
|
-
uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py,sha256=
|
142
|
+
uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py,sha256=51vXTKrstfJhb7cLCcrsvA9qKCsptyNMZvy7ML9DasM,2344
|
142
143
|
uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py,sha256=LXhJ47rujx7k3naz0tFiTT1l5k6gAYcVdekJN1t_HLY,4564
|
143
144
|
uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py,sha256=UHcesBoctFVcXDYuwfag43KbcJcopkEDzJ-54NxtK0Q,1851
|
144
145
|
uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py,sha256=dGyhhG6HRjQ2SPeiRwUPTGlk9dPIslagV2k0GjEOn1s,1587
|
@@ -248,7 +249,9 @@ uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py,sha256=u
|
|
248
249
|
uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py,sha256=OdexbeiI5WsCfjlsnHjAce8oGF5fW-n7q2XOuxcpHzw,3604
|
249
250
|
uk_bin_collection/uk_bin_collection/councils/SouthStaffordshireDistrictCouncil.py,sha256=ACQMHWyamnj1ag3gNF-8Jhp-DKUok1GhFdnzH4nCzwU,3201
|
250
251
|
uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py,sha256=dxXGrJfg_fn2IPTBgq6Duwy0WY8GYLafMuisaCjOnbs,3426
|
252
|
+
uk_bin_collection/uk_bin_collection/councils/SouthamptonCityCouncil.py,sha256=exNoI-Vun_C5FowCYhZ_600MBUe_OPR7MdGZEMNLL0I,1542
|
251
253
|
uk_bin_collection/uk_bin_collection/councils/SouthwarkCouncil.py,sha256=Z6JIbUt3yr4oG60n1At4AjPIGrs7Qzn_sDNY-TsS62E,4882
|
254
|
+
uk_bin_collection/uk_bin_collection/councils/SpelthorneBoroughCouncil.py,sha256=iamG0wxIyYprttJPVc0jdbOoHavc1AmRpMhyc02MUrE,5703
|
252
255
|
uk_bin_collection/uk_bin_collection/councils/StAlbansCityAndDistrictCouncil.py,sha256=mPZz6Za6kTSkrfHnj0OfwtnpRYR1dKvxbuFEKnWsiL8,1451
|
253
256
|
uk_bin_collection/uk_bin_collection/councils/StHelensBC.py,sha256=X9dvnQTNn7QUO8gv1A587e1aDI92TWN4iNLATTn3H3w,4777
|
254
257
|
uk_bin_collection/uk_bin_collection/councils/StaffordBoroughCouncil.py,sha256=9Qj4HJI7Dbiqb2mVSG2UtkBe27Y7wvQ5SYFTwGzJ5g0,2292
|
@@ -280,7 +283,7 @@ uk_bin_collection/uk_bin_collection/councils/TunbridgeWellsCouncil.py,sha256=s8N
|
|
280
283
|
uk_bin_collection/uk_bin_collection/councils/UttlesfordDistrictCouncil.py,sha256=GSELWbSn5jtznv6FSLIMxK6CyQ27MW9FoY_m5jhTEBA,4175
|
281
284
|
uk_bin_collection/uk_bin_collection/councils/ValeofGlamorganCouncil.py,sha256=dz3zDJsJKYYqUB-Gxf6twvP6kG_wyENaszxXxK4iJn0,5089
|
282
285
|
uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py,sha256=fyskrQ4-osGOeCZuB_8m2TpW8iwHr7lpl52nrR06Xpo,4441
|
283
|
-
uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py,sha256=
|
286
|
+
uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py,sha256=mdAXKcoSSF-xnXS8boesFftS8RiKyuR76ITHQ9Q5DgM,4916
|
284
287
|
uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py,sha256=wv-M3zZj0E6EIPoVB9AF_NCg_8XGM9uhqGa-F5yzoc4,2277
|
285
288
|
uk_bin_collection/uk_bin_collection/councils/WalthamForest.py,sha256=_0ucZrZx-x49wxV7DGZsj4zcKv25HT-o2PkPabw8r68,4997
|
286
289
|
uk_bin_collection/uk_bin_collection/councils/WandsworthCouncil.py,sha256=aQoJpC7YkhKewQyZlsv5m4__2IPoKRsOrPxjNH5xRNo,2594
|
@@ -315,8 +318,8 @@ uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py,sha256=I2kBYMlsD4bId
|
|
315
318
|
uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py,sha256=EQWRhZ2pEejlvm0fPyOTsOHKvUZmPnxEYO_OWRGKTjs,1158
|
316
319
|
uk_bin_collection/uk_bin_collection/create_new_council.py,sha256=m-IhmWmeWQlFsTZC4OxuFvtw5ZtB8EAJHxJTH4O59lQ,1536
|
317
320
|
uk_bin_collection/uk_bin_collection/get_bin_data.py,sha256=YvmHfZqanwrJ8ToGch34x-L-7yPe31nB_x77_Mgl_vo,4545
|
318
|
-
uk_bin_collection-0.
|
319
|
-
uk_bin_collection-0.
|
320
|
-
uk_bin_collection-0.
|
321
|
-
uk_bin_collection-0.
|
322
|
-
uk_bin_collection-0.
|
321
|
+
uk_bin_collection-0.136.0.dist-info/LICENSE,sha256=vABBUOzcrgfaTKpzeo-si9YVEun6juDkndqA8RKdKGs,1071
|
322
|
+
uk_bin_collection-0.136.0.dist-info/METADATA,sha256=Wdp-bbINnFzO7xjPeuqCosmBRSOMFn_KaE5pYz-TOvc,19741
|
323
|
+
uk_bin_collection-0.136.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
324
|
+
uk_bin_collection-0.136.0.dist-info/entry_points.txt,sha256=36WCSGMWSc916S3Hi1ZkazzDKHaJ6CD-4fCEFm5MIao,90
|
325
|
+
uk_bin_collection-0.136.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{uk_bin_collection-0.135.4.dist-info → uk_bin_collection-0.136.0.dist-info}/entry_points.txt
RENAMED
File without changes
|