soyailabs / app\utils\file_utils.py
wiizm's picture
Upload app\utils\file_utils.py with huggingface_hub
026d511 verified
"""
파일 κ΄€λ ¨ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
"""
from pathlib import Path
from typing import Optional
from werkzeug.utils import secure_filename
from app.core.config import Config
from app.core.logger import get_logger
logger = get_logger(__name__)
def allowed_file(filename: str) -> bool:
"""
파일 ν™•μž₯μžκ°€ ν—ˆμš©λœ ν™•μž₯μžμΈμ§€ 확인
Args:
filename: 파일λͺ…
Returns:
ν—ˆμš©λœ ν™•μž₯자면 True, μ•„λ‹ˆλ©΄ False
"""
if '.' not in filename:
return False
extension = filename.rsplit('.', 1)[1].lower()
return extension in Config.ALLOWED_EXTENSIONS
def get_file_extension(filename: str) -> Optional[str]:
"""
파일 ν™•μž₯자 μΆ”μΆœ
Args:
filename: 파일λͺ…
Returns:
ν™•μž₯자 (점 μ œμ™Έ), μ—†μœΌλ©΄ None
"""
if '.' not in filename:
return None
return filename.rsplit('.', 1)[1].lower()
def ensure_upload_folder() -> Path:
"""
μ—…λ‘œλ“œ 폴더가 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜κ³  μ—†μœΌλ©΄ 생성
Returns:
μ—…λ‘œλ“œ 폴더 경둜
Raises:
OSError: 폴더 생성 λ˜λŠ” μ“°κΈ° κΆŒν•œ 였λ₯˜
"""
upload_folder = Config.UPLOAD_FOLDER
try:
# 폴더 생성
upload_folder.mkdir(parents=True, exist_ok=True)
logger.debug(f"μ—…λ‘œλ“œ 폴더 확인 μ™„λ£Œ: {upload_folder}")
# μ“°κΈ° κΆŒν•œ ν…ŒμŠ€νŠΈ
test_file = upload_folder / '.write_test'
try:
test_file.write_text('test')
test_file.unlink()
logger.debug(f"μ—…λ‘œλ“œ 폴더 μ“°κΈ° κΆŒν•œ 확인 μ™„λ£Œ: {upload_folder}")
except PermissionError as e:
raise OSError(f'μ—…λ‘œλ“œ 폴더에 μ“°κΈ° κΆŒν•œμ΄ μ—†μŠ΅λ‹ˆλ‹€: {upload_folder}') from e
except Exception as e:
raise OSError(f'μ—…λ‘œλ“œ 폴더 μ“°κΈ° ν…ŒμŠ€νŠΈ μ‹€νŒ¨: {upload_folder}') from e
return upload_folder
except Exception as e:
logger.error(f"μ—…λ‘œλ“œ 폴더 생성 였λ₯˜: {e}", exc_info=True)
raise