from datetime import datetime
from typing import Any, Dict, List, Optional
import pydantic
from typing_extensions import TypeAlias
from pyairtable.models._base import AirtableModel, rebuild_models
[docs]class AuditLogResponse(AirtableModel):
"""
Represents a page of audit log events.
See `Audit log events <https://airtable.com/developers/web/api/audit-log-events>`__
for more information on how to interpret this data structure.
"""
events: List["AuditLogEvent"]
pagination: Optional["AuditLogResponse.Pagination"] = None
[docs]class AuditLogEvent(AirtableModel):
"""
Represents a single audit log event.
See `Audit log events <https://airtable.com/developers/web/api/audit-log-events>`__
for more information on how to interpret this data structure.
To avoid namespace conflicts with the Pydantic library, the
``modelId`` and ``modelType`` fields from the Airtable API are
represented as fields named ``object_id`` and ``object_type``.
"""
id: str
timestamp: datetime
action: str
actor: "AuditLogActor"
object_id: str = pydantic.Field(alias="modelId")
object_type: str = pydantic.Field(alias="modelType")
payload: "AuditLogPayload"
payload_version: str
context: "AuditLogEvent.Context"
origin: "AuditLogEvent.Origin"
[docs] class Context(AirtableModel):
base_id: Optional[str] = None
action_id: str
enterprise_account_id: str
descendant_enterprise_account_id: Optional[str] = None
interface_id: Optional[str] = None
workspace_id: Optional[str] = None
[docs] class Origin(AirtableModel):
ip_address: str
user_agent: str
oauth_access_token_id: Optional[str] = None
personal_access_token_id: Optional[str] = None
session_id: Optional[str] = None
class AuditLogActor(AirtableModel):
type: str
user: Optional["AuditLogActor.UserInfo"] = None
view_id: Optional[str] = None
automation_id: Optional[str] = None
class UserInfo(AirtableModel):
id: str
email: str
name: Optional[str] = None
# Placeholder until we can parse https://airtable.com/developers/web/api/audit-log-event-types
AuditLogPayload: TypeAlias = Dict[str, Any]
rebuild_models(vars())