Skip to main content

schema

SQLAlchemy ORM for the ga_calculation cache table (v1).

Each version package declares its own local Base (its own MetaData) so that multiple versions of the same table can coexist in one process without a __tablename__ collision. Base carries the shared nullable tags column and every ORM in this version inherits it directly.

Adding a column to a new version is an additive migration (see migrations.py): add a nullable mapped_column in the new version's schema and a corresponding upgrade step — never rename/drop/retype in place.

Classes

Base

class Base(**kwargs: Any):

Local declarative base for ga_calculation v1.

Owns an isolated MetaData (so it never collides with another version of this table) and inherits the shared columns from types/schema.py's Base.

A simple constructor that allows initialization from kwargs.

Sets attributes on the constructed instance using the names and values in kwargs.

Only keys that are present as attributes of the instance's class are allowed. These could be, for example, any mapped columns or relationships.

Subclasses

Variables

  • static metadata
  • static registry

GACalculation

class GACalculation(**kwargs):

SQLAlchemy model for the ga_calculation cache table.

One row per (task_hash, file_id): the geographic-atrophy (with-fovea) metrics computed for a scan from the pathology-segmentation and fovea landmark predictions. task_hash covers (pod_name, datasource_name), so config values sit outside the key; each run recomputes every file and merges its row, and a changed threshold lands on the next run. project_id is provenance only and excluded from the key, letting two projects on the same datasource share rows (mirrors model_inferences, fluid_calculation and the sibling thickness tables).

warning

Because neither project_id nor the calc config is part of the key, two projects reading this datasource under different calc configs contend for the same row: the last background run to write wins, and the other project reads metrics computed under its counterpart's config.

The metrics live in the schemaless metrics_json blob (the flattened GAMetricsWithFovea.to_record(...) output — scalar fields, the segmentation_areas and n_scan_run_lengths mappings, and the per-pathology max_*_probability columns; the raw probability arrays are dropped on write). error carries the missing_data:* / calculation_error:* reason string for a file whose metric could not be computed; such a file is recorded with a null metrics_json and a non-null error.

A simple constructor that allows initialization from kwargs.

Sets attributes on the constructed instance using the names and values in kwargs.

Only keys that are present as attributes of the instance's class are allowed. These could be, for example, any mapped columns or relationships.

Variables

  • error : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
  • file_id : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
  • last_accessed_at : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
  • metrics_json : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
  • processed_at : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
  • project_id : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
  • run_id : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
  • tags : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]
  • task_hash : Union[sqlalchemy.orm.attributes.InstrumentedAttribute[+_T_co], +_T_co]