Ë
    ¼ðEj¨(  ã                  óŒ   — d Z ddlmZ ddlmZ ddlmZ ddlZ e ee«      j                  dz  «        G d„ d«      Z
 e
«       Zy)	uê   
config.py â€” People Hub Interview Platform
Single source of truth for all configuration.
All values loaded from .env â€” nothing hardcoded.

Usage anywhere in the project:
    from config import settings
    settings.OPENAI_API_KEY
é    )Úannotations)ÚPath)Úload_dotenvNz.envc                  óp  — e Zd ZU  ej                  dd«      Zded<    e ej                  dd«      «      Zded<    ej                  dd«      j                  «       dk(  Z
d	ed<    ej                  d
d«      Zded
<    ej                  dd«      Zded<    ej                  dd«      Zded<    ej                  dd«      Zded<    e ej                  dd«      «      Zded<    e ej                  dd«      «      Zded<    ej                  dd«      Zded<    ej                  dd«      Zded<    ej                  dd«      Zded<    e ej                  dd«      «      Zded<    e ej                  dd «      «      Zded<    e ej                  d!d"«      «      Zded!<    e ej                  d#d$«      «      Zded#<    e ej                  d%d&«      «      Zd'ed%<    e ej                  d(d)«      «      Zd'ed(<    e ej                  d*d+«      «      Zd'ed*<    e ej                  d,d-«      «      Zd'ed,<    e ej                  d.d/«      «      Zd'ed.<    e ej                  d0d1«      «      Zd'ed0<    ej                  d2d3«      jA                  d4«      D � �cg c]  }|jC                  «       ‘Œ c}} Z"d5ed2<    ej                  d6d«      Z#ded6<    e ej                  d7d8«      «      Z$ded7<    ej                  d9d«      Z%ded9<    ej                  d:d«      Z&ded:<    ej                  d;d«      Z'ded;<    ej                  d<d=«      Z(ded<<    e ej                  d>d?«      «      Z)ded><    e ej                  d@dA«      «      Z*ded@<    e ej                  dBd?«      «      Z+dedB<    ej                  dCd«      j                  «       dk(  Z,d	edC<    ej                  dDdE«      Z-dedD<    ej                  dFdG«      Z.dedF<    ej                  dHdI«      Z/dedH<    ej                  dJdK«      ja                  «       Z1dedJ<    ej                  dLd«      j                  «       dk(  Z2d	edL<   e3dŒdM„«       Z4 e ej                  dNdO«      «      Z5dedN<    e ej                  dPdO«      «      Z6dedP<    e ej                  dQdR«      «      Z7dedQ<    e ej                  dSdT«      «      Z8dedS<    ej                  dUd«      jC                  «       j                  «       dVv Z9d	edU<   dWZ:dedX<   dYZ;dedZ<   d[Z<ded\<   d]Z=ded^<   d_Z>ded`<   daZ?dedb<   dcdddedfdgdhdiœZ@djedk<   dldmdndodpdqdiœZAdjedr<    ej                  dsdt«      j                  «       dk(  ZBd	eds<    ej                  dudv«      ZCdedu<    ej                  dwdx«      ZDdedw<    e ej                  dydz«      «      ZEdedy<    e ej                  d{dR«      «      ZFded{<    ej                  d|d«      ZGded|<    ej                  d}d~«      ZHded}<    ej                  dd«      ZIded<    ej                  d€d«      ZJded€<    ej                  d�d«      jC                  «       j                  «       dVv ZKd	ed�<    ej                  d‚dƒ«      ZLded‚<    e ej                  d„d…«      «      ZMded„<    e ej                  d†d‡«      «      ZNded†<    ej                  dˆd«      j                  «       dk(  ZOd	edˆ<    e ej                  d‰d‡«      «      ZPded‰<   d�dŠ„ZQy‹c c}} w )ŽÚSettingsÚAPP_HOSTz0.0.0.0ÚstrÚAPP_PORTÚ8003ÚintÚ	APP_DEBUGÚtrueÚboolÚAPP_NAMEu"   People Hub â€“ Candidate InterviewÚAPP_VERSIONz1.0.0ÚJWT_SECRET_KEYÚCHANGE_ME_IN_PRODUCTIONÚJWT_ALGORITHMÚHS256ÚJWT_EXPIRE_MINUTESÚ480ÚACCESS_KEY_EXPIRE_HOURSÚ72ÚOPENAI_API_KEYÚ ÚOPENAI_BASE_URLzhttps://api.openai.com/v1ÚOPENAI_MODELzgpt-4o-miniÚOPENAI_TEMPERATUREz0.0ÚfloatÚOPENAI_MAX_TOKENS_COMPILEÚ600ÚOPENAI_MAX_TOKENS_EVALÚ1200ÚOPENAI_MAX_TOKENS_CAPTCHAÚ100ÚDATA_DIRz./datar   Ú
USERS_FILEz./data/users.jsonÚCODING_RESULTS_FILEz./data/coding_assessment.jsonÚFRAUD_LOG_FILEz./data/fraud_log.jsonÚSESSIONS_FILEz./data/sessions.jsonÚ	PHOTO_DIRz./data/photosÚALLOWED_ORIGINSzhttp://localhost:8000ú,z	list[str]ÚDB_HOSTÚDB_PORTÚ5432ÚDB_NAMEÚDB_USERÚDB_PASSWORDÚ
DB_SSLMODEÚpreferÚDB_CONNECT_TIMEOUTÚ10ÚDB_POOL_MINÚ1ÚDB_POOL_MAXÚDB_FAIL_FASTÚDB_TABLE_PARTICIPANTÚparticipantÚDB_TABLE_ROLE_PLAYÚ	role_playÚDB_TABLE_CODING_QUESTIONSÚcoding_questionsÚ	LOG_LEVELÚINFOÚLOG_DB_PAYLOADc                ó¼   — d| j                   › d| j                  › d| j                  › d| j                  › d| j                  › d| j
                  › d| j                  › �S )z&Single-line DSN suitable for psycopg2.zhost=z port=z dbname=z user=z
 password=z	 sslmode=z connect_timeout=)r.   r/   r1   r2   r3   r4   r6   ©Úselfs    ú'/var/www/html/peoplehubportal/config.pyÚDB_DSNzSettings.DB_DSNL   si   € ð �D—L‘L�> ¨¯© ~ð 6Ø—l‘l�^ 6¨$¯,©,¨ð 8Ø×(Ñ(Ð)¨°4·?±?Ð2Cð DØ#×6Ñ6Ð7ð9ð	
