forked from ScoDoc/ScoDoc
Script test interactif API
This commit is contained in:
parent
e2ca74fd50
commit
0d20da4583
@ -10,6 +10,8 @@ SCONEWS = """
|
||||
<ul>
|
||||
<li>ScoDoc 9.3</li>
|
||||
<ul>
|
||||
<li>Nouvelle API REST pour connecter ScoDoc à d'autres applications<li>
|
||||
<li>Module de gestion des relations avec les entreprises</li>
|
||||
<li>Prise en charge des parcours BUT</li>
|
||||
<li>Association des UEs aux compétences du référentiel</li>
|
||||
<li>Jury BUT1</li>
|
||||
@ -21,7 +23,6 @@ SCONEWS = """
|
||||
<ul>
|
||||
<li>Tableau récap. complet pour BUT et autres formations.</li>
|
||||
<li>Tableau état évaluations</li>
|
||||
<li>Version alpha du module "relations entreprises"</li>
|
||||
<li>Export des trombinoscope en document docx</li>
|
||||
<li>Très nombreux correctifs</li>
|
||||
</ul>
|
||||
|
@ -4,118 +4,55 @@
|
||||
|
||||
"""Exemple utilisation API ScoDoc 9 avec jeton obtenu par basic authentication
|
||||
|
||||
|
||||
Utilisation: créer les variables d'environnement: (indiquer les valeurs
|
||||
pour le serveur ScoDoc que vous voulez interroger)
|
||||
|
||||
export SCODOC_URL="https://scodoc.xxx.net/"
|
||||
export SCODOC_USER="xxx"
|
||||
export SCODOC_PASSWD="xxx"
|
||||
export CHECK_CERTIFICATE=0 # ou 1 si serveur de production avec certif SSL valide
|
||||
|
||||
(on peut aussi placer ces valeurs dans un fichier .env du répertoire tests/api).
|
||||
Usage:
|
||||
cd /opt/scodoc/tests/api
|
||||
python -i exemple-api-basic.py
|
||||
|
||||
|
||||
Travail en cours.
|
||||
Pour utiliser l'API, (sur une base quelconque) je fais
|
||||
```
|
||||
cd /opt/scodoc/tests/api
|
||||
|
||||
python
|
||||
>>> admin_h = get_auth_headers("admin", "xxx")
|
||||
>>> GET("/etudiant/etudid/14806", headers=admin_h)
|
||||
```
|
||||
"""
|
||||
|
||||
from dotenv import load_dotenv
|
||||
import json
|
||||
import os
|
||||
import requests
|
||||
import urllib3
|
||||
from email import message
|
||||
from pprint import pprint as pp
|
||||
import urllib3
|
||||
from setup_test_api import (
|
||||
API_PASSWORD,
|
||||
API_URL,
|
||||
API_USER,
|
||||
APIError,
|
||||
CHECK_CERTIFICATE,
|
||||
get_auth_headers,
|
||||
GET,
|
||||
POST_JSON,
|
||||
SCODOC_URL,
|
||||
)
|
||||
|
||||
# --- Lecture configuration (variables d'env ou .env)
|
||||
try:
|
||||
BASEDIR = os.path.abspath(os.path.dirname(__file__))
|
||||
except NameError:
|
||||
BASEDIR = "."
|
||||
|
||||
load_dotenv(os.path.join(BASEDIR, ".env"))
|
||||
CHK_CERT = bool(int(os.environ.get("CHECK_CERTIFICATE", False)))
|
||||
SCODOC_URL = os.environ.get("SCODOC_URL") or "http://localhost:5000"
|
||||
API_URL = SCODOC_URL + "/ScoDoc/api"
|
||||
# Admin:
|
||||
SCODOC_USER = os.environ["SCODOC_USER"]
|
||||
SCODOC_PASSWORD = os.environ["SCODOC_PASSWORD"]
|
||||
# Lecteur
|
||||
SCODOC_USER_API_LECTEUR = os.environ["SCODOC_USER_API_LECTEUR"]
|
||||
SCODOC_PASSWORD_API_LECTEUR = os.environ["SCODOC_PASSWORD_API_LECTEUR"]
|
||||
if not CHECK_CERTIFICATE:
|
||||
urllib3.disable_warnings()
|
||||
|
||||
print(f"SCODOC_URL={SCODOC_URL}")
|
||||
print(f"API URL={API_URL}")
|
||||
|
||||
# ---
|
||||
if not CHK_CERT:
|
||||
urllib3.disable_warnings()
|
||||
|
||||
HEADERS = get_auth_headers(API_USER, API_PASSWORD)
|
||||
|
||||
class ScoError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def GET(path: str, headers={}, errmsg=None, dept=None):
|
||||
"""Get and returns as JSON"""
|
||||
if dept:
|
||||
url = SCODOC_URL + f"/ScoDoc/{dept}/api" + path
|
||||
else:
|
||||
url = API_URL + path
|
||||
r = requests.get(url, headers=headers or HEADERS, verify=CHK_CERT)
|
||||
if r.status_code != 200:
|
||||
raise ScoError(errmsg or f"""erreur status={r.status_code} !\n{r.text}""")
|
||||
return r.json() # decode la reponse JSON
|
||||
|
||||
|
||||
def POST(path: str, data: dict = {}, headers={}, errmsg=None):
|
||||
"""Post"""
|
||||
r = requests.post(
|
||||
API_URL + path,
|
||||
data=data,
|
||||
headers=headers or HEADERS,
|
||||
verify=CHK_CERT,
|
||||
)
|
||||
if r.status_code != 200:
|
||||
raise ScoError(errmsg or f"erreur status={r.status_code} !\n{r.text}")
|
||||
return r.json() # decode la reponse JSON
|
||||
|
||||
|
||||
def POST_JSON(path: str, data: dict = {}, headers={}, errmsg=None):
|
||||
"""Post"""
|
||||
r = requests.post(
|
||||
API_URL + path,
|
||||
json=data,
|
||||
headers=headers or HEADERS,
|
||||
verify=CHK_CERT,
|
||||
)
|
||||
if r.status_code != 200:
|
||||
raise ScoError(errmsg or f"erreur status={r.status_code} !\n{r.text}")
|
||||
return r.json() # decode la reponse JSON
|
||||
|
||||
|
||||
def GET_TOKEN(user, password):
|
||||
"Obtention du jeton (token)"
|
||||
r = requests.post(API_URL + "/tokens", auth=(user, password))
|
||||
assert r.status_code == 200
|
||||
token = r.json()["token"]
|
||||
return {"Authorization": f"Bearer {token}"}
|
||||
|
||||
|
||||
HEADERS = GET_TOKEN(SCODOC_USER, SCODOC_PASSWORD)
|
||||
HEADERS_USER = GET_TOKEN(SCODOC_USER_API_LECTEUR, SCODOC_PASSWORD_API_LECTEUR)
|
||||
|
||||
r = requests.get(API_URL + "/departements", headers=HEADERS, verify=CHK_CERT)
|
||||
if r.status_code != 200:
|
||||
raise ScoError("erreur de connexion: vérifier adresse et identifiants")
|
||||
|
||||
pp(r.json())
|
||||
departements = GET("/departements", headers=HEADERS)
|
||||
pp(departements)
|
||||
|
||||
# Liste de tous les étudiants en cours (de tous les depts)
|
||||
r = requests.get(API_URL + "/etudiants/courant", headers=HEADERS, verify=CHK_CERT)
|
||||
if r.status_code != 200:
|
||||
raise ScoError("erreur de connexion: vérifier adresse et identifiants")
|
||||
etuds = GET("/etudiants/courants", headers=HEADERS)
|
||||
|
||||
print(f"{len(r.json())} étudiants courants")
|
||||
print(f"{len(etuds)} étudiants courants")
|
||||
|
||||
raise Exception("arret en mode interactif")
|
||||
|
||||
# Bulletin d'un BUT
|
||||
formsemestre_id = 1063 # A adapter
|
||||
|
@ -18,10 +18,15 @@ import requests
|
||||
from dotenv import load_dotenv
|
||||
import pytest
|
||||
|
||||
BASEDIR = "/opt/scodoc/tests/api"
|
||||
# --- Lecture configuration (variables d'env ou .env)
|
||||
try:
|
||||
BASEDIR = os.path.abspath(os.path.dirname(__file__))
|
||||
except NameError:
|
||||
BASEDIR = "/opt/scodoc/tests/api"
|
||||
|
||||
load_dotenv(os.path.join(BASEDIR, ".env"))
|
||||
CHECK_CERTIFICATE = bool(os.environ.get("CHECK_CERTIFICATE", False))
|
||||
SCODOC_URL = os.environ["SCODOC_URL"]
|
||||
SCODOC_URL = os.environ["SCODOC_URL"] or "http://localhost:5000"
|
||||
API_URL = SCODOC_URL + "/ScoDoc/api"
|
||||
API_USER = os.environ.get("API_USER", "test")
|
||||
API_PASSWORD = os.environ.get("API_PASSWD", "test")
|
||||
|
Loading…
Reference in New Issue
Block a user