wiizm commited on
Commit
026d511
Β·
verified Β·
1 Parent(s): 2ff530b

Upload app\utils\file_utils.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. app//utils//file_utils.py +81 -0
app//utils//file_utils.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ 파일 κ΄€λ ¨ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
3
+ """
4
+
5
+ from pathlib import Path
6
+ from typing import Optional
7
+ from werkzeug.utils import secure_filename
8
+
9
+ from app.core.config import Config
10
+ from app.core.logger import get_logger
11
+
12
+ logger = get_logger(__name__)
13
+
14
+
15
+ def allowed_file(filename: str) -> bool:
16
+ """
17
+ 파일 ν™•μž₯μžκ°€ ν—ˆμš©λœ ν™•μž₯μžμΈμ§€ 확인
18
+
19
+ Args:
20
+ filename: 파일λͺ…
21
+
22
+ Returns:
23
+ ν—ˆμš©λœ ν™•μž₯자면 True, μ•„λ‹ˆλ©΄ False
24
+ """
25
+ if '.' not in filename:
26
+ return False
27
+ extension = filename.rsplit('.', 1)[1].lower()
28
+ return extension in Config.ALLOWED_EXTENSIONS
29
+
30
+
31
+ def get_file_extension(filename: str) -> Optional[str]:
32
+ """
33
+ 파일 ν™•μž₯자 μΆ”μΆœ
34
+
35
+ Args:
36
+ filename: 파일λͺ…
37
+
38
+ Returns:
39
+ ν™•μž₯자 (점 μ œμ™Έ), μ—†μœΌλ©΄ None
40
+ """
41
+ if '.' not in filename:
42
+ return None
43
+ return filename.rsplit('.', 1)[1].lower()
44
+
45
+
46
+ def ensure_upload_folder() -> Path:
47
+ """
48
+ μ—…λ‘œλ“œ 폴더가 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜κ³  μ—†μœΌλ©΄ 생성
49
+
50
+ Returns:
51
+ μ—…λ‘œλ“œ 폴더 경둜
52
+
53
+ Raises:
54
+ OSError: 폴더 생성 λ˜λŠ” μ“°κΈ° κΆŒν•œ 였λ₯˜
55
+ """
56
+ upload_folder = Config.UPLOAD_FOLDER
57
+
58
+ try:
59
+ # 폴더 생성
60
+ upload_folder.mkdir(parents=True, exist_ok=True)
61
+ logger.debug(f"μ—…λ‘œλ“œ 폴더 확인 μ™„λ£Œ: {upload_folder}")
62
+
63
+ # μ“°κΈ° κΆŒν•œ ν…ŒμŠ€νŠΈ
64
+ test_file = upload_folder / '.write_test'
65
+ try:
66
+ test_file.write_text('test')
67
+ test_file.unlink()
68
+ logger.debug(f"μ—…λ‘œλ“œ 폴더 μ“°κΈ° κΆŒν•œ 확인 μ™„λ£Œ: {upload_folder}")
69
+ except PermissionError as e:
70
+ raise OSError(f'μ—…λ‘œλ“œ 폴더에 μ“°κΈ° κΆŒν•œμ΄ μ—†μŠ΅λ‹ˆλ‹€: {upload_folder}') from e
71
+ except Exception as e:
72
+ raise OSError(f'μ—…λ‘œλ“œ 폴더 μ“°κΈ° ν…ŒμŠ€νŠΈ μ‹€νŒ¨: {upload_folder}') from e
73
+
74
+ return upload_folder
75
+
76
+ except Exception as e:
77
+ logger.error(f"μ—…λ‘œλ“œ 폴더 생성 였λ₯˜: {e}", exc_info=True)
78
+ raise
79
+
80
+
81
+