
    +d$:                     B   d dl Z d dlZd dl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mZ d dlmZ d dlmZ d dlmZ  ej        d          Z G d	 d
e          Z G d dej        j                  Z G d de          Z G d dej        j                  ZdS )    N)uuid4)__version__)pack_kwargsunpack_kwargs)conf)
serializer)remake_instanceintakec                   >    e Zd ZdZd Zd Zd Zd
dZd Zd Z	d	 Z
dS )IntakeServerz&Main intake-server tornado applicationc                     || _         t                      | _        g | _        t	          j        dd          }t                              d|z             t          |          | _	        d S )Nauthzintake.auth.base.BaseAuthzauth: %s)
_catalogSourceCache_cache_periodic_callbacksr   getloggerdebugr	   _auth)selfcatalogr   s      8lib/python3.11/site-packages/intake/cli/server/server.py__init__zIntakeServer.__init__   sX    !mm#% x ;<<Z$&'''$T**


    c                     dt           t          | j        | j        | j                  fdt
          t          | j        | j        | j                  fgS )Nz/v1/info)r   cacher   z
/v1/source)ServerInfoHandlerdictr   r   r   ServerSourceHandlerr   s    r   get_handlerszIntakeServer.get_handlers%   sR    +T$-t{aeak-l-l-lm/dmSWS^eieo1p1p1pq
 	
r   c                 h    |                                  }t          j                            |          S N)r"   tornadowebApplication)r   handlerss     r   make_appzIntakeServer.make_app+   s)    $$&&{&&x000r   Nc                 T   t          | j                  dk    rt          d          |/|                     |          }| j                            |           |/|                     |          }| j                            |           | j        D ]}|                                 d S )Nr   z2Periodic functions already started for this server)lenr   	Exception_make_cache_closerappend_make_cache_removerstart)r   close_idle_afterremove_idle_aftercache_closercache_removercallbacks         r   start_periodic_functionsz%IntakeServer.start_periodic_functions/   s    t'((1, 	USTTT  	:223CDDL$++L999 	; 445FGGM$++M:::0 	 	HNN	 	r   c                 >      fd}                      |          S )Nc                  <    j                                         d S r$   )r   
close_idle	idle_timer   s   r   cache_closer_callbackz>IntakeServer._make_cache_closer.<locals>.cache_closer_callback@   s    K""9-----r   _make_cache_callback)r   r;   r<   s   `` r   r-   zIntakeServer._make_cache_closer?   s;    	. 	. 	. 	. 	. 	. (()>	JJJr   c                 >      fd}                      |          S )Nc                  <    j                                         d S r$   )r   remove_idler:   s   r   cache_remover_callbackz@IntakeServer._make_cache_remover.<locals>.cache_remover_callbackF   s    K##I.....r   r=   )r   r;   rB   s   `` r   r/   z IntakeServer._make_cache_removerE   s;    	/ 	/ 	/ 	/ 	/ 	/ (()?KKKr   c                 V    |dz  dz  }t           j                            ||          }|S )Ng      $@i  )r%   ioloopPeriodicCallback)r   r5   r;   interval_mss       r   r>   z!IntakeServer._make_cache_callbackK   s-     4'4/>228[IIr   )NN)__name__
__module____qualname____doc__r   r"   r)   r6   r-   r/   r>    r   r   r   r      s        00+ + +
 
 
1 1 1    K K KL L L    r   r   c                       e Zd ZdZd Zd ZdS )r   zBasic info about the serverc                 0    || _         || _        || _        d S r$   )r   r   r   )r   r   r   r   s       r   
initializezServerInfoHandler.initializeU   s    
			r   c                    | j         j        }|                     dd           }|                     dd          }| j                            |          rd|v r!| j                            |d                   }n| j        }g }|d x}}n.t          |          }t          |          t          |          z   }t          j
        |                                ||          }|D ]\  }	}
