flip_api.db.models.main_models
Classes
Many-to-many link between FLJob and Trust: the trusts selected for a training run. |
|
Audit log for trust-registry mutations (register / delete). |
|
Pool of pre-provisioned FL participant kits the hub assigns to joining trusts. |
|
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
- job_id: uuid.UUID | None
- class flip_api.db.models.main_models.FLJobTrust
Bases:
sqlmodel.SQLModelMany-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
- 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
- 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
- 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
- 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
- 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)]
- 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
- 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
- link: str | None = None
- 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.SQLModelAudit 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
- 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.SQLModelPool 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 matchingservices/<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/trustsclaims the nextassigned_to_trust_id IS NULLrow 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
- 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