Skip to main content

Python library to retrieve data from Grand Lyon open data platform, for Home Assistant.

Project description

data_grand_lyon_ha

Python library to retrieve data from the Grand Lyon open data platform.

Intended for use as a Home Assistant integration backend.

Installation

pip install data-grand-lyon-ha

Or with uv:

uv add data-grand-lyon-ha

Usage

import asyncio
from datetime import datetime
import aiohttp
from data_grand_lyon_ha import (
    DataGrandLyonClient,
    extract_tcl_pictogram_from_zip,
    filter_tcl_alerts_by_line,
    filter_tcl_passages_by_line,
    filter_tcl_passages_by_stop,
    find_tcl_line_pictogram_by_code,
    find_tcl_park_and_ride_by_id,
    find_tcl_stop_by_id,
    find_velov_station_by_id,
    sort_tcl_alerts_by_relevance,
    sort_tcl_passages_by_time,
)

async def main():
    async with aiohttp.ClientSession() as session:
        client = DataGrandLyonClient(session)
        # Or with authentication (required for real-time TCL passages):
        # client = DataGrandLyonClient(session, username="user", password="pass")

        # TCL passages: fetch all, then filter and sort client-side
        all_passages = await client.get_tcl_passages()
        passages = filter_tcl_passages_by_stop(
            filter_tcl_passages_by_line(all_passages, "A"), 30101
        )
        for p in sort_tcl_passages_by_time(passages):
            print(f"{p.ligne}{p.direction} in {p.delai_passage} [{p.type}]")

        # TCL stops: fetch all, then look one up by ID
        stops = await client.get_tcl_stops()
        stop = find_tcl_stop_by_id(stops, 1041)
        if stop:
            print(f"{stop.nom} ({stop.commune}) — lines: {stop.desserte}")

        # Vélo'v stations: fetch all, then look one up by ID
        stations = await client.get_velov_stations()
        station = find_velov_station_by_id(stations, 10044)
        if station:
            print(
                f"{station.name}: {station.available_bikes}/{station.bike_stands} bikes"
            )

        # TCL park-and-rides (P+R): fetch all, then look one up by ID
        parks = await client.get_tcl_park_and_rides()
        park = find_tcl_park_and_ride_by_id(parks, "VAI2")
        if park:
            print(
                f"{park.nom}: {park.nb_tot_place_dispo}/{park.capacite} places"
            )

        # TCL traffic alerts: fetch all, filter by line, then sort most-relevant-first
        # (ongoing or starting today come before later days; ended alerts last).
        all_alerts = await client.get_tcl_alerts()
        alerts = filter_tcl_alerts_by_line(all_alerts, "27")
        for a in sort_tcl_alerts_by_relevance(alerts, datetime.now()):
            print(f"[{a.type}] {a.titre} ({a.debut:%d/%m %H:%M}{a.fin:%d/%m %H:%M})")

        # TCL line pictograms: list lines, then extract one line's SVG as bytes
        # (e.g. for a Home Assistant image entity).
        lines = await client.get_tcl_line_pictograms()
        line = find_tcl_line_pictogram_by_code(lines, "10")
        if line:
            zip_bytes = await client.get_tcl_line_pictograms_zip()
            svg = extract_tcl_pictogram_from_zip(zip_bytes, line.picto_complet)
            if svg:
                print(f"Pictogram for line 10: {len(svg)} bytes")

asyncio.run(main())

Development

This project uses uv for dependency management.

# Run tests
uv run pytest

# Build the package
uv build

License

MIT

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

data_grand_lyon_ha-0.9.0.tar.gz (2.1 MB view details)

Uploaded Source

Built Distribution

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

data_grand_lyon_ha-0.9.0-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

Details for the file data_grand_lyon_ha-0.9.0.tar.gz.

File metadata

  • Download URL: data_grand_lyon_ha-0.9.0.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.22 {"installer":{"name":"uv","version":"0.11.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for data_grand_lyon_ha-0.9.0.tar.gz
Algorithm Hash digest
SHA256 d25e0c4f7877f8f20f247348c5502d1483b8e3ad44eae230528f259d423d9b1c
MD5 0e2bee48a91a65492d47598b6740092a
BLAKE2b-256 66238d3be3677463245bde7e2be0a98649190d49fc645a1eb80b17b40cd3c089

See more details on using hashes here.

File details

Details for the file data_grand_lyon_ha-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: data_grand_lyon_ha-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 9.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.22 {"installer":{"name":"uv","version":"0.11.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for data_grand_lyon_ha-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2ca939f3ec2e7496d8fe0b0f17eeb122d2946eeaa6404f25b1fcbb096f04a526
MD5 7bd7fb3e1be06b776cd48d6141202343
BLAKE2b-256 ab132d92b0840c5f90314cbe327bccb89e95cd5c2b58530b3e6785110dd3d562

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