Metadata-Version: 2.4
Name: siri-lite
Version: 0.10.0
Summary: CLI and library to query SIRI-lite public transport APIs
Author-email: Dhrions <aturing@laposte.net>
License: MIT
Project-URL: Homepage, https://github.com/dhrions/siri-lite
Project-URL: Repository, https://github.com/dhrions/siri-lite
Project-URL: Issues, https://github.com/dhrions/siri-lite/issues
Project-URL: Documentation, https://docs.dhrions.fr/dhrions/siri-lite/
Keywords: siri,siri-lite,transport,real-time,public-transit,cli
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click>=8.1
Requires-Dist: requests>=2.32
Requires-Dist: python-dateutil>=2.9
Requires-Dist: Flask>=3.1
Provides-Extra: dev
Requires-Dist: pytest>=8.3; extra == "dev"
Requires-Dist: pytest-mock>=3.14; extra == "dev"
Requires-Dist: responses>=0.25; extra == "dev"
Requires-Dist: coverage>=7.6; extra == "dev"
Requires-Dist: python-semantic-release<10,>=9; extra == "dev"
Dynamic: license-file

![SIRI-lite](siri-lite.png)

# SIRI-lite

Dhrions
Version 0.5.0, 12/08/2026

> Outil Python pour interroger des API de transport en commun compatibles SIRI-lite

