
    Be                     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	 d dl
Z
d dlmZ d dlmZ ddlmZ d	d
lmZ  G d dej                  Z G d dej                  Z G d de          Zd Zd Zd ZeedZ ed          D ]Ze                                eej        <   dS )    N)run_path)	MagicMock)parse_qs)web)WSGIContainer   )entry_points_for   )statec                       e Zd ZdZdS )	HTTPErrorz
    Custom HTTPError type
    N)__name__
__module____qualname____doc__     -lib/python3.11/site-packages/panel/io/rest.pyr   r      s           r   r   c                       e Zd Zd ZdS )BaseHandlerc           	         |                      dd           | j                            d          rfd|v rbg }t          j        |d          D ]}|                    |           |                     t          j        d|| j	        |di                     d S |                     t          j        d|| j	        di                     d S )NContent-Typeapplication/jsonserve_tracebackexc_infoerror)codemessage	traceback)r   r   )

set_headersettingsgetr   format_exceptionappendfinishjsondumps_reason)selfstatus_codekwargslineslines        r   write_errorzBaseHandler.write_error   s   (:;;;=.// 	J&4H4HE!2F:4FG # #T""""KK
'#|!& $        KK
'#| $       r   N)r   r   r   r.   r   r   r   r   r      s#            r   r   c                   P     e Zd Z fdZed             Zed             Zd Z xZS )ParamHandlerc                 t    |                     dd           | _         t                      j        ||fi | d S )Nroot)popr2   super__init__)r)   apprequestr+   	__class__s       r   r5   zParamHandler.__init__3   s?    JJvt,,	g0000000r   c                 T    fd|D             }j                             |          S )Nc                 2    i | ]}|t          |          S r   )getattr).0pparameterizeds     r   
<dictcomp>z*ParamHandler.serialize.<locals>.<dictcomp>9   s%    CCC1!W]A..CCCr   )paramserialize_parameters)clsr>   
parametersvaluess    `  r   	serializezParamHandler.serialize7   s3    CCCC
CCC"77???r   c                     |D ]"}|j         vrd| d}t          |d          #fd|                                D             S )N'z!' query parameter not recognized.i  )reasonr*   c                 N    i | ]!\  }}|j                             ||          "S r   )r@   deserialize_value)r<   r=   vr>   s      r   r?   z,ParamHandler.deserialize.<locals>.<dictcomp>B   sB     0 0 0Aq =&88A>> 0 0 0r   )r@   r   items)rB   r>   rC   r=   rH   s    `   r   deserializezParamHandler.deserialize<   s     	@ 	@A+++AQAAAv3???? ,0 0 0 0&,,..0 0 0 	0r   c                   K   | j         j        }||                    | j                  t	          | j                  z   d          }t
          j                            |d          \  }}}|sd S t          | j         j	                  }| 
                    |d         |          } |d         j        j        di | |                     dd           |                     |                     |d         |                     d S )N)NNNr   r   r   r   )r7   pathindexr2   lenr   _rest_endpointsr"   r   queryrM   r@   updater    writerE   )r)   rO   endpointr>   rC   _argsparamss           r   r"   zParamHandler.getE   s      | 

49--c$)nn<==>','<'@'@((
 (
$z1  	F*++!!-"2D99%a%/////(:;;;

4>>-"2J??@@@@@r   )	r   r   r   r5   classmethodrE   rM   r"   __classcell__)r8   s   @r   r0   r0   1   s        1 1 1 1 1 @ @ [@ 0 0 [0A A A A A A Ar   r0   c                    ddl m}m} ddlm}m} g }| D ]}|                    d          d         }|dk    r ||          }nX|dk    r4	 dd l}	n"# t          $ r}
t          d          |
d }
~
ww xY w ||          }n |d		                    |                    |
                    |j                    ||d
