Files

47 lines
1.0 KiB
Python

from pathlib import Path
def safe_relative_path(value: str, fallback: str = "upload.bin") -> Path:
parts = [
part
for part in str(value or "").replace("\\", "/").split("/")
if part and part not in {".", ".."}
]
if not parts:
parts = [fallback]
return Path(*parts)
def remove_file_safely(path: Path) -> None:
try:
path.unlink()
except OSError:
pass
def get_dir_size(path: Path) -> int:
total_size = 0
try:
if path.is_file():
return path.stat().st_size
if path.is_dir():
for item in path.iterdir():
total_size += get_dir_size(item)
except (PermissionError, OSError):
return total_size
return total_size
def format_size(size_bytes: int) -> str:
if size_bytes == 0:
return "0 B"
value = float(size_bytes)
for unit in ["B", "KB", "MB", "GB", "TB"]:
if value < 1024.0:
return f"{value:.2f} {unit}"
value /= 1024.0
return f"{value:.2f} PB"