Coverage for postrfp/vendor/api/audit.py: 100%

13 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-22 21:34 +0000

1from typing import Annotated, TYPE_CHECKING 

2 

3from sqlalchemy.orm import Session 

4 

5from postrfp.shared.decorators import http 

6from postrfp.shared import fetch 

7from postrfp.authorisation import perms 

8from postrfp.model import AuditEvent, User 

9from postrfp.shared import serial 

10 

11if TYPE_CHECKING: 

12 from postrfp.shared.pager import Pager 

13 

14 

15@http 

16def get_events( 

17 session: Session, user: User, pager: "Pager" 

18) -> Annotated[list[dict], list[serial.SummaryEvent]]: 

19 """ 

20 Returns a paginated array of audit events for the user's organisation. 

21 Supports paging. Requires permission MANAGE_USERS. 

22 """ 

23 user.check_permission(perms.MANAGE_USERS) 

24 q = fetch.audit_events(user.organisation) 

25 cols = ( 

26 AuditEvent.id, 

27 AuditEvent.timestamp, 

28 AuditEvent.user_id, 

29 AuditEvent.event_type, 

30 ) 

31 return [ 

32 e._asdict() for e in q.slice(pager.startfrom, pager.goto).with_entities(*cols) 

33 ]