uk_bin_collection 0.152.3__py3-none-any.whl → 0.152.4__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 +4 -4
- uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py +42 -99
- {uk_bin_collection-0.152.3.dist-info → uk_bin_collection-0.152.4.dist-info}/METADATA +1 -1
- {uk_bin_collection-0.152.3.dist-info → uk_bin_collection-0.152.4.dist-info}/RECORD +7 -7
- {uk_bin_collection-0.152.3.dist-info → uk_bin_collection-0.152.4.dist-info}/LICENSE +0 -0
- {uk_bin_collection-0.152.3.dist-info → uk_bin_collection-0.152.4.dist-info}/WHEEL +0 -0
- {uk_bin_collection-0.152.3.dist-info → uk_bin_collection-0.152.4.dist-info}/entry_points.txt +0 -0
@@ -2180,10 +2180,10 @@
|
|
2180
2180
|
"LAD24CD": "E07000179"
|
2181
2181
|
},
|
2182
2182
|
"SouthRibbleCouncil": {
|
2183
|
-
"uprn": "
|
2184
|
-
"postcode": "
|
2185
|
-
"url": "https://
|
2186
|
-
"wiki_command_url_override": "https://
|
2183
|
+
"uprn": "10013243496",
|
2184
|
+
"postcode": "PR26 7RZ",
|
2185
|
+
"url": "https://forms.chorleysouthribble.gov.uk/xfp/form/70",
|
2186
|
+
"wiki_command_url_override": "https://forms.chorleysouthribble.gov.uk/xfp/form/70",
|
2187
2187
|
"wiki_name": "South Ribble",
|
2188
2188
|
"wiki_note": "You will need to use [FindMyAddress](https://www.findmyaddress.co.uk/search) to find your UPRN.",
|
2189
2189
|
"LAD24CD": "E07000126"
|
@@ -1,29 +1,11 @@
|
|
1
|
-
from typing import Dict, List, Any, Optional
|
2
|
-
from bs4 import BeautifulSoup
|
3
|
-
from dateutil.relativedelta import relativedelta
|
4
1
|
import requests
|
5
|
-
import
|
6
|
-
import re
|
7
|
-
from datetime import datetime
|
8
|
-
from uk_bin_collection.uk_bin_collection.common import *
|
9
|
-
from dateutil.parser import parse
|
2
|
+
from bs4 import BeautifulSoup
|
10
3
|
|
11
|
-
from uk_bin_collection.uk_bin_collection.common import
|
4
|
+
from uk_bin_collection.uk_bin_collection.common import *
|
12
5
|
from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
|
13
6
|
|
14
7
|
|
15
|
-
|
16
|
-
"""
|
17
|
-
Get a __token to include in the form data
|
18
|
-
:param page: Page html
|
19
|
-
:return: Form __token
|
20
|
-
"""
|
21
|
-
soup = BeautifulSoup(page.text, features="html.parser")
|
22
|
-
soup.prettify()
|
23
|
-
token = soup.find("input", {"name": "__token"}).get("value")
|
24
|
-
return token
|
25
|
-
|
26
|
-
|
8
|
+
# import the wonderful Beautiful Soup and the URL grabber
|
27
9
|
class CouncilClass(AbstractGetBinDataClass):
|
28
10
|
"""
|
29
11
|
Concrete classes have to implement all abstract operations of the
|
@@ -31,69 +13,38 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
31
13
|
implementation.
|
32
14
|
"""
|
33
15
|
|
34
|
-
def
|
35
|
-
"""This method makes the request to the council
|
36
|
-
|
37
|
-
Keyword arguments:
|
38
|
-
url -- the url to get the data from
|
39
|
-
"""
|
40
|
-
# Set a user agent so we look like a browser ;-)
|
41
|
-
user_agent = (
|
42
|
-
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
43
|
-
"Chrome/108.0.0.0 Safari/537.36"
|
44
|
-
)
|
45
|
-
headers = {"User-Agent": user_agent}
|
46
|
-
requests.packages.urllib3.disable_warnings()
|
16
|
+
def parse_data(self, page: str, **kwargs) -> dict:
|
47
17
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
return full_page
|
54
|
-
except requests.exceptions.HTTPError as errh:
|
55
|
-
logging.error(f"Http Error: {errh}")
|
56
|
-
raise
|
57
|
-
except requests.exceptions.ConnectionError as errc:
|
58
|
-
logging.error(f"Error Connecting: {errc}")
|
59
|
-
raise
|
60
|
-
except requests.exceptions.Timeout as errt:
|
61
|
-
logging.error(f"Timeout Error: {errt}")
|
62
|
-
raise
|
63
|
-
except requests.exceptions.RequestException as err:
|
64
|
-
logging.error(f"Oops: Something Else {err}")
|
65
|
-
raise
|
18
|
+
user_uprn = kwargs.get("uprn")
|
19
|
+
user_postcode = kwargs.get("postcode")
|
20
|
+
check_uprn(user_uprn)
|
21
|
+
check_postcode(user_postcode)
|
22
|
+
bindata = {"bins": []}
|
66
23
|
|
67
|
-
|
68
|
-
|
69
|
-
postcode: Optional[str] = kwargs.get("postcode")
|
24
|
+
session_uri = "https://forms.chorleysouthribble.gov.uk/xfp/form/70"
|
25
|
+
URI = "https://forms.chorleysouthribble.gov.uk/xfp/form/70#qc576c657112a8277ba6f954ebc0490c946168363_0"
|
70
26
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
27
|
+
session = requests.Session()
|
28
|
+
token_response = session.get(session_uri)
|
29
|
+
soup = BeautifulSoup(token_response.text, "html.parser")
|
30
|
+
token = soup.find("input", {"name": "__token"}).attrs["value"]
|
75
31
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
values = {
|
80
|
-
"__token": get_token(page),
|
81
|
-
"page": "491",
|
32
|
+
form_data = {
|
33
|
+
"__token": token,
|
34
|
+
"page": "196",
|
82
35
|
"locale": "en_GB",
|
83
|
-
"
|
84
|
-
"
|
36
|
+
"qc576c657112a8277ba6f954ebc0490c946168363_0_0": user_postcode,
|
37
|
+
"qc576c657112a8277ba6f954ebc0490c946168363_1_0": user_uprn,
|
85
38
|
"next": "Next",
|
86
39
|
}
|
87
|
-
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64)"}
|
88
|
-
requests.packages.urllib3.disable_warnings()
|
89
|
-
response = requests.request(
|
90
|
-
"POST",
|
91
|
-
"https://forms.chorleysouthribble.gov.uk/xfp/form/70",
|
92
|
-
headers=headers,
|
93
|
-
data=values,
|
94
|
-
)
|
95
40
|
|
96
|
-
|
41
|
+
collection_response = session.post(URI, data=form_data)
|
42
|
+
|
43
|
+
#collection_soup = BeautifulSoup(collection_response.text, "html.parser")
|
44
|
+
|
45
|
+
|
46
|
+
soup = BeautifulSoup(collection_response.text, "html.parser")
|
47
|
+
#print(soup)
|
97
48
|
|
98
49
|
rows = soup.find("table").find_all("tr")
|
99
50
|
|
@@ -103,31 +54,23 @@ class CouncilClass(AbstractGetBinDataClass):
|
|
103
54
|
# Loops the Rows
|
104
55
|
for row in rows:
|
105
56
|
cells = row.find_all("td")
|
57
|
+
|
106
58
|
if cells:
|
107
59
|
bin_type = cells[0].get_text(strip=True)
|
108
60
|
collection_next = cells[1].get_text(strip=True)
|
109
61
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
# Make each Bin element in the JSON
|
125
|
-
dict_data = {
|
126
|
-
"type": bin_type,
|
127
|
-
"collectionDate": collection_date_obj.strftime(date_format),
|
128
|
-
}
|
129
|
-
|
130
|
-
# Add data to the main JSON Wrapper
|
131
|
-
data["bins"].append(dict_data)
|
132
|
-
|
62
|
+
if len(collection_next) != 1:
|
63
|
+
collection_date_obj = datetime.strptime(collection_next, "%d/%m/%y").date()
|
64
|
+
# since we only have the next collection day, if the parsed date is in the past,
|
65
|
+
# assume the day is instead next month
|
66
|
+
if collection_date_obj < datetime.now().date():
|
67
|
+
collection_date_obj += relativedelta(months=1)
|
68
|
+
# Make each Bin element in the JSON
|
69
|
+
dict_data = {
|
70
|
+
"type": bin_type,
|
71
|
+
"collectionDate": collection_date_obj.strftime("%d/%m/%Y"),
|
72
|
+
}
|
73
|
+
# Add data to the main JSON Wrapper
|
74
|
+
data["bins"].append(dict_data)
|
75
|
+
continue
|
133
76
|
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=hy8tlgmuKQWiq3PxNE16kaYHk6XxesuFkBvtpk-9oIw,132590
|
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
|
@@ -271,7 +271,7 @@ uk_bin_collection/uk_bin_collection/councils/SouthKestevenDistrictCouncil.py,sha
|
|
271
271
|
uk_bin_collection/uk_bin_collection/councils/SouthLanarkshireCouncil.py,sha256=fj-eZI0yrvQVCv8GvhcovZ3b9bV6Xv_ws3IunWjnv4U,3126
|
272
272
|
uk_bin_collection/uk_bin_collection/councils/SouthNorfolkCouncil.py,sha256=C2qIZjjbl9JnuukX9OH2RbfP0hSdp3uX76APGY33qKs,4622
|
273
273
|
uk_bin_collection/uk_bin_collection/councils/SouthOxfordshireCouncil.py,sha256=f9d2YDGv5hnN7Ul-u_I63h_BbpBU7CJFdgv-lOviRGc,4031
|
274
|
-
uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py,sha256=
|
274
|
+
uk_bin_collection/uk_bin_collection/councils/SouthRibbleCouncil.py,sha256=5HSTmrPc-gN3ZzLq6n2VDs_NhtCgXhnGqJkEejDmSHI,2900
|
275
275
|
uk_bin_collection/uk_bin_collection/councils/SouthStaffordshireDistrictCouncil.py,sha256=ACQMHWyamnj1ag3gNF-8Jhp-DKUok1GhFdnzH4nCzwU,3201
|
276
276
|
uk_bin_collection/uk_bin_collection/councils/SouthTynesideCouncil.py,sha256=dxXGrJfg_fn2IPTBgq6Duwy0WY8GYLafMuisaCjOnbs,3426
|
277
277
|
uk_bin_collection/uk_bin_collection/councils/SouthamptonCityCouncil.py,sha256=exNoI-Vun_C5FowCYhZ_600MBUe_OPR7MdGZEMNLL0I,1542
|
@@ -346,8 +346,8 @@ uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py,sha256=I2kBYMlsD4bId
|
|
346
346
|
uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py,sha256=QD4v4xpsEE0QheR_fGaNOIRMc2FatcUfKkkhAhseyVU,1159
|
347
347
|
uk_bin_collection/uk_bin_collection/create_new_council.py,sha256=m-IhmWmeWQlFsTZC4OxuFvtw5ZtB8EAJHxJTH4O59lQ,1536
|
348
348
|
uk_bin_collection/uk_bin_collection/get_bin_data.py,sha256=YvmHfZqanwrJ8ToGch34x-L-7yPe31nB_x77_Mgl_vo,4545
|
349
|
-
uk_bin_collection-0.152.
|
350
|
-
uk_bin_collection-0.152.
|
351
|
-
uk_bin_collection-0.152.
|
352
|
-
uk_bin_collection-0.152.
|
353
|
-
uk_bin_collection-0.152.
|
349
|
+
uk_bin_collection-0.152.4.dist-info/LICENSE,sha256=vABBUOzcrgfaTKpzeo-si9YVEun6juDkndqA8RKdKGs,1071
|
350
|
+
uk_bin_collection-0.152.4.dist-info/METADATA,sha256=wK9bVaoTAyW9e1hieARhWnIUnlDdpL6b_h0VNvGP4zw,26688
|
351
|
+
uk_bin_collection-0.152.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
352
|
+
uk_bin_collection-0.152.4.dist-info/entry_points.txt,sha256=36WCSGMWSc916S3Hi1ZkazzDKHaJ6CD-4fCEFm5MIao,90
|
353
|
+
uk_bin_collection-0.152.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{uk_bin_collection-0.152.3.dist-info → uk_bin_collection-0.152.4.dist-info}/entry_points.txt
RENAMED
File without changes
|