Source code for voxcity.utils.weather.files
from pathlib import Path
import os
import zipfile
[docs]
def safe_rename(src: Path, dst: Path) -> Path:
"""
Safely rename a file, handling existing files by adding a number suffix.
"""
if not dst.exists():
src.rename(dst)
return dst
base = dst.stem
ext = dst.suffix
counter = 1
while True:
new_dst = dst.with_name(f"{base}_{counter}{ext}")
if not new_dst.exists():
src.rename(new_dst)
return new_dst
counter += 1
[docs]
def safe_extract(zip_ref: zipfile.ZipFile, filename: str, extract_dir: Path) -> Path:
"""
Safely extract a file from zip, handling existing files.
"""
try:
zip_ref.extract(filename, extract_dir)
return extract_dir / filename
except FileExistsError:
temp_name = f"temp_{os.urandom(4).hex()}_{filename}"
zip_ref.extract(filename, extract_dir, temp_name)
return extract_dir / temp_name