Coverage for src/couchers/servicers/reporting.py: 100%
16 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-12-14 00:52 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-12-14 00:52 +0000
1import grpc
2from google.protobuf import empty_pb2
4from couchers.models import ContentReport, User
5from couchers.proto import reporting_pb2_grpc
6from couchers.sql import couchers_select as select
7from couchers.tasks import send_content_report_email
10class Reporting(reporting_pb2_grpc.ReportingServicer):
11 def Report(self, request, context, session):
12 # note no filtering on visibility
13 author_user = session.execute(select(User).where_username_or_id(request.author_user)).scalar_one_or_none()
15 if not author_user:
16 context.abort_with_error_code(grpc.StatusCode.NOT_FOUND, "user_not_found")
18 content_report = ContentReport(
19 reporting_user_id=context.user_id,
20 reason=request.reason,
21 description=request.description,
22 content_ref=request.content_ref,
23 author_user=author_user,
24 user_agent=request.user_agent,
25 page=request.page,
26 )
28 session.add(content_report)
29 session.flush()
31 send_content_report_email(session, content_report)
33 return empty_pb2.Empty()