A Python 3, asyncio-based library for the Recollect Waste API
Project description
🗑 aiorecollect: A Python 3 Library for Pinboard
aiorecollect
is a Python 3, asyncio-based library for the Recollect Waste API. It
allows users to programmatically retrieve schedules for waste removal in their area,
including trash, recycling, compost, and more.
Special thanks to @stealthhacker for the inspiration!
Installation
pip install aiorecollect
Python Versions
aiorecollect
is currently supported on:
- Python 3.7
- Python 3.8
- Python 3.9
Place and Service IDs
To use aiorecollect
, you must know both your Recollect Place and Service IDs:
- In Chrome open developer tools and go to network tab.
- Go to your city's Recollect collection calendar.
- Search for and select your address in the UI.
- Watch for a request that looks like
https://api.recollect.net/api/places/(place_id)/services/(service_id)/events...
- Use the place_id and service_id when instantiating a new
Client
.
Usage
import asyncio
from datetime import date
from aiorecollect import Client
async def main() -> None:
"""Run."""
client = await Client("<PLACE ID>", "<SERVICE ID>")
# The client has a few attributes that you can access:
client.place_id
client.service_id
# Get all pickup events on the calendar:
pickup_results = await client.async_get_pickup_events()
# ...or get all pickup events within a certain date range:
pickup_results = await client.async_get_pickup_events(
start_date=date(2020, 10, 1), end_date=date(2020, 10, 31)
)
# ...or just get the next pickup event:
next_pickup = await client.async_get_next_pickup_event()
asyncio.run(main())
The PickupEvent
Object
The PickupEvent
object that is returned from the above calls comes with three
properties:
date
: adatetime.date
that denotes the pickup datepickup_types
: a list ofPickupType
objects that will occur with this eventarea_name
: the name of the area in which the event is occurring
The PickupType
Object
The PickupType
object contains the "internal" name of the pickup type and a
human-friendly representation when it exists:
name
: the internal name of the pickup typefriendly_name
: the humany-friendly name of the pickup type (if it exists)
Connection Pooling
By default, the library creates a new connection to Recollect with each coroutine. If
you are calling a large number of coroutines (or merely want to squeeze out every second
of runtime savings possible), an
aiohttp
ClientSession
can be used for connection
pooling:
import asyncio
from aiohttp import ClientSession
from aiorecollect import Client
async def main() -> None:
"""Run."""
async with ClientSession() as session:
client = await Client("<PLACE ID>", "<SERVICE ID>", session=session)
# Get to work...
asyncio.run(main())
Contributing
- Check for open features/bugs or initiate a discussion on one.
- Fork the repository.
- (optional, but highly recommended) Create a virtual environment:
python3 -m venv .venv
- (optional, but highly recommended) Enter the virtual environment:
source ./.venv/bin/activate
- Install the dev environment:
script/setup
- Code your new feature or bug fix.
- Write tests that cover your new functionality.
- Run tests and ensure 100% code coverage:
script/test
- Update
README.md
with any new documentation. - Add yourself to
AUTHORS.md
. - Submit a pull request!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for aiorecollect-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d3b35f130212bb66abd51f028a1a7cfdce0d233feadcc6e090cf18ac5365668 |
|
MD5 | 998b0cd7c9baad142305cb1cc00aef86 |
|
BLAKE2b-256 | 58562e7b21f971135e501cad838b8537e4908087c401ad395fc01ec851d3a4cd |