
    	im                     R    d dl Z d dlmZmZ d dlmZ d dlZ G d d      Z e       Zy)    N)OptionalAny)load_dotenvc            	           e Zd ZdZddefdZd Zd Zddeded	e	d
efdZ
ddede	d
e	fdZddeded
efdZddededed
efdZed
e	fd       Zed
e	fd       Zy)	EnvLoaderu)   환경 변수 로딩 및 검증 클래스Nenv_filec                    t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t                                      | _        |r|| _        nt         j                  j                  | j
                  d      }t         j                  j                  |      r2t        |d       t        j                  dd      j                         }nt        j                  d| d       d}|dk(  r0t         j                  j                  | j
                  d	      | _        n/t         j                  j                  | j
                  d
      | _        | j                          | j                          y )Nz.envFoverrideENVIRONMENTdevelopmentu2   메인 환경 변수 파일을 찾을 수 없음: u    , 기본값 'development' 사용
productionz.env.productionz.env.development)ospathdirnameabspath__file__project_rootr   joinexistsr   getenvlowerloggingwarning	_load_env_validate_required_vars)selfr   main_env_fileenvironments       H/home/kdj-ubuntu1/mlink_AI_Server/mlink-backend/src/config/env_loader.py__init__zEnvLoader.__init__
   s.    GGOOBGGOOBGGOOBGGOO\^\c\c\k\klt\uLv<w,xy$DM GGLL):):FCMww~~m,ME: ii}EKKM"TUbTc  dD  !E  F+ l* "T->->@Q R "T->->@R S$$&    c                    t         j                  j                  | j                        r:t	        | j                  d       t        j                  d| j                          yt        j                  d| j                          y)u   환경 변수 파일 로드Tr
   u    환경 변수 파일 로드됨: u+   환경 변수 파일을 찾을 수 없음: N)r   r   r   r   r   r   infor   r   s    r    r   zEnvLoader._load_env&   sT    77>>$--(5LL;DMM?KLOOI$--YZr"   c                     g d}g }|D ])  }t        j                  |      r|j                  |       + |rt        ddj	                  |             y)u   필수 환경 변수 검증)OPENAI_API_KEY
SECRET_KEY	FLASK_APPu#   필수 환경 변수가 누락됨: z, N)r   r   append
ValueErrorr   )r   required_varsmissing_varsvars       r    r   z!EnvLoader._validate_required_vars.   sZ    
  C99S>##C( ! B499\CZB[\]] r"   keydefaultrequiredreturnc                 X    t        j                  ||      }|r|t        d| d      |S )u   환경 변수 값 가져오기u   필수 환경 변수 'u   '가 설정되지 않음)r   r   r+   )r   r/   r0   r1   values        r    getzEnvLoader.get>   s4    		#w'5cU:RSTTr"   c                 d    t        j                  |t        |            j                         }|dv S )u%   불린 환경 변수 값 가져오기)true1yeson)r   r   strr   )r   r/   r0   r4   s       r    get_boolzEnvLoader.get_boolG   s+    		#s7|,224222r"   c                 v    	 t        t        j                  |t        |                  S # t        $ r |cY S w xY w)u%   정수 환경 변수 값 가져오기)intr   r   r;   r+   )r   r/   r0   s      r    get_intzEnvLoader.get_intL   s5    	ryyc'l344 	N	s   '* 88	separatorc                     t        j                  |d      }|s|xs g S |j                  |      D cg c]  }|j                          c}S c c}w )u(   리스트 환경 변수 값 가져오기 )r   r   splitstrip)r   r/   r@   r0   r4   items         r    get_listzEnvLoader.get_listS   sH    		#r"=b ).Y)?@)?

)?@@@s   Ac                 H    | j                  dd      j                         dk(  S )u   개발 환경 여부r   r   r5   r   r%   s    r    is_developmentzEnvLoader.is_developmentZ   s#     xx}5;;=NNr"   c                 H    | j                  dd      j                         dk(  S )u   프로덕션 환경 여부r   r   r   rH   r%   s    r    is_productionzEnvLoader.is_production_   s#     xx}5;;=MMr"   )N)NF)F)r   ),N)__name__
__module____qualname____doc__r;   r!   r   r   r   boolr5   r<   r>   r?   listrF   propertyrI   rK    r"   r    r   r      s    3' '8[^ s S 4 C 3C 3$ 34 3
3  S AC AC A APT A O O O Nt N Nr"   r   )	r   typingr   r   dotenvr   r   r   envrT   r"   r    <module>rX      s)    	    [N [N| kr"   