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

1import grpc 

2from google.protobuf import empty_pb2 

3 

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 

8 

9 

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() 

14 

15 if not author_user: 

16 context.abort_with_error_code(grpc.StatusCode.NOT_FOUND, "user_not_found") 

17 

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 ) 

27 

28 session.add(content_report) 

29 session.flush() 

30 

31 send_content_report_email(session, content_report) 

32 

33 return empty_pb2.Empty()