Coverage for app/backend/src/couchers/servicers/media.py: 93%
26 statements
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-19 15:47 +0000
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-19 15:47 +0000
1"""
2When adding a new foreign key to uploads.key, also update the reverse lookup in
3couchers/helpers/upload_uses.py.
4"""
6import json
7import logging
9import grpc
10from google.protobuf import empty_pb2
11from sqlalchemy import select
12from sqlalchemy.orm import Session
14from couchers.context import CouchersContext
15from couchers.crypto import secure_compare
16from couchers.middleware.interceptors import MediaInterceptor
17from couchers.models import InitiatedUpload, Upload
18from couchers.proto import media_pb2, media_pb2_grpc
20logger = logging.getLogger(__name__)
23def get_media_auth_interceptor(secret_token: str) -> MediaInterceptor:
24 def is_authorized(token: str) -> bool:
25 return secure_compare(token.encode("ascii"), secret_token.encode("ascii"))
27 return MediaInterceptor(is_authorized)
30class Media(media_pb2_grpc.MediaServicer):
31 def UploadConfirmation(
32 self, request: media_pb2.UploadConfirmationReq, context: CouchersContext, session: Session
33 ) -> empty_pb2.Empty:
34 initiated_upload = session.execute(
35 select(InitiatedUpload).where(InitiatedUpload.key == request.key).where(InitiatedUpload.is_valid)
36 ).scalar_one_or_none()
38 if not initiated_upload: 38 ↛ 39line 38 didn't jump to line 39 because the condition on line 38 was never true
39 context.abort_with_error_code(grpc.StatusCode.NOT_FOUND, "upload_not_found")
41 metadata = request.metadata
43 # move it to a completed upload
44 upload = Upload(
45 key=request.key,
46 filename=request.filename,
47 creator_user_id=initiated_upload.initiator_user_id,
48 metadata_exif=metadata.exif or None,
49 metadata_xmp=metadata.xmp or None,
50 metadata_iptc=metadata.iptc or None,
51 metadata_parsed=json.loads(metadata.parsed_json) if metadata.parsed_json else None,
52 metadata_parse_error=metadata.parse_error or None,
53 original_filename=metadata.original_filename or None,
54 original_format=metadata.original_format or None,
55 original_size=metadata.original_size or None,
56 original_width=metadata.original_width or None,
57 original_height=metadata.original_height or None,
58 )
59 session.add(upload)
61 # delete the old upload
62 session.delete(initiated_upload)
64 return empty_pb2.Empty()