flip_api.domain.schemas.file

Attributes

SafeFileName

Classes

ModelFiles

Model for file paths in the model.

ModelFilesList

Model for list of model files.

ScannedFileSns

Model for SNS message when a file is scanned.

ScannedFileMessage

Model for the message received when a file is scanned.

ScannedFileInput

UploadFileBody

Model for file upload request body.

PresignedUploadResponse

Response for a presigned-POST upload request.

ModelFile

PreSignedUrlResponse

Response model for pre-signed URL requests.

ModelFileDownload

Model for file download requests.

IdList

Model for a list of UUIDs.

Functions

validate_safe_file_name(→ str)

Reject any character that would let the caller steer an S3 key off-prefix.

Module Contents

flip_api.domain.schemas.file.validate_safe_file_name(value: str) str

Reject any character that would let the caller steer an S3 key off-prefix.

Used at every boundary where caller-supplied text is concatenated into an S3 object key — request bodies (UploadFileBody) and FastAPI path parameters on the download/delete routes. Without this guard a value like ../other-model/x or one containing NUL/control bytes would write outside the {model_id}/ prefix or smuggle an unexpected key past the downstream scan/download endpoints.

Parameters:

value (str) – Caller-supplied filename to validate.

Returns:

The value unchanged when every rule passes.

Return type:

str

Raises:

ValueError – If the value contains whitespace at the edges, path separators, a path-traversal token, or control characters.

flip_api.domain.schemas.file.SafeFileName
class flip_api.domain.schemas.file.ModelFiles

Bases: pydantic.BaseModel

Model for file paths in the model.

algo: str | None = None
opener: str | None = None
model: str | None = None
class flip_api.domain.schemas.file.ModelFilesList

Bases: pydantic.BaseModel

Model for list of model files.

files: ModelFiles
class flip_api.domain.schemas.file.ScannedFileSns

Bases: pydantic.BaseModel

Model for SNS message when a file is scanned.

message: str
class flip_api.domain.schemas.file.ScannedFileMessage

Bases: pydantic.BaseModel

Model for the message received when a file is scanned.

bucket: str
key: str
status: flip_api.domain.schemas.status.BucketStatus
action: flip_api.domain.schemas.status.BucketAction
finding: str
class flip_api.domain.schemas.file.ScannedFileInput

Bases: pydantic.BaseModel

Records: list[dict[str, Any]]
class flip_api.domain.schemas.file.UploadFileBody

Bases: pydantic.BaseModel

Model for file upload request body.

Field names are camelCase rather than snake_case because they map directly to the case-sensitive form-field names in the multipart upload (e.g. S3’s Content-Type form field), and to stay consistent with the existing fileName boundary.

fileName: str
contentType: str | None
classmethod _validate_file_name(v: str) str
class flip_api.domain.schemas.file.PresignedUploadResponse

Bases: pydantic.BaseModel

Response for a presigned-POST upload request.

The client must POST multipart/form-data to url with every entry in fields included as a form field, plus the file last under the field name file. maxBytes mirrors the size cap baked into the policy so the UI can short-circuit oversized files locally and surface a clear error.

url: str
fields: dict[str, str]
maxBytes: int
class flip_api.domain.schemas.file.ModelFile

Bases: pydantic.BaseModel

id: str | None = None
name: str
size: int | None = None
type: str | None = None
status: flip_api.domain.schemas.status.FileUploadStatus | None = None
model_id: uuid.UUID
created: str | None = None
modified: str | None = None
class flip_api.domain.schemas.file.PreSignedUrlResponse

Bases: pydantic.BaseModel

Response model for pre-signed URL requests.

fileName: str
presignedUrl: str
status: flip_api.domain.schemas.status.FileUploadStatus
model_id: str
class flip_api.domain.schemas.file.ModelFileDownload

Bases: pydantic.BaseModel

Model for file download requests.

fileName: SafeFileName
model_id: uuid.UUID
user_id: uuid.UUID
class flip_api.domain.schemas.file.IdList

Bases: pydantic.BaseModel

Model for a list of UUIDs.

Enforces that it’s a list with at least 1 element. Ensures each item in the list is a valid UUID.

ids: flip_api.domain.schemas.types.NonEmptyUUIDList