diff options
author | Andrew Godwin | 2022-12-11 12:37:28 -0700 |
---|---|---|
committer | Andrew Godwin | 2022-12-12 11:56:49 -0700 |
commit | 20239b5cb7455d593680b17d2d80d2a4850c524d (patch) | |
tree | 1c5705837e17bca50920848d00bfcf1f7c2313af /api/views/media.py | |
parent | fc8a21fc5c6809ea115092eeec57e09e984cdd76 (diff) | |
download | takahe-20239b5cb7455d593680b17d2d80d2a4850c524d.tar.gz takahe-20239b5cb7455d593680b17d2d80d2a4850c524d.tar.bz2 takahe-20239b5cb7455d593680b17d2d80d2a4850c524d.zip |
Basic post mutation
Diffstat (limited to 'api/views/media.py')
-rw-r--r-- | api/views/media.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/api/views/media.py b/api/views/media.py new file mode 100644 index 0000000..35c0650 --- /dev/null +++ b/api/views/media.py @@ -0,0 +1,76 @@ +from django.shortcuts import get_object_or_404 +from ninja import File, Schema +from ninja.files import UploadedFile + +from activities.models import PostAttachment, PostAttachmentStates +from api import schemas +from api.views.base import api_router +from core.files import blurhash_image, resize_image + +from ..decorators import identity_required + + +class UploadMediaSchema(Schema): + description: str = "" + focus: str = "0,0" + + +@api_router.post("/v1/media", response=schemas.MediaAttachment) +@api_router.post("/v2/media", response=schemas.MediaAttachment) +@identity_required +def upload_media( + request, + file: UploadedFile = File(...), + details: UploadMediaSchema | None = None, +): + main_file = resize_image( + file, + size=(2000, 2000), + cover=False, + ) + thumbnail_file = resize_image( + file, + size=(400, 225), + cover=True, + ) + attachment = PostAttachment.objects.create( + blurhash=blurhash_image(thumbnail_file), + mimetype="image/webp", + width=main_file.image.width, + height=main_file.image.height, + name=details.description if details else None, + state=PostAttachmentStates.fetched, + ) + attachment.file.save( + main_file.name, + main_file, + ) + attachment.thumbnail.save( + thumbnail_file.name, + thumbnail_file, + ) + attachment.save() + return attachment.to_mastodon_json() + + +@api_router.get("/v1/media/{id}", response=schemas.MediaAttachment) +@identity_required +def get_media( + request, + id: str, +): + attachment = get_object_or_404(PostAttachment, pk=id) + return attachment.to_mastodon_json() + + +@api_router.put("/v1/media/{id}", response=schemas.MediaAttachment) +@identity_required +def update_media( + request, + id: str, + details: UploadMediaSchema | None = None, +): + attachment = get_object_or_404(PostAttachment, pk=id) + attachment.name = details.description if details else None + attachment.save() + return attachment.to_mastodon_json() |