Tewkesbury Borough Council API URL change + remove postcode option (#1613)

* Update Tewkesbury API URL and remove postcode option

The API URL for Tewkesbury Borough council has changed, and the postcode option no longer works, so this has been removed.

* Remove postcode option from Tewksbury Borough Council

Reflect changes in docs to remove postcode option from Tewksbury borough council

* allow postcode as depricated method

---------

Co-authored-by: 5ila5 <5ila5@users.noreply.github.com>
This commit is contained in:
Rob Tribe
2024-01-05 13:55:20 +00:00
committed by GitHub
parent f1b355993e
commit 9f10a415a7
2 changed files with 32 additions and 39 deletions

View File

@@ -1,19 +1,21 @@
import logging
from datetime import datetime
from urllib.parse import quote as urlquote
import requests
from waste_collection_schedule import Collection
from waste_collection_schedule import Collection # type: ignore[attr-defined]
TITLE = "Tewkesbury Borough Council"
DESCRIPTION = "Home waste collection schedule for Tewkesbury Borough Council"
URL = "https://www.tewkesbury.gov.uk"
TEST_CASES = {
"Council Office": {"postcode": "GL20 5TT"},
"Council Office No Spaces": {"postcode": "GL205TT"},
"UPRN example": {"uprn": 100120544973},
"Deprecated postcode": {"postcode": "GL20 5TT"},
"Deprecated postcode No Spaces": {"postcode": "GL205TT"},
}
API_URL = "https://api-2.tewkesbury.gov.uk/general/rounds/%s/nextCollection"
DEPRICATED_API_URL = "https://api-2.tewkesbury.gov.uk/general/rounds/%s/nextCollection"
API_URL = "https://api-2.tewkesbury.gov.uk/incab/rounds/%s/next-collection"
ICON_MAP = {
"Refuse": "mdi:trash-can",
@@ -22,17 +24,28 @@ ICON_MAP = {
"Food": "mdi:silverware-fork-knife",
}
LOGGER = logging.getLogger(__name__)
class Source:
def __init__(self, postcode: str = None, uprn: str = None):
self._post_or_uprn = str(uprn) if uprn else postcode
def __init__(self, postcode: str | None = None, uprn: str | None = None):
self.urpn = str(uprn) if uprn is not None else None
self.postcode = str(postcode) if postcode is not None else None
def fetch(self):
if self._post_or_uprn is None:
raise Exception("postcode not set")
if self.urpn is None:
LOGGER.warning(
"Using deprecated API might not work in the future. Please provide a UPRN."
)
return self.get_data(self.postcode, DEPRICATED_API_URL)
return self.get_data(self.urpn)
encoded_postcode = urlquote(self._post_or_uprn)
request_url = API_URL % encoded_postcode
def get_data(self, uprn, api_url=API_URL):
if uprn is None:
raise Exception("UPRN not set")
encoded_urpn = urlquote(uprn)
request_url = api_url % encoded_urpn
response = requests.get(request_url)
response.raise_for_status()
@@ -41,18 +54,20 @@ class Source:
entries = []
if data["status"] != "OK":
raise Exception(f"Error fetching data. \"{data['status']}\": \n {data['body']}")
raise Exception(
f"Error fetching data. \"{data['status']}\": \n {data['body']}"
)
schedule = data["body"]
for schedule_entry in schedule:
entries.append(
Collection(
date=datetime.strptime(
schedule_entry["NextCollection"], "%Y-%m-%d").date(),
schedule_entry["NextCollection"], "%Y-%m-%d"
).date(),
t=schedule_entry["collectionType"],
icon=ICON_MAP.get(schedule_entry["collectionType"])
icon=ICON_MAP.get(schedule_entry["collectionType"]),
)
)
return entries

View File

@@ -1,17 +1,9 @@
# Tewkesbury City Council
Support for upcoming schedules provided by [Tewkesbury City Council](https://www.tewkesbury.gov.uk/waste-and-recycling), serving Tewkesbury (UK) and areas of Gloucestershire.
Support for upcoming schedules provided by [Tewkesbury City Council](https://tewkesbury.gov.uk/services/waste-and-recycling/), serving Tewkesbury (UK) and areas of Gloucestershire.
## Configuration via configuration.yaml
```yaml
waste_collection_schedule:
sources:
- name: tewkesbury_gov_uk
args:
postcode: POSTCODE
```
```yaml
waste_collection_schedule:
sources:
@@ -22,25 +14,11 @@ waste_collection_schedule:
### Configuration Variables
**POSTCODE**
*(string) (optional)*
Not all addresses are supported by postcode. Then you have to provide a UPRN.
**UPRN**
*(string) (optional)*
Either `postcode` or `uprn` must be provided.
*(string) (required)*
## Example
```yaml
waste_collection_schedule:
sources:
- name: tewkesbury_gov_uk
args:
postcode: "GL20 5TT"
```
```yaml
waste_collection_schedule:
sources: