forked from ScoDoc/ScoDoc
Script test interactif API
This commit is contained in:
parent
e2ca74fd50
commit
0d20da4583
@ -10,6 +10,8 @@ SCONEWS = """
|
|||||||
<ul>
|
<ul>
|
||||||
<li>ScoDoc 9.3</li>
|
<li>ScoDoc 9.3</li>
|
||||||
<ul>
|
<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>Prise en charge des parcours BUT</li>
|
||||||
<li>Association des UEs aux compétences du référentiel</li>
|
<li>Association des UEs aux compétences du référentiel</li>
|
||||||
<li>Jury BUT1</li>
|
<li>Jury BUT1</li>
|
||||||
@ -21,7 +23,6 @@ SCONEWS = """
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Tableau récap. complet pour BUT et autres formations.</li>
|
<li>Tableau récap. complet pour BUT et autres formations.</li>
|
||||||
<li>Tableau état évaluations</li>
|
<li>Tableau état évaluations</li>
|
||||||
<li>Version alpha du module "relations entreprises"</li>
|
|
||||||
<li>Export des trombinoscope en document docx</li>
|
<li>Export des trombinoscope en document docx</li>
|
||||||
<li>Très nombreux correctifs</li>
|
<li>Très nombreux correctifs</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -4,118 +4,55 @@
|
|||||||
|
|
||||||
"""Exemple utilisation API ScoDoc 9 avec jeton obtenu par basic authentication
|
"""Exemple utilisation API ScoDoc 9 avec jeton obtenu par basic authentication
|
||||||
|
|
||||||
|
Usage:
|
||||||
Utilisation: créer les variables d'environnement: (indiquer les valeurs
|
cd /opt/scodoc/tests/api
|
||||||
pour le serveur ScoDoc que vous voulez interroger)
|
python -i exemple-api-basic.py
|
||||||
|
|
||||||
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).
|
|
||||||
|
|
||||||
|
|
||||||
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
|
from email import message
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import requests
|
|
||||||
import urllib3
|
|
||||||
from pprint import pprint as pp
|
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"))
|
if not CHECK_CERTIFICATE:
|
||||||
CHK_CERT = bool(int(os.environ.get("CHECK_CERTIFICATE", False)))
|
urllib3.disable_warnings()
|
||||||
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"]
|
|
||||||
|
|
||||||
print(f"SCODOC_URL={SCODOC_URL}")
|
print(f"SCODOC_URL={SCODOC_URL}")
|
||||||
print(f"API URL={API_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):
|
departements = GET("/departements", headers=HEADERS)
|
||||||
pass
|
pp(departements)
|
||||||
|
|
||||||
|
|
||||||
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())
|
|
||||||
|
|
||||||
# Liste de tous les étudiants en cours (de tous les depts)
|
# Liste de tous les étudiants en cours (de tous les depts)
|
||||||
r = requests.get(API_URL + "/etudiants/courant", headers=HEADERS, verify=CHK_CERT)
|
etuds = GET("/etudiants/courants", headers=HEADERS)
|
||||||
if r.status_code != 200:
|
|
||||||
raise ScoError("erreur de connexion: vérifier adresse et identifiants")
|
|
||||||
|
|
||||||
print(f"{len(r.json())} étudiants courants")
|
print(f"{len(etuds)} étudiants courants")
|
||||||
|
|
||||||
|
raise Exception("arret en mode interactif")
|
||||||
|
|
||||||
# Bulletin d'un BUT
|
# Bulletin d'un BUT
|
||||||
formsemestre_id = 1063 # A adapter
|
formsemestre_id = 1063 # A adapter
|
||||||
|
@ -18,10 +18,15 @@ import requests
|
|||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
# --- Lecture configuration (variables d'env ou .env)
|
||||||
|
try:
|
||||||
|
BASEDIR = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
except NameError:
|
||||||
BASEDIR = "/opt/scodoc/tests/api"
|
BASEDIR = "/opt/scodoc/tests/api"
|
||||||
|
|
||||||
load_dotenv(os.path.join(BASEDIR, ".env"))
|
load_dotenv(os.path.join(BASEDIR, ".env"))
|
||||||
CHECK_CERTIFICATE = bool(os.environ.get("CHECK_CERTIFICATE", False))
|
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_URL = SCODOC_URL + "/ScoDoc/api"
|
||||||
API_USER = os.environ.get("API_USER", "test")
|
API_USER = os.environ.get("API_USER", "test")
|
||||||
API_PASSWORD = os.environ.get("API_PASSWD", "test")
|
API_PASSWORD = os.environ.get("API_PASSWD", "test")
|
||||||
|
Loading…
Reference in New Issue
Block a user