forked from ScoDoc/ScoDoc
API: group create
This commit is contained in:
parent
4cb2db61bc
commit
48990f5012
@ -9,6 +9,7 @@
|
|||||||
"""
|
"""
|
||||||
from flask import abort, jsonify, request
|
from flask import abort, jsonify, request
|
||||||
|
|
||||||
|
import app
|
||||||
from app import db
|
from app import db
|
||||||
from app.api import bp
|
from app.api import bp
|
||||||
from app.api.auth import token_auth, token_permission_required
|
from app.api.auth import token_auth, token_permission_required
|
||||||
@ -159,6 +160,7 @@ def group_create(partition_id: int):
|
|||||||
group = GroupDescr(group_name=group_name, partition_id=partition_id)
|
group = GroupDescr(group_name=group_name, partition_id=partition_id)
|
||||||
db.session.add(group)
|
db.session.add(group)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
app.set_sco_dept(partition.formsemestre.departement.acronym)
|
||||||
sco_cache.invalidate_formsemestre(partition.formsemestre_id)
|
sco_cache.invalidate_formsemestre(partition.formsemestre_id)
|
||||||
return jsonify(group.to_dict(with_partition=True))
|
return jsonify(group.to_dict(with_partition=True))
|
||||||
|
|
||||||
@ -174,6 +176,7 @@ def group_delete(group_id: int):
|
|||||||
formsemestre_id = group.partition.formsemestre_id
|
formsemestre_id = group.partition.formsemestre_id
|
||||||
db.session.delete(group)
|
db.session.delete(group)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
app.set_sco_dept(group.partition.formsemestre.departement.acronym)
|
||||||
sco_cache.invalidate_formsemestre(formsemestre_id)
|
sco_cache.invalidate_formsemestre(formsemestre_id)
|
||||||
return jsonify({"OK": 1})
|
return jsonify({"OK": 1})
|
||||||
|
|
||||||
@ -194,6 +197,7 @@ def group_edit(group_id: int):
|
|||||||
group.group_name = group_name.strip()
|
group.group_name = group_name.strip()
|
||||||
db.session.add(group)
|
db.session.add(group)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
app.set_sco_dept(group.partition.formsemestre.departement.acronym)
|
||||||
sco_cache.invalidate_formsemestre(group.partition.formsemestre_id)
|
sco_cache.invalidate_formsemestre(group.partition.formsemestre_id)
|
||||||
return jsonify(group.to_dict(with_partition=True))
|
return jsonify(group.to_dict(with_partition=True))
|
||||||
|
|
||||||
@ -239,6 +243,7 @@ def partition_create(formsemestre_id: int):
|
|||||||
partition = Partition(**args)
|
partition = Partition(**args)
|
||||||
db.session.add(partition)
|
db.session.add(partition)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
app.set_sco_dept(formsemestre.departement.acronym)
|
||||||
sco_cache.invalidate_formsemestre(formsemestre_id)
|
sco_cache.invalidate_formsemestre(formsemestre_id)
|
||||||
return jsonify(partition.to_dict(with_groups=True))
|
return jsonify(partition.to_dict(with_groups=True))
|
||||||
|
|
||||||
@ -289,6 +294,7 @@ def partition_edit(partition_id: int):
|
|||||||
if modified:
|
if modified:
|
||||||
db.session.add(partition)
|
db.session.add(partition)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
app.set_sco_dept(partition.formsemestre.departement.acronym)
|
||||||
sco_cache.invalidate_formsemestre(partition.formsemestre_id)
|
sco_cache.invalidate_formsemestre(partition.formsemestre_id)
|
||||||
|
|
||||||
return jsonify(partition.to_dict(with_groups=True))
|
return jsonify(partition.to_dict(with_groups=True))
|
||||||
@ -311,6 +317,7 @@ def partition_delete(partition_id: int):
|
|||||||
is_parcours = partition.is_parcours()
|
is_parcours = partition.is_parcours()
|
||||||
formsemestre: FormSemestre = partition.formsemestre
|
formsemestre: FormSemestre = partition.formsemestre
|
||||||
db.session.delete(partition)
|
db.session.delete(partition)
|
||||||
|
app.set_sco_dept(partition.formsemestre.departement.acronym)
|
||||||
sco_cache.invalidate_formsemestre(formsemestre.id)
|
sco_cache.invalidate_formsemestre(formsemestre.id)
|
||||||
if is_parcours:
|
if is_parcours:
|
||||||
formsemestre.update_inscriptions_parcours_from_groups()
|
formsemestre.update_inscriptions_parcours_from_groups()
|
||||||
|
@ -87,6 +87,7 @@ class Partition(db.Model):
|
|||||||
"""as a dict, with or without groups"""
|
"""as a dict, with or without groups"""
|
||||||
d = dict(self.__dict__)
|
d = dict(self.__dict__)
|
||||||
d.pop("_sa_instance_state", None)
|
d.pop("_sa_instance_state", None)
|
||||||
|
d.pop("formsemestre")
|
||||||
|
|
||||||
if with_groups:
|
if with_groups:
|
||||||
d["groups"] = [group.to_dict(with_partition=False) for group in self.groups]
|
d["groups"] = [group.to_dict(with_partition=False) for group in self.groups]
|
||||||
|
@ -131,12 +131,14 @@ class EvaluationCache(ScoDocCache):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def invalidate_sem(cls, formsemestre_id):
|
def invalidate_sem(cls, formsemestre_id):
|
||||||
"delete evaluations in this formsemestre from cache"
|
"delete evaluations in this formsemestre from cache"
|
||||||
req = """SELECT e.id
|
from app.models.evaluations import Evaluation
|
||||||
FROM notes_formsemestre s, notes_evaluation e, notes_moduleimpl m
|
from app.models.moduleimpls import ModuleImpl
|
||||||
WHERE s.id = %(formsemestre_id)s and s.id=m.formsemestre_id and e.moduleimpl_id=m.id;
|
|
||||||
"""
|
|
||||||
evaluation_ids = [
|
evaluation_ids = [
|
||||||
x[0] for x in ndb.SimpleQuery(req, {"formsemestre_id": formsemestre_id})
|
e.id
|
||||||
|
for e in Evaluation.query.join(ModuleImpl).filter_by(
|
||||||
|
formsemestre_id=formsemestre_id
|
||||||
|
)
|
||||||
]
|
]
|
||||||
cls.delete_many(evaluation_ids)
|
cls.delete_many(evaluation_ids)
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
# -*- mode: python -*-
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@ -27,15 +26,15 @@
|
|||||||
|
|
||||||
"""Gestion des cursus (jurys suivant la formation)
|
"""Gestion des cursus (jurys suivant la formation)
|
||||||
"""
|
"""
|
||||||
|
from sqlalchemy.sql import text
|
||||||
|
|
||||||
|
from app import db
|
||||||
from app.but import cursus_but
|
from app.but import cursus_but
|
||||||
from app.scodoc import sco_cursus_dut
|
from app.scodoc import sco_cursus_dut
|
||||||
|
|
||||||
from app.comp.res_compat import NotesTableCompat
|
from app.comp.res_compat import NotesTableCompat
|
||||||
from app.comp import res_sem
|
from app.comp import res_sem
|
||||||
from app.models import FormSemestre
|
from app.models import FormSemestre
|
||||||
from app.scodoc import sco_formsemestre
|
|
||||||
from app.scodoc import sco_formations
|
|
||||||
import app.scodoc.notesdb as ndb
|
import app.scodoc.notesdb as ndb
|
||||||
|
|
||||||
# SituationEtudParcours -> get_situation_etud_cursus
|
# SituationEtudParcours -> get_situation_etud_cursus
|
||||||
@ -111,24 +110,26 @@ def list_formsemestre_utilisateurs_uecap(formsemestre_id):
|
|||||||
"""Liste des formsemestres pouvant utiliser une UE capitalisee de ce semestre
|
"""Liste des formsemestres pouvant utiliser une UE capitalisee de ce semestre
|
||||||
(et qui doivent donc etre sortis du cache si l'on modifie ce
|
(et qui doivent donc etre sortis du cache si l'on modifie ce
|
||||||
semestre): meme code formation, meme semestre_id, date posterieure"""
|
semestre): meme code formation, meme semestre_id, date posterieure"""
|
||||||
cnx = ndb.GetDBConnexion()
|
formsemestre = FormSemestre.query.get(formsemestre_id)
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
|
||||||
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
cursor = db.session.execute(
|
||||||
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
text(
|
||||||
cursor.execute(
|
"""
|
||||||
"""SELECT sem.id
|
SELECT sem.id
|
||||||
FROM notes_formsemestre sem, notes_formations F
|
FROM notes_formsemestre sem, notes_formations F
|
||||||
WHERE sem.formation_id = F.id
|
WHERE sem.formation_id = F.id
|
||||||
and F.formation_code = %(formation_code)s
|
and F.formation_code = :formation_code
|
||||||
and sem.semestre_id = %(semestre_id)s
|
and sem.semestre_id = :semestre_id
|
||||||
and sem.date_debut >= %(date_debut)s
|
and sem.date_debut >= :date_debut
|
||||||
and sem.id != %(formsemestre_id)s;
|
and sem.id != :formsemestre_id;
|
||||||
""",
|
"""
|
||||||
|
),
|
||||||
{
|
{
|
||||||
"formation_code": F["formation_code"],
|
"formation_code": formsemestre.formation.formation_code,
|
||||||
"semestre_id": sem["semestre_id"],
|
"semestre_id": formsemestre.semestre_id,
|
||||||
"formsemestre_id": formsemestre_id,
|
"formsemestre_id": formsemestre_id,
|
||||||
"date_debut": ndb.DateDMYtoISO(sem["date_debut"]),
|
"date_debut": formsemestre.date_debut,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
return [x[0] for x in cursor.fetchall()]
|
|
||||||
|
return [x[0] for x in cursor]
|
||||||
|
@ -20,6 +20,7 @@ Travail en cours.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import requests
|
import requests
|
||||||
import urllib3
|
import urllib3
|
||||||
@ -51,7 +52,7 @@ class ScoError(Exception):
|
|||||||
|
|
||||||
def GET(path: str, headers={}, errmsg=None):
|
def GET(path: str, headers={}, errmsg=None):
|
||||||
"""Get and returns as JSON"""
|
"""Get and returns as JSON"""
|
||||||
r = requests.get(API_URL + "/" + path, headers=headers or HEADERS, verify=CHK_CERT)
|
r = requests.get(API_URL + path, headers=headers or HEADERS, verify=CHK_CERT)
|
||||||
if r.status_code != 200:
|
if r.status_code != 200:
|
||||||
raise ScoError(errmsg or f"erreur status={r.status_code} !")
|
raise ScoError(errmsg or f"erreur status={r.status_code} !")
|
||||||
return r.json() # decode la reponse JSON
|
return r.json() # decode la reponse JSON
|
||||||
@ -60,10 +61,26 @@ def GET(path: str, headers={}, errmsg=None):
|
|||||||
def POST(path: str, data: dict = {}, headers={}, errmsg=None):
|
def POST(path: str, data: dict = {}, headers={}, errmsg=None):
|
||||||
"""Post"""
|
"""Post"""
|
||||||
r = requests.post(
|
r = requests.post(
|
||||||
API_URL + "/" + path, data=data, headers=headers or HEADERS, verify=CHK_CERT
|
API_URL + path,
|
||||||
|
data=data,
|
||||||
|
headers=headers or HEADERS,
|
||||||
|
verify=CHK_CERT,
|
||||||
)
|
)
|
||||||
if r.status_code != 200:
|
if r.status_code != 200:
|
||||||
raise ScoError(errmsg or "erreur !")
|
raise ScoError(errmsg or f"erreur status={r.status_code} !")
|
||||||
|
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} !")
|
||||||
return r.json() # decode la reponse JSON
|
return r.json() # decode la reponse JSON
|
||||||
|
|
||||||
|
|
||||||
@ -72,6 +89,8 @@ r = requests.post(API_URL + "/tokens", auth=(SCODOC_USER, SCODOC_PASSWORD))
|
|||||||
assert r.status_code == 200
|
assert r.status_code == 200
|
||||||
token = r.json()["token"]
|
token = r.json()["token"]
|
||||||
HEADERS = {"Authorization": f"Bearer {token}"}
|
HEADERS = {"Authorization": f"Bearer {token}"}
|
||||||
|
# HEADERS_JSON = HEADERS.copy()
|
||||||
|
# HEADERS_JSON["Content-Type"] = "application/json"
|
||||||
|
|
||||||
r = requests.get(API_URL + "/departements", headers=HEADERS, verify=CHK_CERT)
|
r = requests.get(API_URL + "/departements", headers=HEADERS, verify=CHK_CERT)
|
||||||
if r.status_code != 200:
|
if r.status_code != 200:
|
||||||
@ -134,6 +153,10 @@ etudid = 16650
|
|||||||
group_id = 5315
|
group_id = 5315
|
||||||
POST(f"/group/{group_id}/set_etudiant/{etudid}")
|
POST(f"/group/{group_id}/set_etudiant/{etudid}")
|
||||||
|
|
||||||
|
|
||||||
|
POST_JSON(f"/partition/{pid}/group/create", data={"group_name": "Omega10"})
|
||||||
|
|
||||||
|
|
||||||
# # --- Recupere la liste de tous les semestres:
|
# # --- Recupere la liste de tous les semestres:
|
||||||
# sems = GET(s, "Notes/formsemestre_list?format=json", "Aucun semestre !")
|
# sems = GET(s, "Notes/formsemestre_list?format=json", "Aucun semestre !")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user