Source code for pyRadPlan.machines.base._base
from typing import Optional, Annotated
from datetime import datetime
from pydantic import (
Field,
StringConstraints,
field_validator,
)
from pyRadPlan.core import PyRadPlanBaseModel
[docs]
class Machine(PyRadPlanBaseModel):
"""Base class for Machine objects.
Defines minimum meta-data a machine must hold:
Attributes
----------
radiation_mode : str
The radiation mode of the machine.
description : str
The description of the machine.
machine : str
The name of the machine.
"""
version: int = Field(default=1)
radiation_mode: str = Field()
description: str = Field(default="")
name: Annotated[str, StringConstraints(min_length=1)] = Field(
alias="machine", default="Generic"
)
created_on: Optional[datetime] = Field(default=None)
last_modified: Optional[datetime] = Field(default=None)
created_by: Optional[str] = Field(default="")
last_modified_by: Optional[str] = Field(default="")
data_type: Optional[str] = Field(default="-")
# Abstract property handled by the individual machines:
_possible_radiation_modes: list[str]
[docs]
@field_validator("created_on", "last_modified", mode="before")
@classmethod
def validate_datetime_variants(cls, v):
# If it is a string, we try some additional formats in addition to
# pydantics accepted datetime values
# For example, matRad macines use the format "%d-%b-%Y" for some dates
if isinstance(v, str):
try_formats = ["%d-%b-%Y"]
for fmt in try_formats:
try:
return datetime.strptime(v, fmt)
except ValueError:
pass
return v