flip_api.db.models.main_models

Classes

FLNets

FLScheduler

FLJobTrust

Many-to-many link between FLJob and Trust: the trusts selected for a training run.

FLJob

FLMetrics

FLLogs

Model

ModelTrustIntersect

ModelsAudit

ProjectTrustIntersect

Projects

ProjectsAudit

ProjectUserAccess

Queries

QueryResult

QueryStats

SiteBanner

SiteConfig

Trust

TrustsAudit

Audit log for trust-registry mutations (register / delete).

FLKitSlot

Pool of pre-provisioned FL participant kits the hub assigns to joining trusts.

TrustTask

UploadedFiles

XNATProjectStatus

Module Contents

class flip_api.db.models.main_models.FLNets

Bases: sqlmodel.SQLModel

__tablename__ = 'fl_nets'
id: uuid.UUID
name: str
endpoint: str
fl_backend: flip_api.domain.schemas.types.FLBackend
schedulers: list[FLScheduler]
class flip_api.db.models.main_models.FLScheduler

Bases: sqlmodel.SQLModel

__tablename__ = 'fl_scheduler'
id: uuid.UUID
net_id: uuid.UUID
status: flip_api.domain.schemas.status.NetStatus
job_id: uuid.UUID | None
job: FLJob | None
net: FLNets | None
class flip_api.db.models.main_models.FLJobTrust

Bases: sqlmodel.SQLModel

Many-to-many link between FLJob and Trust: the trusts selected for a training run.

__tablename__ = 'fl_job_trust'
fl_job_id: uuid.UUID
trust_id: uuid.UUID
class flip_api.db.models.main_models.FLJob

Bases: sqlmodel.SQLModel

__tablename__ = 'fl_job'
id: uuid.UUID
model_id: uuid.UUID
status: flip_api.domain.schemas.status.JobStatus
created: Annotated[datetime.datetime, Field(default_factory=datetime.utcnow)]
started: datetime.datetime | None
completed: datetime.datetime | None
fl_backend_job_id: str | None = None
scheduler: FLScheduler | None
trusts: list[Trust]
class flip_api.db.models.main_models.FLMetrics

Bases: sqlmodel.SQLModel

__tablename__ = 'fl_metrics'
id: uuid.UUID
trust: uuid.UUID
fl_client_name: str
model_id: uuid.UUID
global_round: int
timestamp: datetime.datetime | None
label: str
result: float
class flip_api.db.models.main_models.FLLogs

Bases: sqlmodel.SQLModel

__tablename__ = 'fl_logs'
id: uuid.UUID
model_id: uuid.UUID
log_date: Annotated[datetime.datetime | None, Field(default_factory=datetime.utcnow)]
success: bool
trust: uuid.UUID | None
fl_client_name: str | None
log: str
class flip_api.db.models.main_models.Model

Bases: sqlmodel.SQLModel

__tablename__ = 'model'
id: uuid.UUID
name: str
description: str
status: flip_api.domain.schemas.status.ModelStatus
deleted: bool
project_id: uuid.UUID | None
owner_id: uuid.UUID
creation_timestamp: Annotated[datetime.datetime, Field(default_factory=datetime.utcnow)]
class flip_api.db.models.main_models.ModelTrustIntersect

Bases: sqlmodel.SQLModel

__tablename__ = 'model_trust_intersect'
id: uuid.UUID
status: flip_api.domain.schemas.status.TrustIntersectStatus
model_id: uuid.UUID | None
trust_id: uuid.UUID | None
fl_client_endpoint: str | None
class flip_api.db.models.main_models.ModelsAudit

Bases: sqlmodel.SQLModel

__tablename__ = 'models_audit'
id: uuid.UUID
model_id: uuid.UUID | None
action: flip_api.domain.schemas.actions.ModelAuditAction
user_id: uuid.UUID | None
audit_date: Annotated[datetime.datetime, Field(default_factory=lambda: datetime.now(timezone.utc))]
class flip_api.db.models.main_models.ProjectTrustIntersect

Bases: sqlmodel.SQLModel

__tablename__ = 'project_trust_intersect'
id: uuid.UUID
project_id: uuid.UUID | None
trust_id: uuid.UUID | None
approved: bool
approved_at: datetime.datetime | None
class flip_api.db.models.main_models.Projects

Bases: sqlmodel.SQLModel

__tablename__ = 'projects'
id: uuid.UUID
name: str
description: str
owner_id: uuid.UUID
deleted: bool
creation_timestamp: Annotated[datetime.datetime, Field(default_factory=datetime.utcnow)]
status: flip_api.domain.schemas.status.ProjectStatus
dicom_to_nifti: bool
class flip_api.db.models.main_models.ProjectsAudit

Bases: sqlmodel.SQLModel

__tablename__ = 'projects_audit'
id: uuid.UUID
project_id: uuid.UUID | None
action: flip_api.domain.schemas.actions.ProjectAuditAction
user_id: uuid.UUID
audit_date: Annotated[datetime.datetime, Field(default_factory=lambda: datetime.now(timezone.utc))]
class flip_api.db.models.main_models.ProjectUserAccess

Bases: sqlmodel.SQLModel

