§
    	ÊjA  ã                  ó  — d Z ddlmZ ddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZm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 d	dlmZ d	dlmZmZ d	dlmZ d	dlmZ d	dl m!Z!  ej"        d¦  «        Z#dZ$dZ%d d„Z&d!d"d„Z'dS )#zFastAPI application factory.é    )ÚannotationsN)ÚAsyncIterator)Úasynccontextmanager)ÚFastAPIÚRequest)ÚRequestValidationError)ÚJSONResponseé   )Ú__version__)Úkeepalive_loop)ÚRequestLogMiddleware)Úbuild_router)ÚSettingsÚget_settings)Ú
MuseDriver)ÚMuse2APIError)ÚServicesÚmuse2apig      N@g      ¬@Úservicesr   ÚreturnÚNonec              ƒ  ód  K  — t          j        ¦   «         }	 t          j        t          ¦  «        ƒ d {V —† | j                             ¦   «         ƒ d {V —† t          j        ¦   «         |z
  t          k    r=t          j        ¦   «         }| j         	                    | j
        j        ¦  «        ƒ d {V —† Œ›)N)ÚtimeÚ	monotonicÚasyncioÚsleepÚ_FLUSH_INTERVALÚkeysÚflushÚ_PRUNE_INTERVALÚrequestsÚpruneÚsettingsÚrequest_log_retention_days)r   Ú