ó    ÚFRAUD_MAX_TAB_SWITCHESÚ3ÚFRAUD_MAX_FACE_VIOLATIONSÚFRAUD_MAX_PASTE_EVENTSÚ5ÚFRAUD_INACTIVITY_SECONDSÚ120ÚIS_SESSION_LOCK_ENABLED)r9   r   ÚyesÚoné   ÚSTAGE_ASSESSMENTé   ÚSTAGE_ROLEPLAYé   ÚSTAGE_CODINGé   ÚSTAGE_TECHNICALé   ÚSTAGE_HUMAN_INTERVIEWé   ÚSTAGE_HR_ROUNDz/people_hub_assessmentz/people_hub_role_playz/people_hub_coding_assessmentz/interview/technicalz/interview/humanz/interview/hr)rU   rW   rY   r[   r]   r_   zdict[int, str]ÚSTAGE_ROUTESzAI Screening Assessmentz	Role PlayzCoding TestzTechnical InterviewzHuman InterviewzHR RoundÚSTAGE_NAMESÚSHOW_DEV_SKILL_BUTTONÚfalseÚSUPPORT_PHONEz+91 9221980198ÚSUPPORT_EMAILzsupport@golsh.comÚCODING_TIME_MINUTESÚ45ÚCODING_MAX_QUESTIONSÚTAVUS_API_KEYÚTAVUS_BASE_URLzhttps://tavusapi.com/v2ÚTAVUS_REPLICA_IDÚTAVUS_PERSONA_IDÚIS_VIDEO_ROLEPLAY_SELECTIONÚPEOPLEHUB_BASE_URLz*https://peoplehub.golsh2e.com/eReKruit/apiÚPEOPLEHUB_TIMEOUTÚ20ÚPEOPLEHUB_RETRIESÚ2ÚPEOPLEHUB_VERIFY_TLSÚDEFAULT_FALLBACK_STAGEc                óx   — | j                   j                  dd¬«       | j                  j                  dd¬«       y)z0Create all required data directories on startup.T)ÚparentsÚexist_okN)r&   Úmkdirr+   rF   s    rH   Úensure_dirszSettings.ensure_dirs¶   s0   € à�‰×Ñ D°4ÐÔ8Ø�‰×Ñ T°DÐÕ9rJ   N)Úreturnr	   )r{   ÚNone)RÚ__name__Ú
__module__Ú__qualname__ÚosÚgetenvr   Ú__annotations__r   r
   Úlowerr   r   r   r   r   r   r   r   r   r   r   r   r    r"   r$   r   r&   r'   r(   r)   r*   r+   ÚsplitÚstripr,   r.   r/   r1   r2   r3   r4   r6   r8   r:   r;   r<   r>   r@   ÚupperrB   rD   ÚpropertyrI   rK   rM   rN   rP   rR   rV   rX   rZ   r\   r^   r`   ra   rb   rc   re   rf   rg   ri   rj   rk   rl   rm   rn   ro   rp   rr   rt   ru   rz   )Ú.0Úos   00rH   r   r      s  … à$˜2Ÿ9™9 Z°Ó;€HˆcÓ;Ù˜y˜rŸy™y¨°VÓ<Ó=€HˆcÓ=Ø$˜2Ÿ9™9 [°&Ó9×?Ñ?ÓAÀVÑK€IˆtÓKØ$˜2Ÿ9™9 ZÐ1UÓV€HˆcÓVØ$˜2Ÿ9™9 ]°GÓ<€K�Ó<ð %˜2Ÿ9™9Ð%5Ð7PÓQ€N�CÓQØ$˜2Ÿ9™9 _°gÓ>€M�3Ó>Ù! ) "§)¡)Ð,@À%Ó"HÓIÐ˜ÓIÙ#& y r§y¡yÐ1JÈDÓ'QÓ#RÐ˜SÓRð '˜RŸY™YÐ'7¸Ó<€N�CÓ<Ø&˜RŸY™YÐ'8Ð:UÓV€O�SÓVØ&˜RŸY™Y ~°}ÓE€L�#ÓEÙ % i b§i¡iÐ0DÀeÓ&LÓ MÐ˜ÓMÙ%(¨¨¯©Ð3NÐPUÓ)VÓ%WÐ˜sÓWÙ%(¨¨¯©Ð3KÈVÓ)TÓ%UÐ˜CÓUÙ%(¨¨¯©Ð3NÐPUÓ)VÓ%WÐ˜sÓWñ $(¨	¨¯	©	°*¸hÓ(GÓ#H€HˆdÓHÙ#'¨	¨¯	©	°,Ð@SÓ(TÓ#U€J�ÓUÙ#'¨	¨¯	©	Ð2GÐIhÓ(iÓ#jÐ˜ÓjÙ#'¨	¨¯	©	Ð2BÐD[Ó(\Ó#]€N�DÓ]Ù#'¨	¨¯	©	°/ÐCYÓ(ZÓ#[€M�4Ó[Ù#'¨	¨¯	©	°+¸Ó(OÓ#P€IˆtÓPð
 �—‘Ð,Ð.EÓF×LÑLÈSÓQ÷"àð 	
