py_atmo_data_wrapper/demos/demo_licence_atmo.py
2025-07-14 17:56:57 +02:00

213 lines
No EOL
6.7 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Démonstration des fonctions de licence Atmo France
=================================================
Ce script montre comment utiliser les fonctions utilitaires pour afficher
la mention légale requise par Atmo France selon leur licence d'utilisation
des données en open data sous licence ODbL.
Conformément aux exigences d'Atmo France:
"Chacun peut donc bénéficier gratuitement de ces données mises en open data
sous licence ODbL, en indiquant la source "Atmo France et les Associations
agréées de surveillance de la qualité de l'air" ou "Atmo France / AASQA"
dans sa version courte."
"""
import sys
import os
# Ajouter le répertoire parent au PYTHONPATH pour importer le package local
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from atmo_data_wrapper import (
get_atmo_licence,
print_atmo_licence,
ATMO_LICENCE_COURTE,
ATMO_LICENCE_LONGUE,
ATMO_LICENCE_COMPLETE
)
def demo_licence_formats():
"""Démonstration des différents formats de licence"""
print("📋 FORMATS DE LICENCE ATMO FRANCE")
print("=" * 50)
print()
print("1⃣ Version courte (recommandée pour citations):")
print(f"{get_atmo_licence('courte')}")
print()
print("2⃣ Version longue (nom officiel complet):")
print(f"{get_atmo_licence('longue')}")
print()
print("3⃣ Version complète (avec détails de licence):")
print(get_atmo_licence('complete'))
print()
def demo_usage_examples():
"""Exemples d'utilisation pratique"""
print("💡 EXEMPLES D'UTILISATION PRATIQUE")
print("=" * 50)
print()
print("1⃣ Dans un script de données:")
print("```python")
print("from atmo_data_wrapper import get_atmo_licence")
print()
print("# Récupérer des données")
print("indices = client.get_indices_atmo()")
print()
print("# Afficher la source")
print('print(f"Source: {get_atmo_licence(\'courte\')}")')
print("```")
print()
print("Résultat:")
print(f"Source: {get_atmo_licence('courte')}")
print()
print("2⃣ Dans un rapport ou documentation:")
print("```python")
print("print_atmo_licence('complete')")
print("```")
print()
print("Résultat:")
print_atmo_licence('complete')
print()
print("3⃣ Accès direct aux constantes:")
print("```python")
print("from atmo_data_wrapper import ATMO_LICENCE_COURTE")
print("print(ATMO_LICENCE_COURTE)")
print("```")
print()
print("Résultat:")
print(ATMO_LICENCE_COURTE)
print()
def demo_integration_examples():
"""Exemples d'intégration dans différents contextes"""
print("🔧 EXEMPLES D'INTÉGRATION")
print("=" * 50)
print()
print("1⃣ Dans un fichier CSV:")
print("# Commentaire en en-tête de fichier CSV")
print(f"# Source: {get_atmo_licence('longue')}")
print("# Licence: ODbL")
print("commune,indice_atmo,date")
print("Nancy,2,2024-01-15")
print("...")
print()
print("2⃣ Dans un graphique matplotlib:")
print("```python")
print("import matplotlib.pyplot as plt")
print("from atmo_data_wrapper import get_atmo_licence")
print()
print("# Créer le graphique")
print("plt.plot(dates, indices)")
print("plt.title('Évolution de la qualité de l\\'air')")
print()
print("# Ajouter la source")
print("plt.figtext(0.02, 0.02, f'Source: {get_atmo_licence(\'courte\')}', fontsize=8)")
print("plt.show()")
print("```")
print()
print("3⃣ Dans une API REST:")
print("```python")
print("from flask import Flask, jsonify")
print("from atmo_data_wrapper import get_atmo_licence")
print()
print("@app.route('/api/air-quality')")
print("def get_air_quality():")
print(" data = get_air_quality_data()")
print(" return jsonify({")
print(" 'data': data,")
print(" 'source': get_atmo_licence('courte'),")
print(" 'licence': 'ODbL'")
print(" })")
print("```")
print()
print("4⃣ Dans un footer HTML:")
print("```html")
print("<footer>")
print(f" <p>Source des données: {get_atmo_licence('longue')}</p>")
print(" <p>Licence: <a href='https://opendatacommons.org/licenses/odbl/'>ODbL</a></p>")
print("</footer>")
print("```")
print()
def demo_licence_compliance():
"""Vérification de conformité avec les exigences"""
print("✅ CONFORMITÉ AVEC LES EXIGENCES ATMO FRANCE")
print("=" * 55)
print()
print("📋 Exigences officielles:")
print('• Indiquer la source "Atmo France et les Associations agréées"')
print('• Ou version courte "Atmo France / AASQA"')
print('• Respecter la licence ODbL')
print()
print("✅ Notre implémentation:")
print(f"• Version courte: '{get_atmo_licence('courte')}'")
print(f"• Version longue: '{get_atmo_licence('longue')}'")
print("• Mention de la licence ODbL incluse")
print("• URLs officielles fournies")
print()
print("🎯 Recommandations d'usage:")
print("• Utiliser la version courte pour les citations courtes")
print("• Utiliser la version longue pour les documents officiels")
print("• Utiliser la version complète pour les mentions légales détaillées")
print("• Toujours mentionner la licence ODbL")
print()
def main():
"""Fonction principale"""
print("DÉMONSTRATION DES FONCTIONS DE LICENCE ATMO FRANCE")
print("=" * 60)
print("Conformité avec les exigences de licence ODbL d'Atmo France")
print()
try:
demo_licence_formats()
demo_usage_examples()
demo_integration_examples()
demo_licence_compliance()
print("=" * 60)
print("✅ DÉMONSTRATION TERMINÉE AVEC SUCCÈS")
print()
print("🔑 Fonctions disponibles:")
print(" • get_atmo_licence(format): Retourne la licence selon le format")
print(" • print_atmo_licence(format): Affiche la licence")
print()
print("📋 Formats supportés:")
print("'courte': Version abrégée")
print("'longue': Version officielle complète")
print("'complete': Avec détails de licence")
print()
print("📁 Constantes disponibles:")
print(" • ATMO_LICENCE_COURTE")
print(" • ATMO_LICENCE_LONGUE")
print(" • ATMO_LICENCE_COMPLETE")
except Exception as e:
print(f"❌ Erreur lors de l'exécution: {e}")
import traceback
print("\nDétails de l'erreur:")
print(traceback.format_exc())
if __name__ == "__main__":
main()