from typing import Literal, Union from pydantic import BaseModel, Field, RootModel class Bucket(BaseModel): name: str class Object(BaseModel): key: str class S3EventTarget(BaseModel): bucket: Bucket object: Object class S3Event(BaseModel): eventName: Literal["ObjectCreated:Put"] s3: S3EventTarget class AWSEvent(BaseModel): records: list[S3Event] = Field(alias="Records", min_length=1, max_length=1) class ManualEvent(BaseModel): bucket: str key: str skip_update: bool = False skip_notification: bool = False skip_add_to_royalties: bool = False Event = RootModel[Union[AWSEvent, ManualEvent]]