1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2025-04-30 10:31:32 +00:00

Update Apps/Droits

Pierre-antoine Comby 2020-03-21 18:36:12 +01:00
parent fcf4c651d4
commit d8b294f152

@ -20,28 +20,27 @@ Exception faite sur l'ajout d'objets : l'objet n'existant pas encore en base de
La requête est enregistrée sous un format JSON, puis est traduite en requête `Q` récursivement en appliquant certains paramètres (on note `about` la fonction de traduction) :
```
* [] | {} -> Q(pk=F("pk")) # Une liste ou un objet vide représente tous les objets
* ["AND", query, …] -> about(query) & … # Conjonction de requêtes
* ["OR", query, …] -> about(query) | … # Disjonction de requêtes
* ["NOT", query] -> ~about(query) # Négation d'une requête
* {key: value, …} -> Q(key=value, …) # Liste de champs et de valeurs dans un objet Q
* `key` est une chaîne de caractères,représentant le nom du champ
* `value` peut être de plusieurs natures :
* Un nombre, une chaîne de caractères, un booléen, `null` pour représenter des valeurs littérales
* Si c'est une liste, c'est interprété comme un paramètre
* Le premier argument de la liste représente le nom du paramètre. Ce peut être l'objet utilisateur `user`, l'objet club `club` ou des objets de classe (`Note`, ...).
* S'il y a des arguments suivants dans la liste, ils vont être interprétés comme des sous-attributs du paramètre initial.
* Si un argument est une liste, alors c'est interprété comme une fonction à appeler, dont les arguments sont donnés par les autres éléments de la liste. Si cette liste contient un dictionnaire, le dictionnaire est passé en argument à la fonction sous la forme de kwargs.
* Les exemples seront plus clairs.
* Si c'est un dictionnaire de la forme {"F": oper}, alors c'est interprété comme un objet `F`.
* Si `oper` est un littéral, il est interprété tel quel.
* Si `oper` = ["ADD", oper1, oper2, …], le résultat est la somme des objets `F` calculés d'après le reste de la liste.
* Si `oper` = ["SUB", oper1, oper2,], le résultat est la différence des deux objets `F`.
* Si `oper` = ["MUL", oper1, oper2, …], le résultat est le produit des objets `F` calculés d'après le reste de la liste.
* Si `oper` = ["F", name], le résultat est F(name).
* Dans les autres cas, `oper` est un paramètre calculé comme précédemment.
```
* `[] | {} -> Q(pk=F("pk"))` Une liste ou un objet vide représente tous les objets
* `["AND", query, …] -> about(query) & … ` Conjonction de requêtes
* `["OR", query, …] -> about(query) | … ` Disjonction de requêtes
* `["NOT", query] -> ~about(query) ` Négation d'une requête
* `{key: value, …} -> Q(key=value, …) ` Liste de champs et de valeurs dans un objet Q
* `key` est une chaîne de caractères,représentant le nom du champ
* `value` peut être de plusieurs natures :
* Un nombre, une chaîne de caractères, un booléen, `null` pour représenter des valeurs littérales
* Si c'est une liste, c'est interprété comme un paramètre
* Le premier argument de la liste représente le nom du paramètre. Ce peut être l'objet utilisateur `user`, l'objet club `club` ou des objets de classe (`Note`, ...).
* S'il y a des arguments suivants dans la liste, ils vont être interprétés comme des sous-attributs du paramètre initial.
* Si un argument est une liste, alors c'est interprété comme une fonction à appeler, dont les arguments sont donnés par les autres éléments de la liste. Si cette liste contient un dictionnaire, le dictionnaire est passé en argument à la fonction sous la forme de kwargs.
* Les exemples seront plus clairs.
* Si c'est un dictionnaire de la forme {"F": oper}, alors c'est interprété comme un objet `F`.
* Si `oper` est un littéral, il est interprété tel quel.
* Si `oper = ["ADD", oper1, oper2, …]`, le résultat est la somme des objets `F` calculés d'après le reste de la liste.
* Si `oper = ["SUB", oper1, oper2,]`, le résultat est la différence des deux objets `F`.
* Si `oper = ["MUL", oper1, oper2, …]`, le résultat est le produit des objets `F` calculés d'après le reste de la liste.
* Si `oper = ["F", name]`, le résultat est F(name).
* Dans les autres cas, `oper` est un paramètre calculé comme précédemment.
## Exemples