api / app /storage.py
Omarelrayes's picture
Update app/storage.py
00e8816 verified
Raw
History Blame Contribute Delete
2.32 kB
# app/storage.py
import json
from pathlib import Path
from typing import Optional, Dict, Any
from app.configs import IMAGES_DIR, SEGMENTS_DIR, RESULTS_DIR
# =========================
# Image Storage
# =========================
def save_image(image_id: str, file_bytes: bytes, ext: str = ".jpg") -> Path:
"""Save uploaded image to storage"""
image_path = IMAGES_DIR / f"{image_id}{ext}"
with open(image_path, "wb") as f:
f.write(file_bytes)
return image_path
def get_image_path(image_id: str) -> Optional[Path]:
"""Get path of stored image by ID"""
for ext in [".jpg", ".jpeg", ".png"]:
path = IMAGES_DIR / f"{image_id}{ext}"
if path.exists():
return path
return None
def get_image_bytes(image_id: str) -> Optional[bytes]:
"""Get image bytes by ID"""
path = get_image_path(image_id)
if path is None:
return None
with open(path, "rb") as f:
return f.read()
# =========================
# Classification Results
# =========================
def save_classification_result(image_id: str, result: Dict[str, Any]) -> Path:
"""Save classification result as JSON"""
result_path = RESULTS_DIR / f"{image_id}_classify.json"
with open(result_path, "w") as f:
json.dump(result, f, indent=2)
return result_path
def get_classification_result(image_id: str) -> Optional[Dict[str, Any]]:
"""Get classification result by image ID"""
result_path = RESULTS_DIR / f"{image_id}_classify.json"
if not result_path.exists():
return None
with open(result_path, "r") as f:
return json.load(f)
# =========================
# Segmentation Results
# =========================
def save_segmentation_result(image_id: str, seg_result: Dict[str, Any]) -> Optional[str]:
"""Save segmentation result as JSON, returns path"""
result_path = RESULTS_DIR / f"{image_id}_segment.json"
with open(result_path, "w") as f:
json.dump(seg_result, f, indent=2)
return str(result_path)
def get_segmentation_result(image_id: str) -> Optional[Dict[str, Any]]:
"""Get segmentation result by image ID"""
result_path = RESULTS_DIR / f"{image_id}_segment.json"
if not result_path.exists():
return None
with open(result_path, "r") as f:
return json.load(f)