Skip to main content

A Python3, asyncio-based API for interacting with Ridwell waste recycling

Project description

♻️ aioridwell: A Python3, asyncio-based API for interacting with Ridwell

CI PyPI Version License Code Coverage Maintainability

Buy Me A Coffee

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 account
  • address: the address being serviced
  • email: the email address on the account
  • full_name: the full name of the account owner
  • phone: the phone number of the account owner
  • subscription_id: the Ridwell ID for the primary subscription
  • subscription_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 (in datetime.date format)
  • pickups: a list of RidwellPickup objects
  • state: an EventState enum whose name represents the current state of the pickup event

Likewise, the RidwellPickup object comes with some useful properties:

  • category: a PickupCategory enum whose name represents the type of pickup
  • name: the name of the item being picked up
  • offer_id: the Ridwell ID for this particular offer
  • priority: the pickup priority
  • product_id: the Ridwell ID for this particular product
  • quantity: 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!

  1. Check for open features/bugs or initiate a discussion on one.
  2. Fork the repository.
  3. (optional, but highly recommended) Create a virtual environment: python3 -m venv .venv
  4. (optional, but highly recommended) Enter the virtual environment: source ./.venv/bin/activate
  5. Install the dev environment: script/setup
  6. Code your new feature or bug fix on a new branch.
  7. Write tests that cover your new functionality.
  8. Run tests and ensure 100% code coverage: poetry run pytest --cov aioridwell tests
  9. Update README.md with any new documentation.
  10. Submit a pull request!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aioridwell-2024.1.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

aioridwell-2024.1.0-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

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

Hashes for aioridwell-2024.1.0.tar.gz
Algorithm Hash digest
SHA256 3541770330eb17e5d5e593d41f14067da543842fa58687efa065891a822a3017
MD5 dc6721721bc2fdeefdecebf8ca3bdd9c
BLAKE2b-256 6f85bdc831718d4d8022b0728ad5d44014a41d6004495d9b3eb9ac295cc45775

See more details on using hashes here.

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

Hashes for aioridwell-2024.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4dc04d4dcbc671357b7243a66033477af2b032891ad4a14856c03333da2fcb0a
MD5 c6fcfae2b5710bc8224db745d3684177
BLAKE2b-256 73da7865156ec57db862f3ea7766ec947f7e6a3fdc7004d5e6707028a99e2937

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page