uk_bin_collection 0.114.6__py3-none-any.whl → 0.116.0__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- 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
|