rad_explain2 / config.py
seawolf2357's picture
Update config.py
6ae096f verified
import os
from pathlib import Path
import csv # CSV ๋ชจ๋“ˆ ์ž„ํฌํŠธ
import logging
# --- ์„ค์ • ---
# ๊ธฐ๋ณธ ๋กœ๊น… ์„ค์ • (์„ ํƒ์‚ฌํ•ญ, ํ•„์š”์— ๋”ฐ๋ผ ์กฐ์ •)
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
# API ์„ค์ •
HF_TOKEN = os.environ.get("HF_TOKEN", None)
MEDGEMMA_ENDPOINT_URL = os.environ.get("MEDGEMMA_ENDPOINT_URL", None)
# --- pathlib์„ ์‚ฌ์šฉํ•œ ๊ฒฝ๋กœ ์„ค์ • ---
# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฐ์ •
BASE_DIR = Path(__file__).parent.resolve() # ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์œ„ํ•ด resolve() ์‚ฌ์šฉ
STATIC_DIR = BASE_DIR / 'static'
# --- CSV์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ณด๊ณ ์„œ/์ด๋ฏธ์ง€ ์Œ ๋กœ๋“œ ---
AVAILABLE_REPORTS = []
MANIFEST_CSV_PATH = STATIC_DIR / 'reports_manifest.csv'
if MANIFEST_CSV_PATH.is_file():
try:
with open(MANIFEST_CSV_PATH, mode='r', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile)
# ์˜ˆ์ƒ๋˜๋Š” CSV ํ—ค๋”: 'image_type', 'case_display_name', 'image_path', 'report_path'
required_headers = {'case_display_name', 'image_path', 'report_path'}
if not required_headers.issubset(reader.fieldnames):
logger.error(
f"CSV ํŒŒ์ผ {MANIFEST_CSV_PATH}์— ๋‹ค์Œ ํ•„์ˆ˜ ํ—ค๋”๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: {required_headers - set(reader.fieldnames)}"
)
else:
for row in reader:
case_name = row['case_display_name']
image_path_from_csv = row['image_path'] # ์˜ˆ: static/images/report1.jpg
report_path_from_csv = row['report_path'] # ์˜ˆ: static/reports/report1.txt ๋˜๋Š” ๋นˆ ๋ฌธ์ž์—ด
# image_path_from_csv ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ (๋น„์–ด์žˆ์œผ๋ฉด ์•ˆ ๋จ)
if not image_path_from_csv:
logger.warning(f"์ผ€์ด์Šค '{case_name}'์˜ CSV์—์„œ image_path๊ฐ€ ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•ญ๋ชฉ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.")
continue
# ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒ€์ฆ์„ ์œ„ํ•œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๊ตฌ์„ฑ (CSV์˜ ๊ฒฝ๋กœ๋Š” BASE_DIR ๊ธฐ์ค€ ์ƒ๋Œ€ ๊ฒฝ๋กœ)
abs_image_path_to_check = BASE_DIR / image_path_from_csv
if not abs_image_path_to_check.is_file():
logger.warning(f"์ผ€์ด์Šค '{case_name}'์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ '{abs_image_path_to_check}'์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ํ•ญ๋ชฉ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.")
continue
image_file_for_config = image_path_from_csv
report_file_for_config = "" # ๋ณด๊ณ ์„œ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ ๋นˆ ๋ฌธ์ž์—ด
if report_path_from_csv: # ๋ณด๊ณ ์„œ ๊ฒฝ๋กœ๋Š” ์„ ํƒ์‚ฌํ•ญ
# ๋ณด๊ณ ์„œ ํŒŒ์ผ ๊ฒ€์ฆ์„ ์œ„ํ•œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๊ตฌ์„ฑ (CSV์˜ ๊ฒฝ๋กœ๋Š” BASE_DIR ๊ธฐ์ค€ ์ƒ๋Œ€ ๊ฒฝ๋กœ)
abs_report_path_to_check = BASE_DIR / report_path_from_csv
if not abs_report_path_to_check.is_file():
logger.warning(
f"์ผ€์ด์Šค '{case_name}'์— ์ง€์ •๋œ ๋ณด๊ณ ์„œ ํŒŒ์ผ '{abs_report_path_to_check}'์„(๋ฅผ) ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. "
f"์ด ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๋ณด๊ณ ์„œ ํŒŒ์ผ ์—†์ด ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค."
)
# report_file_for_config๋Š” ""๋กœ ์œ ์ง€
else:
# ํŒŒ์ผ (BASE_DIR / report_path_from_csv)์ด ์กด์žฌํ•จ.
# ์ด์ œ report_path_from_csv ๋ฌธ์ž์—ด ์ž์ฒด๊ฐ€ "static/"์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ
# CSV ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฐ€์ •์— ๋”ฐ๋ผ.
if report_path_from_csv.startswith('static/') or report_path_from_csv.startswith('static\\'):
# ๊ฒฝ๋กœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹(static/์œผ๋กœ ์‹œ์ž‘)์ด๊ณ  ํŒŒ์ผ์ด ์กด์žฌํ•จ.
# ๊ฒฝ๋กœ๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅ (์˜ˆ: "static/reports/report1.txt").
report_file_for_config = report_path_from_csv
else:
logger.warning(
f"CSV์˜ ์ผ€์ด์Šค '{case_name}'์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ ๊ฒฝ๋กœ '{report_path_from_csv}'๊ฐ€ "
f"์ž˜๋ชป๋œ ํ˜•์‹์ž…๋‹ˆ๋‹ค ('static/'์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ). ๋ณด๊ณ ์„œ ๊ฒฝ๋กœ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค."
)
# report_file_for_config๋Š” ""๋กœ ์œ ์ง€
AVAILABLE_REPORTS.append({
"name": case_name,
"image_file": image_file_for_config, # static/images/report1.jpg
"report_file": report_file_for_config, # static/reports/report1.txt ๋˜๋Š” ""
"image_type": row['image_type']
})
AVAILABLE_REPORTS.sort(key=lambda x: x['name'])
logger.info(f"CSV์—์„œ {len(AVAILABLE_REPORTS)}๊ฐœ์˜ ๋ณด๊ณ ์„œ/์ด๋ฏธ์ง€ ์Œ์„ ๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.")
except Exception as e:
logger.error(f"CSV ํŒŒ์ผ {MANIFEST_CSV_PATH} ์ฝ๊ธฐ ๋˜๋Š” ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {e}", exc_info=True)
else:
logger.warning(f"{MANIFEST_CSV_PATH}์—์„œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ CSV ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. AVAILABLE_REPORTS๊ฐ€ ๋น„์–ด์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.")
# --- ์„ ํƒ์‚ฌํ•ญ: ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๋ณด๊ณ ์„œ ์ •์˜ ---
DEFAULT_REPORT_INFO = AVAILABLE_REPORTS[0] if AVAILABLE_REPORTS else None