fixed bug with spreadsheet import

This commit is contained in:
GotthardG
2024-12-10 16:36:36 +01:00
parent 672574c755
commit 250e090133

View File

@ -191,84 +191,84 @@ class SpreadsheetModel(BaseModel):
raise ValueError(f" '{v}' is not valid. Value must be one of {allowed}.") raise ValueError(f" '{v}' is not valid. Value must be one of {allowed}.")
return v return v
@field_validator('spacegroupnumber', mode="before") @field_validator('spacegroupnumber', mode="before")
@classmethod @classmethod
def spacegroupnumber_allowed(cls, v): def spacegroupnumber_allowed(cls, v):
if v is not None: if v is not None:
try: try:
v = int(v) v = int(v)
if not (1 <= v <= 230): if not (1 <= v <= 230):
raise ValueError(f" '{v}' is not valid. Value must be an integer between 1 and 230.") raise ValueError(f" '{v}' is not valid. Value must be an integer between 1 and 230.")
except (ValueError, TypeError) as e: except (ValueError, TypeError) as e:
raise ValueError(f" '{v}' is not valid. Value must be an integer between 1 and 230.") from e raise ValueError(f" '{v}' is not valid. Value must be an integer between 1 and 230.") from e
return v return v
@field_validator('cellparameters', mode="before") @field_validator('cellparameters', mode="before")
@classmethod @classmethod
def cellparameters_format(cls, v): def cellparameters_format(cls, v):
if v: if v:
values = [float(i) for i in v.split(",")] values = [float(i) for i in v.split(",")]
if len(values) != 6 or any(val <= 0 for val in values): if len(values) != 6 or any(val <= 0 for val in values):
raise ValueError(f" '{v}' is not valid. Value must be a set of six positive floats or integers.") raise ValueError(f" '{v}' is not valid. Value must be a set of six positive floats or integers.")
return v return v
@field_validator('rescutkey', 'rescutvalue', mode="before") @field_validator('rescutkey', 'rescutvalue', mode="before")
@classmethod @classmethod
def rescutkey_value_pair(cls, values): def rescutkey_value_pair(cls, values):
rescutkey = values.get('rescutkey') rescutkey = values.get('rescutkey')
rescutvalue = values.get('rescutvalue') rescutvalue = values.get('rescutvalue')
if rescutkey and rescutvalue: if rescutkey and rescutvalue:
if rescutkey not in {"is", "cchalf"}: if rescutkey not in {"is", "cchalf"}:
raise ValueError("Rescutkey must be either 'is' or 'cchalf'") raise ValueError("Rescutkey must be either 'is' or 'cchalf'")
if not isinstance(rescutvalue, float) or rescutvalue <= 0: if not isinstance(rescutvalue, float) or rescutvalue <= 0:
raise ValueError("Rescutvalue must be a positive float if rescutkey is provided") raise ValueError("Rescutvalue must be a positive float if rescutkey is provided")
return values return values
@field_validator('trustedhigh', mode="before") @field_validator('trustedhigh', mode="before")
@classmethod @classmethod
def trustedhigh_allowed(cls, v): def trustedhigh_allowed(cls, v):
if v is not None: if v is not None:
try: try:
v = float(v) v = float(v)
if not (0 <= v <= 2.0): if not (0 <= v <= 2.0):
raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 2.0.") raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 2.0.")
except (ValueError, TypeError) as e: except (ValueError, TypeError) as e:
raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 2.0.") from e raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 2.0.") from e
return v return v
@field_validator('chiphiangles', mode="before") @field_validator('chiphiangles', mode="before")
@classmethod @classmethod
def chiphiangles_allowed(cls, v): def chiphiangles_allowed(cls, v):
if v is not None: if v is not None:
try: try:
v = float(v) v = float(v)
if not (0 <= v <= 30): if not (0 <= v <= 30):
raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 30.") raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 30.")
except (ValueError, TypeError) as e: except (ValueError, TypeError) as e:
raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 30.") from e raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 30.") from e
return v return v
@field_validator('dose', mode="before") @field_validator('dose', mode="before")
@classmethod @classmethod
def dose_positive(cls, v): def dose_positive(cls, v):
if v is not None: if v is not None:
try: try:
v = float(v) v = float(v)
if v <= 0: if v <= 0:
raise ValueError(f" '{v}' is not valid. Value must be a positive float.") raise ValueError(f" '{v}' is not valid. Value must be a positive float.")
except (ValueError, TypeError) as e: except (ValueError, TypeError) as e:
raise ValueError(f" '{v}' is not valid. Value must be a positive float.") from e raise ValueError(f" '{v}' is not valid. Value must be a positive float.") from e
return v return v
class TELLModel(SpreadsheetModel): class TELLModel(SpreadsheetModel):
input_order: int input_order: int
samplemountcount: int = 0 samplemountcount: int = 0
samplestatus: str = "not present" samplestatus: str = "not present"
puckaddress: str = "---" puckaddress: str = "---"
username: str username: str
puck_number: int puck_number: int
prefix: Optional[str] prefix: Optional[str]
folder: Optional[str] folder: Optional[str]
class SpreadsheetResponse(BaseModel): class SpreadsheetResponse(BaseModel):
data: List[SpreadsheetModel] # Validated data rows as SpreadsheetModel instances data: List[SpreadsheetModel] # Validated data rows as SpreadsheetModel instances