Source code for xnatctl.models.subject
"""Subject model for XNAT subjects."""
from __future__ import annotations
from pydantic import Field
from .base import XNATResource
[docs]
class Subject(XNATResource):
"""XNAT subject resource."""
project: str | None = Field(None, description="Parent project ID")
group: str | None = Field(None, description="Subject group")
src: str | None = Field(None, description="Source")
gender: str | None = Field(None, description="Gender")
handedness: str | None = Field(None, description="Handedness")
yob: int | None = Field(None, description="Year of birth")
dob: str | None = Field(None, description="Date of birth")
education: str | None = Field(None, description="Education level")
ses: str | None = Field(None, description="Socioeconomic status")
race: str | None = Field(None, description="Race")
ethnicity: str | None = Field(None, description="Ethnicity")
session_count: int | None = Field(None, alias="experiments", description="Number of sessions")
[docs]
@classmethod
def table_columns(cls) -> list[str]:
"""Return columns for table output."""
return ["id", "label", "project", "session_count", "gender", "group"]
[docs]
def to_row(self, columns: list[str] | None = None) -> dict[str, str]:
"""Convert to row for table output."""
cols = columns or self.table_columns()
data = self.to_dict()
return {col: str(data.get(col, "")) for col in cols}