mirror of
https://github.com/ae-utbm/sith.git
synced 2025-06-08 04:05:22 +00:00
rename apikey to api
This commit is contained in:
parent
0d9be6c538
commit
1748652b4d
@ -3,8 +3,8 @@ from django.db.models import QuerySet
|
|||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from apikey.hashers import generate_key
|
from api.hashers import generate_key
|
||||||
from apikey.models import ApiClient, ApiKey
|
from api.models import ApiClient, ApiKey
|
||||||
|
|
||||||
|
|
||||||
@admin.register(ApiClient)
|
@admin.register(ApiClient)
|
@ -1,6 +1,6 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
class ApikeyConfig(AppConfig):
|
class ApiConfig(AppConfig):
|
||||||
default_auto_field = "django.db.models.BigAutoField"
|
default_auto_field = "django.db.models.BigAutoField"
|
||||||
name = "apikey"
|
name = "api"
|
@ -1,8 +1,8 @@
|
|||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from ninja.security import APIKeyHeader
|
from ninja.security import APIKeyHeader
|
||||||
|
|
||||||
from apikey.hashers import get_hasher
|
from api.hashers import get_hasher
|
||||||
from apikey.models import ApiClient, ApiKey
|
from api.models import ApiClient, ApiKey
|
||||||
|
|
||||||
|
|
||||||
class ApiKeyAuth(APIKeyHeader):
|
class ApiKeyAuth(APIKeyHeader):
|
@ -99,7 +99,7 @@ class Migration(migrations.Migration):
|
|||||||
models.ForeignKey(
|
models.ForeignKey(
|
||||||
on_delete=django.db.models.deletion.CASCADE,
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
related_name="api_keys",
|
related_name="api_keys",
|
||||||
to="apikey.apiclient",
|
to="api.apiclient",
|
||||||
verbose_name="api client",
|
verbose_name="api client",
|
||||||
),
|
),
|
||||||
),
|
),
|
@ -39,7 +39,7 @@ Example:
|
|||||||
|
|
||||||
import operator
|
import operator
|
||||||
from functools import reduce
|
from functools import reduce
|
||||||
from typing import Any
|
from typing import Any, Callable
|
||||||
|
|
||||||
from django.contrib.auth.models import Permission
|
from django.contrib.auth.models import Permission
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
@ -67,21 +67,26 @@ class HasPerm(BasePermission):
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
```python
|
```python
|
||||||
# this route will require both permissions
|
@api_controller("/foo")
|
||||||
@route.put("/foo", permissions=[HasPerm(["foo.change_foo", "foo.add_foo"])]
|
class FooController(ControllerBase):
|
||||||
def foo(self): ...
|
# this route will require both permissions
|
||||||
|
@route.put("/foo", permissions=[HasPerm(["foo.change_foo", "foo.add_foo"])]
|
||||||
|
def foo(self): ...
|
||||||
|
|
||||||
# This route will require at least one of the perm,
|
# This route will require at least one of the perm,
|
||||||
# but it's not mandatory to have all of them
|
# but it's not mandatory to have all of them
|
||||||
@route.put(
|
@route.put(
|
||||||
"/bar",
|
"/bar",
|
||||||
permissions=[HasPerm(["foo.change_bar", "foo.add_bar"], op=operator.or_)],
|
permissions=[HasPerm(["foo.change_bar", "foo.add_bar"], op=operator.or_)],
|
||||||
)
|
)
|
||||||
def bar(self): ...
|
def bar(self): ...
|
||||||
|
```
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, perms: str | Permission | list[str | Permission], op=operator.and_
|
self,
|
||||||
|
perms: str | Permission | list[str | Permission],
|
||||||
|
op: Callable[[bool, bool], bool] = operator.and_,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
@ -103,7 +108,7 @@ class HasPerm(BasePermission):
|
|||||||
# If not, this authentication has not been done, but the user may
|
# If not, this authentication has not been done, but the user may
|
||||||
# still be implicitly authenticated through AuthenticationMiddleware
|
# still be implicitly authenticated through AuthenticationMiddleware
|
||||||
user = request.auth if hasattr(request, "auth") else request.user
|
user = request.auth if hasattr(request, "auth") else request.user
|
||||||
# `user` may either be a `core.User` or an `apikey.ApiClient` ;
|
# `user` may either be a `core.User` or an `api.ApiClient` ;
|
||||||
# they are not the same model, but they both implement the `has_perm` method
|
# they are not the same model, but they both implement the `has_perm` method
|
||||||
return reduce(self._operator, (user.has_perm(p) for p in self._perms))
|
return reduce(self._operator, (user.has_perm(p) for p in self._perms))
|
||||||
|
|
0
api/tests/__init__.py
Normal file
0
api/tests/__init__.py
Normal file
@ -2,9 +2,9 @@ import pytest
|
|||||||
from django.test import RequestFactory
|
from django.test import RequestFactory
|
||||||
from model_bakery import baker
|
from model_bakery import baker
|
||||||
|
|
||||||
from apikey.auth import ApiKeyAuth
|
from api.auth import ApiKeyAuth
|
||||||
from apikey.hashers import generate_key
|
from api.hashers import generate_key
|
||||||
from apikey.models import ApiClient, ApiKey
|
from api.models import ApiClient, ApiKey
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
@ -6,10 +6,10 @@ from ninja_extra import ControllerBase, api_controller, paginate, route
|
|||||||
from ninja_extra.pagination import PageNumberPaginationExtra
|
from ninja_extra.pagination import PageNumberPaginationExtra
|
||||||
from ninja_extra.schemas import PaginatedResponseSchema
|
from ninja_extra.schemas import PaginatedResponseSchema
|
||||||
|
|
||||||
from apikey.auth import ApiKeyAuth
|
from api.auth import ApiKeyAuth
|
||||||
|
from api.permissions import CanAccessLookup, HasPerm
|
||||||
from club.models import Club
|
from club.models import Club
|
||||||
from club.schemas import ClubSchema, SimpleClubSchema
|
from club.schemas import ClubSchema, SimpleClubSchema
|
||||||
from core.auth.api_permissions import CanAccessLookup, HasPerm
|
|
||||||
|
|
||||||
|
|
||||||
@api_controller("/club")
|
@api_controller("/club")
|
||||||
|
@ -8,10 +8,10 @@ from ninja_extra.pagination import PageNumberPaginationExtra
|
|||||||
from ninja_extra.permissions import IsAuthenticated
|
from ninja_extra.permissions import IsAuthenticated
|
||||||
from ninja_extra.schemas import PaginatedResponseSchema
|
from ninja_extra.schemas import PaginatedResponseSchema
|
||||||
|
|
||||||
|
from api.permissions import HasPerm
|
||||||
from com.ics_calendar import IcsCalendar
|
from com.ics_calendar import IcsCalendar
|
||||||
from com.models import News, NewsDate
|
from com.models import News, NewsDate
|
||||||
from com.schemas import NewsDateFilterSchema, NewsDateSchema
|
from com.schemas import NewsDateFilterSchema, NewsDateSchema
|
||||||
from core.auth.api_permissions import HasPerm
|
|
||||||
from core.views.files import send_raw_file
|
from core.views.files import send_raw_file
|
||||||
|
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ class NewsDateQuerySet(models.QuerySet):
|
|||||||
class NewsDate(models.Model):
|
class NewsDate(models.Model):
|
||||||
"""A date associated with news.
|
"""A date associated with news.
|
||||||
|
|
||||||
A [News][] can have multiple dates, for example if it is a recurring event.
|
A [News][com.models.News] can have multiple dates, for example if it is a recurring event.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
news = models.ForeignKey(
|
news = models.ForeignKey(
|
||||||
|
@ -11,9 +11,9 @@ from ninja_extra.exceptions import PermissionDenied
|
|||||||
from ninja_extra.pagination import PageNumberPaginationExtra
|
from ninja_extra.pagination import PageNumberPaginationExtra
|
||||||
from ninja_extra.schemas import PaginatedResponseSchema
|
from ninja_extra.schemas import PaginatedResponseSchema
|
||||||
|
|
||||||
from apikey.auth import ApiKeyAuth
|
from api.auth import ApiKeyAuth
|
||||||
|
from api.permissions import CanAccessLookup, CanView, HasPerm
|
||||||
from club.models import Mailing
|
from club.models import Mailing
|
||||||
from core.auth.api_permissions import CanAccessLookup, CanView, HasPerm
|
|
||||||
from core.models import Group, QuickUploadImage, SithFile, User
|
from core.models import Group, QuickUploadImage, SithFile, User
|
||||||
from core.schemas import (
|
from core.schemas import (
|
||||||
FamilyGodfatherSchema,
|
FamilyGodfatherSchema,
|
||||||
|
@ -21,8 +21,8 @@ from ninja_extra import ControllerBase, api_controller, paginate, route
|
|||||||
from ninja_extra.pagination import PageNumberPaginationExtra
|
from ninja_extra.pagination import PageNumberPaginationExtra
|
||||||
from ninja_extra.schemas import PaginatedResponseSchema
|
from ninja_extra.schemas import PaginatedResponseSchema
|
||||||
|
|
||||||
from apikey.auth import ApiKeyAuth
|
from api.auth import ApiKeyAuth
|
||||||
from core.auth.api_permissions import CanAccessLookup, CanView, IsInGroup, IsRoot
|
from api.permissions import CanAccessLookup, CanView, IsInGroup, IsRoot
|
||||||
from counter.models import Counter, Product, ProductType
|
from counter.models import Counter, Product, ProductType
|
||||||
from counter.schemas import (
|
from counter.schemas import (
|
||||||
CounterFilterSchema,
|
CounterFilterSchema,
|
||||||
|
@ -61,7 +61,7 @@ class CustomerQuerySet(models.QuerySet):
|
|||||||
Returns:
|
Returns:
|
||||||
The number of updated rows.
|
The number of updated rows.
|
||||||
|
|
||||||
Warnings:
|
Warning:
|
||||||
The execution time of this query grows really quickly.
|
The execution time of this query grows really quickly.
|
||||||
When updating 500 customers, it may take around a second.
|
When updating 500 customers, it may take around a second.
|
||||||
If you try to update all customers at once, the execution time
|
If you try to update all customers at once, the execution time
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
::: apikey.auth
|
::: api.auth
|
||||||
handler: python
|
handler: python
|
||||||
options:
|
options:
|
||||||
heading_level: 3
|
heading_level: 3
|
@ -1,4 +1,4 @@
|
|||||||
::: apikey.hashers
|
::: api.hashers
|
||||||
handler: python
|
handler: python
|
||||||
options:
|
options:
|
||||||
heading_level: 3
|
heading_level: 3
|
@ -1,4 +1,4 @@
|
|||||||
::: apikey.auth
|
::: api.auth
|
||||||
handler: python
|
handler: python
|
||||||
options:
|
options:
|
||||||
heading_level: 3
|
heading_level: 3
|
4
docs/reference/api/perms.md
Normal file
4
docs/reference/api/perms.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
::: api.permissions
|
||||||
|
handler: python
|
||||||
|
options:
|
||||||
|
heading_level: 3
|
@ -20,13 +20,6 @@
|
|||||||
- CanCreateMixin
|
- CanCreateMixin
|
||||||
- CanEditMixin
|
- CanEditMixin
|
||||||
- CanViewMixin
|
- CanViewMixin
|
||||||
|
- CanEditPropMixin
|
||||||
- FormerSubscriberMixin
|
- FormerSubscriberMixin
|
||||||
- PermissionOrAuthorRequiredMixin
|
- PermissionOrAuthorRequiredMixin
|
||||||
|
|
||||||
|
|
||||||
## API Permissions
|
|
||||||
|
|
||||||
::: core.auth.api_permissions
|
|
||||||
handler: python
|
|
||||||
options:
|
|
||||||
heading_level: 3
|
|
@ -4,6 +4,25 @@ Ce sont des librairies relativement simples et qui présentent
|
|||||||
l'immense avantage d'offrir des mécanismes de validation et de sérialisation
|
l'immense avantage d'offrir des mécanismes de validation et de sérialisation
|
||||||
de données à la fois simples et expressifs.
|
de données à la fois simples et expressifs.
|
||||||
|
|
||||||
|
## Dossiers et fichiers
|
||||||
|
|
||||||
|
L'API possède une application (`api`)
|
||||||
|
à la racine du projet, contenant des utilitaires
|
||||||
|
et de la configuration partagée par toutes les autres applications.
|
||||||
|
C'est la pièce centrale de notre API, mais ce n'est pas là que
|
||||||
|
vous trouverez les routes de l'API.
|
||||||
|
|
||||||
|
Les routes en elles-mêmes sont contenues dans les autres applications,
|
||||||
|
de manière thématiques :
|
||||||
|
les routes liées aux clubs sont dans `club`, les routes liées
|
||||||
|
aux photos dans `sas` et ainsi de suite.
|
||||||
|
|
||||||
|
Les fichiers liés à l'API dans chaque application sont
|
||||||
|
`schemas.py` et `api.py`.
|
||||||
|
`schemas.py` contient les schémas de validation de données
|
||||||
|
et `api.py` contient les contrôleurs de l'API.
|
||||||
|
|
||||||
|
|
||||||
## Schéma de données
|
## Schéma de données
|
||||||
|
|
||||||
Le cœur de django-ninja étant sa validation de données grâce à Pydantic,
|
Le cœur de django-ninja étant sa validation de données grâce à Pydantic,
|
||||||
@ -33,7 +52,7 @@ La plus grande partie des routes de l'API utilisent la méthode par cookie de se
|
|||||||
|
|
||||||
Pour placer une route d'API derrière l'une de ces méthodes (ou bien les deux),
|
Pour placer une route d'API derrière l'une de ces méthodes (ou bien les deux),
|
||||||
utilisez l'attribut `auth` et les classes `SessionAuth` et
|
utilisez l'attribut `auth` et les classes `SessionAuth` et
|
||||||
[`ApiKeyAuth`][apikey.auth.ApiKeyAuth].
|
[`ApiKeyAuth`][api.auth.ApiKeyAuth].
|
||||||
|
|
||||||
!!!example
|
!!!example
|
||||||
|
|
||||||
|
@ -606,4 +606,4 @@ vous ne devriez pas être perdu, étant donné
|
|||||||
que le système de permissions de l'API utilise
|
que le système de permissions de l'API utilise
|
||||||
des noms assez similaires : `IsInGroup`, `IsRoot`, `IsSubscriber`...
|
des noms assez similaires : `IsInGroup`, `IsRoot`, `IsSubscriber`...
|
||||||
Vous pouvez trouver des exemples d'utilisation de ce système
|
Vous pouvez trouver des exemples d'utilisation de ce système
|
||||||
dans [cette partie](../reference/core/api_permissions.md).
|
dans [cette partie](../reference/api/perms.md).
|
||||||
|
@ -24,62 +24,66 @@ sith/
|
|||||||
├── .github/
|
├── .github/
|
||||||
│ ├── actions/ (1)
|
│ ├── actions/ (1)
|
||||||
│ └── workflows/ (2)
|
│ └── workflows/ (2)
|
||||||
├── club/ (3)
|
├── api/ (3)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── com/ (4)
|
├── antispam/ (4)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── core/ (5)
|
├── club/ (5)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── counter/ (6)
|
├── com/ (6)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── docs/ (7)
|
├── core/ (7)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── eboutic/ (8)
|
├── counter/ (8)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── election/ (9)
|
├── docs/ (9)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── forum/ (10)
|
├── eboutic/ (10)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── galaxy/ (11)
|
├── election/ (11)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── locale/ (12)
|
├── forum/ (12)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── matmat/ (13)
|
├── galaxy/ (13)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── pedagogy/ (14)
|
├── locale/ (14)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── rootplace/ (15)
|
├── matmat/ (15)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── sas/ (16)
|
├── pedagogy/ (16)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── sith/ (17)
|
├── rootplace/ (17)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── subscription/ (18)
|
├── sas/ (18)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── trombi/ (19)
|
├── sith/ (19)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── antispam/ (20)
|
├── subscription/ (20)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── staticfiles/ (21)
|
├── trombi/ (21)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
├── processes/ (22)
|
├── antispam/ (22)
|
||||||
|
│ └── ...
|
||||||
|
├── staticfiles/ (23)
|
||||||
|
│ └── ...
|
||||||
|
├── processes/ (24)
|
||||||
│ └── ...
|
│ └── ...
|
||||||
│
|
│
|
||||||
├── .coveragerc (23)
|
├── .coveragerc (25)
|
||||||
├── .envrc (24)
|
├── .envrc (26)
|
||||||
├── .gitattributes
|
├── .gitattributes
|
||||||
├── .gitignore
|
├── .gitignore
|
||||||
├── .mailmap
|
├── .mailmap
|
||||||
├── .env (25)
|
├── .env (27)
|
||||||
├── .env.example (26)
|
├── .env.example (28)
|
||||||
├── manage.py (27)
|
├── manage.py (29)
|
||||||
├── mkdocs.yml (28)
|
├── mkdocs.yml (30)
|
||||||
├── uv.lock
|
├── uv.lock
|
||||||
├── pyproject.toml (29)
|
├── pyproject.toml (31)
|
||||||
├── .venv/ (30)
|
├── .venv/ (32)
|
||||||
├── .python-version (31)
|
├── .python-version (33)
|
||||||
├── Procfile.static (32)
|
├── Procfile.static (34)
|
||||||
├── Procfile.service (33)
|
├── Procfile.service (35)
|
||||||
└── README.md
|
└── README.md
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
@ -92,53 +96,55 @@ sith/
|
|||||||
des workflows Github.
|
des workflows Github.
|
||||||
Par exemple, le workflow `docs.yml` compile
|
Par exemple, le workflow `docs.yml` compile
|
||||||
et publie la documentation à chaque push sur la branche `master`.
|
et publie la documentation à chaque push sur la branche `master`.
|
||||||
3. Application de gestion des clubs et de leurs membres.
|
3. Application avec la configuration de l'API
|
||||||
4. Application contenant les fonctionnalités
|
4. Application contenant des utilitaires pour bloquer le spam et les bots
|
||||||
|
5. Application de gestion des clubs et de leurs membres.
|
||||||
|
6. Application contenant les fonctionnalités
|
||||||
destinées aux responsables communication de l'AE.
|
destinées aux responsables communication de l'AE.
|
||||||
5. Application contenant la modélisation centrale du site.
|
7. Application contenant la modélisation centrale du site.
|
||||||
On en reparle plus loin sur cette page.
|
On en reparle plus loin sur cette page.
|
||||||
6. Application de gestion des comptoirs, des permanences
|
8. Application de gestion des comptoirs, des permanences
|
||||||
sur ces comptoirs et des transactions qui y sont effectuées.
|
sur ces comptoirs et des transactions qui y sont effectuées.
|
||||||
7. Dossier contenant la documentation.
|
9. Dossier contenant la documentation.
|
||||||
8. Application de gestion de la boutique en ligne.
|
10. Application de gestion de la boutique en ligne.
|
||||||
9. Application de gestion des élections.
|
11. Application de gestion des élections.
|
||||||
10. Application de gestion du forum
|
12. Application de gestion du forum
|
||||||
11. Application de gestion de la galaxie ; la galaxie
|
13. Application de gestion de la galaxie ; la galaxie
|
||||||
est un graphe des niveaux de proximité entre les différents
|
est un graphe des niveaux de proximité entre les différents
|
||||||
étudiants.
|
étudiants.
|
||||||
12. Dossier contenant les fichiers de traduction.
|
14. Dossier contenant les fichiers de traduction.
|
||||||
13. Fonctionnalités de recherche d'utilisateurs.
|
15. Fonctionnalités de recherche d'utilisateurs.
|
||||||
14. Le guide des UEs du site, sur lequel les utilisateurs
|
16. Le guide des UEs du site, sur lequel les utilisateurs
|
||||||
peuvent également laisser leurs avis.
|
peuvent également laisser leurs avis.
|
||||||
15. Fonctionnalités utiles aux utilisateurs root.
|
17. Fonctionnalités utiles aux utilisateurs root.
|
||||||
16. Le SAS, où l'on trouve toutes les photos de l'AE.
|
18. Le SAS, où l'on trouve toutes les photos de l'AE.
|
||||||
17. Application principale du projet, contenant sa configuration.
|
19. Application principale du projet, contenant sa configuration.
|
||||||
18. Gestion des cotisations des utilisateurs du site.
|
20. Gestion des cotisations des utilisateurs du site.
|
||||||
19. Outil pour faciliter la fabrication des trombinoscopes de promo.
|
21. Outil pour faciliter la fabrication des trombinoscopes de promo.
|
||||||
20. Fonctionnalités pour gérer le spam.
|
22. Fonctionnalités pour gérer le spam.
|
||||||
21. Gestion des statics du site. Override le système de statics de Django.
|
23. Gestion des statics du site. Override le système de statics de Django.
|
||||||
Ajoute l'intégration du scss et du bundler js
|
Ajoute l'intégration du scss et du bundler js
|
||||||
de manière transparente pour l'utilisateur.
|
de manière transparente pour l'utilisateur.
|
||||||
22. Module de gestion des services externes.
|
24. Module de gestion des services externes.
|
||||||
Offre une API simple pour utiliser les fichiers `Procfile.*`.
|
Offre une API simple pour utiliser les fichiers `Procfile.*`.
|
||||||
23. Fichier de configuration de coverage.
|
25. Fichier de configuration de coverage.
|
||||||
24. Fichier de configuration de direnv.
|
26. Fichier de configuration de direnv.
|
||||||
25. Contient les variables d'environnement, qui sont susceptibles
|
27. Contient les variables d'environnement, qui sont susceptibles
|
||||||
de varier d'une machine à l'autre.
|
de varier d'une machine à l'autre.
|
||||||
26. Contient des valeurs par défaut pour le `.env`
|
28. Contient des valeurs par défaut pour le `.env`
|
||||||
pouvant convenir à un environnment de développement local
|
pouvant convenir à un environnment de développement local
|
||||||
27. Fichier généré automatiquement par Django. C'est lui
|
29. Fichier généré automatiquement par Django. C'est lui
|
||||||
qui permet d'appeler des commandes de gestion du projet
|
qui permet d'appeler des commandes de gestion du projet
|
||||||
avec la syntaxe `python ./manage.py <nom de la commande>`
|
avec la syntaxe `python ./manage.py <nom de la commande>`
|
||||||
28. Le fichier de configuration de la documentation,
|
30. Le fichier de configuration de la documentation,
|
||||||
avec ses plugins et sa table des matières.
|
avec ses plugins et sa table des matières.
|
||||||
29. Le fichier où sont déclarés les dépendances et la configuration
|
31. Le fichier où sont déclarés les dépendances et la configuration
|
||||||
de certaines d'entre elles.
|
de certaines d'entre elles.
|
||||||
30. Dossier d'environnement virtuel généré par uv
|
32. Dossier d'environnement virtuel généré par uv
|
||||||
31. Fichier qui contrôle quelle version de python utiliser pour le projet
|
33. Fichier qui contrôle quelle version de python utiliser pour le projet
|
||||||
32. Fichier qui contrôle les commandes à lancer pour gérer la compilation
|
34. Fichier qui contrôle les commandes à lancer pour gérer la compilation
|
||||||
automatique des static et autres services nécessaires à la command runserver.
|
automatique des static et autres services nécessaires à la command runserver.
|
||||||
33. Fichier qui contrôle les services tiers nécessaires au fonctionnement
|
35. Fichier qui contrôle les services tiers nécessaires au fonctionnement
|
||||||
du Sith tel que redis.
|
du Sith tel que redis.
|
||||||
|
|
||||||
## L'application principale
|
## L'application principale
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from ninja_extra import ControllerBase, api_controller, route
|
from ninja_extra import ControllerBase, api_controller, route
|
||||||
from ninja_extra.exceptions import NotFound
|
from ninja_extra.exceptions import NotFound
|
||||||
|
|
||||||
from core.auth.api_permissions import CanView
|
from api.permissions import CanView
|
||||||
from counter.models import BillingInfo
|
from counter.models import BillingInfo
|
||||||
from eboutic.models import Basket
|
from eboutic.models import Basket
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ msgstr ""
|
|||||||
"True si gardé à jour par le biais d'un fournisseur externe de domains "
|
"True si gardé à jour par le biais d'un fournisseur externe de domains "
|
||||||
"toxics, False sinon"
|
"toxics, False sinon"
|
||||||
|
|
||||||
#: apikey/admin.py
|
#: api/admin.py
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"The API key for %(name)s is: %(key)s. Please store it somewhere safe: you "
|
"The API key for %(name)s is: %(key)s. Please store it somewhere safe: you "
|
||||||
@ -44,57 +44,56 @@ msgstr ""
|
|||||||
"La clef d'API pour %(name)s est : %(key)s. Gardez-là dans un emplacement "
|
"La clef d'API pour %(name)s est : %(key)s. Gardez-là dans un emplacement "
|
||||||
"sûr : vous ne pourrez pas la revoir à nouveau."
|
"sûr : vous ne pourrez pas la revoir à nouveau."
|
||||||
|
|
||||||
#: apikey/admin.py
|
#: api/admin.py
|
||||||
msgid "Revoke selected API keys"
|
msgid "Revoke selected API keys"
|
||||||
msgstr "Révoquer les clefs d'API sélectionnées"
|
msgstr "Révoquer les clefs d'API sélectionnées"
|
||||||
|
|
||||||
#: apikey/models.py club/models.py com/models.py counter/models.py
|
#: api/models.py club/models.py com/models.py counter/models.py forum/models.py
|
||||||
#: forum/models.py launderette/models.py
|
|
||||||
msgid "name"
|
msgid "name"
|
||||||
msgstr "nom"
|
msgstr "nom"
|
||||||
|
|
||||||
#: apikey/models.py core/models.py
|
#: api/models.py core/models.py
|
||||||
msgid "owner"
|
msgid "owner"
|
||||||
msgstr "propriétaire"
|
msgstr "propriétaire"
|
||||||
|
|
||||||
#: apikey/models.py core/models.py
|
#: api/models.py core/models.py
|
||||||
msgid "groups"
|
msgid "groups"
|
||||||
msgstr "groupes"
|
msgstr "groupes"
|
||||||
|
|
||||||
#: apikey/models.py
|
#: api/models.py
|
||||||
msgid "client permissions"
|
msgid "client permissions"
|
||||||
msgstr "permissions du client"
|
msgstr "permissions du client"
|
||||||
|
|
||||||
#: apikey/models.py
|
#: api/models.py
|
||||||
msgid "Specific permissions for this api client."
|
msgid "Specific permissions for this api client."
|
||||||
msgstr "Permissions spécifiques pour ce client d'API"
|
msgstr "Permissions spécifiques pour ce client d'API"
|
||||||
|
|
||||||
#: apikey/models.py
|
#: api/models.py
|
||||||
msgid "api client"
|
msgid "api client"
|
||||||
msgstr "client d'api"
|
msgstr "client d'api"
|
||||||
|
|
||||||
#: apikey/models.py
|
#: api/models.py
|
||||||
msgid "api clients"
|
msgid "api clients"
|
||||||
msgstr "clients d'api"
|
msgstr "clients d'api"
|
||||||
|
|
||||||
#: apikey/models.py
|
#: api/models.py
|
||||||
msgid "prefix"
|
msgid "prefix"
|
||||||
msgstr "préfixe"
|
msgstr "préfixe"
|
||||||
|
|
||||||
#: apikey/models.py
|
#: api/models.py
|
||||||
msgid "hashed key"
|
msgid "hashed key"
|
||||||
msgstr "hash de la clef"
|
msgstr "hash de la clef"
|
||||||
|
|
||||||
#: apikey/models.py
|
#: api/models.py
|
||||||
msgctxt "api key"
|
msgctxt "api key"
|
||||||
msgid "revoked"
|
msgid "revoked"
|
||||||
msgstr "révoquée"
|
msgstr "révoquée"
|
||||||
|
|
||||||
#: apikey/models.py
|
#: api/models.py
|
||||||
msgid "api key"
|
msgid "api key"
|
||||||
msgstr "clef d'api"
|
msgstr "clef d'api"
|
||||||
|
|
||||||
#: apikey/models.py
|
#: api/models.py
|
||||||
msgid "api keys"
|
msgid "api keys"
|
||||||
msgstr "clefs d'api"
|
msgstr "clefs d'api"
|
||||||
|
|
||||||
|
@ -86,10 +86,11 @@ nav:
|
|||||||
- antispam:
|
- antispam:
|
||||||
- reference/antispam/models.md
|
- reference/antispam/models.md
|
||||||
- reference/antispam/forms.md
|
- reference/antispam/forms.md
|
||||||
- apikey:
|
- api:
|
||||||
- reference/apikey/auth.md
|
- reference/api/auth.md
|
||||||
- reference/apikey/hashers.md
|
- reference/api/hashers.md
|
||||||
- reference/apikey/models.md
|
- reference/api/models.md
|
||||||
|
- reference/api/perms.md
|
||||||
- club:
|
- club:
|
||||||
- reference/club/models.md
|
- reference/club/models.md
|
||||||
- reference/club/views.md
|
- reference/club/views.md
|
||||||
|
@ -8,8 +8,8 @@ from ninja_extra import ControllerBase, api_controller, paginate, route
|
|||||||
from ninja_extra.exceptions import NotFound
|
from ninja_extra.exceptions import NotFound
|
||||||
from ninja_extra.pagination import PageNumberPaginationExtra, PaginatedResponseSchema
|
from ninja_extra.pagination import PageNumberPaginationExtra, PaginatedResponseSchema
|
||||||
|
|
||||||
from apikey.auth import ApiKeyAuth
|
from api.auth import ApiKeyAuth
|
||||||
from core.auth.api_permissions import HasPerm
|
from api.permissions import HasPerm
|
||||||
from pedagogy.models import UV
|
from pedagogy.models import UV
|
||||||
from pedagogy.schemas import SimpleUvSchema, UvFilterSchema, UvSchema
|
from pedagogy.schemas import SimpleUvSchema, UvFilterSchema, UvSchema
|
||||||
from pedagogy.utbm_api import UtbmApiClient
|
from pedagogy.utbm_api import UtbmApiClient
|
||||||
|
@ -13,8 +13,8 @@ from ninja_extra.permissions import IsAuthenticated
|
|||||||
from ninja_extra.schemas import PaginatedResponseSchema
|
from ninja_extra.schemas import PaginatedResponseSchema
|
||||||
from pydantic import NonNegativeInt
|
from pydantic import NonNegativeInt
|
||||||
|
|
||||||
from apikey.auth import ApiKeyAuth
|
from api.auth import ApiKeyAuth
|
||||||
from core.auth.api_permissions import (
|
from api.permissions import (
|
||||||
CanAccessLookup,
|
CanAccessLookup,
|
||||||
CanEdit,
|
CanEdit,
|
||||||
CanView,
|
CanView,
|
||||||
|
@ -124,7 +124,7 @@ INSTALLED_APPS = (
|
|||||||
"pedagogy",
|
"pedagogy",
|
||||||
"galaxy",
|
"galaxy",
|
||||||
"antispam",
|
"antispam",
|
||||||
"apikey",
|
"api",
|
||||||
)
|
)
|
||||||
|
|
||||||
MIDDLEWARE = (
|
MIDDLEWARE = (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user