#!/usr/bin/env python3 # -*- mode: python -*- # -*- coding: utf-8 -*- """Exemple connexion sur ScoDoc et utilisation de l'API - Ouverture session - Liste semestres - Liste modules - Creation d'une évaluation - Saisie d'une note Attention: cet exemple est en Python 3 (>= 3.6) """ import requests import urllib3 import pdb from pprint import pprint as pp from flask import g, url_for # A modifier pour votre serveur: CHECK_CERTIFICATE = False # set to True in production BASEURL = "https://scodoc.xxx.net/ScoDoc/RT/Scolarite" USER = "XXX" PASSWORD = "XXX" # --- if not CHECK_CERTIFICATE: urllib3.disable_warnings() class ScoError(Exception): pass def GET(s, path, errmsg=None): """Get and returns as JSON""" r = s.get(BASEURL + "/" + path) if r.status_code != 200: raise ScoError(errmsg or "erreur !") return r.json() # decode la reponse JSON def POST(s, path, data, errmsg=None): """Post""" r = s.post(BASEURL + "/" + path, data=data) if r.status_code != 200: raise ScoError(errmsg or "erreur !") return r.text # --- Ouverture session (login) s = requests.Session() s.post( "https://deb11.viennet.net/api/auth/login", data={"user_name": USER, "password": PASSWORD}, ) r = s.get(BASEURL, auth=(USER, PASSWORD), verify=CHECK_CERTIFICATE) if r.status_code != 200: raise ScoError("erreur de connection: vérifier adresse et identifiants") # --- Recupere la liste de tous les semestres: sems = GET(s, "Notes/formsemestre_list?format=json", "Aucun semestre !") # sems est une liste de semestres (dictionnaires) for sem in sems: if sem["etat"]: break if sem["etat"] == "0": raise ScoError("Aucun semestre non verrouillé !") # Affiche le semestre trouvé: pp(sem) # ---- Récupère la description de ce semestre: # semdescr = GET(s, f"Notes/formsemestre_description?formsemestre_id={sem['formsemestre_id']}&with_evals=0&format=json" ) # ---- Liste les modules et prend le premier mods = GET(s, f"/Notes/do_moduleimpl_list?formsemestre_id={sem['formsemestre_id']}") print(f"{len(mods)} modules dans le semestre {sem['titre']}") mod = mods[0] # ---- Etudiants inscrits dans ce module inscrits = GET( s, f"Notes/do_moduleimpl_inscription_list?moduleimpl_id={mod['moduleimpl_id']}" ) print(f"{len(inscrits)} inscrits dans ce module") # prend le premier inscrit, au hasard: etudid = inscrits[0]["etudid"] # ---- Création d'une evaluation le dernier jour du semestre jour = sem["date_fin"] evaluation_id = POST( s, "/Notes/do_evaluation_create", data={ "moduleimpl_id": mod["moduleimpl_id"], "coefficient": 1, "jour": jour, # "5/9/2019", "heure_debut": "9h00", "heure_fin": "10h00", "note_max": 20, # notes sur 20 "description": "essai", }, errmsg="échec création évaluation", ) print( f"Evaluation créée dans le module {mod['moduleimpl_id']}, evaluation_id={evaluation_id}" ) print( "Pour vérifier, aller sur: ", url_for( "notes.moduleimpl_status", scodoc_dept="DEPT", moduleimpl_id=mod["moduleimpl_id"], ), ) # ---- Saisie d'une note junk = POST( s, "/Notes/save_note", data={ "etudid": etudid, "evaluation_id": evaluation_id, "value": 16.66, # la note ! "comment": "test API", }, )