last_prunes     ú(C:\Projects\Muse2API\src\muse2api\app.pyÚ_housekeepingr'       s»   è è € Ý”Ñ!Ô!€JðXÝŒm�OÑ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ØŒm×!Ò!Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ÝŒ>ÑÔ˜jÑ(­OÒ;Ð;ÝœÑ)Ô)ˆJØÔ#×)Ò)¨(Ô*;Ô*VÑWÔWÐWÐWÐWÐWÐWÐWÐWðXó    r#   úSettings | NoneÚdriverúMuseDriver | Noner   c                óþ  ‡ ‡— ‰ pt          ¦   «         Š ‰                      ¦   «          t          j        ‰ |¦  «        Št          dˆˆ fd„¦   «         }t          dt          |¬¦  «        }‰|j        _        | 	                    t          ¦  «        dd„¦   «         }| 	                    t          ¦  «        dd„¦   «         }|                     t          ¦   «         ¦  «         |                     t          ‰j        ¬¦  «         |S )NÚappr   r   úAsyncIterator[None]c           	    ó´  •K  — ‰j                              ¦   «         ƒ d {V —† ‰j                             ¦   «         ƒ d {V —† ‰j                             ¦   «         ƒ d {V —† ‰j                             ¦   «         ƒ d {V —† ‰j                             ‰j        ¦  «        ƒ d {V —† ‰j                             ‰j         	                    ‰j        j
        ¬¦  «        ¦  «        ƒ d {V —† ‰j                             ¦   «         ƒ d {V —† t          j        t          ‰¦  «        ¦  «        }d }‰j        rC‰j        j        j        r2t          j        t'          ‰j         ‰j        ‰j        ¦  «        ¦  «        }t*                               dt.          ‰j        j        ¦  «         	 d W V — ||fD ]V}|rR|                     ¦   «          t5          j        t          j        ¦  «        5  |ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   ŒW‰j                             ¦   «         ƒ d {V —† ‰j                             ¦   «         ƒ d {V —† ‰j                             ¦   «         ƒ d {V —† ‰j                             ¦   «         ƒ d {V —† d S # ||fD ]V}|rR|                     ¦   «          t5          j        t          j        ¦  «        5  |ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   ŒW‰j                             ¦   «         ƒ d {V —† ‰j                             ¦   «         ƒ d {V —† ‰j                             ¦   «         ƒ d {V —† ‰j                             ¦   «         ƒ d {V —† w xY w)N)Úlimitzmuse2api %s ready (driver=%s)) ÚpoolÚloadÚtasksr   r!   Úopenr"   r$   Úbackfill_tasksÚlistÚmax_keptr*   Ústartupr   Úcreate_taskr'   Úkeepalive_enabledÚcapabilitiesÚrenew_sessionr   Úkeepalive_intervalÚlogÚinfor   ÚnameÚcancelÚ
contextlibÚsuppressÚCancelledErrorÚshutdownr   Úclose)r-   ÚhousekeepingÚ	keepaliveÚbgr   r#   s       €€r&   Úlifespanzcreate_app.<locals>.lifespan/   sI  øè è € àŒm× Ò Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØŒn×!Ò!Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ØŒm× Ò Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØÔ×$Ò$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ØÔ×%Ò% hÔ&IÑJÔJÐJÐJÐJÐJÐJÐJÐJØÔ×.Ò.¨x¬~×/BÒ/BÈÌÔI`Ð/BÑ/aÔ/aÑbÔbÐbÐbÐbÐbÐbÐbÐbØŒo×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ÝÔ*­=¸Ñ+BÔ+BÑCÔCˆØˆ	ØÔ%ð 	¨(¬/Ô*FÔ*Tð 	ÝÔ+Ý˜xœ}¨h¬o¸xÔ?ZÑ[Ô[ñô ˆIõ 	�ŠÐ0µ+¸x¼Ô?SÑTÔTÐTð	,ØˆEˆEˆEˆEà  ,Ð/ð !ð !�Øð !Ø—I’I‘K”K�KÝ#Ô,­WÔ-CÑDÔDð !ð !Ø ˜˜˜˜˜˜˜ð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !øà”.×)Ò)Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø”/×*Ò*Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø”-×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÔ#×)Ò)Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+øð ! ,Ð/ð !ð !�Øð !Ø—I’I‘K”K�KÝ#Ô,­WÔ-CÑDÔDð !ð !Ø ˜˜˜˜˜˜˜ð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !øà”.×)Ò)Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ø”/×*Ò*Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ø”-×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ØÔ#×)Ò)Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+øøøsC   Æ I> Ç	G4Ç4G8	Ç;G8	É>;MÊ9	K	ËMËKËMËKËBMr   )ÚtitleÚversionrJ   Ú_r   Úexcr   r	   c              “  óV   K  — t          |                     ¦   «         |j        ¬¦  «        S )N©Ústatus_code)r	   Úto_bodyrQ   )rM   rN   s     r&   Ú_muse_errorzcreate_app.<locals>._muse_errorO   s#   è è € å˜CŸKšK™MœM°s´ÐGÑGÔGÐGr(   r   c              “  ó–   K  — d                      d„ |                     ¦   «         D ¦   «         ¦  «        }t          d|dddœid¬¦  «        S )	Nz; c              3  óˆ   K  — | ]=}d                       t          t          |d         ¦  «        ¦  «        › d|d         › �V — Œ>dS )ú.Úlocz: ÚmsgN)ÚjoinÚmapÚstr)Ú.0Úes     r&   ú	<genexpr>z8create_app.<locals>._validation_error.<locals>.<genexpr>U   sN   è è € Ð\Ð\È!˜3Ÿ8š8¥C­¨Q¨u¬XÑ$6Ô$6Ñ7Ô7ÐEÐE¸1¸U¼8ÐEÐEÐ\Ð\Ð\Ð\Ð\Ð\r(   ÚerrorÚinvalid_request_errorÚinvalid_request)ÚmessageÚtypeÚcodei�  rP   )rY   Úerrorsr	   )rM   rN   rX   s      r&   Ú_validation_errorz%create_app.<locals>._validation_errorS   s\   è è € à�iŠiÐ\Ð\ÈsÏzÊzÉ|Ì|Ð\Ñ\Ô\Ñ\Ô\ˆÝØ #Ð/FÐPaÐbÐbÐcØð
ñ 
ô 
ð 	
r(   )Úrequest_log)r-   r   r   r.   )rM   r   rN   r   r   r	   )rM   r   rN   r   r   r	   )r   Úresolve_api_keyr   Úbuildr   r   r   Ústater   Úexception_handlerr   r   Úinclude_routerr   Úadd_middlewarer   r!   )r#   r*   rJ   r-   rS   rf   r   s   `     @r&   Ú
create_apprn   *   s   øø€ ØÐ)�<™>œ>€HØ×ÒÑÔÐÝŒ~˜h¨Ñ/Ô/€Håð,ð ,ð ,ð ,ð ,ð ,ñ Ôð,õ8 ˜
­KÀ(Ð
KÑ
KÔ
K€CØ!€C„IÔà×Ò�=Ñ)Ô)ðHð Hð Hñ *Ô)ðHð 	×ÒÕ1Ñ2Ô2ð
ð 
ð 
ñ 3Ô2ð
ð ×Ò•|‘~”~Ñ&Ô&Ð&Ø×ÒÕ+¸Ô9JÐÑKÔKÐKØ€Jr(   )r   r   r   r   )NN)r#   r)   r*   r+   r   r   )(Ú__doc__Ú
__future__r   r   rB   Úloggingr   Úcollections.abcr   r   Úfastapir   r   Úfastapi.exceptionsr   Úfastapi.responsesr	   Ú r   Úaccounts.keepaliver   Úapi.middlewarer   Ú
api.routesr   Úconfigr   r   Údrivers.baser   re   r   Úservices.containerr   Ú	getLoggerr>   r   r    r'   rn   © r(   r&   ú<module>r      s“  ðØ "Ð "à "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø )Ð )Ð )Ð )Ð )Ð )Ø *Ð *Ð *Ð *Ð *Ð *à $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø *Ð *Ð *Ð *Ð *Ð *à Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø $Ð $Ð $Ð $Ð $Ð $Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø (Ð (Ð (Ð (Ð (Ð (à€gÔ˜
Ñ#Ô#€ð €Ø€ðXð Xð Xð Xð3ð 3ð 3ð 3ð 3ð 3ð 3r(   