Source code for nxtomomill.models.base.general_section
from __future__ import annotations
import logging
from pydantic import BaseModel, Field, field_validator, field_serializer, ConfigDict
from nxtomomill.utils import FileExtension
from nxtomomill.models.utils import filter_str_def
[docs]class GeneralSection(BaseModel):
model_config = ConfigDict(validate_assignment=True, validate_by_name=True)
output_file: str | None = Field(default=None, description="Output file name")
file_extension: FileExtension = Field(
default=FileExtension.NX,
description="File extension if not given in the output file name",
)
overwrite: bool = Field(
default=False, description="Overwrite output files if exists"
)
log_level: int = Field(
default=logging.WARNING,
description='Log level: "debug", "info", "warning", "error"',
)
@field_validator(
"log_level",
mode="before",
)
@classmethod
def cast_to_log_level(cls, value: str | int) -> int:
if isinstance(value, int):
return value
elif isinstance(value, str):
value = filter_str_def(value)
return getattr(logging, value.upper())
else:
raise TypeError
@field_validator(
"file_extension",
mode="plain",
)
@classmethod
def cast_to_file_extension(cls, value: str | FileExtension) -> FileExtension:
if isinstance(value, str):
value = filter_str_def(value)
return FileExtension(value)
@field_serializer(
"log_level",
when_used="always",
)
@classmethod
def serialize_log_level(cls, value: int) -> str:
return logging.getLevelName(value).lower()
@field_serializer(
"file_extension",
when_used="always",
)
@classmethod
def serialize_file_extension(cls, file_ext: FileExtension) -> str:
return file_ext.value
@field_validator(
"output_file",
)
@classmethod
def cast_output_file(cls, output_file: str | None) -> str | None:
return filter_str_def(output_file)