d          S )Nr   )NotebookHandlerScriptHandler)UnsupportedFileTypemake_app.pyipynb4Please install nbconvert to serve Jupyter Notebooks.-{} is not a script (.py) or notebook (.ipynb)zPanel REST APIzrest/)prefix)tranquilizer.handlerr]   r^   tranquilizer.mainr_   r`   split	nbconvertImportErrorformatextendtranquilized_functions)filesr]   r^   r_   r`   	functionsfilename	extensionsourcerk   es              r   build_tranquilize_applicationrv   T   s3   CCCCCCCC????????I 8 8NN3''+	"]8,,FF'!!a      a a a!"XYY_``a %_X..FF%%&U&\&\]e&f&fggg677778I/@@@@s   A
A/A**A/c                     t          |           }t          |          }d|z  t          j        t	          |          fgS )a  
    Returns a Tranquilizer based REST API. Builds the API by evaluating
    the scripts and notebooks being served and finding all tranquilized
    functions inside them.

    Arguments
    ---------
    files: list(str)
      A list of paths being served
    endpoint: str
      The endpoint to serve the REST API on

    Returns
    -------
    A Tornado routing pattern containing the route and handler
    z^/%s/.*)fallback)rv   r   r   FallbackHandlerdict)rp   rV   r6   trs       r   tranquilizer_rest_providerr|   j   sA    " (
.
.C	s		B("C$7r9J9J9JKLLr   c                    | D ]}|                     d          d         }|dk    rE	 t          |           5# t          $ r' t          j        j                            d           Y ew xY w|dk    r	 ddl}n# t          $ r t          d          w xY wdd	lm}  |            }|	                    |          \  }}t          j                            |          }	t          j        d
|	d          5 }
|
                    |           |
                                 	 t          |
j        dt%                      i           n4# t          $ r' t          j        j                            d           Y nw xY wddd           n# 1 swxY w Y   t'          d                    |                    |r|                    d          s|dz  }|rd|z  ndt,          t/          |          fgS )a]  
    Returns a Param based REST API given the scripts or notebooks
    containing the tranquilized functions.

    Arguments
    ---------
    files: list(str)
      A list of paths being served
    endpoint: str
      The endpoint to serve the REST API on

    Returns
    -------
    A Tornado routing pattern containing the route and handler
    ra   rb   rc   z0Could not run app script on REST server startup.rd   r   Nre   )ScriptExporterwT)modedirdeleteget_ipython)init_globalsz2Could not run app notebook on REST server startup.rf   /z^/%s.*z^.*)r2   )rj   r   	Exceptionr@   mainwarningrk   rl   r~   from_filenameosrO   dirnametempfileNamedTemporaryFilerU   flushnamer   
ValueErrorrm   endswithr0   rz   )rp   rV   rr   rs   rk   r~   exporterrt   rW   
source_dirtmps              r   param_rest_providerr      s      _ _NN3''+	]"""" ] ] ]
 (()[\\\\\]'!!Z      Z Z Z!"XYYYZ000000%~''H ..x88IFA22J,#:dSSS cWZ		&!!!		cSX]IKK4PQQQQQ  c c cJ$,,-abbbbbcc c c c c c c c c c c c c c c LSST\]]^^^ ))#.. C&.:i(""F\4U]K^K^K^_``sQ   8.A)(A)4A99B4*F$EF.E52F4E55FF	F	)tranquilizerr@   zpanel.io.rest)r&   r   r   r   runpyr   unittest.mockr   urllib.parser   r@   tornador   tornado.wsgir   entry_pointsr	   r   r   RequestHandlerr   r0   rv   r|   r   REST_PROVIDERSentry_pointloadr   r   r   r   <module>r      s    				            # # # # # # ! ! ! ! ! !        & & & & & & + + + + + +                 #$   0 A  A  A  A  A;  A  A  AFA A A,M M M,,a ,a ,a` /   $#O44 : :K'2'7'7'9'9N;#$$: :r   