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
Metadata
Release files for data-grand-lyon-ha 0.9.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| data_grand_lyon_ha-0.9.1.tar.gz | 33.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| data_grand_lyon_ha-0.9.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.5 kB
Release files / data_grand_lyon_ha-0.9.1.tar.gz
| Download URL | data_grand_lyon_ha-0.9.1.tar.gz |
|---|---|
| Size | 33.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3f919264af2400815182ddeace48aad40a7d21cc51a9dd0d48663fe443e4bebf
|
|
BLAKE2b-256 checksum How to use checksums |
a771c9239f2e9e8d83921896eee3364d4a2d724eaff5c104943c748781f98f2b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}
|
Release files / data_grand_lyon_ha-0.9.1-py3-none-any.whl
| Download URL | data_grand_lyon_ha-0.9.1-py3-none-any.whl |
|---|---|
| Size | 9.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
29749634421b02ae73cddf602459fea7dc3c48012a81f89f637b122964f21a3e
|
|
BLAKE2b-256 checksum How to use checksums |
7425699d3a0d89f86c6bd5c70ea4ad7869f1c8c36e7d6c608eb3cd7f327f7227
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}
|
Security for data-grand-lyon-ha 0.9.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.