metadata¶
metadata
¶
EAV metadata wrapper for visit_metadata and sample_metadata.
Both tables share the same shape: four typed value columns
(value_int, value_numeric, value_bool, value_text) plus a
value_type discriminator and a CHECK constraint that requires exactly
one value column to be populated and to match value_type. This module
hides the encoding behind a small key-value API:
metadata.set_visit(cur, visit_id, "bmi", 22.7) # numeric
metadata.set_visit(cur, visit_id, "smoker", False) # bool
metadata.get_visit(cur, visit_id, "bmi") # -> Decimal('22.700000')
metadata.list_for_visit(cur, visit_id) # -> dict[str, Any]
metadata.delete_visit(cur, visit_id, "bmi") # -> bool
Equivalent _sample functions exist for sample_metadata.
Python types map to value columns as follows. Order matters: bool is a
subclass of int, so it is checked first.
bool -> value_bool (value_type='bool')
int -> value_int (value_type='int')
float -> value_numeric (value_type='numeric')
str -> value_text (value_type='text')
Numeric values are stored as DECIMAL(20,6); the driver returns them
as decimal.Decimal. Round-trips therefore convert float -> Decimal.
Writes use INSERT ... ON DUPLICATE KEY UPDATE against the existing
UNIQUE on (parent_id, key_name), so :func:set_visit and
:func:set_sample are idempotent. The function returns one of
"inserted", "updated", or "unchanged" based on cur.rowcount.
set_visit
¶
Upsert a visit_metadata entry. Idempotent.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cur
|
Audit-logging cursor from |
required | |
visit_id
|
int
|
Parent visit. |
required |
key
|
str
|
Metadata key name (unique per visit). |
required |
value
|
Any
|
|
required |
Returns:
| Type | Description |
|---|---|
SetResult
|
|
SetResult
|
changed, |
SetResult
|
value. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
TypeError
|
If |
Source code in src/noxdb/metadata.py
get_visit
¶
Return the native value for (visit_id, key).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cur
|
Audit-logging cursor from |
required | |
visit_id
|
int
|
Parent visit. |
required |
key
|
str
|
Metadata key name. |
required |
Returns:
| Type | Description |
|---|---|
Any
|
The decoded value, or |
Source code in src/noxdb/metadata.py
list_for_visit
¶
Return all metadata for a visit as a key/value dict.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cur
|
Audit-logging cursor from |
required | |
visit_id
|
int
|
Parent visit. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
|
Source code in src/noxdb/metadata.py
delete_visit
¶
Delete (visit_id, key).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cur
|
Audit-logging cursor from |
required | |
visit_id
|
int
|
Parent visit. |
required |
key
|
str
|
Metadata key name. |
required |
Returns:
| Type | Description |
|---|---|
bool
|
|
Source code in src/noxdb/metadata.py
set_sample
¶
Upsert a sample_metadata entry. Idempotent.
See set_visit for the
contract; this is the sample-keyed variant.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cur
|
Audit-logging cursor from |
required | |
sample_id
|
int
|
Parent sample. |
required |
key
|
str
|
Metadata key name (unique per sample). |
required |
value
|
Any
|
|
required |
Returns:
| Type | Description |
|---|---|
SetResult
|
|
Source code in src/noxdb/metadata.py
get_sample
¶
Return the native value for (sample_id, key).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cur
|
Audit-logging cursor from |
required | |
sample_id
|
int
|
Parent sample. |
required |
key
|
str
|
Metadata key name. |
required |
Returns:
| Type | Description |
|---|---|
Any
|
The decoded value, or |
Source code in src/noxdb/metadata.py
list_for_sample
¶
Return all metadata for a sample as a key/value dict.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cur
|
Audit-logging cursor from |
required | |
sample_id
|
int
|
Parent sample. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
|
Source code in src/noxdb/metadata.py
delete_sample
¶
Delete (sample_id, key).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
cur
|
Audit-logging cursor from |
required | |
sample_id
|
int
|
Parent sample. |
required |
key
|
str
|
Metadata key name. |
required |
Returns:
| Type | Description |
|---|---|
bool
|
|