uk_bin_collection 0.114.6__py3-none-any.whl → 0.116.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 +84 -21
- uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py +53 -0
- uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py +67 -0
- uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py +105 -0
- uk_bin_collection/uk_bin_collection/councils/BaberghDistrictCouncil.py +132 -0
- uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py +36 -6
- uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py +71 -0
- uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py +95 -113
- uk_bin_collection/uk_bin_collection/councils/DerbyCityCouncil.py +55 -0
- uk_bin_collection/uk_bin_collection/councils/GraveshamBoroughCouncil.py +122 -0
- uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py +161 -0
- uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py +132 -0
- uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py +60 -41
- uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py +50 -0
- uk_bin_collection/uk_bin_collection/councils/WestLancashireBoroughCouncil.py +114 -0
- {uk_bin_collection-0.114.6.dist-info → uk_bin_collection-0.116.0.dist-info}/METADATA +1 -1
- {uk_bin_collection-0.114.6.dist-info → uk_bin_collection-0.116.0.dist-info}/RECORD +20 -9
- {uk_bin_collection-0.114.6.dist-info → uk_bin_collection-0.116.0.dist-info}/LICENSE +0 -0
- {uk_bin_collection-0.114.6.dist-info → uk_bin_collection-0.116.0.dist-info}/WHEEL +0 -0
- {uk_bin_collection-0.114.6.dist-info → uk_bin_collection-0.116.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,132 @@
|
|
1
|
+
import re
|
2
|
+
import time
|
3
|
+
|
4
|
+
import requests
|
5
|
+
from bs4 import BeautifulSoup
|
6
|
+
from selenium.webdriver.common.by import By
|
7
|
+
from selenium.webdriver.support import expected_conditions as EC
|
8
|
+
from selenium.webdriver.support.ui import Select
|
9
|
+
from selenium.webdriver.support.wait import WebDriverWait
|
10
|
+
|
11
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
12
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
13
|
+
|
14
|
+
|
15
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
16
|
+
class CouncilClass(AbstractGetBinDataClass):
|
17
|
+
"""
|
18
|
+
Concrete classes have to implement all abstract operations of the
|
19
|
+
base class. They can also override some operations with a default
|
20
|
+
implementation.
|
21
|
+
"""
|
22
|
+
|
23
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
24
|
+
|
25
|
+
collection_day = kwargs.get("paon")
|
26
|
+
bindata = {"bins": []}
|
27
|
+
|
28
|
+
days_of_week = [
|
29
|
+
"Monday",
|
30
|
+
"Tuesday",
|
31
|
+
"Wednesday",
|
32
|
+
"Thursday",
|
33
|
+
"Friday",
|
34
|
+
"Saturday",
|
35
|
+
"Sunday",
|
36
|
+
]
|
37
|
+
|
38
|
+
refusestartDate = datetime(2024, 11, 11)
|
39
|
+
recyclingstartDate = datetime(2024, 11, 4)
|
40
|
+
|
41
|
+
offset_days = days_of_week.index(collection_day)
|
42
|
+
|
43
|
+
refuse_dates = get_dates_every_x_days(refusestartDate, 14, 28)
|
44
|
+
recycling_dates = get_dates_every_x_days(recyclingstartDate, 14, 28)
|
45
|
+
|
46
|
+
bank_holidays = [
|
47
|
+
("25/12/2024", 2),
|
48
|
+
("26/12/2024", 2),
|
49
|
+
("27/12/2024", 3),
|
50
|
+
("30/12/2024", 1),
|
51
|
+
("31/12/2024", 2),
|
52
|
+
("01/01/2025", 2),
|
53
|
+
("02/01/2025", 2),
|
54
|
+
("03/01/2025", 3),
|
55
|
+
("06/01/2025", 1),
|
56
|
+
("07/01/2025", 1),
|
57
|
+
("08/01/2025", 1),
|
58
|
+
("09/01/2025", 1),
|
59
|
+
("10/01/2025", 1),
|
60
|
+
("18/04/2025", 1),
|
61
|
+
("21/04/2025", 1),
|
62
|
+
("22/04/2025", 1),
|
63
|
+
("23/04/2025", 1),
|
64
|
+
("24/04/2025", 1),
|
65
|
+
("25/04/2025", 1),
|
66
|
+
("05/05/2025", 1),
|
67
|
+
("06/05/2025", 1),
|
68
|
+
("07/05/2025", 1),
|
69
|
+
("08/05/2025", 1),
|
70
|
+
("09/05/2025", 1),
|
71
|
+
("26/05/2025", 1),
|
72
|
+
("27/05/2025", 1),
|
73
|
+
("28/05/2025", 1),
|
74
|
+
("29/05/2025", 1),
|
75
|
+
("30/05/2025", 1),
|
76
|
+
("25/08/2025", 1),
|
77
|
+
("26/08/2025", 1),
|
78
|
+
("27/08/2025", 1),
|
79
|
+
("28/08/2025", 1),
|
80
|
+
("29/08/2025", 1),
|
81
|
+
]
|
82
|
+
|
83
|
+
for refuseDate in refuse_dates:
|
84
|
+
|
85
|
+
collection_date = (
|
86
|
+
datetime.strptime(refuseDate, "%d/%m/%Y") + timedelta(days=offset_days)
|
87
|
+
).strftime("%d/%m/%Y")
|
88
|
+
|
89
|
+
holiday_offset = next(
|
90
|
+
(value for date, value in bank_holidays if date == collection_date), 0
|
91
|
+
)
|
92
|
+
|
93
|
+
if holiday_offset > 0:
|
94
|
+
collection_date = (
|
95
|
+
datetime.strptime(collection_date, "%d/%m/%Y")
|
96
|
+
+ timedelta(days=holiday_offset)
|
97
|
+
).strftime("%d/%m/%Y")
|
98
|
+
|
99
|
+
dict_data = {
|
100
|
+
"type": "Refuse Bin",
|
101
|
+
"collectionDate": collection_date,
|
102
|
+
}
|
103
|
+
bindata["bins"].append(dict_data)
|
104
|
+
|
105
|
+
for recyclingDate in recycling_dates:
|
106
|
+
|
107
|
+
collection_date = (
|
108
|
+
datetime.strptime(recyclingDate, "%d/%m/%Y")
|
109
|
+
+ timedelta(days=offset_days)
|
110
|
+
).strftime("%d/%m/%Y")
|
111
|
+
|
112
|
+
holiday_offset = next(
|
113
|
+
(value for date, value in bank_holidays if date == collection_date), 0
|
114
|
+
)
|
115
|
+
|
116
|
+
if holiday_offset > 0:
|
117
|
+
collection_date = (
|
118
|
+
datetime.strptime(collection_date, "%d/%m/%Y")
|
119
|
+
+ timedelta(days=holiday_offset)
|
120
|
+
).strftime("%d/%m/%Y")
|
121
|
+
|
122
|
+
dict_data = {
|
123
|
+
"type": "Recycling Bin",
|
124
|
+
"collectionDate": collection_date,
|
125
|
+
}
|
126
|
+
bindata["bins"].append(dict_data)
|
127
|
+
|
128
|
+
bindata["bins"].sort(
|
129
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
|
130
|
+
)
|
131
|
+
|
132
|
+
return bindata
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
import time
|
2
|
+
|
3
|
+
import requests
|
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
7
|
|
@@ -12,43 +15,59 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
12
15
|
"""
|
13
16
|
|
14
17
|
def parse_data(self, page: str, **kwargs) -> dict:
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
18
|
+
|
19
|
+
user_uprn = kwargs.get("uprn")
|
20
|
+
check_uprn(user_uprn)
|
21
|
+
bindata = {"bins": []}
|
22
|
+
|
23
|
+
SESSION_URL = "https://mycouncil.milton-keynes.gov.uk/authapi/isauthenticated?uri=https%253A%252F%252Fmycouncil.milton-keynes.gov.uk%252Fen%252Fservice%252FWaste_Collection_Round_Checker&hostname=mycouncil.milton-keynes.gov.uk&withCredentials=true"
|
24
|
+
|
25
|
+
API_URL = "https://mycouncil.milton-keynes.gov.uk/apibroker/runLookup"
|
26
|
+
|
27
|
+
data = {
|
28
|
+
"formValues": {"Section 1": {"uprnCore": {"value": user_uprn}}},
|
29
|
+
}
|
30
|
+
|
31
|
+
headers = {
|
32
|
+
"Content-Type": "application/json",
|
33
|
+
"Accept": "application/json",
|
34
|
+
"User-Agent": "Mozilla/5.0",
|
35
|
+
"X-Requested-With": "XMLHttpRequest",
|
36
|
+
"Referer": "https://mycouncil.milton-keynes.gov.uk/fillform/?iframe_id=fillform-frame-1&db_id=",
|
37
|
+
}
|
38
|
+
s = requests.session()
|
39
|
+
r = s.get(SESSION_URL)
|
40
|
+
r.raise_for_status()
|
41
|
+
session_data = r.json()
|
42
|
+
sid = session_data["auth-session"]
|
43
|
+
params = {
|
44
|
+
"id": "64d9feda3a507",
|
45
|
+
"repeat_against": "",
|
46
|
+
"noRetry": "false",
|
47
|
+
"getOnlyTokens": "undefined",
|
48
|
+
"log_id": "",
|
49
|
+
"app_name": "AF-Renderer::Self",
|
50
|
+
# unix_timestamp
|
51
|
+
"_": str(int(time.time() * 1000)),
|
52
|
+
"sid": sid,
|
53
|
+
}
|
54
|
+
|
55
|
+
r = s.post(API_URL, json=data, headers=headers, params=params)
|
56
|
+
r.raise_for_status()
|
57
|
+
|
58
|
+
data = r.json()
|
59
|
+
rows_data = data["integration"]["transformed"]["rows_data"]
|
60
|
+
if not isinstance(rows_data, dict):
|
61
|
+
raise ValueError("Invalid data returned from API")
|
62
|
+
|
63
|
+
# Extract each service's relevant details for the bin schedule
|
64
|
+
for item in rows_data.values():
|
65
|
+
dict_data = {
|
66
|
+
"type": item["AssetTypeName"],
|
67
|
+
"collectionDate": datetime.strptime(
|
68
|
+
item["NextInstance"], "%Y-%m-%d"
|
69
|
+
).strftime(date_format),
|
70
|
+
}
|
71
|
+
bindata["bins"].append(dict_data)
|
72
|
+
|
73
|
+
return bindata
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import requests
|
2
|
+
|
3
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
4
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
5
|
+
|
6
|
+
|
7
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
8
|
+
class CouncilClass(AbstractGetBinDataClass):
|
9
|
+
"""
|
10
|
+
Concrete classes have to implement all abstract operations of the
|
11
|
+
base class. They can also override some operations with a default
|
12
|
+
implementation.
|
13
|
+
"""
|
14
|
+
|
15
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
16
|
+
|
17
|
+
user_uprn = kwargs.get("uprn")
|
18
|
+
check_uprn(user_uprn)
|
19
|
+
bindata = {"bins": []}
|
20
|
+
|
21
|
+
URI = f"https://www.warrington.gov.uk/bin-collections/get-jobs/{user_uprn}"
|
22
|
+
|
23
|
+
# Make the GET request
|
24
|
+
response = requests.get(URI)
|
25
|
+
|
26
|
+
# Parse the JSON response
|
27
|
+
bin_collection = response.json()
|
28
|
+
|
29
|
+
# Loop through each collection in bin_collection
|
30
|
+
for collection in bin_collection["schedule"]:
|
31
|
+
bin_type = collection["Name"]
|
32
|
+
collection_dates = collection["ScheduledStart"]
|
33
|
+
|
34
|
+
print(f"Bin Type: {bin_type}")
|
35
|
+
print(f"Collection Date: {collection_dates}")
|
36
|
+
|
37
|
+
dict_data = {
|
38
|
+
"type": bin_type,
|
39
|
+
"collectionDate": datetime.strptime(
|
40
|
+
collection_dates,
|
41
|
+
"%Y-%m-%dT%H:%M:%S",
|
42
|
+
).strftime(date_format),
|
43
|
+
}
|
44
|
+
bindata["bins"].append(dict_data)
|
45
|
+
|
46
|
+
bindata["bins"].sort(
|
47
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
|
48
|
+
)
|
49
|
+
|
50
|
+
return bindata
|
@@ -0,0 +1,114 @@
|
|
1
|
+
import re
|
2
|
+
from datetime import datetime
|
3
|
+
|
4
|
+
import requests
|
5
|
+
from bs4 import BeautifulSoup
|
6
|
+
|
7
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
8
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
9
|
+
|
10
|
+
|
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
|
+
user_uprn = kwargs.get("uprn")
|
20
|
+
user_postcode = kwargs.get("postcode")
|
21
|
+
check_uprn(user_uprn)
|
22
|
+
check_postcode(user_postcode)
|
23
|
+
bindata = {"bins": []}
|
24
|
+
|
25
|
+
user_postcode = user_postcode.replace(" ", "+")
|
26
|
+
|
27
|
+
API_URL = (
|
28
|
+
f"https://your.westlancs.gov.uk/yourwestlancs.aspx?address={user_postcode}"
|
29
|
+
)
|
30
|
+
|
31
|
+
session = requests.Session()
|
32
|
+
response = session.get(API_URL)
|
33
|
+
soup = BeautifulSoup(response.content, "html.parser")
|
34
|
+
|
35
|
+
soup = BeautifulSoup(response.content, features="html.parser")
|
36
|
+
soup.prettify()
|
37
|
+
|
38
|
+
pattern = r"SELECT\$\d+"
|
39
|
+
|
40
|
+
# Loop through each row to find the one with the target UPRN
|
41
|
+
for row in soup.find("table", class_="striped-table").find_all("tr"):
|
42
|
+
cells = row.find_all("td")
|
43
|
+
if len(cells) > 2 and cells[2].get_text(strip=True) == user_uprn:
|
44
|
+
link = row.find("a", href=True)
|
45
|
+
if link:
|
46
|
+
match = re.search(pattern, link["href"])
|
47
|
+
|
48
|
+
# Extract important form data like __VIEWSTATE and __EVENTVALIDATION
|
49
|
+
viewstate = soup.find("input", {"name": "__VIEWSTATE"})["value"]
|
50
|
+
eventvalidation = soup.find("input", {"name": "__EVENTVALIDATION"})[
|
51
|
+
"value"
|
52
|
+
]
|
53
|
+
|
54
|
+
# Parameters for the "click" - usually __EVENTTARGET and __EVENTARGUMENT
|
55
|
+
post_data = {
|
56
|
+
"__VIEWSTATE": viewstate,
|
57
|
+
"__EVENTVALIDATION": eventvalidation,
|
58
|
+
"__EVENTTARGET": "ctl00$MainContent$GridView1",
|
59
|
+
"__EVENTARGUMENT": match.group(
|
60
|
+
0
|
61
|
+
), # Modify as needed for the specific link
|
62
|
+
}
|
63
|
+
|
64
|
+
post_response = session.post(API_URL, data=post_data)
|
65
|
+
|
66
|
+
soup = BeautifulSoup(post_response.text, features="html.parser")
|
67
|
+
StreetSceneTable = soup.find("table", {"id": "StreetSceneTable"})
|
68
|
+
|
69
|
+
if StreetSceneTable:
|
70
|
+
|
71
|
+
# Extract each collection date or information by locating the span elements
|
72
|
+
refuse_collection = soup.find(
|
73
|
+
"span", id="ctl00_MainContent_lbNextDomRoundZones"
|
74
|
+
).text.strip()
|
75
|
+
recycling_collection = soup.find(
|
76
|
+
"span", id="ctl00_MainContent_lbNextRecRoundZones"
|
77
|
+
).text.strip()
|
78
|
+
garden_waste_collection = soup.find(
|
79
|
+
"span", id="ctl00_MainContent_lbNextGardenRoundZones"
|
80
|
+
).text.strip()
|
81
|
+
|
82
|
+
# Structure the extracted data in a dictionary
|
83
|
+
bin_schedule = [
|
84
|
+
{
|
85
|
+
"Service": "Refuse Collection",
|
86
|
+
"Date": refuse_collection,
|
87
|
+
},
|
88
|
+
{
|
89
|
+
"Service": "Recycling Collection",
|
90
|
+
"Date": recycling_collection,
|
91
|
+
},
|
92
|
+
{
|
93
|
+
"Service": "Garden Waste Collection",
|
94
|
+
"Date": garden_waste_collection,
|
95
|
+
},
|
96
|
+
]
|
97
|
+
|
98
|
+
if bin_schedule:
|
99
|
+
for service in bin_schedule:
|
100
|
+
if service["Date"] != "Not subscribed":
|
101
|
+
dict_data = {
|
102
|
+
"type": service["Service"],
|
103
|
+
"collectionDate": service["Date"],
|
104
|
+
}
|
105
|
+
bindata["bins"].append(dict_data)
|
106
|
+
|
107
|
+
else:
|
108
|
+
print("No link found in the row with the target UPRN.")
|
109
|
+
break
|
110
|
+
|
111
|
+
bindata["bins"].sort(
|
112
|
+
key=lambda x: datetime.strptime(x.get("collectionDate"), "%d/%m/%Y")
|
113
|
+
)
|
114
|
+
return bindata
|
@@ -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=YbcJwMyKLhZPNACJ8VL3QKjV47A3SQD5suyo4N9yfDc,101581
|
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
|
@@ -14,12 +14,16 @@ uk_bin_collection/uk_bin_collection/collect_data.py,sha256=dB7wWXsJX4fm5bIf84lex
|
|
14
14
|
uk_bin_collection/uk_bin_collection/common.py,sha256=fJG9ruqsCYOaYm-fzRb_l5kTeeB7i9k7qphWt3t7kks,10107
|
15
15
|
uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py,sha256=aO1CSdyqa8oAD0fB79y1Q9bikAWCP_JFa7CsyTa2j9s,1655
|
16
16
|
uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py,sha256=ppbrmm-MzB1wOulK--CU_0j4P-djNf3ozMhHnmQFqLo,1511
|
17
|
+
uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py,sha256=Hp5pteaC5RjL5ZqPZ564S9WQ6ZTKLMO6Dl_fxip2TUc,1653
|
17
18
|
uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py,sha256=iMBldxNErgi-ok1o6xpqdNgMvR6qapaNqoTWDTqMeGo,3824
|
19
|
+
uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py,sha256=fJ0UvuSCbzFE9CPoxt1U9CJeFsbTKts_5GRBc3E9Eno,2201
|
18
20
|
uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py,sha256=o9NBbVCTdxKXnpYbP8-zxe1Gh8s57vwfV75Son_sAHE,2863
|
19
21
|
uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py,sha256=yfhthv9nuogP19VOZ3TYQrq51qqjiCZcSel4sXhiKjs,4012
|
22
|
+
uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py,sha256=2kZt9HGCVK-n0aq2VFWG6yiWihXjRf8MnksdQLMj4LU,3555
|
20
23
|
uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py,sha256=yC-8UMQHSbvze43PJ2_F4Z3cu7M7cynKTojipBJU7Ug,4307
|
21
24
|
uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py,sha256=LouqjspEMt1TkOGqWHs2zkxwOETIy3n7p64uKIlAgUg,2401
|
22
25
|
uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py,sha256=W7QBx6Mgso8RYosuXsaYo3GGNAu-tiyBSmuYxr1JSOU,1707
|
26
|
+
uk_bin_collection/uk_bin_collection/councils/BaberghDistrictCouncil.py,sha256=T0Awn7afXhpyp3-R3IjZcowhcBgfXNlimRlODDAMMdQ,4094
|
23
27
|
uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py,sha256=Sd4-pbv0QZsR7soxvXYqsfdOUIqZqS6notyoZthG77s,9182
|
24
28
|
uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py,sha256=RKuH8HzGc3Q0WtLg-g_xVMn9hUYqdENgfcvvR4Bx5PI,4763
|
25
29
|
uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py,sha256=NymPmq5pud0PJ8ePcc2r1SKED4EHQ0EY2l71O-Metxc,3313
|
@@ -34,12 +38,13 @@ uk_bin_collection/uk_bin_collection/councils/BlabyDistrictCouncil.py,sha256=I8LN
|
|
34
38
|
uk_bin_collection/uk_bin_collection/councils/BlackburnCouncil.py,sha256=jHbCK8sL09vdmdP7Xnh8lIrU5AHTnJLEZfOLephPvWg,4090
|
35
39
|
uk_bin_collection/uk_bin_collection/councils/BoltonCouncil.py,sha256=WI68r8jB0IHPUT4CgmZMtng899AAMFTxkyTdPg9yLF8,4117
|
36
40
|
uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py,sha256=Llo1rULaAZ8rChVYZqXFFLo7CN6vbT0ULUJD6ActouY,9015
|
37
|
-
uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py,sha256=
|
41
|
+
uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py,sha256=BEWS2c62cOsf26jqn1AkNUvVmc5AlUADYLaQuPn9RY4,5456
|
38
42
|
uk_bin_collection/uk_bin_collection/councils/BrecklandCouncil.py,sha256=PX6A_pDvaN109aSNWmEhm88GFKfkClIkmbwGURWvsks,1744
|
39
43
|
uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py,sha256=k6qt4cds-Ejd97Z-__pw2BYvGVbFdc9SUfF73PPrTNA,5823
|
40
44
|
uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py,sha256=kJmmDJz_kQ45DHmG7ocrUpNJonEn0kuXYEDQyZaf9ks,5576
|
41
45
|
uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py,sha256=_bAFykZWZkEVUB-QKeVLfWO8plG6nRgn71QF2BUN2rk,4329
|
42
46
|
uk_bin_collection/uk_bin_collection/councils/BromsgroveDistrictCouncil.py,sha256=PUfxP8j5Oh9wFHkdjbrJzQli9UzMHZzwrZ2hkThrvhI,1781
|
47
|
+
uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py,sha256=JC6Qqou1Rj4awn2VP3iuvwFpYayKDTt2_JNuNitjSoY,2393
|
43
48
|
uk_bin_collection/uk_bin_collection/councils/BroxtoweBoroughCouncil.py,sha256=-Facq-ToQkcWUePpKBwq90LZUFxgUSydNL2sYaLX4yw,4473
|
44
49
|
uk_bin_collection/uk_bin_collection/councils/BuckinghamshireCouncil.py,sha256=_ELVUM5VLp1nwDxRpvpsp6n8SzLJvp_UyMp-i_MXYuo,4383
|
45
50
|
uk_bin_collection/uk_bin_collection/councils/BuryCouncil.py,sha256=H7wAxO1nfxkewVoRRolumq8bBJG04siE3jieFH3RGpQ,2632
|
@@ -52,7 +57,7 @@ uk_bin_collection/uk_bin_collection/councils/CastlepointDistrictCouncil.py,sha25
|
|
52
57
|
uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py,sha256=tXfzMetN6wxahuGGRp2mIyCCDSL4F2aG61HhUxw6COQ,2172
|
53
58
|
uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py,sha256=EB88D0MNJwuDZ2GX1ENc5maGYx17mnHTCtNl6s-v11E,5090
|
54
59
|
uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py,sha256=73P5GF6Y7Ud1hNgyFypvT1d6eBWjzdBjr3h0Dsl6NWw,1679
|
55
|
-
uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py,sha256=
|
60
|
+
uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py,sha256=5mKZf22NgdyBY-SqV0c2q8b8IJobkoZrsfGEVUcxUyM,3544
|
56
61
|
uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py,sha256=mZiM8Ugm_OP0JkC5pLaQmi4i79mAp4SNNrcIdsREjHw,7198
|
57
62
|
uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py,sha256=HxrLcJves7ZsE8FbooymeecTUmScY4R7Oi71vwCePPo,4118
|
58
63
|
uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py,sha256=M7HjuUaFq8aSnOf_9m1QS4MmPPMmPhF3mLHSrfDPtV0,5194
|
@@ -65,6 +70,7 @@ uk_bin_collection/uk_bin_collection/councils/CrawleyBoroughCouncil.py,sha256=_BE
|
|
65
70
|
uk_bin_collection/uk_bin_collection/councils/CroydonCouncil.py,sha256=Vxh5ICoaXTAvx0nDOq_95XQ4He9sQKcLdI5keV2uxM4,11384
|
66
71
|
uk_bin_collection/uk_bin_collection/councils/DacorumBoroughCouncil.py,sha256=Tm_6pvBPj-6qStbe6-02LXaoCOlnnDvVXAAocGVvf_E,3970
|
67
72
|
uk_bin_collection/uk_bin_collection/councils/DartfordBoroughCouncil.py,sha256=SPirUUoweMwX5Txtsr0ocdcFtKxCQ9LhzTTJN20tM4w,1550
|
73
|
+
uk_bin_collection/uk_bin_collection/councils/DerbyCityCouncil.py,sha256=M8FGLhZn9wdRCq1W6z_yqJQqeba3EKyba3vhM22MzB4,1883
|
68
74
|
uk_bin_collection/uk_bin_collection/councils/DerbyshireDalesDistrictCouncil.py,sha256=MQC1-jXezXczrxTcvPQvkpGgyyAbzSKlX38WsmftHak,4007
|
69
75
|
uk_bin_collection/uk_bin_collection/councils/DoncasterCouncil.py,sha256=b7pxoToXu6dBBYXsXmlwfPXE8BjHxt0hjCOBNlNgvX8,3118
|
70
76
|
uk_bin_collection/uk_bin_collection/councils/DorsetCouncil.py,sha256=XUWH5BzkjPSFBLczo-Vo-Wly2JMoabm9WtI6_Mf-pO4,1523
|
@@ -96,11 +102,13 @@ uk_bin_collection/uk_bin_collection/councils/GatesheadCouncil.py,sha256=SRCgYhYs
|
|
96
102
|
uk_bin_collection/uk_bin_collection/councils/GedlingBoroughCouncil.py,sha256=XzfFMCwclh9zAJgsbaj4jywjdiH0wPaFicaVsLrN3ms,2297
|
97
103
|
uk_bin_collection/uk_bin_collection/councils/GlasgowCityCouncil.py,sha256=9N5GXR32gXYBl3i44TITiZ7N73rgqXZmkyenI-kVRQI,2328
|
98
104
|
uk_bin_collection/uk_bin_collection/councils/GloucesterCityCouncil.py,sha256=8Wjvmdvg5blHVrREaEnhhWZaWhYVP4v_KdDVPLIUxaU,4889
|
105
|
+
uk_bin_collection/uk_bin_collection/councils/GraveshamBoroughCouncil.py,sha256=ueQ9xFiTxMUBTGV9VjtySHA1EFWliTM0AeNePBIG9ho,4568
|
99
106
|
uk_bin_collection/uk_bin_collection/councils/GuildfordCouncil.py,sha256=9pVrmQhZcK2AD8gX8mNvP--L4L9KaY6L3B822VX6fec,5695
|
100
107
|
uk_bin_collection/uk_bin_collection/councils/HaltonBoroughCouncil.py,sha256=gq_CPqi6qM2oNiHhKKF1lZC86fyKL4lPhh_DN9pJZ04,5971
|
101
108
|
uk_bin_collection/uk_bin_collection/councils/HarboroughDistrictCouncil.py,sha256=uAbCgfrqkIkEKUyLVE8l72s5tzbfMFsw775i0nVRAyc,1934
|
102
109
|
uk_bin_collection/uk_bin_collection/councils/HaringeyCouncil.py,sha256=t_6AkAu4wrv8Q0WlDhWh_82I0djl5tk531Pzs-SjWzg,2647
|
103
110
|
uk_bin_collection/uk_bin_collection/councils/HarrogateBoroughCouncil.py,sha256=_g3fP5Nq-OUjgNrfRf4UEyFKzq0x8QK-4enh5RP1efA,2050
|
111
|
+
uk_bin_collection/uk_bin_collection/councils/HertsmereBoroughCouncil.py,sha256=-ThSG6NIJP_wf2GmGL7SAvxbOujdhanZ8ECP4VSQCBs,5415
|
104
112
|
uk_bin_collection/uk_bin_collection/councils/HighPeakCouncil.py,sha256=oqF8M0lcT3KsrG6W6I6JJX07E6Sc_-_sr7MybfIMab8,4626
|
105
113
|
uk_bin_collection/uk_bin_collection/councils/HighlandCouncil.py,sha256=GNxDU65QuZHV5va2IrKtcJ6TQoDdwmV03JvkVqOauP4,3291
|
106
114
|
uk_bin_collection/uk_bin_collection/councils/HounslowCouncil.py,sha256=LXhJ47rujx7k3naz0tFiTT1l5k6gAYcVdekJN1t_HLY,4564
|
@@ -130,9 +138,10 @@ uk_bin_collection/uk_bin_collection/councils/MansfieldDistrictCouncil.py,sha256=
|
|
130
138
|
uk_bin_collection/uk_bin_collection/councils/MertonCouncil.py,sha256=3Y2Un4xXo1sCcMsudynODSzocV_mMofWkX2JqONDb5o,1997
|
131
139
|
uk_bin_collection/uk_bin_collection/councils/MidAndEastAntrimBoroughCouncil.py,sha256=oOWwU5FSgGej2Mv7FQ66N-EzS5nZgmGsd0WnfLWUc1I,5238
|
132
140
|
uk_bin_collection/uk_bin_collection/councils/MidDevonCouncil.py,sha256=RjBZ7R3_Pax9p1d2DCygqryjV1RP4BYvqb-rT_KyOEg,3322
|
141
|
+
uk_bin_collection/uk_bin_collection/councils/MidSuffolkDistrictCouncil.py,sha256=nnN7S1mK7HU3NPW7KsmEVkcC7Gb5rE1mmW9FCUfukWk,4094
|
133
142
|
uk_bin_collection/uk_bin_collection/councils/MidSussexDistrictCouncil.py,sha256=AZgC9wmDLEjUOtIFvf0ehF5LHturXTH4DkE3ioPSVBA,6254
|
134
143
|
uk_bin_collection/uk_bin_collection/councils/MidlothianCouncil.py,sha256=mM5-itJDNhjsT5UEjSFfWppmfmPFSns4u_1QblewuFU,5605
|
135
|
-
uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py,sha256=
|
144
|
+
uk_bin_collection/uk_bin_collection/councils/MiltonKeynesCityCouncil.py,sha256=7e2pGBLCw24pNItHeI9jkxQ3rEOZ4WC4zVlbvKYGdXE,2600
|
136
145
|
uk_bin_collection/uk_bin_collection/councils/MoleValleyDistrictCouncil.py,sha256=xWR5S0gwQu9gXxjl788Wux1KaC0CT7ZFw0iXuRLZCEM,5599
|
137
146
|
uk_bin_collection/uk_bin_collection/councils/NeathPortTalbotCouncil.py,sha256=ychYR2nsyk2UIb8tjWaKrLUT4hxSsHN558l3RqZ0mjw,5635
|
138
147
|
uk_bin_collection/uk_bin_collection/councils/NewForestCouncil.py,sha256=ylTn9KmWITtaO9_Z8kJCN2w2ALfhrfGt3SeJ78lgw7M,5391
|
@@ -221,12 +230,14 @@ uk_bin_collection/uk_bin_collection/councils/ValeofWhiteHorseCouncil.py,sha256=K
|
|
221
230
|
uk_bin_collection/uk_bin_collection/councils/WakefieldCityCouncil.py,sha256=vRfIU0Uloi1bgXqjOCpdb-EQ4oY-aismcANZRwOIFkc,4914
|
222
231
|
uk_bin_collection/uk_bin_collection/councils/WalsallCouncil.py,sha256=_anovUnXMr40lZLHyX3opIP73BwauCllKy-Z2SBrzPw,2076
|
223
232
|
uk_bin_collection/uk_bin_collection/councils/WalthamForest.py,sha256=P7MMw0EhpRmDbbnHb25tY5_yvYuZUFwJ1br4TOv24sY,4997
|
233
|
+
uk_bin_collection/uk_bin_collection/councils/WarringtonBoroughCouncil.py,sha256=AB9mrV1v4pKKhfsBS8MpjO8XXBifqojSk53J9Q74Guk,1583
|
224
234
|
uk_bin_collection/uk_bin_collection/councils/WarwickDistrictCouncil.py,sha256=3WQrAxzYzKoV4LyOqNTp9xINVsNi1xW9t8etducGeag,1146
|
225
235
|
uk_bin_collection/uk_bin_collection/councils/WatfordBoroughCouncil.py,sha256=zFkXmF1X5g8pjv7II_jXBdrHJu16gy_PowVWVdaDg7A,2657
|
226
236
|
uk_bin_collection/uk_bin_collection/councils/WaverleyBoroughCouncil.py,sha256=tp9l7vdgSGRzNNG0pDfnNuFj4D2bpRJUJmAiTJ6bM0g,4662
|
227
237
|
uk_bin_collection/uk_bin_collection/councils/WealdenDistrictCouncil.py,sha256=SvSSaLkx7iJjzypAwKkaJwegXkSsIQtUOS2V605kz1A,3368
|
228
238
|
uk_bin_collection/uk_bin_collection/councils/WelhatCouncil.py,sha256=ikUft37dYNJghfe-_6Fskiq1JihqpLmLNj38QkKSUUA,2316
|
229
239
|
uk_bin_collection/uk_bin_collection/councils/WestBerkshireCouncil.py,sha256=2eHRlalZyY9jv_UsCWM9IYzOpRdhce2sEW5NtygEnpw,5513
|
240
|
+
uk_bin_collection/uk_bin_collection/councils/WestLancashireBoroughCouncil.py,sha256=iohI2NZSjsEnCpSGsCPZFC2EQZL5pyzcb9Ng_H0tMUE,4718
|
230
241
|
uk_bin_collection/uk_bin_collection/councils/WestLindseyDistrictCouncil.py,sha256=JFWUy4w0CKulGq16PfbRDKAdQEbokVEuabwlZYigdEU,4606
|
231
242
|
uk_bin_collection/uk_bin_collection/councils/WestLothianCouncil.py,sha256=dq0jimtARvRkZiGbVFrXXZgY-BODtz3uYZ5UKn0bf64,4114
|
232
243
|
uk_bin_collection/uk_bin_collection/councils/WestMorlandAndFurness.py,sha256=jbqV3460rn9D0yTBGWjpSe1IvWWcdGur5pzgj-hJcQ4,2513
|
@@ -247,8 +258,8 @@ uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py,sha256=I2kBYMlsD4bId
|
|
247
258
|
uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py,sha256=EQWRhZ2pEejlvm0fPyOTsOHKvUZmPnxEYO_OWRGKTjs,1158
|
248
259
|
uk_bin_collection/uk_bin_collection/create_new_council.py,sha256=m-IhmWmeWQlFsTZC4OxuFvtw5ZtB8EAJHxJTH4O59lQ,1536
|
249
260
|
uk_bin_collection/uk_bin_collection/get_bin_data.py,sha256=YvmHfZqanwrJ8ToGch34x-L-7yPe31nB_x77_Mgl_vo,4545
|
250
|
-
uk_bin_collection-0.
|
251
|
-
uk_bin_collection-0.
|
252
|
-
uk_bin_collection-0.
|
253
|
-
uk_bin_collection-0.
|
254
|
-
uk_bin_collection-0.
|
261
|
+
uk_bin_collection-0.116.0.dist-info/LICENSE,sha256=vABBUOzcrgfaTKpzeo-si9YVEun6juDkndqA8RKdKGs,1071
|
262
|
+
uk_bin_collection-0.116.0.dist-info/METADATA,sha256=Dn9hGIlLa54AUUAhbw_fnO9kixM10sHL3cke0azYc3Y,17574
|
263
|
+
uk_bin_collection-0.116.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
264
|
+
uk_bin_collection-0.116.0.dist-info/entry_points.txt,sha256=36WCSGMWSc916S3Hi1ZkazzDKHaJ6CD-4fCEFm5MIao,90
|
265
|
+
uk_bin_collection-0.116.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{uk_bin_collection-0.114.6.dist-info → uk_bin_collection-0.116.0.dist-info}/entry_points.txt
RENAMED
File without changes
|