
    	6j|                        S r SSKJr  SSKJr  SSKJrJrJrJ	r	  SSK
Jr  SSKJrJr  SSKJr  SSKJr  SS	KJrJr  SS
KJrJrJr  SSKJrJr  SS jrSS jrSS jrg)u"   Factory de la aplicación FastAPI.    )annotations)Path)FastAPIHTTPExceptionRequeststatus)CORSMiddleware)JSONResponseResponse)StaticFiles)register_routers)combined_app_lifespanmount_workspace_mcp)apply_settings_to_process_envresolve_cors_originssettings)cors_headers_for_originis_origin_allowedc                x    U R                  [        5      SS j5       nU R                  [        5      SS j5       ng )Nc                   #    U R                   R                  S5      n[        UR                  UR                  UR                  S S.[        U5      S9$ 7f)Noriginr   messagedatastatus_codecontentheaders)r   getr
   r   detailr   requestexcr   s      NC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\core\app_factory.pyhttp_exception_handler;register_exception_handlers.<locals>.http_exception_handler   sM     $$X.//::
 ,F3
 	
s   AAc                   #    U R                   R                  S5      n[        [        R                  SS[        U5       3S S.[        U5      S9$ 7f)Nr   i  zInternal server error: r   r   )r   r   r
   r   HTTP_500_INTERNAL_SERVER_ERRORstrr   r!   s      r$   general_exception_handler>register_exception_handlers.<locals>.general_exception_handler    sR     $$X.==4SXJ?
 ,F3
 	
s   AA)r"   r   r#   r   )r"   r   r#   	Exception)exception_handlerr   r,   )appr%   r*   s      r$   register_exception_handlersr/      s>    =)

 *

 	9%

 &

    c           	         [        [        R                  5      u  pU R                  [        UUS/S/S/S9  U R                  S5      SS j5       nU R                  S5      SS j5       ng )N*)allow_originsallow_credentialsallow_methodsallow_headersexpose_headershttpc           	     r  #    U R                   R                  S5      nU R                  S:X  aE  [        U5      (       a5  [	        S0 [        U5      ESU R                   R                  SS5      SS.ES	9$ U" U 5      I S h  vN n[        U5      R                  5        H  u  pEXSR                   U'   M     U$  N67f)
Nr   OPTIONS   z,DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUTzaccess-control-request-headersr2   600)zAccess-Control-Allow-MethodszAccess-Control-Allow-HeaderszAccess-Control-Max-Age)r   r   )r   r   methodr   r   r   items)r"   	call_nextr   responsekeyvalues         r$   ensure_cors_on_all_responses9register_middleware.<locals>.ensure_cors_on_all_responses9   s     $$X.>>Y&+<V+D+D-f54b4;OO4G4G8#5 /4
 
 #7++1&9??AJC$)S! B ,s   A<B7>B5?7B7c                @  #    U R                   R                  S5      nUb9  [        U5      R                  5       S:w  a   [	        U5      U R
                  l        OS U R
                  l        U" U 5      I S h  vN $ ! [         a    S U R
                  l         N-f = f N%7f)Nperiod_year )query_paramsr   r)   stripintstaterF   
ValueError)r"   r?   raws      r$   period_year_middleware3register_middleware.<locals>.period_year_middlewareM   s     ""&&}5?s3x~~/251,/H) )-GMM%w'''	  1,0)1 (s4   <BA; B6B7B;BBBB)r"   r   )r   r   cors_originsadd_middlewarer	   
middleware)r.   rP   r4   rC   rN   s        r$   register_middlewarerS   .   sz    &:8;P;P&Q#L"+eeu   	^^F & 	^^F	( 	(r0   c                 J   [        5         [        [        R                  SSSS S S [        S9n [        U 5        [        U 5        [        [        R                  5      nUR                  SSS9  U R                  S[        [        U5      S9S	S
9  [        U 5        [        U 5        U $ )NzPIE 360 APIzAPI del proyecto PIE 360z1.0.0)	root_pathtitledescriptionversiondocs_url	redoc_urlopenapi_urllifespanT)parentsexist_okz/files)	directoryfiles)name)r   r   r   api_root_pathr   r/   rS   r   	files_dirmkdirmountr   r)   r   r   )r.   rc   s     r$   
create_apprf   Z   s    !#
((.&	C  $X''(IOOD4O0IIhc)n=GILSJr0   N)r.   r   returnNone)rg   r   ) __doc__
__future__r   pathlibr   fastapir   r   r   r   fastapi.middleware.corsr	   fastapi.responsesr
   r   fastapi.staticfilesr   app.backend.api.routerr    app.backend.core.mcp_integrationr   r   app.backend.core.configr   r   r   app.backend.core.cors_utilsr   r   r/   rS   rf    r0   r$   <module>ru      s<    ( "  ; ; 2 4 + 3 W a a R
8)(Xr0   