
    Bim                     `    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dS )    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dS )	EnvLoaderu)   환경 변수 로딩 및 검증 클래스Nenv_filec                    t           j                            t           j                            t           j                            t           j                            t           j                            t                                                            | _        |r|| _        nt           j                            | j        d          }t           j                            |          r9t          |d           t          j
        dd                                          }nt          j        d| d           d}|dk    r+t           j                            | j        d	          | _        n*t           j                            | j        d
          | _        |                                  |                                  d S )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       N/var/www/html/web/mlink/mlink_AI_Server/mlink-backend/src/config/env_loader.py__init__zEnvLoader.__init__
   so    GOOBGOOBGOOBGOO\^\c\k\klt\u\uLvLv<w<w,x,xyy 	T$DMM GLL):FCCMw~~m,, ,ME:::: i}EEKKMM  !EUb  !E  !E  !E  F  F  F+ l** "T->@Q R R "T->@R S S$$&&&&&    c                     t           j                            | j                  r4t	          | j        d           t          j        d| j                    dS t          j        d| j                    dS )u   환경 변수 파일 로드Tr
   u    환경 변수 파일 로드됨: u+   환경 변수 파일을 찾을 수 없음: N)r   r   r   r   r   r   infor   r   s    r    r   zEnvLoader._load_env&   sr    7>>$-(( 	[5555LKDMKKLLLLLOY$-YYZZZZZr"   c                     g d}g }|D ]+}t          j        |          s|                    |           ,|r%t          dd                    |                     dS )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.   s    
 
 
   	) 	)C9S>> )##C((( 	^\499\CZCZ\\]]]	^ 	^r"   Fkeydefaultrequiredreturnc                 ^    t          j        ||          }|r|t          d| d          |S )u   환경 변수 값 가져오기Nu   필수 환경 변수 'u   '가 설정되지 않음)r   r   r+   )r   r/   r0   r1   values        r    getzEnvLoader.get>   s?    	#w'' 	UScSSSTTTr"   c                 r    t          j        |t          |                                                    }|dv S )u%   불린 환경 변수 값 가져오기)true1yeson)r   r   strr   )r   r/   r0   r4   s       r    get_boolzEnvLoader.get_boolG   s1    	#s7||,,2244222r"   r   c                     	 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   sK    	ryc'll33444 	 	 	NNN	s   .1 A A ,	separatorc                 v    t          j        |d          }|s|pg S d |                    |          D             S )u(   리스트 환경 변수 값 가져오기 c                 6    g | ]}|                                 S  )strip).0items     r    
<listcomp>z&EnvLoader.get_list.<locals>.<listcomp>X   s     @@@

@@@r"   )r   r   split)r   r/   rA   r0   r4   s        r    get_listzEnvLoader.get_listS   sE    	#r"" 	!=b @@Y)?)?@@@@r"   c                 Z    |                      dd                                          dk    S )u   개발 환경 여부r   r   r5   r   r%   s    r    is_developmentzEnvLoader.is_developmentZ   s)     xx}55;;==NNr"   c                 Z    |                      dd                                          dk    S )u   프로덕션 환경 여부r   r   r   rM   r%   s    r    is_productionzEnvLoader.is_production_   s)     xx}55;;==MMr"   )N)NF)F)r   )r@   N)__name__
__module____qualname____doc__r;   r!   r   r   r   boolr5   r<   r>   r?   listrK   propertyrN   rP   rE   r"   r    r   r      s       33' ' ' ' ' '8[ [ [^ ^ ^  s S 4 C    3 3C 3$ 34 3 3 3 3
 3  S    A AC AC A APT A A A A O O O O XO Nt N N N XN N Nr"   r   )	r   typingr   r   dotenvr   r   r   envrE   r"   r    <module>r[      s    				                       [N [N [N [N [N [N [N [N| ikkr"   