uk_bin_collection 0.121.1__py3-none-any.whl → 0.123.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 +13 -1
- uk_bin_collection/tests/test_common_functions.py +26 -0
- uk_bin_collection/uk_bin_collection/common.py +30 -6
- uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py +8 -5
- uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py +10 -2
- uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py +3 -3
- uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py +17 -0
- uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py +10 -5
- uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py +71 -0
- uk_bin_collection/uk_bin_collection/councils/MonmouthshireCountyCouncil.py +70 -0
- uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py +29 -10
- {uk_bin_collection-0.121.1.dist-info → uk_bin_collection-0.123.0.dist-info}/METADATA +1 -1
- {uk_bin_collection-0.121.1.dist-info → uk_bin_collection-0.123.0.dist-info}/RECORD +16 -14
- {uk_bin_collection-0.121.1.dist-info → uk_bin_collection-0.123.0.dist-info}/LICENSE +0 -0
- {uk_bin_collection-0.121.1.dist-info → uk_bin_collection-0.123.0.dist-info}/WHEEL +0 -0
- {uk_bin_collection-0.121.1.dist-info → uk_bin_collection-0.123.0.dist-info}/entry_points.txt +0 -0
@@ -871,6 +871,12 @@
|
|
871
871
|
"wiki_name": "High Peak Council",
|
872
872
|
"wiki_note": "Pass the name of the street with the house number parameter, wrapped in double quotes. This parser requires a Selenium webdriver."
|
873
873
|
},
|
874
|
+
"HinckleyandBosworthBoroughCouncil": {
|
875
|
+
"url": "https://www.hinckley-bosworth.gov.uk",
|
876
|
+
"uprn": "100030533512",
|
877
|
+
"wiki_name": "Hinckley and Bosworth Borough Council",
|
878
|
+
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
879
|
+
},
|
874
880
|
"HounslowCouncil": {
|
875
881
|
"house_number": "17A LAMPTON PARK ROAD, HOUNSLOW",
|
876
882
|
"postcode": "TW3 4HS",
|
@@ -1072,7 +1078,7 @@
|
|
1072
1078
|
"wiki_note": "Pass the UPRN. You can find it using [FindMyAddress](https://www.findmyaddress.co.uk/search)."
|
1073
1079
|
},
|
1074
1080
|
"MertonCouncil": {
|
1075
|
-
"url": "https://myneighbourhood.merton.gov.uk/wasteservices/WasteServices.aspx?ID=
|
1081
|
+
"url": "https://myneighbourhood.merton.gov.uk/wasteservices/WasteServices.aspx?ID=25936129",
|
1076
1082
|
"wiki_command_url_override": "https://myneighbourhood.merton.gov.uk/Wasteservices/WasteServices.aspx?ID=XXXXXXXX",
|
1077
1083
|
"wiki_name": "Merton Council",
|
1078
1084
|
"wiki_note": "Follow the instructions [here](https://myneighbourhood.merton.gov.uk/Wasteservices/WasteServicesSearch.aspx) until you get the \"Your recycling and rubbish collection days\" page, then copy the URL and replace the URL in the command."
|
@@ -1132,6 +1138,12 @@
|
|
1132
1138
|
"wiki_name": "Mole Valley District Council",
|
1133
1139
|
"wiki_note": "UPRN can only be parsed with a valid postcode."
|
1134
1140
|
},
|
1141
|
+
"MonmouthshireCountyCouncil": {
|
1142
|
+
"url": "https://maps.monmouthshire.gov.uk",
|
1143
|
+
"uprn": "100100266220",
|
1144
|
+
"wiki_name": "Monmouthshire County Council",
|
1145
|
+
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find the UPRN."
|
1146
|
+
},
|
1135
1147
|
"MorayCouncil": {
|
1136
1148
|
"uprn": "28841",
|
1137
1149
|
"url": "https://bindayfinder.moray.gov.uk/",
|
@@ -134,6 +134,32 @@ def test_is_holiday_different_region(mock_holidays_func):
|
|
134
134
|
assert is_holiday(datetime(2023, 11, 30), Region.ENG) is False
|
135
135
|
|
136
136
|
|
137
|
+
def test_is_weekend_when_true():
|
138
|
+
weekend_date = datetime(2024, 12, 7)
|
139
|
+
assert is_weekend(weekend_date) is True
|
140
|
+
|
141
|
+
|
142
|
+
def test_is_weekend_when_false():
|
143
|
+
weekend_date = datetime(2024, 12, 6)
|
144
|
+
assert is_weekend(weekend_date) is False
|
145
|
+
|
146
|
+
|
147
|
+
def test_is_working_day_when_true():
|
148
|
+
working_day_date = datetime(2024, 12, 6)
|
149
|
+
assert is_working_day(working_day_date) is True
|
150
|
+
|
151
|
+
|
152
|
+
def test_is_working_day_when_false():
|
153
|
+
working_day_date = datetime(2024, 12, 7)
|
154
|
+
assert is_working_day(working_day_date) is False
|
155
|
+
|
156
|
+
|
157
|
+
def test_get_next_working_day():
|
158
|
+
sample_date = datetime(2024, 12, 7)
|
159
|
+
next_working_day = get_next_working_day(sample_date)
|
160
|
+
assert next_working_day == datetime(2024, 12, 9)
|
161
|
+
|
162
|
+
|
137
163
|
def test_remove_alpha_characters():
|
138
164
|
test_string = "12345abc12345"
|
139
165
|
result = remove_alpha_characters(test_string)
|
@@ -10,7 +10,6 @@ import pandas as pd
|
|
10
10
|
import requests
|
11
11
|
from dateutil.parser import parse
|
12
12
|
from selenium import webdriver
|
13
|
-
from selenium.common.exceptions import WebDriverException
|
14
13
|
from selenium.webdriver.chrome.service import Service as ChromeService
|
15
14
|
from urllib3.exceptions import MaxRetryError
|
16
15
|
from webdriver_manager.chrome import ChromeDriverManager
|
@@ -162,6 +161,31 @@ def is_holiday(date_to_check: datetime, region: Region = Region.ENG) -> bool:
|
|
162
161
|
return False
|
163
162
|
|
164
163
|
|
164
|
+
def is_weekend(date_to_check: datetime) -> bool:
|
165
|
+
"""
|
166
|
+
Checks if a given date is a weekend
|
167
|
+
:param date_to_check: Date to check if it falls on a weekend
|
168
|
+
:return: Bool - true if a weekend day, false if not
|
169
|
+
"""
|
170
|
+
return True if date_to_check.date().weekday() >= 5 else False
|
171
|
+
|
172
|
+
|
173
|
+
def is_working_day(date_to_check: datetime, region: Region = Region.ENG) -> bool:
|
174
|
+
"""
|
175
|
+
Wraps is_holiday() and is_weekend() into one function
|
176
|
+
:param date_to_check: Date to check if holiday
|
177
|
+
:param region: The UK nation to check. Defaults to ENG.
|
178
|
+
:return: Bool - true if a working day (non-holiday, Mon-Fri).
|
179
|
+
"""
|
180
|
+
return False if is_holiday(date_to_check, region) or is_weekend(date_to_check) else True
|
181
|
+
|
182
|
+
|
183
|
+
def get_next_working_day(date: datetime, region: Region = Region.ENG) -> datetime:
|
184
|
+
while not is_working_day(date, region):
|
185
|
+
date += timedelta(days=1)
|
186
|
+
return date
|
187
|
+
|
188
|
+
|
165
189
|
def get_weekday_dates_in_period(start: datetime, day_of_week: int, amount=8) -> list:
|
166
190
|
"""
|
167
191
|
Returns a list of dates of a given weekday from a start date for the given amount of weeks
|
@@ -208,7 +232,7 @@ def get_next_occurrence_from_day_month(date: datetime) -> datetime:
|
|
208
232
|
|
209
233
|
# Check if the target date has already occurred this year
|
210
234
|
if (target_month < current_month) or (
|
211
|
-
|
235
|
+
target_month == current_month and target_day < current_day
|
212
236
|
):
|
213
237
|
date = pd.to_datetime(date) + pd.DateOffset(years=1)
|
214
238
|
|
@@ -291,10 +315,10 @@ def contains_date(string, fuzzy=False) -> bool:
|
|
291
315
|
|
292
316
|
|
293
317
|
def create_webdriver(
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
318
|
+
web_driver: str = None,
|
319
|
+
headless: bool = True,
|
320
|
+
user_agent: str = None,
|
321
|
+
session_name: str = None,
|
298
322
|
) -> webdriver.Chrome:
|
299
323
|
"""
|
300
324
|
Create and return a Chrome WebDriver configured for optional headless operation.
|
@@ -31,11 +31,14 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
31
31
|
for container in soup.find_all(class_="box-item"):
|
32
32
|
|
33
33
|
# Get the next collection dates from the <p> tag containing <strong>
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
try:
|
35
|
+
dates_tag = (
|
36
|
+
container.find("p", string=lambda text: "Next" in text)
|
37
|
+
.find_next("p")
|
38
|
+
.find("strong")
|
39
|
+
)
|
40
|
+
except:
|
41
|
+
continue
|
39
42
|
collection_dates = (
|
40
43
|
dates_tag.text.strip().split(", and then ")
|
41
44
|
if dates_tag
|
@@ -67,11 +67,19 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
67
67
|
for collection in bin_collections:
|
68
68
|
if collection is not None:
|
69
69
|
bin_type = collection[0].get("BinType")
|
70
|
+
current_collection_date = collection[0].get("CollectionDate")
|
71
|
+
if current_collection_date is None:
|
72
|
+
continue
|
70
73
|
current_collection_date = datetime.strptime(
|
71
|
-
|
74
|
+
current_collection_date, "%Y-%m-%d"
|
72
75
|
)
|
76
|
+
next_collection_date = collection[0].get(
|
77
|
+
"NextScheduledCollectionDate"
|
78
|
+
)
|
79
|
+
if next_collection_date is None:
|
80
|
+
continue
|
73
81
|
next_collection_date = datetime.strptime(
|
74
|
-
|
82
|
+
next_collection_date, "%Y-%m-%d"
|
75
83
|
)
|
76
84
|
|
77
85
|
# Work out the most recent collection date to display
|
@@ -34,10 +34,10 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
34
34
|
|
35
35
|
# Find the next collection date
|
36
36
|
date_tag = container.find(class_="font11 text-center")
|
37
|
-
if date_tag:
|
38
|
-
collection_date = date_tag.text.strip()
|
39
|
-
else:
|
37
|
+
if date_tag.text.strip() == "":
|
40
38
|
continue
|
39
|
+
else:
|
40
|
+
collection_date = date_tag.text.strip()
|
41
41
|
|
42
42
|
dict_data = {
|
43
43
|
"type": bin_type,
|
@@ -27,6 +27,23 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
27
27
|
"../Images/Bins/ashBin.gif": "Ash bin",
|
28
28
|
}
|
29
29
|
|
30
|
+
fieldset = soup.find("fieldset")
|
31
|
+
ps = fieldset.find_all("p")
|
32
|
+
for p in ps:
|
33
|
+
collection = p.text.strip().replace("Your next ", "").split(".")[0]
|
34
|
+
bin_type = collection.split(" day is")[0]
|
35
|
+
collection_date = datetime.strptime(
|
36
|
+
remove_ordinal_indicator_from_date_string(collection).split("day is ")[
|
37
|
+
1
|
38
|
+
],
|
39
|
+
"%A %d %B %Y",
|
40
|
+
)
|
41
|
+
dict_data = {
|
42
|
+
"type": bin_type,
|
43
|
+
"collectionDate": collection_date.strftime(date_format),
|
44
|
+
}
|
45
|
+
data["bins"].append(dict_data)
|
46
|
+
|
30
47
|
# Find the page body with all the calendars
|
31
48
|
body = soup.find("div", {"id": "Application_ctl00"})
|
32
49
|
calendars = body.find_all_next("table", {"title": "Calendar"})
|
@@ -83,11 +83,16 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
83
83
|
)
|
84
84
|
|
85
85
|
# Select address from dropdown and wait
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
86
|
+
WebDriverWait(driver, 10).until(
|
87
|
+
EC.element_to_be_clickable(
|
88
|
+
(
|
89
|
+
By.XPATH,
|
90
|
+
"//select[@id='FINDBINDAYSHIGHPEAK_ADDRESSSELECT_ADDRESS']//option[contains(., '"
|
91
|
+
+ user_paon
|
92
|
+
+ "')]",
|
93
|
+
)
|
94
|
+
)
|
95
|
+
).click()
|
91
96
|
|
92
97
|
WebDriverWait(driver, 10).until(
|
93
98
|
EC.presence_of_element_located(
|
@@ -0,0 +1,71 @@
|
|
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.hinckley-bosworth.gov.uk/set-location?id={user_uprn}&redirect=refuse&rememberloc="
|
23
|
+
|
24
|
+
# Make the GET request
|
25
|
+
response = requests.get(URI)
|
26
|
+
|
27
|
+
# Parse the HTML
|
28
|
+
soup = BeautifulSoup(response.content, "html.parser")
|
29
|
+
|
30
|
+
# Find all the bin collection date containers
|
31
|
+
bin_schedule = []
|
32
|
+
collection_divs = soup.find_all(
|
33
|
+
"div", class_=["first_date_bins", "last_date_bins"]
|
34
|
+
)
|
35
|
+
|
36
|
+
for div in collection_divs:
|
37
|
+
# Extract the date
|
38
|
+
date = div.find("h3", class_="collectiondate").text.strip().replace(":", "")
|
39
|
+
|
40
|
+
# Extract bin types
|
41
|
+
bins = [img["alt"] for img in div.find_all("img", class_="collection")]
|
42
|
+
|
43
|
+
# Append to the schedule
|
44
|
+
bin_schedule.append({"date": date, "bins": bins})
|
45
|
+
|
46
|
+
current_year = datetime.now().year
|
47
|
+
current_month = datetime.now().month
|
48
|
+
|
49
|
+
# Print the schedule
|
50
|
+
for entry in bin_schedule:
|
51
|
+
bin_types = entry["bins"]
|
52
|
+
date = datetime.strptime(entry["date"], "%d %B")
|
53
|
+
|
54
|
+
if (current_month > 9) and (date.month < 4):
|
55
|
+
date = date.replace(year=(current_year + 1))
|
56
|
+
else:
|
57
|
+
date = date.replace(year=current_year)
|
58
|
+
|
59
|
+
for bin_type in bin_types:
|
60
|
+
|
61
|
+
dict_data = {
|
62
|
+
"type": bin_type,
|
63
|
+
"collectionDate": date.strftime("%d/%m/%Y"),
|
64
|
+
}
|
65
|
+
bindata["bins"].append(dict_data)
|
66
|
+
|
67
|
+
bindata["bins"].sort(
|
68
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
|
69
|
+
)
|
70
|
+
|
71
|
+
return bindata
|
@@ -0,0 +1,70 @@
|
|
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 = (
|
23
|
+
f"https://maps.monmouthshire.gov.uk/?action=SetAddress&UniqueId={user_uprn}"
|
24
|
+
)
|
25
|
+
|
26
|
+
# Make the GET request
|
27
|
+
response = requests.get(URI)
|
28
|
+
|
29
|
+
# Parse the HTML
|
30
|
+
soup = BeautifulSoup(response.content, "html.parser")
|
31
|
+
|
32
|
+
waste_collections_div = soup.find("div", {"aria-label": "Waste Collections"})
|
33
|
+
|
34
|
+
# Find all bin collection panels
|
35
|
+
bin_panels = waste_collections_div.find_all("div", class_="atPanelContent")
|
36
|
+
|
37
|
+
current_year = datetime.now().year
|
38
|
+
current_month = datetime.now().month
|
39
|
+
|
40
|
+
for panel in bin_panels:
|
41
|
+
# Extract bin name (e.g., "Household rubbish bag")
|
42
|
+
bin_name = panel.find("h4").text.strip().replace("\r", "").replace("\n", "")
|
43
|
+
|
44
|
+
# Extract collection date (e.g., "Monday 9th December")
|
45
|
+
date_tag = panel.find("p")
|
46
|
+
if date_tag and "Your next collection date is" in date_tag.text:
|
47
|
+
collection_date = date_tag.find("strong").text.strip()
|
48
|
+
else:
|
49
|
+
continue
|
50
|
+
|
51
|
+
collection_date = datetime.strptime(
|
52
|
+
remove_ordinal_indicator_from_date_string(collection_date), "%A %d %B"
|
53
|
+
)
|
54
|
+
|
55
|
+
if (current_month > 9) and (collection_date.month < 4):
|
56
|
+
collection_date = collection_date.replace(year=(current_year + 1))
|
57
|
+
else:
|
58
|
+
collection_date = collection_date.replace(year=current_year)
|
59
|
+
|
60
|
+
dict_data = {
|
61
|
+
"type": bin_name,
|
62
|
+
"collectionDate": collection_date.strftime("%d/%m/%Y"),
|
63
|
+
}
|
64
|
+
bindata["bins"].append(dict_data)
|
65
|
+
|
66
|
+
bindata["bins"].sort(
|
67
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
|
68
|
+
)
|
69
|
+
|
70
|
+
return bindata
|
@@ -1,7 +1,11 @@
|
|
1
1
|
# This script pulls (in one hit) the data
|
2
2
|
# from Warick District Council Bins Data
|
3
3
|
|
4
|
+
from datetime import datetime
|
5
|
+
|
4
6
|
from bs4 import BeautifulSoup
|
7
|
+
|
8
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
5
9
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
6
10
|
|
7
11
|
|
@@ -20,15 +24,30 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
20
24
|
|
21
25
|
data = {"bins": []}
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
# Find all bin panels
|
28
|
+
bin_panels = soup.find_all("div", class_="col-sm-4 col-lg-3")
|
29
|
+
|
30
|
+
# Iterate through each panel to extract information
|
31
|
+
for panel in bin_panels:
|
32
|
+
bin_type = panel.find("img")["alt"].strip()
|
33
|
+
|
34
|
+
waste_dates = panel.find(
|
35
|
+
"div", class_="col-xs-12 text-center waste-dates margin-bottom-15"
|
36
|
+
)
|
37
|
+
|
38
|
+
for p in waste_dates.find_all("p")[1:]:
|
39
|
+
date = p.text.strip()
|
40
|
+
if " " in date:
|
41
|
+
date = date.split(" ")[1]
|
42
|
+
|
43
|
+
dict_data = {
|
44
|
+
"type": bin_type,
|
45
|
+
"collectionDate": date,
|
46
|
+
}
|
47
|
+
data["bins"].append(dict_data)
|
48
|
+
|
49
|
+
data["bins"].sort(
|
50
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), date_format)
|
51
|
+
)
|
33
52
|
|
34
53
|
return data
|
@@ -2,16 +2,16 @@ 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=bKqDUy2Db-A44Vz-Tc0a-xwRh6MIaSxbvbsgBP1Bw1U,111573
|
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
|
9
9
|
uk_bin_collection/tests/test_collect_data.py,sha256=zmj15cb3BWc_ehPqkfzBSa6GZr0txvWumgbAk3Lyyf0,2252
|
10
|
-
uk_bin_collection/tests/test_common_functions.py,sha256=
|
10
|
+
uk_bin_collection/tests/test_common_functions.py,sha256=cCUwXKGijmsvTLz0KoaedXkpos76vc4569yhSvympSI,14800
|
11
11
|
uk_bin_collection/tests/test_conftest.py,sha256=qI_zgGjNOnwE9gmZUiuirL1SYz3TFw5yfGFgT4T3aG4,1100
|
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
|
-
uk_bin_collection/uk_bin_collection/common.py,sha256=
|
14
|
+
uk_bin_collection/uk_bin_collection/common.py,sha256=Wj6o2NaxYDE1lkpYzMFDIZiPARX0K3xmt-5bnt2kjSI,10970
|
15
15
|
uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py,sha256=Je8VwVLK9KnYl9vqf2gWJ7ZYDgUq3A7caDiIzk5Xof8,4194
|
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
|
@@ -35,8 +35,8 @@ uk_bin_collection/uk_bin_collection/councils/BedfordshireCouncil.py,sha256=U1HOr
|
|
35
35
|
uk_bin_collection/uk_bin_collection/councils/BelfastCityCouncil.py,sha256=SGOv9mm3fByyR3TQDyNcSLeidX_7FlHelkxnh-NUTcY,4327
|
36
36
|
uk_bin_collection/uk_bin_collection/councils/BexleyCouncil.py,sha256=wqqCQZzu_q_pJrxTTlTrGGDgPB5EYgd4RiBy7nKnSHc,5835
|
37
37
|
uk_bin_collection/uk_bin_collection/councils/BirminghamCityCouncil.py,sha256=now2xgpfshYM33UWC18j6xa6BuBydO5Sl7OrDQOo6b0,4687
|
38
|
-
uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py,sha256=
|
39
|
-
uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py,sha256=
|
38
|
+
uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py,sha256=xqWkQz3HDLkP5TgxQqVJziHJF2yl-q9PcV3Rv-38xDU,1941
|
39
|
+
uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py,sha256=ZLA2V3qPsJTom7SeQdGDhF4tJSfgIV5Qi202QvGKJZ0,4477
|
40
40
|
uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py,sha256=WI68r8jB0IHPUT4CgmZMtng899AAMFTxkyTdPg9yLF8,4117
|
41
41
|
uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py,sha256=Llo1rULaAZ8rChVYZqXFFLo7CN6vbT0ULUJD6ActouY,9015
|
42
42
|
uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py,sha256=BEWS2c62cOsf26jqn1AkNUvVmc5AlUADYLaQuPn9RY4,5456
|
@@ -55,7 +55,7 @@ uk_bin_collection/uk_bin_collection/councils/CalderdaleCouncil.py,sha256=OJZcHYl
|
|
55
55
|
uk_bin_collection/uk_bin_collection/councils/CannockChaseDistrictCouncil.py,sha256=ZamevXN8_Q8mRZOTESWtkb8jVyDXkTczcmhXMAVVSkM,2276
|
56
56
|
uk_bin_collection/uk_bin_collection/councils/CanterburyCityCouncil.py,sha256=2s8OL2H0QlUaNu6gUWcoAKHrRdLuQzfMHjcSZuLYbB0,1771
|
57
57
|
uk_bin_collection/uk_bin_collection/councils/CardiffCouncil.py,sha256=_k3sT_WR-gnjjt3tHQ-L2-keP9sdBV0ZeW7gHDzFPYo,7208
|
58
|
-
uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py,sha256=
|
58
|
+
uk_bin_collection/uk_bin_collection/councils/CarmarthenshireCountyCouncil.py,sha256=lcZdnARG64NZMn9NxwANaxCk_Uq6pXRBpPXfhbd-3bE,1883
|
59
59
|
uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py,sha256=JVPYUIlU2ISgbUSr5AOOXNK6IFQFtQmhZyYIMAOedD4,3858
|
60
60
|
uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py,sha256=tXfzMetN6wxahuGGRp2mIyCCDSL4F2aG61HhUxw6COQ,2172
|
61
61
|
uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py,sha256=EB88D0MNJwuDZ2GX1ENc5maGYx17mnHTCtNl6s-v11E,5090
|
@@ -109,7 +109,7 @@ uk_bin_collection/uk_bin_collection/councils/FolkstoneandHytheDistrictCouncil.py
|
|
109
109
|
uk_bin_collection/uk_bin_collection/councils/ForestOfDeanDistrictCouncil.py,sha256=YWT2GM2-bQ3Zh9ps1K14XRZfanuJOlV-zHpOOYMXAXY,4893
|
110
110
|
uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py,sha256=SRCgYhYs6rv_8C1UEDVORHZgXxcJkoZBjzdYS4Lu-ew,4531
|
111
111
|
uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py,sha256=XzfFMCwclh9zAJgsbaj4jywjdiH0wPaFicaVsLrN3ms,2297
|
112
|
-
uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py,sha256
|
112
|
+
uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py,sha256=-QKWlavyDqydJz97WYywvOjBC9fJmS530HyHnnxTe1A,2974
|
113
113
|
uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py,sha256=8Wjvmdvg5blHVrREaEnhhWZaWhYVP4v_KdDVPLIUxaU,4889
|
114
114
|
uk_bin_collection/uk_bin_collection/councils/GraveshamBoroughCouncil.py,sha256=ueQ9xFiTxMUBTGV9VjtySHA1EFWliTM0AeNePBIG9ho,4568
|
115
115
|
uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py,sha256=9pVrmQhZcK2AD8gX8mNvP--L4L9KaY6L3B822VX6fec,5695
|
@@ -120,8 +120,9 @@ uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py,sha256=t_6AkAu4w
|
|
120
120
|
uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py,sha256=_g3fP5Nq-OUjgNrfRf4UEyFKzq0x8QK-4enh5RP1efA,2050
|
121
121
|
uk_bin_collection/uk_bin_collection/councils/HartlepoolBoroughCouncil.py,sha256=MUT1A24iZShT2p55rXEvgYwGUuw3W05Z4ZQAveehv-s,2842
|
122
122
|
uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py,sha256=-ThSG6NIJP_wf2GmGL7SAvxbOujdhanZ8ECP4VSQCBs,5415
|
123
|
-
uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py,sha256=
|
123
|
+
uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py,sha256=x7dfy8mdt2iGl8qJxHb-uBh4u0knmi9MJ6irOJw9WYA,4805
|
124
124
|
uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py,sha256=GNxDU65QuZHV5va2IrKtcJ6TQoDdwmV03JvkVqOauP4,3291
|
125
|
+
uk_bin_collection/uk_bin_collection/councils/HinckleyandBosworthBoroughCouncil.py,sha256=2Hk-_pitSQXlLVct_Vmu1b2EiCNuTMQBYbJs1lJVdCc,2299
|
125
126
|
uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py,sha256=LXhJ47rujx7k3naz0tFiTT1l5k6gAYcVdekJN1t_HLY,4564
|
126
127
|
uk_bin_collection/uk_bin_collection/councils/HullCityCouncil.py,sha256=UHcesBoctFVcXDYuwfag43KbcJcopkEDzJ-54NxtK0Q,1851
|
127
128
|
uk_bin_collection/uk_bin_collection/councils/HuntingdonDistrictCouncil.py,sha256=dGyhhG6HRjQ2SPeiRwUPTGlk9dPIslagV2k0GjEOn1s,1587
|
@@ -157,6 +158,7 @@ uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py,sha256=
|
|
157
158
|
uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py,sha256=mM5-itJDNhjsT5UEjSFfWppmfmPFSns4u_1QblewuFU,5605
|
158
159
|
uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py,sha256=7e2pGBLCw24pNItHeI9jkxQ3rEOZ4WC4zVlbvKYGdXE,2600
|
159
160
|
uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py,sha256=xWR5S0gwQu9gXxjl788Wux1KaC0CT7ZFw0iXuRLZCEM,5599
|
161
|
+
uk_bin_collection/uk_bin_collection/councils/MonmouthshireCountyCouncil.py,sha256=jLdnZUVHPmm21hk4oQ6fruEj39Y4YikSl8TVb_CuN0s,2424
|
160
162
|
uk_bin_collection/uk_bin_collection/councils/MorayCouncil.py,sha256=jsHCQ_aV_bG0GPfF7h6g5TP84sroplYC5k2M6iEKiTw,2265
|
161
163
|
uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py,sha256=ychYR2nsyk2UIb8tjWaKrLUT4hxSsHN558l3RqZ0mjw,5635
|
162
164
|
uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py,sha256=ylTn9KmWITtaO9_Z8kJCN2w2ALfhrfGt3SeJ78lgw7M,5391
|
@@ -256,7 +258,7 @@ uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py,sha256=vRfI
|
|
256
258
|
uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py,sha256=_anovUnXMr40lZLHyX3opIP73BwauCllKy-Z2SBrzPw,2076
|
257
259
|
uk_bin_collection/uk_bin_collection/councils/WalthamForest.py,sha256=P7MMw0EhpRmDbbnHb25tY5_yvYuZUFwJ1br4TOv24sY,4997
|
258
260
|
uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py,sha256=AB9mrV1v4pKKhfsBS8MpjO8XXBifqojSk53J9Q74Guk,1583
|
259
|
-
uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py,sha256=
|
261
|
+
uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py,sha256=DAL_f0BcIxFj7Ngkms5Q80kgSGp9y5zB35wRPudayz8,1644
|
260
262
|
uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py,sha256=zFkXmF1X5g8pjv7II_jXBdrHJu16gy_PowVWVdaDg7A,2657
|
261
263
|
uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py,sha256=tp9l7vdgSGRzNNG0pDfnNuFj4D2bpRJUJmAiTJ6bM0g,4662
|
262
264
|
uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py,sha256=SvSSaLkx7iJjzypAwKkaJwegXkSsIQtUOS2V605kz1A,3368
|
@@ -285,8 +287,8 @@ uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py,sha256=I2kBYMlsD4bId
|
|
285
287
|
uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py,sha256=EQWRhZ2pEejlvm0fPyOTsOHKvUZmPnxEYO_OWRGKTjs,1158
|
286
288
|
uk_bin_collection/uk_bin_collection/create_new_council.py,sha256=m-IhmWmeWQlFsTZC4OxuFvtw5ZtB8EAJHxJTH4O59lQ,1536
|
287
289
|
uk_bin_collection/uk_bin_collection/get_bin_data.py,sha256=YvmHfZqanwrJ8ToGch34x-L-7yPe31nB_x77_Mgl_vo,4545
|
288
|
-
uk_bin_collection-0.
|
289
|
-
uk_bin_collection-0.
|
290
|
-
uk_bin_collection-0.
|
291
|
-
uk_bin_collection-0.
|
292
|
-
uk_bin_collection-0.
|
290
|
+
uk_bin_collection-0.123.0.dist-info/LICENSE,sha256=vABBUOzcrgfaTKpzeo-si9YVEun6juDkndqA8RKdKGs,1071
|
291
|
+
uk_bin_collection-0.123.0.dist-info/METADATA,sha256=t9sgA7rjtEYsVf5kuTc-T8f8oF9e9lciaFLzGtjS9BM,17574
|
292
|
+
uk_bin_collection-0.123.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
293
|
+
uk_bin_collection-0.123.0.dist-info/entry_points.txt,sha256=36WCSGMWSc916S3Hi1ZkazzDKHaJ6CD-4fCEFm5MIao,90
|
294
|
+
uk_bin_collection-0.123.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{uk_bin_collection-0.121.1.dist-info → uk_bin_collection-0.123.0.dist-info}/entry_points.txt
RENAMED
File without changes
|