[Documentation](https://docs.dhrions.fr/dhrions/siri-lite/) · [Issues](https://gitea.dhrions.fr/dhrions/siri-lite/issues)

## ⚡ TL;DR

- 🚌 Interroge des API de transport en commun compatibles SIRI-lite pour les prochains passages et le temps restant avant arrivée
- 🎯 Pour qui : usage personnel, intégrations (ex. Home Assistant)
- 🚀 `siri-lite stop-monitoring --service CTS --stop-code 43A --token YOUR_TOKEN --print`

Le projet fournit :
- 🖥️ une **CLI** (ligne de commande),
- 🌐 une **interface web minimale** (Flask),
- 🔗 une base solide pour des intégrations (ex. Home Assistant).

## 📋 Table des matières

- [⚡ TL;DR](#-tldr)
- [✨ Fonctionnalités principales](#-fonctionnalités-principales)
- [🚀 Installation rapide](#-installation-rapide)
- [💻 Utilisation (CLI)](#-utilisation-cli)
- [📦 Utilisation avec Docker](#-utilisation-avec-docker)
- [🧪 Tests](#-tests)
- [🏗️ Architecture](#️-architecture)
- [📚 Documentation complète](#-documentation-complète)
- [⚠️ Sécurité](#️-sécurité)
- [📄 Licence](#-licence)

---

## ✨ Fonctionnalités principales

- ⏱️ Récupération du **temps restant avant l'arrivée** d'un véhicule à un arrêt
- 🚌 Support de plusieurs réseaux (ex. **CTS**, **PRIM / Île-de-France Mobilités**)
- 📤 Sortie console, fichier JSON ou intégration applicative
- 📦 Exécution locale ou via **Docker**
- 📚 Documentation complète générée avec **Antora**

---

## 🚀 Installation rapide

### Environnement Python

```bash
python3 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
```

### Configuration

Copier `.env.example` vers `.env` (fichier réellement ignoré par git, contrairement à
`.env.example` qui n'est qu'un gabarit) et y renseigner les paramètres du service utilisé :

```
CTS_BASE_API_URL=https://api.cts-strasbourg.eu/
CTS_AUTH_METH=Basic Auth
PRIM_BASE_API_URL=https://prim.iledefrance-mobilites.fr/
PRIM_AUTH_METH=apiKey
STOP_MONITORING_ENDPOINT=siri/2.0/stop-monitoring?MonitoringRef=
```

Ces mêmes valeurs peuvent aussi être fournies via `services.conf`, résolu en suivant la
spec XDG Base Directory (`--config`, puis `$XDG_CONFIG_HOME/siri-lite/`, puis
`~/.siri-lite/`, puis le répertoire courant) — voir la documentation Antora pour le
détail. Les tokens, eux, **ne doivent jamais être commités** ; ils se passent via
`--token` (CLI) ou `{SERVICE}_TOKEN` (interface web, ex. `CTS_TOKEN` ou `PRIM_TOKEN`
selon le paramètre `?service=`).

---

## 💻 Utilisation (CLI)

Exemple avec le service CTS :

```bash
siri-lite stop-monitoring \
  --service CTS \
  --stop-code 43A \
  --token YOUR_TOKEN \
  --print
```

Exemple avec PRIM :

```bash
siri-lite stop-monitoring \
  --service PRIM \
  --stop-code STIF%3AStopPoint%3AQ%3A473921%3A \
  --token YOUR_TOKEN \
  --print
```

### Options

| Option | Description |
|---|---|
| `--service` | Réseau de transport (`CTS` ou `PRIM`) |
| `--stop-code` | Code de l'arrêt à interroger |
| `--token` | Token d'authentification de l'API |
| `--print` | Affiche le résultat sur la sortie standard |
| `--unit` | Unité du temps restant (`minutes` ou `seconds`, défaut `minutes`) |
| `-c`, `--count` | Nombre de prochains passages à afficher (défaut `1` : un entier ; au-delà, une liste) |
| `-o`, `--output` | Écrit le résultat au format JSON dans le fichier indiqué |
| `--config` | Chemin explicite vers `services.conf` (voir section Configuration ci-dessus) |
| `-d`, `--debug` | Active les logs de debug |

### Recherche d'arrêts PRIM

```bash
# Backend static (défaut) : sans token, métadonnées seulement
siri-lite stops-discovery "Châtelet" --print

# Backend icar (recommandé) : token requis, MonitoringRef candidat
siri-lite stops-discovery "Châtelet" --backend icar --token "$PRIM_TOKEN" --print
```

| Option | Description |
|---|---|
| `QUERY` | Nom d'arrêt à rechercher (sous-chaîne, insensible à la casse/accents) |
| `--backend` | `static` (défaut, sans token) ou `icar` (référentiel ICAR, `--token` requis) |
| `--token` | Token PRIM, requis pour `--backend icar` |
| `--print` | Affiche le résultat sur la sortie standard |
| `-l`, `--limit` | Nombre maximal d'arrêts affichés (défaut `10`) |
| `--refresh` | Force le retéléchargement du jeu de données (sinon mis en cache) |
| `--cache` | Chemin explicite du fichier de cache (défaut : `$XDG_CACHE_HOME/siri-lite/`) |
| `-o`, `--output` | Écrit le résultat au format JSON dans le fichier indiqué |
| `-d`, `--debug` | Active les logs de debug |

⚠️ Le backend `static` aide à *retrouver* un arrêt PRIM (nom, commune,
lignes) sans code garanti utilisable avec `stop-monitoring`. Le backend
`icar` affiche un `MonitoringRef` candidat (même espace d'identifiants que
SIRI, vérifié empiriquement), mais son premier appel télécharge ~120 Mo
(~30 s, pas de recherche par nom côté API ICAR). Voir la documentation
Antora (PRIM → Arrêts) pour le détail.

---

## 📦 Utilisation avec Docker

```bash
docker build -t siri-lite .
docker run --env-file .env siri-lite stop-monitoring \
  --service CTS \
  --stop-code 43A \
  --token YOUR_TOKEN
```

---

## 🧪 Tests

```bash
# Tous les tests
pytest tests/

# Un fichier spécifique
pytest tests/test_models.py

# Avec couverture
coverage run -m pytest tests/ && coverage report
```

---

## 🏗️ Architecture

Structure plate et simple :

```
src/siri_lite/
├── cli.py             # Commandes CLI (Click)
├── web.py             # Interface web (Flask)
├── services.py        # Logique métier
├── siri_client.py     # Client API SIRI + parsing
├── models.py          # Modèles de données (DTOs)
├── http_client.py     # Client HTTP générique (requests)
├── config.py          # Chargement configuration
├── main.py            # Point d'entrée
└── logging_config.py  # Configuration du logging
```

---

## 📚 Documentation complète

La **documentation détaillée** (architecture, services supportés, exemples, intégration Home Assistant, etc.) est disponible via **Antora** :

```bash
antora antora-playbook.yml
```

Sources de la documentation : `docs/`

---

## ⚠️ Sécurité

- Les fichiers `.env` et `.secrets` **ne doivent jamais être versionnés**
- Les tokens visibles dans l'historique doivent être considérés comme compromis et régénérés

---

## 📄 Licence

Projet personnel – licence à définir.
