A Python3, asyncio-based API for interacting with Ridwell waste recycling
Project description
♻️ aioridwell: A Python3, asyncio-based API for interacting with Ridwell
aioridwell
is a Python 3, asyncio-friendly library for interacting with
Ridwell to view information on upcoming recycling pickups.
Installation
pip install aioridwell
Python Versions
aioridwell
is currently supported on:
- Python 3.10
- Python 3.11
- Python 3.12
Usage
Creating and Using a Client
The Client
is the primary method of interacting with the API:
import asyncio
from aioridwell import async_get_client
async def main() -> None:
client = await async_get_client("<EMAIL>", "<PASSWORD>")
# ...
asyncio.run(main())
By default, the library creates a new connection to the API 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 aiowatttime import Client
async def main() -> None:
async with ClientSession() as session:
client = await async_get_client("<EMAIL>", "<PASSWORD>", session=session)
# ...
asyncio.run(main())
Getting the User's Dashboard URL
import asyncio
from aioridwell import async_get_client
async def main() -> None:
client = await async_get_client("<EMAIL>", "<PASSWORD>")
client.get_dashboard_url()
# >>> https://www.ridwell.com/users/userId1/dashboard
asyncio.run(main())
Getting Accounts
Getting all accounts associated with this email address is easy:
import asyncio
from aioridwell import async_get_client
async def main() -> None:
client = await async_get_client("<EMAIL>", "<PASSWORD>")
accounts = await client.async_get_accounts()
# >>> {"account_id_1": RidwellAccount(...), ...}
asyncio.run(main())
The RidwellAccount
object comes with some useful properties:
account_id
: the Ridwell ID for the accountaddress
: the address being servicedemail
: the email address on the accountfull_name
: the full name of the account ownerphone
: the phone number of the account ownersubscription_id
: the Ridwell ID for the primary subscriptionsubscription_active
: whether the primary subscription is active
Getting Pickup Events
Getting pickup events associated with an account is easy, too:
import asyncio
from aioridwell import async_get_client
async def main() -> None:
client = await async_get_client("<EMAIL>", "<PASSWORD>")
accounts = await client.async_get_accounts()
for account in accounts.values():
events = await account.async_get_pickup_events()
# >>> [RidwellPickupEvent(...), ...]
# You can also get just the next pickup event from today's date:
next_event = await account.async_get_next_pickup_event()
# >>> RidwellPickupEvent(...)
asyncio.run(main())
The RidwellPickupEvent
object comes with some useful properties:
pickup_date
: the date of the pickup (indatetime.date
format)pickups
: a list ofRidwellPickup
objectsstate
: anEventState
enum whose name represents the current state of the pickup event
Likewise, the RidwellPickup
object comes with some useful properties:
category
: aPickupCategory
enum whose name represents the type of pickupname
: the name of the item being picked upoffer_id
: the Ridwell ID for this particular offerpriority
: the pickup priorityproduct_id
: the Ridwell ID for this particular productquantity
: the amount of the product being picked up
Opting Into or Out Of a Pickup Event
import asyncio
from aioridwell import async_get_client
async def main() -> None:
client = await async_get_client("<EMAIL>", "<PASSWORD>")
accounts = await client.async_get_accounts()
for account in accounts.values():
events = await account.async_get_pickup_events()
# >>> [RidwellPickupEvent(...), ...]
await events[0].async_opt_in()
await events[0].async_opt_out()
asyncio.run(main())
Calculating a Pickup Event's Estimated Add-on Cost
import asyncio
from aioridwell import async_get_client
async def main() -> None:
client = await async_get_client("<EMAIL>", "<PASSWORD>")
accounts = await client.async_get_accounts()
for account in accounts.values():
events = await account.async_get_pickup_events()
# >>> [RidwellPickupEvent(...), ...]
event_1_cost = await events[0].async_get_estimated_addon_cost()
# >>> 22.00
asyncio.run(main())
Contributing
Thanks to all of our contributors so far!
- 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 on a new branch.
- Write tests that cover your new functionality.
- Run tests and ensure 100% code coverage:
poetry run pytest --cov aioridwell tests
- Update
README.md
with any new documentation. - 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
File details
Details for the file aioridwell-2024.1.0.tar.gz
.
File metadata
- Download URL: aioridwell-2024.1.0.tar.gz
- Upload date:
- Size: 11.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.12.1 Linux/6.2.0-1018-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3541770330eb17e5d5e593d41f14067da543842fa58687efa065891a822a3017 |
|
MD5 | dc6721721bc2fdeefdecebf8ca3bdd9c |
|
BLAKE2b-256 | 6f85bdc831718d4d8022b0728ad5d44014a41d6004495d9b3eb9ac295cc45775 |
File details
Details for the file aioridwell-2024.1.0-py3-none-any.whl
.
File metadata
- Download URL: aioridwell-2024.1.0-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.12.1 Linux/6.2.0-1018-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4dc04d4dcbc671357b7243a66033477af2b032891ad4a14856c03333da2fcb0a |
|
MD5 | c6fcfae2b5710bc8224db745d3684177 |
|
BLAKE2b-256 | 73da7865156ec57db862f3ea7766ec947f7e6a3fdc7004d5e6707028a99e2937 |