§
    ÷
Êjp  ã                  óÆ   — d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZ e	d	         Ze	d
         Z G d„ de¦  «        Z ed¬¦  «        dd„¦   «         ZdS )z]Runtime configuration, loaded from environment variables (prefix ``MUSE2API_``) and ``.env``.é    )ÚannotationsN)Ú	lru_cache)ÚPath)ÚLiteral)ÚField)ÚBaseSettingsÚSettingsConfigDict)ÚmockÚbrowserÚhttpÚ	invisibleÚinvisible_playwrightÚ
playwright)Úround_robinÚlruÚaffinityc                  ó  — e Zd ZU  edddd¬¦  «        ZdZded<   d	Zd
ed<   dZded<    e	dd¬¦  «        Z
ded<    e	dd¬¦  «        Zded<    e	dd¬¦  «        Zded<    ed¦  «        Zded<    e	dd¬¦  «        Zded<   dZded<   d Zded!<   dZded"<   d#Zd
ed$<   d%Zd&ed'<    e	dd(¬¦  «        Zded)<   d*Zd+ed,<   d-Zded.<   d/Zded0<   d-Zded1<   d2Zded3<   d4Zded5<   d6Zd7ed8<   d9Zded:<   d;Zd
ed<<   d=Zded><   d?Z d
ed@<    e	dAdB¬¦  «        Z!dedC<   dDZ"d&edE<   dFZ#dedG<   e$dTdI„¦   «         Z%e$dTdJ„¦   «         Z&e$dTdK„¦   «         Z'e$dTdL„¦   «         Z(e$dTdM„¦   «         Z)e$dTdN„¦   «         Z*e$dTdO„¦   «         Z+dUdQ„Z,dVdR„Z-e$dVdS„¦   «         Z.d*S )WÚSettingsÚ	MUSE2API_z.envúutf-8Úignore)Ú
env_prefixÚenv_fileÚenv_file_encodingÚextraz	127.0.0.1ÚstrÚhosti²H  ÚintÚportÚINFOÚ	log_levelÚ zkExternally reachable base URL used when building media links. Empty means derive from the incoming request.)ÚdefaultÚdescriptionÚpublic_basez.Bearer key for /v1/*. Auto-generated if empty.Úapi_keyz/Bearer key for /admin/*. Falls back to api_key.Ú	admin_keyÚdatar   Údata_diré   z7Days of /v1/* request history kept in data/requests.db.ÚfloatÚrequest_log_retention_daysr
   Ú
DriverNameÚdriverzhttps://muse.aiÚsite_urlÚchromium_pathi
K  Úcdp_portTÚboolÚheadlessz¡Proxy for the browser only, e.g. socks5://127.0.0.1:10808 or http://10.144.1.10:8080. Python's own calls (session renewal) follow http_proxy/https_proxy instead.Úbrowser_proxyNzPath | NoneÚbrowser_profile_dirg     €F@Úpage_ready_timeoutg     Àr@Úchat_timeoutÚfirst_token_timeoutg      n@Úimage_timeoutg     À‚@Úvideo_timeoutr   ÚPoolStrategyNameÚpool_strategyg      N@Úpool_acquire_timeouté   Úaccount_max_concurrencyg      ^@Úaccount_cooldowné   Úmax_failoverzbirefnet-generalzhrembg model used to cut out the subject, e.g. birefnet-general (best) or birefnet-general-lite (faster).Úmatting_modelFÚkeepalive_enabledi`T  Úkeepalive_intervalÚreturnc                ó   — | j         dz  S )NÚmedia©r)   ©Úselfs    ú+C:\Projects\Muse2API\src\muse2api\config.pyÚ	media_dirzSettings.media_dirU   s   € àŒ}˜wÑ&Ð&ó    c                ó   — | j         dz  S )Nzaccounts.jsonrI   rJ   s    rL   Úaccounts_filezSettings.accounts_fileY   s   € àŒ}˜Ñ.Ð.rN   c                ó   — | j         dz  S )Nz
tasks.jsonrI   rJ   s    rL   Ú
tasks_filezSettings.tasks_file]   s   € àŒ}˜|Ñ+Ð+rN   c                ó   — | j         dz  S )Nr&   rI   rJ   s    rL   Úkey_filezSettings.key_filea   s   € àŒ}˜yÑ(Ð(rN   c                ó   — | j         dz  S )Nz	keys.jsonrI   rJ   s    rL   Ú	keys_filezSettings.keys_filee   s   € àŒ}˜{Ñ*Ð*rN   c                ó   — | j         dz  S )Nzrequests.dbrI   rJ   s    rL   Úrequests_dbzSettings.requests_dbi   s   € àŒ}˜}Ñ,Ð,rN   c                ó$   — | j         p	| j        dz  S )Nzbrowser-profile)r5   r)   rJ   s    rL   Úprofile_dirzSettings.profile_dirm   s   € àÔ'ÐN¨D¬MÐ<MÑ,MÐNrN   ÚNonec                óV   — | j         | j        fD ]}|                     dd¬¦  «         Œd S )NT)ÚparentsÚexist_ok)r)   rM   Úmkdir)rK   Úds     rL   Úensure_dirszSettings.ensure_dirsq   s=   € Ø”- ¤Ð0ð 	1ð 	1ˆAØ�GŠG˜D¨4ˆGÑ0Ô0Ð0Ð0ð	1ð 	1rN   c                óš  — | j         r| j         S |                      ¦   «          | j                             ¦   «         r8| j                             d¬¦  «                             ¦   «         }|r	|| _         |S dt          j        d¦  «        z   }| j                             |dz   d¬¦  «         | j         	                    d¦  «         || _         |S )zPReturn the configured key, or load/generate a persistent one under ``data_dir``.r   )Úencodingzm2a-é   ú
i€  )
r&   ra   rT   Úis_fileÚ	read_textÚstripÚsecretsÚtoken_urlsafeÚ
write_textÚchmod)rK   Úkeys     rL   Úresolve_api_keyzSettings.resolve_api_keyu   sÊ   € àŒ<ð 	 Ø”<ÐØ×ÒÑÔÐØŒ=× Ò Ñ"Ô"ð 	Ø”-×)Ò)°7Ð)Ñ;Ô;×AÒAÑCÔCˆCØð Ø"�”Ø�
Ø•wÔ,¨RÑ0Ô0Ñ0ˆØŒ× Ò   t¡°gÐ Ñ>Ô>Ð>ØŒ×Ò˜EÑ"Ô"Ð"ØˆŒØˆ
rN   c                ó   — | j         p| j        S ©N)r'   r&   rJ   s    rL   Úeffective_admin_keyzSettings.effective_admin_key…   s   € àŒ~Ð- ¤Ð-rN   )rF   r   )rF   r[   )rF   r   )/Ú__name__Ú
__module__Ú__qualname__r	   Úmodel_configr   Ú__annotations__r   r!   r   r%   r&   r'   r   r)   r,   r.   r/   r0   r1   r3   r4   r5   r6   r7   r8   r9   r:   r<   r=   r?   r@   rB   rC   rD   rE   ÚpropertyrM   rP   rR   rT   rV   rX   rZ   ra   rn   rq   © rN   rL   r   r      s  € € € € € € Ø%Ð%ØØØ!Øð	ñ ô €Lð €DÐÐÐÑØ€DÐÐÐÑØ€IÐÐÐÑØ�uØð8ðñ ô €Kð ð ð ñ ð �5 Ð1aÐbÑbÔb€GÐbÐbÐbÑbØ�U 2Ð3dÐeÑeÔe€IÐeÐeÐeÑeð �T˜&‘\”\€HÐ!Ð!Ð!Ñ!Ø(-¨ØÐ Yð)ñ )ô )Ðð ð ð ñ ð
  €FÐÐÐÑØ%€HÐ%Ð%Ð%Ñ%ð €MÐÐÐÑØ€HÐÐÐÑØ€HÐÐÐÑØ˜ØðVðñ ô €Mð ð ð ñ ð
 (,ÐÐ+Ð+Ð+Ñ+Ø $ÐÐ$Ð$Ð$Ñ$ð  €LÐÐÐÑØ!%ÐÐ%Ð%Ð%Ñ%Ø €MÐ Ð Ð Ñ Ø €MÐ Ð Ð Ñ ð '1€MÐ0Ð0Ð0Ñ0Ø"&ÐÐ&Ð&Ð&Ñ&Ø#$ÐÐ$Ð$Ð$Ñ$Ø#ÐÐ#Ð#Ð#Ñ#Ø€LÐÐÐÑð ˜Ø"ð4ðñ ô €Mð ð ð ñ ð $ÐÐ#Ð#Ð#Ñ#Ø (ÐÐ(Ð(Ð(Ñ(àð'ð 'ð 'ñ „Xð'ð ð/ð /ð /ñ „Xð/ð ð,ð ,ð ,ñ „Xð,ð ð)ð )ð )ñ „Xð)ð ð+ð +ð +ñ „Xð+ð ð-ð -ð -ñ „Xð-ð ðOð Oð Oñ „XðOð1ð 1ð 1ð 1ðð ð ð ð  ð.ð .ð .ñ „Xð.ð .ð .rN   r   r>   )ÚmaxsizerF   c                 ó   — t          ¦   «         S rp   )r   rx   rN   rL   Úget_settingsr{   Š   s   € å‰:Œ:ÐrN   )rF   r   )Ú__doc__Ú
__future__r   ri   Ú	functoolsr   Úpathlibr   Útypingr   Úpydanticr   Úpydantic_settingsr   r	   r-   r;   r   r{   rx   rN   rL   ú<module>rƒ      s  ðØ cÐ cà "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >àÐaÔb€
ØÐ;Ô<Ð ðv.ð v.ð v.ð v.ð v.ˆ|ñ v.ô v.ð v.ðr €�1ÐÑÔðð ð ñ Ôðð ð rN   