Cause racine : pronotepy peut rafraîchir (rotater) le token en mémoire pendant l'exécution via refresh() automatique après une PronoteAPIError. L'ancien code ne persistait les credentials qu'après le login initial, pas après les opérations de données. Le token roté en mémoire était perdu → au run suivant, token_login échouait avec le token périmé (KeyError 'dataSec'). Correction : - PronoteClient._persist_credentials() : méthode centralisée qui persiste export_credentials() après chaque opération réussie (get_lessons, get_homeworks, get_messages, get_informations) - Le token rafraîchi par le serveur pendant l'exécution est maintenant toujours persisté, même si le pipeline échoue ensuite Documentation : - .env.example : variables QR plus visibles (exemple qr_token décommentable) - AGENTS.md : QR code depuis le site web Pronote (pas l'app mobile), persistance après chaque opération de données - Wiki GuidePronote : procédure corrigée (site web, pas app Android/iOS), mention de la persistance après chaque opération Tests : 5 nouveaux tests de persistance (691 passés, couverture 94.92%)
86 lines
2.7 KiB
Plaintext
86 lines
2.7 KiB
Plaintext
# --- Pronote ---
|
|
PRONOTE_ICAL_URL=https://college.ent/pronote/ical/Edt_Jean.ics?icalsecurise=REPLACE_ME&version=2024
|
|
PRONOTE_URL=https://college.ent/pronote/parent.html
|
|
PRONOTE_ACCOUNT_TYPE=parent
|
|
PRONOTE_USERNAME=parent.dupont
|
|
PRONOTE_PASSWORD=your_secure_password
|
|
PRONOTE_ENT=monbureaunumerique
|
|
|
|
# Sources (auto = essayer iCal d'abord, puis pronotepy)
|
|
PRONOTE_AGENDA_SOURCE=auto
|
|
PRONOTE_HOMEWORK_SOURCE=auto
|
|
PRONOTE_MESSAGES_SOURCE=pronotepy
|
|
|
|
# --- Authentification Pronote ---
|
|
# Mode d'authentification : "password" (défaut) ou "qr_token"
|
|
# qr_token : pour les instances utilisant HubEduConnect/EduConnect où le mot de passe échoue
|
|
# Voir le wiki GuidePronote pour la procédure d'enrôlement QR code
|
|
PRONOTE_AUTH_MODE=password
|
|
|
|
# --- Mode qr_token (décommenter et renseigner pour l'authentification par QR code) ---
|
|
# Le QR code se génère sur le site web Pronote (espace parent > paramètres > QR code)
|
|
# Le QR code expire ~10 minutes après génération
|
|
# PRONOTE_AUTH_MODE=qr_token
|
|
# PRONOTE_QR_CODE_FILE=/path/to/qr_code.json
|
|
# PRONOTE_QR_PIN=1234
|
|
|
|
# --- CalDAV ---
|
|
CALDAV_URL=https://caldav.example.com/calendars/user/pronote/
|
|
CALDAV_USERNAME=user@example.com
|
|
CALDAV_PASSWORD=your_caldav_password
|
|
CALDAV_CALENDAR_PATH=/pronote-sync/
|
|
# Autoriser HTTP (non-HTTPS) pour un serveur CalDAV local (localhost uniquement)
|
|
CALDAV_ALLOW_INSECURE_HTTP=false
|
|
|
|
# Fenêtre de synchronisation (jours)
|
|
SYNC_PAST_DAYS=7
|
|
SYNC_FUTURE_DAYS=30
|
|
|
|
# --- Agenda théorique ---
|
|
THEORETICAL_AGENDA_PATH=./data/theoretical.json
|
|
SCHOOL_HOLIDAYS_PATH=./data/school_holidays.json
|
|
THEORETICAL_WEEK_ANCHOR_DATE=2026-09-01
|
|
THEORETICAL_WEEK_ANCHOR_TYPE=even
|
|
|
|
# --- XMPP ---
|
|
XMPP_ENABLED=false
|
|
XMPP_JID=user@example.com
|
|
XMPP_PASSWORD=your_xmpp_password
|
|
XMPP_HOST=example.com
|
|
XMPP_PORT=5222
|
|
XMPP_TO=parent@example.com
|
|
XMPP_RESOURCE=pronote-sync
|
|
XMPP_USE_TLS=true
|
|
XMPP_TIMEOUT=30
|
|
|
|
# --- IA (optionnelle) ---
|
|
# L'IA est désactivée par défaut ; l'activer volontairement (AI_ENABLED=true)
|
|
# et renseigner une clé API valide avant tout envoi.
|
|
AI_ENABLED=false
|
|
AI_PROVIDER=openai
|
|
AI_BASE_URL=https://api.openai.com/v1
|
|
# AI_API_KEY=
|
|
# AI_MODEL=gpt-4o-mini # exemple recommandé, non activé par défaut
|
|
|
|
# Exemple : OpenRouter (HTTPS)
|
|
# AI_PROVIDER=openai-compatible
|
|
# AI_BASE_URL=https://openrouter.ai/api/v1
|
|
# AI_MODEL=fournisseur/modele
|
|
# AI_API_KEY=your-openrouter-key
|
|
# AI_ALLOW_INSECURE_HTTP=false
|
|
|
|
# Exemple : Ollama local (HTTP, sans authentification réelle)
|
|
# AI_PROVIDER=openai-compatible
|
|
# AI_BASE_URL=http://127.0.0.1:11434/v1
|
|
# AI_MODEL=modele-local
|
|
# AI_API_KEY=local-not-required
|
|
# AI_ALLOW_INSECURE_HTTP=true
|
|
|
|
# --- Blog ---
|
|
BLOG_ENABLED=false
|
|
BLOG_RSS_URL=https://blogpeda.ac-bordeaux.fr/cjeliote/?feed=rss2
|
|
|
|
# --- Divers ---
|
|
DRY_RUN=false
|
|
LOG_LEVEL=INFO
|