Source code for xnatctl.models.session

"""Session/Experiment model for XNAT sessions."""

from __future__ import annotations

from datetime import date

from pydantic import Field

from .base import XNATResource


[docs] class Session(XNATResource): """XNAT session/experiment resource.""" project: str | None = Field(None, description="Parent project ID") subject_id: str | None = Field(None, alias="subject_ID", description="Parent subject ID") subject_label: str | None = Field( None, alias="subject_label", description="Parent subject label" ) modality: str | None = Field(None, description="Imaging modality (MR, PET, CT)") session_type: str | None = Field(None, alias="session_type", description="Session type") acquisition_site: str | None = Field( None, alias="acquisition_site", description="Acquisition site" ) scanner: str | None = Field(None, description="Scanner name") operator: str | None = Field(None, description="Operator name") dcm_accession_number: str | None = Field( None, alias="dcmAccessionNumber", description="DICOM accession number" ) dcm_patient_id: str | None = Field(None, alias="dcmPatientId", description="DICOM patient ID") dcm_patient_name: str | None = Field( None, alias="dcmPatientName", description="DICOM patient name" ) session_date: date | None = Field(None, alias="date", description="Session date") time: str | None = Field(None, description="Session time") age: int | None = Field(None, description="Subject age at scan") scan_count: int | None = Field(None, alias="scans", description="Number of scans") resource_count: int | None = Field(None, alias="resources", description="Number of resources") note: str | None = Field(None, description="Session notes") visit_id: str | None = Field(None, alias="visit_id", description="Visit ID")
[docs] @classmethod def table_columns(cls) -> list[str]: """Return columns for table output.""" return [ "id", "label", "subject_label", "session_date", "modality", "scan_count", ]
[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() if self.session_date: data["session_date"] = self.session_date.isoformat() return {col: str(data.get(col, "")) for col in cols}
# Alias for backward compatibility Experiment = Session