
    g6j|                        d Z ddlmZ ddlmZ ddlmZmZmZ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mZ dd
lmZmZmZ ddlmZmZ ddZddZddZy)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                t    | j                  t              dd       }| j                  t              dd       }y )Nc                   K   | j                   j                  d      }t        |j                  |j                  |j                  d dt        |            S w)Noriginr   messagedatastatus_codecontentheaders)r   getr
   r   detailr   requestexcr   s      E/var/www/pie360backend.cl/public_html/app/backend/core/app_factory.pyhttp_exception_handlerz;register_exception_handlers.<locals>.http_exception_handler   sN     $$X.//::
 ,F3
 	
s   AAc                   K   | j                   j                  d      }t        t        j                  ddt        |       d dt        |            S w)Nr   i  zInternal server error: r   r   )r   r   r
   r   HTTP_500_INTERNAL_SERVER_ERRORstrr   r!   s      r$   general_exception_handlerz>register_exception_handlers.<locals>.general_exception_handler    sS     $$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                    t        t        j                        \  }}| j                  t        ||dgdgdg       | j                  d      dd       }| j                  d      dd       }y )N*)allow_originsallow_credentialsallow_methodsallow_headersexpose_headershttpc           	     l  K   | j                   j                  d      }| j                  dk(  rCt        |      r8t	        di t        |      d| j                   j                  dd      dd	      S  ||        d {   }t        |      j                         D ]  \  }}||j                   |<    |S 7 6w)
Nr   OPTIONS   z,DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUTzaccess-control-request-headersr0   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_responsesz9register_middleware.<locals>.ensure_cors_on_all_responses9   s     $$X.>>Y&+<V+D-f54b4;OO4G4G8#5 /4
 
 #7++1&9??A 	*JC$)HS!	* ,s   A9B4;B2<7B4c                :  K   | j                   j                  d      }|8t        |      j                         dk7  r	 t	        |      | j
                  _        nd | j
                  _         ||        d {   S # t        $ r d | j
                  _        Y ,w xY w7 $w)Nperiod_year )query_paramsr   r(   stripintstaterC   
ValueError)r"   r=   raws      r$   period_year_middlewarez3register_middleware.<locals>.period_year_middlewareM   s     ""&&}5?s3x~~/251,/H) )-GMM%w'''	  1,0)1 (s4   :BA9 B4B5B9BBBB)r"   r   )r   r   cors_originsadd_middlewarer	   
middleware)r,   rL   r2   rA   rK   s        r$   register_middlewarerO   .   s}    &:8;P;P&Q#L#"+eeu   	^^F & 	^^F	( 	(r.   c            
     b   t                t        t        j                  dddd d d t              } t        |        t        |        t        t        j                        }|j                  dd       | j                  dt        t        |            d	
       t        |        t        |        | S )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-   rO   r   	files_dirmkdirmountr   r(   r   r   )r,   r_   s     r$   
create_apprb   Z   s    !#
((.&	C  $X''(IOOD4O0IIhc)n=GILSJr.   N)r,   r   returnNone)rc   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-   rO   rb    r.   r$   <module>rq      s<    ( "  ; ; 2 4 + 3 W a a R
8)(Xr.   