__tablename__ = 'project_user_access'
id: uuid.UUID
project_id: uuid.UUID | None
user_id: uuid.UUID
class flip_api.db.models.main_models.Queries

Bases: sqlmodel.SQLModel

__tablename__ = 'queries'
id: uuid.UUID
name: str
query: str
created: Annotated[datetime.datetime, Field(default_factory=datetime.utcnow)]
created_by: uuid.UUID
project_id: uuid.UUID | None
queried_trust_ids: list[uuid.UUID]
class flip_api.db.models.main_models.QueryResult

Bases: sqlmodel.SQLModel

__tablename__ = 'query_result'
id: uuid.UUID
query_id: uuid.UUID
trust_id: uuid.UUID | None
data: str
class flip_api.db.models.main_models.QueryStats

Bases: sqlmodel.SQLModel

__tablename__ = 'query_stats'
id: uuid.UUID
stats: str
stats_received: Annotated[datetime.datetime, Field(default_factory=datetime.utcnow)]
query_id: uuid.UUID
class flip_api.db.models.main_models.SiteBanner

Bases: sqlmodel.SQLModel

__tablename__ = 'site_banner'
id: int
message: str
enabled: bool
class flip_api.db.models.main_models.SiteConfig

Bases: sqlmodel.SQLModel

__tablename__ = 'site_config'
key: str
value: bool
class flip_api.db.models.main_models.Trust

Bases: sqlmodel.SQLModel

__tablename__ = 'trust'
id: uuid.UUID
name: str
last_heartbeat: datetime.datetime | None
code: str | None
region: str | None
api_key_hash: str | None
created_at: datetime.datetime
class flip_api.db.models.main_models.TrustsAudit

Bases: sqlmodel.SQLModel

Audit log for trust-registry mutations (register / delete).

Captures lifecycle events on trust: admin-UI POST /admin/trusts, deploy-CLI register_trust.py, and deploy-CLI delete_trust.py. Rows survive a hard delete of the underlying trust — trust_id is a bare UUID with NO foreign key, so the audit row remains queryable after the trust row is gone (delete_trust.py hard-deletes; an FK would either block that delete or null this column out).

modified_by_user_id is nullable because the deploy-CLI path runs on a bastion under operator IAM, not an authenticated FLIP user: both register_trust.py and delete_trust.py write NULL. The UI path (admin_create_trust) stamps the Cognito sub of the authenticated admin.

trust_name is denormalised here on purpose: it lets audit queries show a human-readable name long after the trust row was hard-deleted.

__tablename__ = 'trusts_audit'
id: uuid.UUID
trust_id: uuid.UUID
trust_name: str
action: flip_api.domain.schemas.actions.TrustAuditAction
modified_by_user_id: uuid.UUID | None
audit_date: Annotated[datetime.datetime, Field(default_factory=lambda: datetime.now(timezone.utc))]
class flip_api.db.models.main_models.FLKitSlot

Bases: sqlmodel.SQLModel

Pool of pre-provisioned FL participant kits the hub assigns to joining trusts.

Decouples the hub-side trust identity (Trust.name, arbitrary admin-chosen) from the FL participant identity (the CN baked into the kit’s cert at provisioning time). Operators get matching services/<slot_name>/ dirs on every net’s workspace — one global slot row covers all nets, so the assignment doesn’t need a net_id column.

Lifecycle: rows are seeded from FL_KIT_SLOT_NAMES (one per pre-provisioned slot in flip-fl-base). POST /admin/trusts claims the next assigned_to_trust_id IS NULL row in the same transaction as the trust insert.

__tablename__ = 'fl_kit_slot'
slot_name: str
slot_number: int
assigned_to_trust_id: uuid.UUID | None
assigned_at: datetime.datetime | None
class flip_api.db.models.main_models.TrustTask

Bases: sqlmodel.SQLModel

__tablename__ = 'trust_task'
id: uuid.UUID
trust_id: uuid.UUID
task_type: flip_api.domain.schemas.status.TaskType
payload: str
query_id: uuid.UUID | None
status: flip_api.domain.schemas.status.TaskStatus
result: str | None
needs_post_processing: bool
retry_count: int
created_at: Annotated[datetime.datetime, Field(default_factory=lambda: datetime.now(timezone.utc))]
updated_at: datetime.datetime | None
class flip_api.db.models.main_models.UploadedFiles

Bases: sqlmodel.SQLModel

__tablename__ = 'uploaded_files'
id: uuid.UUID
name: str
status: flip_api.domain.schemas.file.FileUploadStatus
size: float
type: str
tag: str | None
model_id: uuid.UUID | None
class flip_api.db.models.main_models.XNATProjectStatus

Bases: sqlmodel.SQLModel

__tablename__ = 'xnat_project_status'
id: uuid.UUID
xnat_project_id: uuid.UUID
project_id: uuid.UUID | None
trust_id: uuid.UUID | None
retrieve_image_status: flip_api.domain.schemas.status.XNATImageStatus
query_at_creation: uuid.UUID | None
last_reimport: Annotated[datetime.datetime, Field(default_factory=lambda: datetime.now(timezone.utc))]
reimport_count: int