Skip to main content

Async integration layer between Home Assistant and Dutch municipal visitor parking APIs.

Project description

pyCityVisitorParking

Async integration layer between Home Assistant and Dutch municipal visitor parking APIs.

Status

This package ships the core client, provider interface, and discovery tooling, plus the following providers:

  • DVS Portal
  • The Hague

list_providers() reads provider manifests under src/pycityvisitorparking/provider/.

Provider documentation:

Supported municipalities

For exact base_url and api_uri values, see the provider READMEs.

  • DVS Portal: Apeldoorn, Bloemendaal, Delft, Den Bosch, Doetinchem (via Buha), Groningen, Haarlem, Harlingen, Heemstede, Heerenveen, Heerlen, Hengelo, Katwijk, Leiden, Leidschendam-Voorburg, Middelburg, Nissewaard, Oldenzaal, Rijswijk, Roermond, Schouwen-Duiveland, Sittard-Geleen, Smallingerland, Sudwest-Fryslan, Veere, Venlo, Vlissingen, Waadhoeke, Waalwijk, Weert, Zaanstad, Zevenaar, Zutphen, Zwolle
  • The Hague: The Hague

Installation

pip install pycityvisitorparking

Usage

import asyncio

from pycityvisitorparking import Client


async def main() -> None:
    async with Client() as client:
        providers = await client.list_providers()
        print(providers)


asyncio.run(main())

Async behavior

Provider discovery (list_providers(), get_provider()) runs in background threads so async callers avoid blocking the event loop.

Available data

The public API exposes a small, provider-agnostic set of models and operations. Provider READMEs list credential requirements and any unsupported operations.

  • Providers: list_providers() returns ProviderInfo with id and favorite_update_possible.
  • Permit: get_permit() returns Permit with id, remaining_balance (minutes), and zone_validity.
  • Zone validity: each ZoneValidityBlock includes start_time and end_time (UTC ISO 8601).
  • Reservations: list_reservations(), start_reservation(), update_reservation(), and end_reservation() return Reservation with id, name, license_plate, start_time, and end_time.
  • Favorites: list_favorites() and add_favorite() return Favorite with id, name, and license_plate. update_favorite() returns Favorite, while remove_favorite() removes the entry without returning data.

Provider framework

Providers are discovered via manifest.json files without importing provider modules. Discovery runs in a background thread to avoid blocking the event loop. To add a provider later, create:

src/pycityvisitorparking/provider/<provider_id>/
  manifest.json
  __init__.py
  api.py
  const.py
  README.md
  CHANGELOG.md

Only files under src/pycityvisitorparking/provider/<provider_id>/ should change in a provider PR.

Normalization rules

  • All public timestamps must be UTC ISO 8601 with Z and no microseconds.
  • License plates are normalized to uppercase A-Z0-9 without spaces/symbols.
  • zone_validity must include only chargeable windows.

Development

Run checks with Hatch:

hatch run lint:check
hatch run lint:format-check
hatch run test:run

Build artifacts:

hatch build
python -m twine check dist/*

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

pycityvisitorparking-0.3.1.tar.gz (30.9 kB view details)

Uploaded Source

Built Distribution

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

pycityvisitorparking-0.3.1-py3-none-any.whl (33.9 kB view details)

Uploaded Python 3

File details

Details for the file pycityvisitorparking-0.3.1.tar.gz.

File metadata

  • Download URL: pycityvisitorparking-0.3.1.tar.gz
  • Upload date:
  • Size: 30.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pycityvisitorparking-0.3.1.tar.gz
Algorithm Hash digest
SHA256 0816c97fe138103182f8fa9a3a748ce117e008616ed5ca6d398368195f2f8b55
MD5 84f763a6f994bee534d6e70fdf1ba6f8
BLAKE2b-256 814fa54cb608df446915c59a50fd41a60ad19193b1f07a7c378745c404d81834

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycityvisitorparking-0.3.1.tar.gz:

Publisher: release.yml on sir-Unknown/pyCityVisitorParking

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pycityvisitorparking-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pycityvisitorparking-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3d9c310480eb9fe3ca91ae9b6d307f98bb6cb92275e9fa0438ce4c2d811bb89f
MD5 97e46f938bfdb40dce23d95be7104273
BLAKE2b-256 0c3d70cc965f7accbb0f024c556937993b0e94ca30cca34a5e81cc29fc2e155d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycityvisitorparking-0.3.1-py3-none-any.whl:

Publisher: release.yml on sir-Unknown/pyCityVisitorParking

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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