�‰�	ó"€O�Yó ð %˜2Ÿ9™9 Y°Ó3€GˆSÓ3Ù˜y˜rŸy™y¨°FÓ;Ó<€GˆSÓ<Ø$˜2Ÿ9™9 Y°Ó3€GˆSÓ3Ø$˜2Ÿ9™9 Y°Ó3€GˆSÓ3Ø$˜2Ÿ9™9 ]°BÓ7€K�Ó7Ø$˜2Ÿ9™9 \°8Ó<€J�Ó<Ù! ) "§)¡)Ð,@À$Ó"GÓHÐ˜ÓHÙ˜y˜rŸy™y¨¸Ó<Ó=€K�Ó=Ù˜y˜rŸy™y¨¸Ó=Ó>€K�Ó>Ø$˜2Ÿ9™9 ^°VÓ<×BÑBÓDÈÑN€L�$ÓNà&/ b§i¡iÐ0FÈÓ&VÐ˜#ÓVØ&/ b§i¡iÐ0DÀkÓ&RÐ˜ÓRØ&/ b§i¡iÐ0KÐM_Ó&`Ð˜sÓ`ð %˜2Ÿ9™9 [°&Ó9×?Ñ?ÓA€IˆsÓAØ$˜2Ÿ9™9Ð%5°vÓ>×DÑDÓFÈ&ÑP€N�DÓPàò
ó ð
ñ %(¨	¨¯	©	Ð2JÈCÓ(PÓ$QÐ˜CÓQÙ%(¨¨¯©Ð3NÐPSÓ)TÓ%UÐ˜sÓUÙ$'¨	¨¯	©	Ð2JÈCÓ(PÓ$QÐ˜CÓQÙ$'¨	¨¯	©	Ð2LÈeÓ(TÓ$UÐ˜cÓUð 	ˆ�	‰	Ð+¨VÓ4×:Ñ:Ó<×BÑBÓDØ%ð	&ð ˜Tó ð "#Ð�cÓ"Ø!"€N�CÓ"Ø!"€L�#Ó"Ø!"€O�SÓ"Ø!"Ð˜3Ó"Ø!"€N�CÓ"ð $Ø"Ø*Ø!ØØñ$€L�.ó ð %ØØØ ØØñ#€K�ó ð #, "§)¡)Ð,CÀWÓ"M×"SÑ"SÓ"UÐY_Ñ"_Ð˜4Ó_ð
 #˜Ÿ™ ?Ð4DÓE€M�3ÓEØ"˜Ÿ™ ?Ð4GÓH€M�3ÓHñ "% Y R§Y¡YÐ/DÀdÓ%KÓ!LÐ˜ÓLÙ!$ Y R§Y¡YÐ/EÀsÓ%KÓ!LÐ˜#ÓLð &˜BŸI™I o°rÓ:€M�3Ó:Ø%˜BŸI™IÐ&6Ð8QÓR€N�CÓRØ%˜BŸI™IÐ&8¸"Ó=Ð�cÓ=Ø%˜BŸI™IÐ&8¸"Ó=Ð�cÓ=ð 	ˆ�	‰	Ð/°Ó8×>Ñ>Ó@×FÑFÓHØ%ð	&ð   ó ð !* §	¡	ØØ4ó!Ð˜ó ñ !$ I B§I¡IÐ.AÀ4Ó$HÓ IÐ�sÓIÙ # I B§I¡IÐ.AÀ3Ó$GÓ HÐ�sÓHØ!* §¡Ð+AÀ6Ó!J×!PÑ!PÓ!RÐV\Ñ!\Ð˜$Ó\ñ #& i b§i¡iÐ0HÈ#Ó&NÓ"OÐ˜CÓOô:ùóG"s   Ê\2r   )Ú__doc__Ú
__future__r   Úpathlibr   Údotenvr   r€   Ú__file__Úparentr   Úsettings© rJ   rH   ú<module>r’      sG   ðñõ #Ý Ý Û 	ñ ‰D�‹N×!Ñ! FÑ*Ô +÷f:ñ f:ñR ‹:�rJ   