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
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-22 21:34 +0000
1from typing import Annotated, TYPE_CHECKING
3from sqlalchemy.orm import Session
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
11if TYPE_CHECKING:
12 from postrfp.shared.pager import Pager
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 ]