Skip to main content

A Python 3, asyncio-based library for the ReCollect Waste API

Project description

🗑 aiorecollect: A Python 3 Library for Pinboard

CI PyPi Version License Code Coverage Maintainability Say Thanks

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 general, cities/municipalities that utilize ReCollect will give you a way to subscribe to a calendar with pickup dates. If you examine the iCal URL for this calendar, the Place and Service IDs are embedded in it:

webcal://recollect.a.ssl.fastly.net/api/places/PLACE_ID/services/SERVICE_ID/events.en-US.ics

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: a datetime.date that denotes the pickup date
  • pickup_types: a list of PickupType objects that will occur with this event
  • area_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 type
  • friendly_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

  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.
  7. Write tests that cover your new functionality.
  8. Run tests and ensure 100% code coverage: script/test
  9. Update README.md with any new documentation.
  10. Add yourself to AUTHORS.md.
  11. 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

aiorecollect-1.0.6.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aiorecollect-1.0.6-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file aiorecollect-1.0.6.tar.gz.

File metadata

  • Download URL: aiorecollect-1.0.6.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.7 CPython/3.7.11 Linux/5.8.0-1036-azure

File hashes

Hashes for aiorecollect-1.0.6.tar.gz
Algorithm Hash digest
SHA256 5b6f70627af70467fdd4f758dec0b2507548f36941219505d3b436eb023240f0
MD5 1d219c408cae6c0e7e27571b945bdca8
BLAKE2b-256 39675c1a637d1f2c1262a15f5f75d2c5e59693f301403925181879b6c1066a22

See more details on using hashes here.

File details

Details for the file aiorecollect-1.0.6-py3-none-any.whl.

File metadata

  • Download URL: aiorecollect-1.0.6-py3-none-any.whl
  • Upload date:
  • Size: 5.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.7 CPython/3.7.11 Linux/5.8.0-1036-azure

File hashes

Hashes for aiorecollect-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 59dd84a34fbcd56d49105ced553e03502b06ae26c3caaac3fe516501567cc4eb
MD5 0c47f2e8ec1192c0842a0c11a931e7b2
BLAKE2b-256 2abd5c43868224265a34033abfb772cf8e1e7e474630a22aa7a0a56e8316942a

See more details on using hashes here.

Supported by

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