mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-11 04:19:25 +00:00
add api endpoint to upload a sas picture
This commit is contained in:
40
sas/api.py
40
sas/api.py
@ -1,7 +1,9 @@
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db.models import F
|
||||
from django.urls import reverse
|
||||
from ninja import Query
|
||||
from ninja import Body, Query, UploadedFile
|
||||
from ninja.errors import HttpError
|
||||
from ninja_extra import ControllerBase, api_controller, paginate, route
|
||||
from ninja_extra.exceptions import NotFound, PermissionDenied
|
||||
from ninja_extra.pagination import PageNumberPaginationExtra
|
||||
@ -9,7 +11,13 @@ from ninja_extra.permissions import IsAuthenticated
|
||||
from ninja_extra.schemas import PaginatedResponseSchema
|
||||
from pydantic import NonNegativeInt
|
||||
|
||||
from core.auth.api_permissions import CanAccessLookup, CanView, IsInGroup, IsRoot
|
||||
from core.auth.api_permissions import (
|
||||
CanAccessLookup,
|
||||
CanEdit,
|
||||
CanView,
|
||||
IsInGroup,
|
||||
IsRoot,
|
||||
)
|
||||
from core.models import Notification, User
|
||||
from sas.models import Album, PeoplePictureRelation, Picture
|
||||
from sas.schemas import (
|
||||
@ -92,6 +100,34 @@ class PicturesController(ControllerBase):
|
||||
.annotate(album=F("parent__name"))
|
||||
)
|
||||
|
||||
@route.post(
|
||||
"",
|
||||
permissions=[CanEdit],
|
||||
response={200: None, 409: dict[str, list[str]]},
|
||||
url_name="upload_picture",
|
||||
)
|
||||
def upload_picture(self, album_id: Body[int], picture: UploadedFile):
|
||||
album = self.get_object_or_exception(Album, pk=album_id)
|
||||
user = self.context.request.user
|
||||
self_moderate = user.has_perm("sas.moderate_sasfile")
|
||||
new = Picture(
|
||||
parent=album,
|
||||
name=picture.name,
|
||||
file=picture,
|
||||
owner=user,
|
||||
is_moderated=self_moderate,
|
||||
is_folder=False,
|
||||
mime_type=picture.content_type,
|
||||
)
|
||||
if self_moderate:
|
||||
new.moderator = user
|
||||
try:
|
||||
new.generate_thumbnails()
|
||||
new.full_clean()
|
||||
new.save()
|
||||
except ValidationError as e:
|
||||
raise HttpError(status_code=409, message=str(e)) from e
|
||||
|
||||
@route.get(
|
||||
"/{picture_id}/identified",
|
||||
permissions=[IsAuthenticated, CanView],
|
||||
|
Reference in New Issue
Block a user