Source code for xnatctl.models.project

"""Project model for XNAT projects."""

from __future__ import annotations

from pydantic import Field

from .base import XNATResource


[docs] class Project(XNATResource): """XNAT project resource.""" name: str | None = Field(None, description="Project name") secondary_id: str | None = Field(None, alias="secondary_ID", description="Secondary identifier") description: str | None = Field(None, description="Project description") pi_firstname: str | None = Field(None, alias="pi_firstname", description="PI first name") pi_lastname: str | None = Field(None, alias="pi_lastname", description="PI last name") accessibility: str | None = Field(None, description="Access level (public, protected, private)") subject_count: int | None = Field(None, alias="subjects", description="Number of subjects") session_count: int | None = Field( None, alias="experiments", description="Number of sessions/experiments" ) @property def pi(self) -> str: """Return formatted PI name.""" parts = [] if self.pi_firstname: parts.append(self.pi_firstname) if self.pi_lastname: parts.append(self.pi_lastname) return " ".join(parts) if parts else ""
[docs] @classmethod def table_columns(cls) -> list[str]: """Return columns for table output.""" return ["id", "name", "pi", "subject_count", "session_count", "accessibility"]
[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() data["pi"] = self.pi return {col: str(data.get(col, "")) for col in cols}