| j                            ||
| j                  r|
                                                                }|d                                         }|	|d<   |d                                         D ]2\  }}	 t          j        |fi t"           # t$          $ r d||<   Y /w xY w||d<   |                    |           	 t)          |          }n)# t$          $ r t+          d |D                       }Y nw xY wt-          t.          |||j        	          }n$d
}t2          j                            d||          |                     t          j        |fi t"                     d S )N	page_sizepage_offsetr   	source-idargsnameUNSERIALIZABLE_VALUEc              3      K   | ]}d V  dS )   NrK   ).0entrys     r   	<genexpr>z(ServerInfoHandler.get.<locals>.<genexpr>}   s"      005Q000000r   )versionsourceslengthmetadataAccess forbidden  status_codelog_messagereason)requestheadersget_argumentr   allow_connectr   r   r   int	itertoolsisliceitemsallow_accessdescribecopymsgpackpackbr   	TypeErrorr.   r+   sumr   r   r^   r%   r&   	HTTPErrorwrite)r   headrP   rQ   catr\   r0   stoppagerT   sourceinfomodified_argskvr]   server_infomsgs                     r   r   zServerInfoHandler.getZ   s   |#%%k488	''q999""4(( #	Vd" #jnnT+%677lG 9
  $#K((;''#i..8#CIIKK==D $ ) )f9))$EE 
)!??,,1133D$(L$5$5$7$7M#'DL $V 2 2 4 4 F F1F#M!;;{;;;;( F F F/EM!,,,F#0DLNN4(((1S 1 1 100C000001{GF]`]ijjjKK$C+''CSQT'UUU

7=<<<<=====s$   ,FFF5G #G+*G+N)rG   rH   rI   rJ   rN   r   rK   r   r   r   r   R   s8        %%  
(> (> (> (> (>r   r   c                   >    e Zd ZdZd Zd
dZd Zd Zd Zd Z	d	 Z
dS )r   z)Stores DataSources requested by some userc                     i | _         d S r$   _sourcesr!   s    r   r   zSourceCache.__init__   s    r   Nc                     |t          t                                }t          j                    }t          |||          | j        |<   t
                              d|d|           |S )N)rz   	open_time	last_timezAdding z to cache, uuid )strr   timer   r   r   r   )r   rz   	source_idnows       r   addzSourceCache.add   se     	%EGGIikk#'vPS#T#T#Ti fffiiHIIIr   c                 X    | j         |         }t          j                    |d<   |d         S Nr   rz   r   r   r   uuidrecords      r   r   zSourceCache.get   s)    t$"ikk{hr   c                 (    | j         |         d         S )z5Get the source but do not change the last access timerz   r   )r   r   s     r   peekzSourceCache.peek   s    }T"8,,r   c                 L    | j         |         }t          j                    |d<   d S )Nr   r   r   s      r   touchzSourceCache.touch   s$    t$"ikk{r   c                     t          j                     |z
  }| j                                        D ](}|d         |k     r|d                                          )d S r   )r   r   valuesclose)r   	idle_secs	thresholdr   s       r   r9   zSourceCache.close_idle   sc    IKK)+	m**,, 	) 	)Fk"Y. )x &&(((	) 	)r   c                     t          j                     |z
  }t          | j                                                  D ]6\  }}|d         |k     r%t                              d|z             | j        |= 7d S )Nr   zRemoving source %s from cache)r   listr   rl   r   r   )r   r   r   r   r   s        r   rA   zSourceCache.remove_idle   s|    IKK)+	 !!4!4!6!677 	( 	(LD&k"Y. (<tCDDDM$'	( 	(r   r$   )rG   rH   rI   rJ   r   r   r   r   r   r9   rA   rK   r   r   r   r      s        33          
- - -* * *) ) )( ( ( ( (r   r   c                   N    e Zd ZdZd Zd Zej        j        d             Z	d Z
dS )r    zOpen or stream data source

    The requests "action" field (open|read) specified what the request wants
    to do. Open caches the source and created an ID for it, read uses that
    ID to reference the source and read a partition.
    c                 0    || _         || _        || _        d S r$   )r   r   r   )r   r   r   r   s       r   rN   zServerSourceHandler.initialize   s    			r   c                     | j         j        }|                     d          }| j                            |          rd|v r!| j                            |d                   }n| j        }	 ||         }n2# t          $ r% d}t          j
                            d||          w xY w| j                            ||| j                  r|                                                                }||d<   t          |          }	 t!          j        |fi t$          }n# t&          $ r d|d<   |d	         d
                                         }	|d	         d
                                         D ]2\  }
}	 t!          j        |fi t$           # t&          $ r d|	|
<   Y /w xY w|	|d	         d
<   t!          j        |fi t$          }Y nw xY w|                     |           dS d}t          j
                            d||          )a
  
        Access one source's info.

        This is for direct access to an entry by name for random access, which
        is useful to the client when the whole catalog has not first been
        listed and pulled locally (e.g., in the case of pagination).
        rT   rR   zNo such entry  ra   )rz   forbiddirect_accessrz   rS   rU   Nr_   r`   )re   rf   rg   r   rh   r   r   r   KeyErrorr%   r&   rt   rm   rn   ro   r   rp   rq   r   rr   rl   ru   )r   rv   rT   rw   rz   r   r{   source_infooutr|   r}   r~   s               r   r   zServerSourceHandler.get   sN    |#  ((9""4(( 	d" $kood;&788mZT Z Z Z%k++UX+YYYZ y%%dFDMBB ((--//#V"$///D!-CC{CCCC  	D 	D 	D,4D)$/$9&$A$F$F$H$HM +H 5f = C C E E F F1F#M!;;{;;;;( F F F/EM!,,,F4AK)&1!-CC{CCCCC	D 

3 k##S#QQQsC   *A3 3/B"D AG0FGFGF%GGc           
         t          j        | j        j        fi t          }|d         }| j        j        }t                              d|z             |dk    r}d|v r!| j        	                    |d                   }n| j
        }|d         }d                    |	                    dd          t          |          f          }	 | j        	                    |          }n# t          $ r 	 |\  }} |j        |i |}	nq# t          $ rd}
t                              d||           t"          j                            d	d
t          |
                              dd                    d }
~
ww xY w| j                            |	|           Y nw xY wd|i}|                     t          j        |fi t0                     |                                  d S |dk    r^d|v r!| j        	                    |d                   }n| j
        }|d         }	 ||         }nE# t          $ r8 d                    |          }t"          j                            d||          w xY w| j                            |||          s$d}t"          j                            d||          |	                    di           }|	                    dg           }|                                }|d         }|d         }t=          |t>                    r|D ]
}||v r|} n||v }|dk    s
|dk    r{|sxt                              d|z              |j         d2i |}	 d|_!        |"                                 nm# t          $ r`}dd l#}|$                                 t"          j                            d	dt          |                              dd                    d }~ww xY w| j                            |          }t                              d |j%        d!|           tM          |j'        pi           }|(                    tM          |j%        ||j)        "                     |                     t          j        |fi t0                     |                                  d S |d#k    r-|s+d$|d%|d&}t"          j                            d	||          |}||d<   |j*        +                    |          d'         |d(<   |                     t          j        |fi t0                     |                                  d S |d)k    rt|d         }| j        	                    |          }|d*         }|	                    d+d,g          }|	                    d-d           }| ,                    |||j%                  }t                              d.|z             ||-                    |          }n!|j.        d/k     sJ |/                                }|0                    ||j%                  }tM          |j1        |j2        |j%        |0          }|                     t          j        |fi t0                     | 3                                 | j        4                    |           |                                  d S d1|z  }t"          j                            d	||          )3NactionzSource POST: %ssearchrR   query-rootz$Search query %r on Catalog %r failed  zSearch query failed
 ra   )r   r   openrT   zCatalog has no entry {!r}r   r_   r`   
parametersavailable_pluginsr   pluginr   allowzOpening entry %sTr   zDiscover failedzContainer: z, ID: )	containerr   r^   forcezclient must have plugin "z" to access source ""rW   rS   readaccepted_formatsaccepted_compressionnone	partitionzRead partition %s   )formatcompressionr   dataz"%s" not a valid source actionrK   )5rp   unpackbre   bodyr   rf   r   r   r   r   r   joinr   r   r   r,   	exceptionr%   r&   rt   replacer   ru   rq   r   finishr   r   rm   rn   
isinstancer   configure_new	on_serverdiscover	traceback	print_excr   r   _schemaupdater^   _entry_create_open_args_pick_encoderread_partitionnpartitionsr   encodeformat_namecompressor_nameflushr   ) r   re   r   rv   rw   r   query_source_idrS   kwargsresults_caterrresponse
entry_namerY   r   user_parametersclient_plugins	open_descr   plugin_nameplclient_has_pluginrz   er   r   r   r   r   chunk_encoderchunkr   s                                    r   postzServerSourceHandler.post   s   /$,"3EE}EE"|#&0111X i	Vd" $kood;&788mG$E "hhf(E(Es5zz'RSSO	Hkooo66 H H HH#(LD&",#*d"=f"="=KK  H H H$$%KUTWXXX!+//CMbknorksksk{k{  }A  CF  lG  lG/  H  H  HH GGGGGH $_5HJJw}X====>>>KKMMMMMv S	Vd" $kood;&788m JZJ Z Z Z188DDk++UX+YYYZ 9))$s;; Z(k++UX+YYY%kk,;;O$[[)<bAAN ((I%o6M#H-K+t,, %  B^+ &( !,~ =( ]g-E N_ /%7888,,????B'+F$OO%%%%  B B B$$$$'')))!+//CM^gjklgmgmguguvz|  hA  hA/  B  B  B	B
 !KOOF33	8H8H8H))TUUU 4"55v/?9_e_n o o oppp

7=AA[AABBB') 
2C 
 
Q\Q\Q\^h^h^hik++UX+YYY %,7)#(<#A#A/#R#RST#U 

7=AA[AABBBv 	V,I[__Y//F&'9:#*;;/Ex#P#P K66I ../?AUW]WghhMLL,y8999 &--i88)A---- ''v/?@@Dm7]Ebntn~  FJ  K  K  KCJJw}S88K88999JJLLLKi(((KKMMMMM 3V;C+''CSQT'UUUs]   C" "
F-D ?F 
E.
AE))E..FFH AIM. .
O8AOOc                 6   d }|D ]"}|t           j        v rt           j        |         }#|$d}t          j                            d||          t          j                    }|D ]"}|t           j        v rt           j        |         }#t          j        ||          S )Nz Unable to find compatible formatr   ra   )r   format_registryr%   r&   rt   NoneCompressorcompression_registryComboSerializer)r   r   r   r   format_encoderfr   
compressors           r   r   z!ServerSourceHandler._pick_encoder[  s    ! 	? 	?AJ.. ?!+!;A!> 	V4C+''CSQT'UUU.00
% 	@ 	@AJ33 @'<Q?
).*EEEr   N)rG   rH   rI   rJ   rN   r   r%   gen	coroutiner   r   rK   r   r   r    r       s|           
)R )R )RV [oV oV oVbF F F F Fr   r    )rj   loggingr   r   r   rp   tornado.genr%   tornado.iolooptornado.webr
   r   intake.compatr   r   intake.configr   intake.containerr   intake.utilsr	   	getLoggerr   objectr   r&   RequestHandlerr   r   r    rK   r   r   <module>r      s                                  4 4 4 4 4 4 4 4       ' ' ' ' ' ' ( ( ( ( ( (		8	$	$5 5 5 5 56 5 5 5p0> 0> 0> 0> 0>2 0> 0> 0>f)( )( )( )( )(& )( )( )(XzF zF zF zF zF'+4 zF zF zF zF zFr   