#!/usr/bin/env python3 # -*- mode: python -*- # -*- coding: utf-8 -*- """Exemple utilisation API ScoDoc 9 avec jeton obtenu par basic authentication Extraction de la liste de tous les modules d'une année scolaire Usage: cd /opt/scodoc/tests/api python -i exemple-api-list-modules.py Pour utiliser l'API, (sur une base quelconque): ``` cd /opt/scodoc/tests/api python -i exemple-api-list-modules.py >>> admin_h = get_auth_headers("admin", "xxx") >>> GET("/etudiant/etudid/14806", headers=admin_h) ``` Créer éventuellement un fichier `.env` dans /opt/scodoc/tests/api avec la config du client API: ``` SCODOC_URL = "http://localhost:5000/" API_USER = "admin" API_PASSWORD = "test" ``` """ from pprint import pprint as pp import requests import sys import urllib3 from setup_test_api import ( API_PASSWORD, # lus de l'environnement ou du .env API_URL, API_USER, APIError, CHECK_CERTIFICATE, get_auth_headers, GET, POST_JSON, SCODOC_URL, ) def logout_api_user(): r = requests.delete(API_URL + "/tokens", headers=HEADERS, verify=CHECK_CERTIFICATE) assert r.status_code == 204 if not CHECK_CERTIFICATE: urllib3.disable_warnings() # Si vous n'utilisez pas .env: API_USER = "lecteur_api" API_PASSWORD = "azerty" HEADERS = get_auth_headers(API_USER, API_PASSWORD) print("connected to ScoDoc") # Liste des formsemestres de l'année scolaire ANNEE_SCOLAIRE = 2023 # int, année de début de l'année scolaire formsemestres = GET( f"/formsemestres/query?annee_scolaire={ANNEE_SCOLAIRE}", headers=HEADERS ) print(f"Nombre de semestres: {len(formsemestres)}") r = [] # liste de dict, résultat for formsemestre in formsemestres: print(f"requesting {formsemestre['titre_num']}") programme = GET(f"/formsemestre/{formsemestre['id']}/programme", headers=HEADERS) for mod_type in ("ressources", "saes", "modules"): mods = programme[mod_type] for mod in mods: r.append( { "dept": formsemestre["departement"]["acronym"], "sem_id": formsemestre["id"], "sem_titre": formsemestre["titre"], "sem_modalite": formsemestre["modalite"], "sem_etape": formsemestre["etape_apo"], "mod_type": mod_type[:-1], "mod_code": mod["module"]["code"], "mod_titre": mod["module"]["titre"], "mod_abbrev": mod["module"]["abbrev"], "mod_code_apogee": mod["module"]["code_apogee"], "modimpl_code_apogee": mod["code_apogee"], } ) # Dump to csv file SEP = "\t" with open("/tmp/modules.csv", "w", encoding="utf-8") as f: f.write(SEP.join(r[0]) + "\n") for l in r: # on élimine les éventuels séparateurs des champs... f.write(SEP.join([str(x).replace(SEP, " ") for x in l.values()]) + "\n")