uk_bin_collection 0.150.1__py3-none-any.whl → 0.152.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 +46 -8
- uk_bin_collection/uk_bin_collection/councils/AngusCouncil.py +149 -0
- uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py +0 -2
- uk_bin_collection/uk_bin_collection/councils/BarkingDagenham.py +11 -2
- uk_bin_collection/uk_bin_collection/councils/BrentCouncil.py +47 -33
- uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py +11 -2
- uk_bin_collection/uk_bin_collection/councils/BroadlandDistrictCouncil.py +21 -6
- uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py +105 -53
- uk_bin_collection/uk_bin_collection/councils/FermanaghOmaghDistrictCouncil.py +102 -0
- uk_bin_collection/uk_bin_collection/councils/MaidstoneBoroughCouncil.py +115 -0
- uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py +61 -39
- uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py +128 -71
- uk_bin_collection/uk_bin_collection/councils/SloughBoroughCouncil.py +140 -0
- uk_bin_collection/uk_bin_collection/councils/TewkesburyBoroughCouncil.py +40 -0
- {uk_bin_collection-0.150.1.dist-info → uk_bin_collection-0.152.0.dist-info}/METADATA +1 -1
- {uk_bin_collection-0.150.1.dist-info → uk_bin_collection-0.152.0.dist-info}/RECORD +19 -14
- {uk_bin_collection-0.150.1.dist-info → uk_bin_collection-0.152.0.dist-info}/LICENSE +0 -0
- {uk_bin_collection-0.150.1.dist-info → uk_bin_collection-0.152.0.dist-info}/WHEEL +0 -0
- {uk_bin_collection-0.150.1.dist-info → uk_bin_collection-0.152.0.dist-info}/entry_points.txt +0 -0
@@ -1,4 +1,11 @@
|
|
1
|
+
import time
|
2
|
+
|
1
3
|
from bs4 import BeautifulSoup
|
4
|
+
from selenium.webdriver.common.by import By
|
5
|
+
from selenium.webdriver.common.keys import Keys
|
6
|
+
from selenium.webdriver.support import expected_conditions as EC
|
7
|
+
from selenium.webdriver.support.ui import Select, WebDriverWait
|
8
|
+
|
2
9
|
from uk_bin_collection.uk_bin_collection.common import *
|
3
10
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
4
11
|
|
@@ -12,78 +19,128 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
12
19
|
"""
|
13
20
|
|
14
21
|
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
|
-
"sec-fetch-user": "?1",
|
41
|
-
"upgrade-insecure-requests": "1",
|
42
|
-
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.5993.118 Safari/537.36",
|
43
|
-
}
|
44
|
-
params = {
|
45
|
-
"p_p_id": "com_placecube_digitalplace_local_waste_portlet_CollectionDayFinderPortlet",
|
46
|
-
"p_p_lifecycle": "0",
|
47
|
-
"p_p_state": "normal",
|
48
|
-
"p_p_mode": "view",
|
49
|
-
"_com_placecube_digitalplace_local_waste_portlet_CollectionDayFinderPortlet_mvcRenderCommandName": "/collection_day_finder/get_days",
|
50
|
-
}
|
51
|
-
data = {
|
52
|
-
"_com_placecube_digitalplace_local_waste_portlet_CollectionDayFinderPortlet_formDate": f"{datetime.now().timestamp().__floor__()}",
|
53
|
-
"_com_placecube_digitalplace_local_waste_portlet_CollectionDayFinderPortlet_postcode": f"{user_postcode}",
|
54
|
-
"_com_placecube_digitalplace_local_waste_portlet_CollectionDayFinderPortlet_uprn": f"{user_uprn}",
|
55
|
-
}
|
56
|
-
|
57
|
-
response = requests.post(
|
58
|
-
"https://www.rugby.gov.uk/check-your-next-bin-day",
|
59
|
-
params=params,
|
60
|
-
headers=headers,
|
61
|
-
data=data,
|
62
|
-
)
|
63
|
-
|
64
|
-
soup = BeautifulSoup(response.text, features="html.parser")
|
65
|
-
soup.prettify()
|
66
|
-
|
67
|
-
table_rows = soup.find("table", {"class": "table"}).find("tbody").find_all("tr")
|
68
|
-
|
69
|
-
for row in table_rows:
|
70
|
-
row_text = row.text.strip().split("\n")
|
71
|
-
bin_text = row_text[0].split(" ")
|
72
|
-
bin_type = " ".join(bin_text[1:]).capitalize()
|
73
|
-
collections.append(
|
74
|
-
(bin_type, datetime.strptime(row_text[1], "%A %d %b %Y"))
|
22
|
+
driver = None
|
23
|
+
try:
|
24
|
+
user_postcode = kwargs.get("postcode")
|
25
|
+
if not user_postcode:
|
26
|
+
raise ValueError("No postcode provided.")
|
27
|
+
check_postcode(user_postcode)
|
28
|
+
|
29
|
+
user_uprn = kwargs.get("uprn")
|
30
|
+
check_uprn(user_uprn)
|
31
|
+
|
32
|
+
headless = kwargs.get("headless")
|
33
|
+
web_driver = kwargs.get("web_driver")
|
34
|
+
driver = create_webdriver(web_driver, headless, None, __name__)
|
35
|
+
page = "https://www.rugby.gov.uk/check-your-next-bin-day"
|
36
|
+
|
37
|
+
driver.get(page)
|
38
|
+
|
39
|
+
wait = WebDriverWait(driver, 60)
|
40
|
+
accept_cookies_button = wait.until(
|
41
|
+
EC.element_to_be_clickable(
|
42
|
+
(
|
43
|
+
By.ID,
|
44
|
+
"ccc-recommended-settings",
|
45
|
+
)
|
46
|
+
)
|
75
47
|
)
|
76
|
-
|
77
|
-
|
48
|
+
accept_cookies_button.click()
|
49
|
+
|
50
|
+
postcode_input = WebDriverWait(driver, 10).until(
|
51
|
+
EC.presence_of_element_located(
|
52
|
+
(
|
53
|
+
By.XPATH,
|
54
|
+
'//*[@id="_com_placecube_digitalplace_local_waste_portlet_CollectionDayFinderPortlet_postcode"]',
|
55
|
+
)
|
56
|
+
)
|
57
|
+
)
|
58
|
+
postcode_input.send_keys(user_postcode + Keys.TAB + Keys.ENTER)
|
59
|
+
|
60
|
+
time.sleep(5)
|
61
|
+
# Wait for address box to be visible
|
62
|
+
select_address_input = WebDriverWait(driver, 10).until(
|
63
|
+
EC.presence_of_element_located(
|
64
|
+
(
|
65
|
+
By.ID,
|
66
|
+
"_com_placecube_digitalplace_local_waste_portlet_CollectionDayFinderPortlet_uprn",
|
67
|
+
)
|
68
|
+
)
|
69
|
+
)
|
70
|
+
|
71
|
+
# Select address based
|
72
|
+
select = Select(select_address_input)
|
73
|
+
for option in select.options:
|
74
|
+
if option.get_attribute("value") == str(user_uprn):
|
75
|
+
select.select_by_value(str(user_uprn))
|
76
|
+
break
|
77
|
+
else:
|
78
|
+
raise ValueError(f"UPRN {user_uprn} not found in address options")
|
79
|
+
|
80
|
+
select_address_input.send_keys(Keys.TAB + Keys.ENTER)
|
81
|
+
|
82
|
+
# Wait for the specified table to be present
|
83
|
+
target_table = WebDriverWait(driver, 10).until(
|
84
|
+
EC.presence_of_element_located(
|
85
|
+
(
|
86
|
+
By.XPATH,
|
87
|
+
'//*[@id="portlet_com_placecube_digitalplace_local_waste_portlet_CollectionDayFinderPortlet"]/div/div/div/div/table',
|
88
|
+
)
|
89
|
+
)
|
90
|
+
)
|
91
|
+
|
92
|
+
soup = BeautifulSoup(driver.page_source, "html.parser")
|
93
|
+
|
94
|
+
# Initialize bin data dictionary
|
95
|
+
bin_data = {"bins": []}
|
96
|
+
|
97
|
+
# Find the table
|
98
|
+
table = soup.find("table", class_="table")
|
99
|
+
if table:
|
100
|
+
# Find all rows in tbody
|
101
|
+
rows = table.find("tbody").find_all("tr")
|
102
|
+
|
103
|
+
for row in rows:
|
104
|
+
# Get all cells in the row
|
105
|
+
cells = row.find_all("td")
|
106
|
+
if len(cells) >= 4: # Ensure we have enough cells
|
107
|
+
bin_type = cells[0].text.strip()
|
108
|
+
next_collection = cells[1].text.strip()
|
109
|
+
following_collection = cells[3].text.strip()
|
110
|
+
|
111
|
+
# Parse the dates
|
112
|
+
for collection_date in [next_collection, following_collection]:
|
113
|
+
try:
|
114
|
+
# Convert date from "Friday 09 May 2025" format
|
115
|
+
parsed_date = datetime.strptime(
|
116
|
+
collection_date, "%A %d %B %Y"
|
117
|
+
)
|
118
|
+
formatted_date = parsed_date.strftime("%d/%m/%Y")
|
119
|
+
|
120
|
+
bin_info = {
|
121
|
+
"type": bin_type,
|
122
|
+
"collectionDate": formatted_date,
|
123
|
+
}
|
124
|
+
bin_data["bins"].append(bin_info)
|
125
|
+
except ValueError as e:
|
126
|
+
print(f"Error parsing date {collection_date}: {e}")
|
127
|
+
else:
|
128
|
+
raise ValueError("Collection data table not found")
|
129
|
+
|
130
|
+
# Sort the collections by date
|
131
|
+
bin_data["bins"].sort(
|
132
|
+
key=lambda x: datetime.strptime(x["collectionDate"], "%d/%m/%Y")
|
78
133
|
)
|
79
134
|
|
80
|
-
|
81
|
-
data = {"bins": []}
|
82
|
-
for item in ordered_data:
|
83
|
-
dict_data = {
|
84
|
-
"type": item[0],
|
85
|
-
"collectionDate": item[1].strftime(date_format),
|
86
|
-
}
|
87
|
-
data["bins"].append(dict_data)
|
135
|
+
print(bin_data)
|
88
136
|
|
89
|
-
|
137
|
+
except Exception as e:
|
138
|
+
# Here you can log the exception if needed
|
139
|
+
print(f"An error occurred: {e}")
|
140
|
+
# Optionally, re-raise the exception if you want it to propagate
|
141
|
+
raise
|
142
|
+
finally:
|
143
|
+
# This block ensures that the driver is closed regardless of an exception
|
144
|
+
if driver:
|
145
|
+
driver.quit()
|
146
|
+
return bin_data
|
@@ -0,0 +1,140 @@
|
|
1
|
+
import time
|
2
|
+
import re
|
3
|
+
import requests
|
4
|
+
from datetime import datetime
|
5
|
+
from bs4 import BeautifulSoup
|
6
|
+
from selenium.webdriver.common.by import By
|
7
|
+
from selenium.webdriver.common.keys import Keys
|
8
|
+
from selenium.webdriver.support import expected_conditions as EC
|
9
|
+
from selenium.webdriver.support.ui import WebDriverWait
|
10
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
11
|
+
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
12
|
+
|
13
|
+
def get_street_from_postcode(postcode: str, api_key: str) -> str:
|
14
|
+
url = "https://maps.googleapis.com/maps/api/geocode/json"
|
15
|
+
params = {"address": postcode, "key": api_key}
|
16
|
+
response = requests.get(url, params=params)
|
17
|
+
data = response.json()
|
18
|
+
|
19
|
+
if data["status"] != "OK":
|
20
|
+
raise ValueError(f"API error: {data['status']}")
|
21
|
+
|
22
|
+
for component in data["results"][0]["address_components"]:
|
23
|
+
if "route" in component["types"]:
|
24
|
+
return component["long_name"]
|
25
|
+
|
26
|
+
raise ValueError("No street (route) found in the response.")
|
27
|
+
|
28
|
+
class CouncilClass(AbstractGetBinDataClass):
|
29
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
30
|
+
driver = None
|
31
|
+
bin_data = {"bins": []}
|
32
|
+
try:
|
33
|
+
user_postcode = kwargs.get("postcode")
|
34
|
+
if not user_postcode:
|
35
|
+
raise ValueError("No postcode provided.")
|
36
|
+
check_postcode(user_postcode)
|
37
|
+
|
38
|
+
headless = kwargs.get("headless")
|
39
|
+
web_driver = kwargs.get("web_driver")
|
40
|
+
driver = create_webdriver(web_driver, headless, None, __name__)
|
41
|
+
page = "https://www.slough.gov.uk/bin-collections"
|
42
|
+
driver.get(page)
|
43
|
+
|
44
|
+
# Accept cookies
|
45
|
+
WebDriverWait(driver, 10).until(
|
46
|
+
EC.element_to_be_clickable((By.ID, "ccc-recommended-settings"))
|
47
|
+
).click()
|
48
|
+
|
49
|
+
# Enter the street name into the address search
|
50
|
+
address_input = WebDriverWait(driver, 10).until(
|
51
|
+
EC.presence_of_element_located((By.ID, "keyword_directory25"))
|
52
|
+
)
|
53
|
+
user_address = get_street_from_postcode(user_postcode, "AIzaSyBDLULT7EIlNtHerswPtfmL15Tt3Oc0bV8")
|
54
|
+
address_input.send_keys(user_address + Keys.ENTER)
|
55
|
+
|
56
|
+
# Wait for address results to load
|
57
|
+
WebDriverWait(driver, 10).until(
|
58
|
+
EC.presence_of_all_elements_located((By.CSS_SELECTOR, "span.list__link-text"))
|
59
|
+
)
|
60
|
+
span_elements = driver.find_elements(By.CSS_SELECTOR, "span.list__link-text")
|
61
|
+
|
62
|
+
for span in span_elements:
|
63
|
+
if user_address.lower() in span.text.lower():
|
64
|
+
span.click()
|
65
|
+
break
|
66
|
+
else:
|
67
|
+
raise Exception(f"No link found containing address: {user_address}")
|
68
|
+
|
69
|
+
# Wait for address detail page
|
70
|
+
WebDriverWait(driver, 10).until(
|
71
|
+
EC.presence_of_element_located((By.CSS_SELECTOR, "section.site-content"))
|
72
|
+
)
|
73
|
+
soup = BeautifulSoup(driver.page_source, "html.parser")
|
74
|
+
|
75
|
+
# Extract each bin link and type
|
76
|
+
for heading in soup.select("dt.definition__heading"):
|
77
|
+
heading_text = heading.get_text(strip=True)
|
78
|
+
if "bin day details" in heading_text.lower():
|
79
|
+
bin_type = heading_text.split()[0].capitalize() + " bin"
|
80
|
+
dd = heading.find_next_sibling("dd")
|
81
|
+
link = dd.find("a", href=True)
|
82
|
+
|
83
|
+
if link:
|
84
|
+
bin_url = link["href"]
|
85
|
+
if not bin_url.startswith("http"):
|
86
|
+
bin_url = "https://www.slough.gov.uk" + bin_url
|
87
|
+
|
88
|
+
# Visit the child page
|
89
|
+
print(f"Navigating to {bin_url}")
|
90
|
+
driver.get(bin_url)
|
91
|
+
WebDriverWait(driver, 10).until(
|
92
|
+
EC.presence_of_element_located((By.CSS_SELECTOR, "div.page-content"))
|
93
|
+
)
|
94
|
+
child_soup = BeautifulSoup(driver.page_source, "html.parser")
|
95
|
+
|
96
|
+
editor_div = child_soup.find("div", class_="editor")
|
97
|
+
if not editor_div:
|
98
|
+
print("No editor div found on bin detail page.")
|
99
|
+
continue
|
100
|
+
|
101
|
+
ul = editor_div.find("ul")
|
102
|
+
if not ul:
|
103
|
+
print("No <ul> with dates found in editor div.")
|
104
|
+
continue
|
105
|
+
|
106
|
+
for li in ul.find_all("li"):
|
107
|
+
raw_text = li.get_text(strip=True).replace(".", "")
|
108
|
+
|
109
|
+
if "no collection" in raw_text.lower() or "no collections" in raw_text.lower():
|
110
|
+
print(f"Ignoring non-collection note: {raw_text}")
|
111
|
+
continue
|
112
|
+
|
113
|
+
raw_date = raw_text
|
114
|
+
|
115
|
+
try:
|
116
|
+
parsed_date = datetime.strptime(raw_date, "%d %B %Y")
|
117
|
+
except ValueError:
|
118
|
+
raw_date_cleaned = raw_date.split("(")[0].strip()
|
119
|
+
try:
|
120
|
+
parsed_date = datetime.strptime(raw_date_cleaned, "%d %B %Y")
|
121
|
+
except Exception:
|
122
|
+
print(f"Could not parse date: {raw_text}")
|
123
|
+
continue
|
124
|
+
|
125
|
+
formatted_date = parsed_date.strftime("%d/%m/%Y")
|
126
|
+
contains_date(formatted_date)
|
127
|
+
bin_data["bins"].append({
|
128
|
+
"type": bin_type,
|
129
|
+
"collectionDate": formatted_date
|
130
|
+
})
|
131
|
+
|
132
|
+
print(f"Type: {bin_type}, Date: {formatted_date}")
|
133
|
+
|
134
|
+
except Exception as e:
|
135
|
+
print(f"An error occurred: {e}")
|
136
|
+
raise
|
137
|
+
finally:
|
138
|
+
if driver:
|
139
|
+
driver.quit()
|
140
|
+
return bin_data
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import json
|
2
|
+
import requests
|
3
|
+
from datetime import datetime
|
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
|
+
class CouncilClass(AbstractGetBinDataClass):
|
9
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
10
|
+
user_uprn = kwargs.get("uprn")
|
11
|
+
check_uprn(user_uprn)
|
12
|
+
|
13
|
+
url = f"https://api-2.tewkesbury.gov.uk/incab/rounds/{user_uprn}/next-collection"
|
14
|
+
response = requests.get(url)
|
15
|
+
response.raise_for_status()
|
16
|
+
|
17
|
+
json_data = response.json()
|
18
|
+
|
19
|
+
data = {"bins": []}
|
20
|
+
|
21
|
+
if json_data.get("status") == "OK" and "body" in json_data:
|
22
|
+
for entry in json_data["body"]:
|
23
|
+
bin_type = entry.get("collectionType")
|
24
|
+
date_str = entry.get("NextCollection")
|
25
|
+
|
26
|
+
if bin_type and date_str:
|
27
|
+
try:
|
28
|
+
collection_date = datetime.strptime(date_str, "%Y-%m-%d")
|
29
|
+
data["bins"].append({
|
30
|
+
"type": bin_type,
|
31
|
+
"collectionDate": collection_date.strftime(date_format)
|
32
|
+
})
|
33
|
+
except ValueError:
|
34
|
+
continue
|
35
|
+
|
36
|
+
# Sort by date
|
37
|
+
data["bins"].sort(key=lambda x: x["collectionDate"])
|
38
|
+
|
39
|
+
print(json.dumps(data, indent=2))
|
40
|
+
return data
|
@@ -7,7 +7,7 @@ uk_bin_collection/tests/council_feature_input_parity.py,sha256=DO6Mk4ImYgM5ZCZ-c
|
|
7
7
|
uk_bin_collection/tests/features/environment.py,sha256=VQZjJdJI_kZn08M0j5cUgvKT4k3iTw8icJge1DGOkoA,127
|
8
8
|
uk_bin_collection/tests/features/validate_council_outputs.feature,sha256=SJK-Vc737hrf03tssxxbeg_JIvAH-ddB8f6gU1LTbuQ,251
|
9
9
|
uk_bin_collection/tests/generate_map_test_results.py,sha256=CKnGK2ZgiSXomRGkomX90DitgMP-X7wkHhyKORDcL2E,1144
|
10
|
-
uk_bin_collection/tests/input.json,sha256=
|
10
|
+
uk_bin_collection/tests/input.json,sha256=pwAeJYV_DJ4zMkXDYolTi5e-v9g_0gd-AMv_VCeJsyE,133191
|
11
11
|
uk_bin_collection/tests/output.schema,sha256=ZwKQBwYyTDEM4G2hJwfLUVM-5v1vKRvRK9W9SS1sd18,1086
|
12
12
|
uk_bin_collection/tests/step_defs/step_helpers/file_handler.py,sha256=Ygzi4V0S1MIHqbdstUlIqtRIwnynvhu4UtpweJ6-5N8,1474
|
13
13
|
uk_bin_collection/tests/step_defs/test_validate_council.py,sha256=VZ0a81sioJULD7syAYHjvK_-nT_Rd36tUyzPetSA0gk,3475
|
@@ -21,9 +21,10 @@ uk_bin_collection/uk_bin_collection/councils/AberdeenCityCouncil.py,sha256=Je8Vw
|
|
21
21
|
uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py,sha256=aO1CSdyqa8oAD0fB79y1Q9bikAWCP_JFa7CsyTa2j9s,1655
|
22
22
|
uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py,sha256=ppbrmm-MzB1wOulK--CU_0j4P-djNf3ozMhHnmQFqLo,1511
|
23
23
|
uk_bin_collection/uk_bin_collection/councils/AmberValleyBoroughCouncil.py,sha256=mTeluIIEcuxLxhfDQ95A1fp8RM6AkJT5tRGZPUbYGdk,1853
|
24
|
+
uk_bin_collection/uk_bin_collection/councils/AngusCouncil.py,sha256=YlhAnxkRAAvrwbUvleNKUuLROcwMTps2eMHElpuctm4,5894
|
24
25
|
uk_bin_collection/uk_bin_collection/councils/AntrimAndNewtonabbeyCouncil.py,sha256=Hp5pteaC5RjL5ZqPZ564S9WQ6ZTKLMO6Dl_fxip2TUc,1653
|
25
26
|
uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py,sha256=iMBldxNErgi-ok1o6xpqdNgMvR6qapaNqoTWDTqMeGo,3824
|
26
|
-
uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py,sha256=
|
27
|
+
uk_bin_collection/uk_bin_collection/councils/ArgyllandButeCouncil.py,sha256=NBeXjzv0bOblkS5xjSy5D0DdW9vtx_TGMLVP0FP1JqA,5073
|
27
28
|
uk_bin_collection/uk_bin_collection/councils/ArmaghBanbridgeCraigavonCouncil.py,sha256=o9NBbVCTdxKXnpYbP8-zxe1Gh8s57vwfV75Son_sAHE,2863
|
28
29
|
uk_bin_collection/uk_bin_collection/councils/ArunCouncil.py,sha256=yfhthv9nuogP19VOZ3TYQrq51qqjiCZcSel4sXhiKjs,4012
|
29
30
|
uk_bin_collection/uk_bin_collection/councils/AshfieldDistrictCouncil.py,sha256=fhX7S_A3jqoND7NE6qITPMPvdk3FJSKZ3Eoa5RtSg3I,4247
|
@@ -31,7 +32,7 @@ uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py,sha256=kuL
|
|
31
32
|
uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py,sha256=LouqjspEMt1TkOGqWHs2zkxwOETIy3n7p64uKIlAgUg,2401
|
32
33
|
uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py,sha256=W7QBx6Mgso8RYosuXsaYo3GGNAu-tiyBSmuYxr1JSOU,1707
|
33
34
|
uk_bin_collection/uk_bin_collection/councils/BaberghDistrictCouncil.py,sha256=1eXdST58xFRMdYl8AGNG_EwyQeLa31WSWUe882hQ2ec,6329
|
34
|
-
uk_bin_collection/uk_bin_collection/councils/BarkingDagenham.py,sha256=
|
35
|
+
uk_bin_collection/uk_bin_collection/councils/BarkingDagenham.py,sha256=fgbaD8jsUBJrnUWKbcjSdJHDVRAh9KRUsG6JwB31NYA,6263
|
35
36
|
uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py,sha256=Sd4-pbv0QZsR7soxvXYqsfdOUIqZqS6notyoZthG77s,9182
|
36
37
|
uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py,sha256=hqzVKEqwYmjcQjCYBletcCt9_pE96qQ3kn7eDroJeNk,4764
|
37
38
|
uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py,sha256=NymPmq5pud0PJ8ePcc2r1SKED4EHQ0EY2l71O-Metxc,3313
|
@@ -52,10 +53,10 @@ uk_bin_collection/uk_bin_collection/councils/BracknellForestCouncil.py,sha256=Ll
|
|
52
53
|
uk_bin_collection/uk_bin_collection/councils/BradfordMDC.py,sha256=BEWS2c62cOsf26jqn1AkNUvVmc5AlUADYLaQuPn9RY4,5456
|
53
54
|
uk_bin_collection/uk_bin_collection/councils/BraintreeDistrictCouncil.py,sha256=2vYHilpI8mSwC2Ykdr1gxYAN3excDWqF6AwtGbkwbTw,2441
|
54
55
|
uk_bin_collection/uk_bin_collection/councils/BrecklandCouncil.py,sha256=PX6A_pDvaN109aSNWmEhm88GFKfkClIkmbwGURWvsks,1744
|
55
|
-
uk_bin_collection/uk_bin_collection/councils/BrentCouncil.py,sha256=
|
56
|
-
uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py,sha256=
|
56
|
+
uk_bin_collection/uk_bin_collection/councils/BrentCouncil.py,sha256=BsP7V0vezteX0WAxcxqMf3g6ro-J78W6hubefALRMyg,5222
|
57
|
+
uk_bin_collection/uk_bin_collection/councils/BrightonandHoveCityCouncil.py,sha256=trTCVrSwQ8EuKe30V1vShkkCSw5fEG1kg0DimnsZqdM,6133
|
57
58
|
uk_bin_collection/uk_bin_collection/councils/BristolCityCouncil.py,sha256=nQeRBKrDcZE2m_EzjUBr9dJ5tcUdGcUuA5FcnLkbLr4,5575
|
58
|
-
uk_bin_collection/uk_bin_collection/councils/BroadlandDistrictCouncil.py,sha256=
|
59
|
+
uk_bin_collection/uk_bin_collection/councils/BroadlandDistrictCouncil.py,sha256=YhzP8zar_oSSkBOA3mdMAehnMTrcTBmGO0RfC4UBzvM,8236
|
59
60
|
uk_bin_collection/uk_bin_collection/councils/BromleyBoroughCouncil.py,sha256=dii85JLmYU1uMidCEsWVo3stTcq_QqyC65DxG8u1UmE,4302
|
60
61
|
uk_bin_collection/uk_bin_collection/councils/BromsgroveDistrictCouncil.py,sha256=PUfxP8j5Oh9wFHkdjbrJzQli9UzMHZzwrZ2hkThrvhI,1781
|
61
62
|
uk_bin_collection/uk_bin_collection/councils/BroxbourneCouncil.py,sha256=mcRtkFc9g3YNN17OQfhzYJtNYeWrZPP_e7m7goEhz5I,3012
|
@@ -78,7 +79,7 @@ uk_bin_collection/uk_bin_collection/councils/CherwellDistrictCouncil.py,sha256=V
|
|
78
79
|
uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py,sha256=I7Dj8LzG-Q4yrJ99jLRIwKwW5WQ9he8UksvF_YPzTxI,1681
|
79
80
|
uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py,sha256=5mKZf22NgdyBY-SqV0c2q8b8IJobkoZrsfGEVUcxUyM,3544
|
80
81
|
uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py,sha256=mZiM8Ugm_OP0JkC5pLaQmi4i79mAp4SNNrcIdsREjHw,7198
|
81
|
-
uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py,sha256=
|
82
|
+
uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py,sha256=bvtqXSZN64jSND0NxwzJ-WA9H49FwARQMGS3PlUSiUg,6311
|
82
83
|
uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py,sha256=M7HjuUaFq8aSnOf_9m1QS4MmPPMmPhF3mLHSrfDPtV0,5194
|
83
84
|
uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py,sha256=Mny-q2rQkWe2Tj1gINwEM1L4AkqQl1EDMAaKY0-deD4,3968
|
84
85
|
uk_bin_collection/uk_bin_collection/councils/ConwyCountyBorough.py,sha256=QcFHTzW7Q1jYyHWq6thpA6fhO8w38eCOpUPk9EfjGIA,1291
|
@@ -124,6 +125,7 @@ uk_bin_collection/uk_bin_collection/councils/ExeterCityCouncil.py,sha256=FPNyBuQ
|
|
124
125
|
uk_bin_collection/uk_bin_collection/councils/FalkirkCouncil.py,sha256=C3OA9PEhBsCYPzwsSdqVi_SbF8uiB186i2XfHWKd3VI,1694
|
125
126
|
uk_bin_collection/uk_bin_collection/councils/FarehamBoroughCouncil.py,sha256=25QxeN5q3ad1Wwexs2d-B7ooH0ru6pOUx58413FOTY4,2352
|
126
127
|
uk_bin_collection/uk_bin_collection/councils/FenlandDistrictCouncil.py,sha256=sFrnKzIE2tIcz0YrC6A9HcevzgNdf6E6_HLGMWDKtGw,2513
|
128
|
+
uk_bin_collection/uk_bin_collection/councils/FermanaghOmaghDistrictCouncil.py,sha256=om9bdOv3_n16DMNX3-ndRwBEAlddhY1BB8z6doXrDfo,3317
|
127
129
|
uk_bin_collection/uk_bin_collection/councils/FifeCouncil.py,sha256=eP_NnHtBLyflRUko9ubi_nxUPb7qg9SbaaSxqWZxNEs,2157
|
128
130
|
uk_bin_collection/uk_bin_collection/councils/FlintshireCountyCouncil.py,sha256=RvPHhGbzP3mcjgWe2rIQux43UuDH7XofJGIKs7wJRe0,2060
|
129
131
|
uk_bin_collection/uk_bin_collection/councils/FolkstoneandHytheDistrictCouncil.py,sha256=yKgZhua-2hjMihHshhncXVUBagbTOQBnNbKzdIZkWjw,3114
|
@@ -179,6 +181,7 @@ uk_bin_collection/uk_bin_collection/councils/LondonBoroughOfRichmondUponThames.p
|
|
179
181
|
uk_bin_collection/uk_bin_collection/councils/LondonBoroughRedbridge.py,sha256=A_6Sis5hsF53Th04KeadHRasGbpAm6aoaWJ6X8eC4Y8,6604
|
180
182
|
uk_bin_collection/uk_bin_collection/councils/LondonBoroughSutton.py,sha256=T0gCjpBQ9k3uNNIiJGphNiSXeh2n6bohflg9RwbL3NA,2565
|
181
183
|
uk_bin_collection/uk_bin_collection/councils/LutonBoroughCouncil.py,sha256=vScUi_R8FnBddii2_zLlZBLxuh85mKmCm8nKW3zxky0,2758
|
184
|
+
uk_bin_collection/uk_bin_collection/councils/MaidstoneBoroughCouncil.py,sha256=1YZIliUEX3_gaNJDbdCybxNPwkSz0A58gDAl9kSIHsE,4439
|
182
185
|
uk_bin_collection/uk_bin_collection/councils/MaldonDistrictCouncil.py,sha256=PMVt2XFggttPmbWyrBrHJ-W6R_6-0ux1BkY1kj1IKzg,1997
|
183
186
|
uk_bin_collection/uk_bin_collection/councils/MalvernHillsDC.py,sha256=iQG0EkX2npBicvsGKQRYyBGSBvKVUbKvUvvwrC9xV1A,2100
|
184
187
|
uk_bin_collection/uk_bin_collection/councils/ManchesterCityCouncil.py,sha256=RY301_82z3-xInGai5ocT7rzoV75ATbf0N7uxn8Z9LE,3110
|
@@ -206,7 +209,7 @@ uk_bin_collection/uk_bin_collection/councils/NewhamCouncil.py,sha256=-UTgDseUtAG
|
|
206
209
|
uk_bin_collection/uk_bin_collection/councils/NewportCityCouncil.py,sha256=dAcl5P97bttl2xCPvxof1a18kmqOrMmiElgtn3Ej7zs,8480
|
207
210
|
uk_bin_collection/uk_bin_collection/councils/NorthAyrshireCouncil.py,sha256=o8zv40Wt19d51mrN5lsgLMCKMokMPmI1cMHBNT5yAho,1976
|
208
211
|
uk_bin_collection/uk_bin_collection/councils/NorthDevonCountyCouncil.py,sha256=tgJKIvu7nnCAHu_HImfG5SQABD6ygKFqrZU-ZoC6ObY,6260
|
209
|
-
uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py,sha256=
|
212
|
+
uk_bin_collection/uk_bin_collection/councils/NorthEastDerbyshireDistrictCouncil.py,sha256=BfNpYcjG3z0Yz8OYN6NkfzvZ5k1FI-80D-rv211kPPU,5449
|
210
213
|
uk_bin_collection/uk_bin_collection/councils/NorthEastLincs.py,sha256=fYf438VZIaOaqPSwdTTWVjFTdrI0jGfFsxVzOc-QdkA,1817
|
211
214
|
uk_bin_collection/uk_bin_collection/councils/NorthHertfordshireDistrictCouncil.py,sha256=dFgvZqVKEVEP0zSPeh2s9xIWSCGbhYHpXn2U6Nk0HXM,2847
|
212
215
|
uk_bin_collection/uk_bin_collection/councils/NorthKestevenDistrictCouncil.py,sha256=vYOCerJXr9LTP6F2wm4vpYNYbQaWNZ6yfHEQ33N_hTw,1681
|
@@ -243,7 +246,7 @@ uk_bin_collection/uk_bin_collection/councils/RochfordCouncil.py,sha256=rfhD66A9H
|
|
243
246
|
uk_bin_collection/uk_bin_collection/councils/RotherDistrictCouncil.py,sha256=-fdLvtik9ytfwXrrhwWdBxqQOMq2N1pvrIuvShhf8PU,3090
|
244
247
|
uk_bin_collection/uk_bin_collection/councils/RotherhamCouncil.py,sha256=LtMPM8lj5bfReDR4buHEo-aRC_HTBIeo1nf8GE5-R80,1790
|
245
248
|
uk_bin_collection/uk_bin_collection/councils/RoyalBoroughofGreenwich.py,sha256=BZzLmWK_VONOmMpSrLrnKtJaOrrepm6aStfKGVcgf9Y,3487
|
246
|
-
uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py,sha256=
|
249
|
+
uk_bin_collection/uk_bin_collection/councils/RugbyBoroughCouncil.py,sha256=q0zMKJk9lEPFBMShqqcCkhw09cFU-CJPgRYCniL9XXA,5686
|
247
250
|
uk_bin_collection/uk_bin_collection/councils/RunnymedeBoroughCouncil.py,sha256=vmTZfijt9b6sKzRdRwROE94lrMVnqs6kn6tg-xi1jR4,1618
|
248
251
|
uk_bin_collection/uk_bin_collection/councils/RushcliffeBoroughCouncil.py,sha256=nWo8xeER71FEbnMTX8W9bcwZNpLEExWzPvgRT7DmcMc,4221
|
249
252
|
uk_bin_collection/uk_bin_collection/councils/RushmoorCouncil.py,sha256=ZsGnXjoEaOS6U7fI0w7-uqxayAHdNVKsJi2fqIWEls8,3375
|
@@ -253,6 +256,7 @@ uk_bin_collection/uk_bin_collection/councils/SeftonCouncil.py,sha256=XUEz2li0oHr
|
|
253
256
|
uk_bin_collection/uk_bin_collection/councils/SevenoaksDistrictCouncil.py,sha256=qqrrRaSVm9CYAtm0rB2ZnyH_nLwaReuacoUxZpo597k,4260
|
254
257
|
uk_bin_collection/uk_bin_collection/councils/SheffieldCityCouncil.py,sha256=9g9AeiackoWyej9EVlKUzywzAtMuBVD0f93ZryAUha8,2016
|
255
258
|
uk_bin_collection/uk_bin_collection/councils/ShropshireCouncil.py,sha256=6OIEhJmv-zLJiEo8WaJePA7JuhNRGkh2WohFLhzN8Kk,1477
|
259
|
+
uk_bin_collection/uk_bin_collection/councils/SloughBoroughCouncil.py,sha256=B6ksHUgcPns9fRUrPpyTkGGAwqn1DH0rQfS3Ma6Gzrs,5987
|
256
260
|
uk_bin_collection/uk_bin_collection/councils/SolihullCouncil.py,sha256=gbTHjbdV46evGfLfF8rxVMQIgNZD-XPHgZeuyje7kGY,1609
|
257
261
|
uk_bin_collection/uk_bin_collection/councils/SomersetCouncil.py,sha256=CZJnkCGn4-yH31HH5_ix-8V2_vsjGuKYxgzAPGZdSAw,8480
|
258
262
|
uk_bin_collection/uk_bin_collection/councils/SouthAyrshireCouncil.py,sha256=03eapeXwxneKI4ccKPSHoviIbhmV1m90I-0WQ_s3KsY,2722
|
@@ -293,6 +297,7 @@ uk_bin_collection/uk_bin_collection/councils/TeignbridgeCouncil.py,sha256=-NowMN
|
|
293
297
|
uk_bin_collection/uk_bin_collection/councils/TelfordAndWrekinCouncil.py,sha256=p1ZS5R4EGxbEWlRBrkGXgKwE_lkyBT-R60yKFFhVObc,1844
|
294
298
|
uk_bin_collection/uk_bin_collection/councils/TendringDistrictCouncil.py,sha256=1_CkpWPTfRUEP5YJ9R4_dJRLtb-O9i83hfWJc1shw_c,4283
|
295
299
|
uk_bin_collection/uk_bin_collection/councils/TestValleyBoroughCouncil.py,sha256=Dtfkyrwt795W7gqFJxVGRR8t3R5WMNQZwTWJckLpZWE,8480
|
300
|
+
uk_bin_collection/uk_bin_collection/councils/TewkesburyBoroughCouncil.py,sha256=cSULCQBddk4tfaJZHv7mrNwM4sZkOYJpmlQXlvrZvPk,1396
|
296
301
|
uk_bin_collection/uk_bin_collection/councils/ThanetDistrictCouncil.py,sha256=Cxrf0tUryDL-wFclPH5yovVt8i7Sc7g-ZFrU9_wg6KY,2717
|
297
302
|
uk_bin_collection/uk_bin_collection/councils/ThreeRiversDistrictCouncil.py,sha256=RHt3e9oeKzwxjjY-M8aC0nk-ZXhHIoyC81JzxkPVxsE,5531
|
298
303
|
uk_bin_collection/uk_bin_collection/councils/ThurrockCouncil.py,sha256=vAZMm6mcsdEcOkP15xwxWy9gdXpmLYQFH7qRifurNoY,2935
|
@@ -339,8 +344,8 @@ uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py,sha256=I2kBYMlsD4bId
|
|
339
344
|
uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py,sha256=QD4v4xpsEE0QheR_fGaNOIRMc2FatcUfKkkhAhseyVU,1159
|
340
345
|
uk_bin_collection/uk_bin_collection/create_new_council.py,sha256=m-IhmWmeWQlFsTZC4OxuFvtw5ZtB8EAJHxJTH4O59lQ,1536
|
341
346
|
uk_bin_collection/uk_bin_collection/get_bin_data.py,sha256=YvmHfZqanwrJ8ToGch34x-L-7yPe31nB_x77_Mgl_vo,4545
|
342
|
-
uk_bin_collection-0.
|
343
|
-
uk_bin_collection-0.
|
344
|
-
uk_bin_collection-0.
|
345
|
-
uk_bin_collection-0.
|
346
|
-
uk_bin_collection-0.
|
347
|
+
uk_bin_collection-0.152.0.dist-info/LICENSE,sha256=vABBUOzcrgfaTKpzeo-si9YVEun6juDkndqA8RKdKGs,1071
|
348
|
+
uk_bin_collection-0.152.0.dist-info/METADATA,sha256=2gnhvjy_Hu9moRYLw5s6ogGMDh1dYkitouNtc5DOOM4,20914
|
349
|
+
uk_bin_collection-0.152.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
350
|
+
uk_bin_collection-0.152.0.dist-info/entry_points.txt,sha256=36WCSGMWSc916S3Hi1ZkazzDKHaJ6CD-4fCEFm5MIao,90
|
351
|
+
uk_bin_collection-0.152.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{uk_bin_collection-0.150.1.dist-info → uk_bin_collection-0.152.0.dist-info}/entry_points.txt
RENAMED
File without changes
|