OpenCode 2928cca8b9 fix(xmpp): remplacer use_tls par tls_mode et borner les phases de connexion
Cause racine (#25) : use_tls=True (défaut) activait le direct TLS sur le
port 5222 (conventionnellement STARTTLS). Le client envoyait un ClientHello
TLS sur un port attendant un stream XMPP en clair, le serveur ne voyait
jamais l'identité configurée, et la session expirait après 30 s.

Corrections :
- Remplacer use_tls (bool) par tls_mode: Literal[direct|starttls|disabled]
  (défaut starttls, compatible port 5222). use_tls conservé comme alias
  déprécié avec DeprecationWarning.
- Ajouter connect_timeout (15 s) et cleanup_timeout (10 s) distincts du
  timeout de session (30 s).
- Gérer l'événement connection_failed de Slixmpp pour échouer rapidement
  au lieu d'attendre le timeout de session.
- Borner await connect_future et await disconnect_future par leurs
  timeouts respectifs (anti-blocage).
- Attendre connect_future et session_future conjointement
  (asyncio.wait, FIRST_COMPLETED) pour détecter connection_failed avant
  l'expiration du connect_timeout.
- Annuler les tâches pending sur tous les chemins de retour, y compris
  CancelledError et Exception.
- Redact tous les redact_exception avec extra_secrets=_secret_values().
- Construire ClientXMPP dans le try (contrat « never raises »).
- Enrichir FakeClientXMPP avec modes connect/disconnect configurables.
- 25 nouveaux tests (timeout connexion, connection_failed, cleanup
  bloqué, CancelledError, TLS mismatch, fuite secrets). Couverture 96 %.
- Mettre à jour .env.example, GUIDE_DEV_PYTHON.md, README.LLM.md.

Co-authored-by: OpenCode <opencode@antoineve.me>
2026-09-11 17:00:34 +02:00
2026-09-11 11:57:21 +02:00
2026-09-10 23:41:19 +02:00
2026-09-11 11:57:21 +02:00
2026-09-11 11:57:21 +02:00

pronote-sync

Synchronisation Pronote → CalDAV + XMPP.


Synchronise l'agenda et les devoirs de Pronote vers un calendrier CalDAV et envoie un résumé quotidien par XMPP. Supporte les sources iCal et pronotepy avec repli automatique. Synthèse IA optionnelle.


🚀 Démarrage rapide

# Cloner le dépôt
git clone <repo-url>
cd pronote-sync

# Créer l'environnement virtuel
python3.13 -m venv .venv
source .venv/bin/activate

# Installer
pip install -e ".[dev]"

# Configurer
cp .env.example .env
# Éditer .env avec vos paramètres (voir .env.example pour le détail)

# Tester
pronote-sync --dry-run --log-level DEBUG

📖 Utilisation

pronote-sync                    # Exécute la synchronisation
pronote-sync --dry-run          # Simulation : lectures autorisées, aucune écriture persistante ni sortie distante
pronote-sync --log-level DEBUG  # Verbosité des journaux

En --dry-run, les données peuvent être lues pour construire la simulation, mais aucun état local de source n'est enregistré : l'état RSS reste en mémoire pendant l'exécution. Les écritures CalDAV et l'envoi XMPP sont également désactivés. Le mode PRONOTE_AUTH_MODE=qr_token est refusé avant toute connexion, car la rotation de son token ne peut pas garantir un état persistant cohérent pendant une simulation.


🛠️ Déploiement

Les artefacts pour systemd/timer et logrotate sont fournis dans deploy/. Voir docs/exploitation.md pour plus de détails.


🙏 Remerciements

Ce projet repose sur les bibliothèques open-source suivantes :

Inspiré de pronote-digest par Yoan Bernabeu.


Licence

MIT — voir LICENSE.

Description
Outil python pour récupérer les informations transmises par le collège via Pronote et leur site internet.
Readme MIT 3.5 MiB
Languages
Python 100%