"""Utilities used for logging events.""" from typing import Optional from auditlogger.logger import AuditLogger from auditlogger.record_event import RecordEvent from sentry_sdk import capture_exception from collaborator.connectors import audit_logger from collaborator.utils.typing import User LOG_EVENT_CREATE = "create" LOG_EVENT_UPDATE = "update" LOG_EVENT_DELETE = "delete" RecordEvent.ES_INDEX = "record-event-ows-collaborator" @audit_logger.logger def bulk_log_events( event_type: str, entity_type: str, data: list, user: Optional[User], logger: AuditLogger, ): """Log multiple events. Args: event_type (str): Type of event to log. entity_type (str): Type of entity modfified by the events. data (list): Entities to log events for. user (User): User who caused the events. logger (auditlogger.AuditLogger): Logger to use to log the events. """ events = [ RecordEvent( entity_type, str(item["id"]), event_type, {"original": item["original"], "updated": item["updated"]}, user.type if user else None, str(user.id) if user else None, ) for item in data ] try: logger.log(events) except Exception as e: capture_exception(e) @audit_logger.logger def log_event( event_type: str, entity_type: str, entity_id: int, original_data: Optional[dict], updated_data: dict, user: Optional[User], logger: AuditLogger, ): """Log an event. Args: event_type (str): Type of event to log. entity_type (str): Type of entity modified by the event. entity_id (int): ID of the entity modified by the event. original_data (dict): Original data before the event. updated_data (dict): Update data after the event. user (User): User who caused the event. logger (auditlogger.AuditLogger): """ changeset = {"original": original_data, "updated": updated_data} event = RecordEvent( entity_type, str(entity_id), event_type, changeset, user.type if user else None, str(user.id) if user else None, ) try: logger.log(event) except Exception as e: capture_exception(e)