diff --git a/backend/app/sample_models.py b/backend/app/sample_models.py index a927bbe..b0ce6a4 100644 --- a/backend/app/sample_models.py +++ b/backend/app/sample_models.py @@ -191,84 +191,84 @@ class SpreadsheetModel(BaseModel): raise ValueError(f" '{v}' is not valid. Value must be one of {allowed}.") return v - @field_validator('spacegroupnumber', mode="before") - @classmethod - def spacegroupnumber_allowed(cls, v): - if v is not None: - try: - v = int(v) - if not (1 <= v <= 230): - raise ValueError(f" '{v}' is not valid. Value must be an integer between 1 and 230.") - except (ValueError, TypeError) as e: - raise ValueError(f" '{v}' is not valid. Value must be an integer between 1 and 230.") from e - return v + @field_validator('spacegroupnumber', mode="before") + @classmethod + def spacegroupnumber_allowed(cls, v): + if v is not None: + try: + v = int(v) + if not (1 <= v <= 230): + raise ValueError(f" '{v}' is not valid. Value must be an integer between 1 and 230.") + except (ValueError, TypeError) as e: + raise ValueError(f" '{v}' is not valid. Value must be an integer between 1 and 230.") from e + return v - @field_validator('cellparameters', mode="before") - @classmethod - def cellparameters_format(cls, v): - if v: - values = [float(i) for i in v.split(",")] - 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.") - return v + @field_validator('cellparameters', mode="before") + @classmethod + def cellparameters_format(cls, v): + if v: + values = [float(i) for i in v.split(",")] + 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.") + return v - @field_validator('rescutkey', 'rescutvalue', mode="before") - @classmethod - def rescutkey_value_pair(cls, values): - rescutkey = values.get('rescutkey') - rescutvalue = values.get('rescutvalue') - if rescutkey and rescutvalue: - if rescutkey not in {"is", "cchalf"}: - raise ValueError("Rescutkey must be either 'is' or 'cchalf'") - if not isinstance(rescutvalue, float) or rescutvalue <= 0: - raise ValueError("Rescutvalue must be a positive float if rescutkey is provided") - return values + @field_validator('rescutkey', 'rescutvalue', mode="before") + @classmethod + def rescutkey_value_pair(cls, values): + rescutkey = values.get('rescutkey') + rescutvalue = values.get('rescutvalue') + if rescutkey and rescutvalue: + if rescutkey not in {"is", "cchalf"}: + raise ValueError("Rescutkey must be either 'is' or 'cchalf'") + if not isinstance(rescutvalue, float) or rescutvalue <= 0: + raise ValueError("Rescutvalue must be a positive float if rescutkey is provided") + return values - @field_validator('trustedhigh', mode="before") - @classmethod - def trustedhigh_allowed(cls, v): - if v is not None: - try: - v = float(v) - if not (0 <= v <= 2.0): - raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 2.0.") - except (ValueError, TypeError) as e: - raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 2.0.") from e - return v + @field_validator('trustedhigh', mode="before") + @classmethod + def trustedhigh_allowed(cls, v): + if v is not None: + try: + v = float(v) + if not (0 <= v <= 2.0): + raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 2.0.") + except (ValueError, TypeError) as e: + raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 2.0.") from e + return v - @field_validator('chiphiangles', mode="before") - @classmethod - def chiphiangles_allowed(cls, v): - if v is not None: - try: - v = float(v) - if not (0 <= v <= 30): - raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 30.") - except (ValueError, TypeError) as e: - raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 30.") from e - return v + @field_validator('chiphiangles', mode="before") + @classmethod + def chiphiangles_allowed(cls, v): + if v is not None: + try: + v = float(v) + if not (0 <= v <= 30): + raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 30.") + except (ValueError, TypeError) as e: + raise ValueError(f" '{v}' is not valid. Value must be a float between 0 and 30.") from e + return v - @field_validator('dose', mode="before") - @classmethod - def dose_positive(cls, v): - if v is not None: - try: - v = float(v) - if v <= 0: - raise ValueError(f" '{v}' is not valid. Value must be a positive float.") - except (ValueError, TypeError) as e: - raise ValueError(f" '{v}' is not valid. Value must be a positive float.") from e - return v + @field_validator('dose', mode="before") + @classmethod + def dose_positive(cls, v): + if v is not None: + try: + v = float(v) + if v <= 0: + raise ValueError(f" '{v}' is not valid. Value must be a positive float.") + except (ValueError, TypeError) as e: + raise ValueError(f" '{v}' is not valid. Value must be a positive float.") from e + return v -class TELLModel(SpreadsheetModel): - input_order: int - samplemountcount: int = 0 - samplestatus: str = "not present" - puckaddress: str = "---" - username: str - puck_number: int - prefix: Optional[str] - folder: Optional[str] + class TELLModel(SpreadsheetModel): + input_order: int + samplemountcount: int = 0 + samplestatus: str = "not present" + puckaddress: str = "---" + username: str + puck_number: int + prefix: Optional[str] + folder: Optional[str] class SpreadsheetResponse(BaseModel): data: List[SpreadsheetModel] # Validated data rows as SpreadsheetModel instances