|
import os
|
|
|
|
from pr.core.exceptions import ValidationError
|
|
|
|
|
|
def validate_file_path(path: str, must_exist: bool = False) -> str:
|
|
if not path:
|
|
raise ValidationError("File path cannot be empty")
|
|
|
|
if must_exist and not os.path.exists(path):
|
|
raise ValidationError(f"File does not exist: {path}")
|
|
|
|
if must_exist and os.path.isdir(path):
|
|
raise ValidationError(f"Path is a directory, not a file: {path}")
|
|
|
|
return os.path.abspath(path)
|
|
|
|
|
|
def validate_directory_path(
|
|
path: str, must_exist: bool = False, create: bool = False
|
|
) -> str:
|
|
if not path:
|
|
raise ValidationError("Directory path cannot be empty")
|
|
|
|
abs_path = os.path.abspath(path)
|
|
|
|
if must_exist and not os.path.exists(abs_path):
|
|
if create:
|
|
os.makedirs(abs_path, exist_ok=True)
|
|
else:
|
|
raise ValidationError(f"Directory does not exist: {abs_path}")
|
|
|
|
if os.path.exists(abs_path) and not os.path.isdir(abs_path):
|
|
raise ValidationError(f"Path is not a directory: {abs_path}")
|
|
|
|
return abs_path
|
|
|
|
|
|
def validate_model_name(model: str) -> str:
|
|
if not model:
|
|
raise ValidationError("Model name cannot be empty")
|
|
|
|
if len(model) < 2:
|
|
raise ValidationError("Model name too short")
|
|
|
|
return model
|
|
|
|
|
|
def validate_api_url(url: str) -> str:
|
|
if not url:
|
|
raise ValidationError("API URL cannot be empty")
|
|
|
|
if not url.startswith(("http://", "https://")):
|
|
raise ValidationError("API URL must start with http:// or https://")
|
|
|
|
return url
|
|
|
|
|
|
def validate_session_name(name: str) -> str:
|
|
if not name:
|
|
raise ValidationError("Session name cannot be empty")
|
|
|
|
invalid_chars = ["/", "\\", ":", "*", "?", '"', "<", ">", "|"]
|
|
for char in invalid_chars:
|
|
if char in name:
|
|
raise ValidationError(f"Session name contains invalid character: {char}")
|
|
|
|
if len(name) > 255:
|
|
raise ValidationError("Session name too long (max 255 characters)")
|
|
|
|
return name
|
|
|
|
|
|
def validate_temperature(temp: float) -> float:
|
|
if not 0.0 <= temp <= 2.0:
|
|
raise ValidationError("Temperature must be between 0.0 and 2.0")
|
|
|
|
return temp
|
|
|
|
|
|
def validate_max_tokens(tokens: int) -> int:
|
|
if tokens < 1:
|
|
raise ValidationError("Max tokens must be at least 1")
|
|
|
|
if tokens > 100000:
|
|
raise ValidationError("Max tokens too high (max 100000)")
|
|
|
|
return tokens
|