
    7Th6                         S SK r S SKrS SKrS SKrS SKrS SKJrJr  S SKr	SSK
JrJrJr  SSKJr  \	R                   " 5         \R"                  " S5      r " S S5      r " S	 S
\5      r " S S\5      rg)    N)ClassVarSequence   )OpenFileget_filesystem_classsplit_protocol)known_implementationsz
fsspec.guic                       \ rS rSr% Sr/ r\\\      \	S'   / r
\\\      \	S'   S rS rS\R                  S4S	 jrS
 rS rS r\R(                  S 5       rSS jrSS jrSrg)SigSlot   ar  Signal-slot mixin, for Panel event passing

Include this class in a widget manager's superclasses to be able to
register events and callbacks on Panel widgets managed by that class.

The method ``_register`` should be called as widgets are added, and external
code should call ``connect`` to associate callbacks.

By default, all signals emit a DEBUG logging statement.
signalsslotsc                 N    SU l         0 U l        0 U l        U R                  5         g )NF)_ignoring_events_sigs_map_setupselfs    B/var/www/auris/envauris/lib/python3.13/site-packages/fsspec/gui.py__init__SigSlot.__init__%   s!     %
	    c                 J    [         R                  R                  5       U l        g)z(Create GUI elements and register signalsN)pnpanePaneBasepanelr   s    r   r   SigSlot._setup+   s    WW%%'
r   valueFc           	         X R                   ;  a  [        SU 35      eU/ UUS.U R                  U'   SR                  Ub  [	        US[        U5      5      OSU/5      nX R                  U'   Ub%  UR                  R                  U R                  USS9  U(       a-  [        X5      (       a  U R                  U[	        X5      5        ggg)	ab  Watch the given attribute of a widget and assign it a named event

This is normally called at the time a widget is instantiated, in the
class which owns it.

Parameters
----------
widget : pn.layout.Panel or None
    Widget to watch. If None, an anonymous signal not associated with
    any widget.
name : str
    Name of this event
thing : str
    Attribute of the given widget to watch
log_level : int
    When the signal is triggered, a logging event of the given level
    will be fired in the dfviz logger.
auto : bool
    If True, automatically connects with a method in this class of the
    same name.
z(Attempt to assign an undeclared signal: )widget	callbacksthinglog-NnamenoneT)onlychanged)r   
ValueErrorr   joingetattrstrr   paramwatch_signalhasattrconnect)r   r"   r'   r$   	log_levelautowns          r   	_registerSigSlot._register0   s    0 ||#GvNOO	


4 XX8>8JF4PV
 		"LLt||UEGD''LLwt23 (4r   c                      U R                   R                  " U0 UD6$ ! [        [        4 a  n[	        S5      UeSnAff = f)z!Display in a notebook or a serverz)Panel does not seem to be set up properlyN)r   _repr_mimebundle_r*   AttributeErrorNotImplementedError)r   argskwargsexcs       r   r9   SigSlot._repr_mimebundle_\   sI    	:://@@@N+ 	%;	s    ?:?c                 F    U R                   U   S   R                  U5        g)an  Associate call back with given event

The callback must be a function which takes the "new" value of the
watched attribute as the only parameter. If the callback return False,
this cancels any further processing of the given event.

Alternatively, the callback can be a string, in which case it means
emitting the correspondingly-named event (i.e., connect to self)
r#   N)r   append)r   signalslots      r   r2   SigSlot.connecte   s      	

6;'..t4r   c                 8   U R                   (       d  SR                  UR                  R                  UR                  /5      nX R                  ;   aH  U R                  U   U R
                  ;   a*  U R                  U R                  U   UR                  5        gggg)zThis is called by a an action on a widget

Within an self.ignore_events context, nothing happens.

Tests can execute this method by directly changing the values of
widget components.
r&   N)r   r+   objr'   r   r   _emitnew)r   eventr5   s      r   r0   SigSlot._signalq   sn     $$599>>5::67BYY499R=DJJ#>

499R=%))4 $? %r   c              #   J   #    SU l          Sv   SU l         g! SU l         f = f7f)zZTemporarily turn off events processing in this instance

(does not propagate to children)
TNF)r   r   s    r   ignore_eventsSigSlot.ignore_events~   s'      !%	*$)D!ED!s   # #	 #Nc                 Z   [         R                  U R                  U   S   U SU 35        U R                  U   S    H;  n[        U[        5      (       a  U R                  U5        M+   U" U5      nUSL a    gM=     g! [         a"  n[         R                  SUU5         SnAMg  SnAff = f)zAn event happened, call its callbacks

This method can be used in tests to simulate message passing without
directly changing visual elements.

Calling of callbacks will halt whenever one returns False.
r%   z: r#   Fz6Exception (%s) while executing callback for signal: %sN)loggerr%   r   
isinstancer-   rG   	Exception	exception)r   sigr    callbackretes         r   rG   SigSlot._emit   s     	

4::c?5)cU"UG+<=

34H(C((

8$
"5/Ce| $ 5 ! $$P s   *A>>
B*B%%B*c                 :    U R                   R                  USS9  U $ )z<Open a new browser tab and display this instance's interfaceF)threadsverbose)r   show)r   rY   s     r   r[   SigSlot.show   s    

7r   )r   r   r   r   N)F)__name__
__module____qualname____firstlineno____doc__r   r   r   r-   __annotations__r   r   r   loggingDEBUGr6   r9   r2   r0   
contextlibcontextmanagerrL   rG   r[   __static_attributes__ r   r   r   r      s    	 (*GXhsm$)%'E8HSM"'( #*W]]*4X
55 	* 	*2r   r   c                   v   ^  \ rS rSrSrSS/r/ SQrU 4S jrS rU 4S jr	S	 r
S
 rS r\S 5       rS rSrU =r$ )SingleSelect   zCA multiselect which only allows you to select one item for an event	_selectedselected)set_optionsset_selectionaddclearselectc                 .   > Xl         [        TU ]	  5         g r]   )r=   superr   )r   r=   	__class__s     r   r   SingleSelect.__init__   s    r   c                     [         R                  R                  " S0 U R                  D6U l        U R                  U R                  SS5        U R                  S S5        U R                  SU R                  5        g )Nrm   r    rn   ri   )r   widgetsMultiSelectr=   r   r6   r2   
select_oner   s    r   r   SingleSelect._setup   sS    ZZ++:dkk:
tzz;8tZ([$//2r   c                 &   > [         TU ]  " U0 UD6  g r]   )ru   r0   )r   r<   r=   rv   s      r   r0   SingleSelect._signal   s    ((r   c                 2   U R                  5          U R                  R                  (       a  U R                  R                  S   /O/ nX R                  l        S S S 5        U R                  SU R                  R                  5        g ! , (       d  f       N5= f)Nrn   )rL   r   r    rG   )r   _vals      r   r{   SingleSelect.select_one   se    !,0JJ,<,<4::##B'("C"JJ " 	

:tzz//0 "!s   AB
Bc                 $    XR                   l        g r]   r   options)r   r   s     r   ro   SingleSelect.set_options   s    $

r   c                 &    / U R                   l        g r]   r   r   s    r   rr   SingleSelect.clear   s    

r   c                 .    U R                   R                  $ r]   r   r    r   s    r   r    SingleSelect.value   s    zzr   c                 (    U/U R                   l        g r]   r   )r   	selections     r   rp   SingleSelect.set_selection   s    %;

r   )r=   r   )r^   r_   r`   ra   rb   r   r   r   r   r0   r{   ro   rr   propertyr    rp   rh   __classcell__rv   s   @r   rk   rk      sQ    MJ'GFE3)1%     ' 'r   rk   c                      ^  \ rS rSrSr/ SQrSS/rSU 4S jjrS rSS jr	\
S	 5       r\
S
 5       r\
S 5       rSS jrS rS rS rS rS rS rSrU =r$ )FileSelector   zPanel-based graphical file selector widget

Instances of this widget are interactive and can be displayed in jupyter by having
them as the output of a cell,  or in a separate browser tab using ``.show()``.
)protocol_changedselection_changeddirectory_enteredhome_clicked
up_clicked
go_clickedfilters_changedset_filtersgo_homec                   > U(       a  [        U5      u  U l        nOS[        R                  " 5       sU l        nXl        [        U[        5      (       a  UO
[        U5      =(       d    SU l        X l        U=(       d    /  Vs/ s H  n[        R                  " U5      PM     snU l        SU l        [        TU ]9  5         gs  snf )a  

Parameters
----------
url : str (optional)
    Initial value of the URL to populate the dialog; should include protocol
filters : list(str) (optional)
    File endings to include in the listings. If not included, all files are
    allowed. Does not affect directories.
    If given, the endings will appear as checkboxes in the interface
ignore : list(str) (optional)
    Regex(s) of file basename patterns to ignore, e.g., "\." for typical
    hidden files on posix
kwargs : dict (optional)
    To pass to file system instance
filez{}N)r   init_protocolosgetcwdinit_urlrP   r-   init_kwargsfiltersrecompileignore_fsru   r   )r   urlr   r   r=   irv   s         r   r   FileSelector.__init__   s    " &4S&9#D&,biik#D&0&=&=F3v;WSW.4ll;lrzz!}l; <s    Cc           
         [         R                  R                  SU R                  SSSS9U l        [         R                  R                  [        [        5      U R                  SSS9U l	        [         R                  R                  S	U R                  SS
9U l        [         R                  R                  SSSS9U l        [        SS9U l        [         R                  R                  SSSSS9U l        [         R                  R                  SSSSS9U l        U R%                  U R                  SSS9  U R%                  U R                  SSSS9  U R%                  U R"                  SSSS9  U R%                  U R                   SSSS9  U R%                  S S5        U R                  R'                  SU R(                  5        U R%                  S S5        U R                  R*                  U l        U R.                  U l        [         R                  R3                  / / SSS S!9U l        U R%                  U R4                  S"SS9  [         R6                  " [         R8                  " U R                  U R                  5      [         R8                  " U R                   U R"                  U R                  U R                  U R4                  5      U R                  R:                  5      U l        U R=                  U R>                  5        U RA                  5         g )#Nr   endstretch_widthmax)r'   r    alignsizing_modewidth_policyprotocolcenter)r   r    r'   r   r=   )r'   r    r   u   ⇨-   )r'   r   width
   )sizeu   🏠(      )r'   r   heightr   u   ‹r   T)r4   r   clicksr   r   r   rn   r   Fmin)r    r   inliner   r   r   )!r   ry   	TextInputr   r   Selectsortedr	   r   r   r   r=   Buttongork   mainhomeupr6   r2   r   r    prev_protocolstorage_optionsprev_kwargsCheckBoxGroup
filter_selColumnRowr   r   r   r   r   s    r   r   FileSelector._setup   se   ::''--' ( 
 

))01$$	 * 
 jj**!1!1 + 
 **##e2#F b)	JJ%%6Be%T	**##b5#Qt}}&8tDtwwhTBtwwhTBtyy.(Ft01		*d&<&<=t01!]]00//**22be% 3 
 	t(9EYYFF4==$++.FF499dggtxx$//JIIOO


 	&r   c                     Xl         U(       a!  XR                  l        XR                  l        g / U R                  l        / U R                  l        g r]   )r   r   r   r    )r   r   s     r   r   FileSelector.set_filters+  s6    &-OO#$+OO!&(DOO#$&DOO!r   c                 h    [         R                  " U R                  R                  5      =(       d    0 $ )z'Value of the kwargs box as a dictionary)astliteral_evalr=   r    r   s    r   r   FileSelector.storage_options4  s$      1 128b8r   c                     U R                   c6  [        U R                  R                  5      nU" S0 U R                  D6U l         U R                   $ )zCurrent filesystem instanceri   )r   r   r   r    r   )r   clss     r   fsFileSelector.fs9  s@     88&t}}':':;C2T112DHxxr   c                     U R                   R                  (       a2  U R                  R                   SU R                   R                  S    3$ S$ )zURL of currently selected itemz://r   N)r   r    r   r   s    r   urlpathFileSelector.urlpathA  sG    
 yy ##$C		(:';<	
 	
r   c                 v    U R                   c  [        S5      e[        U R                  U R                   XU5      $ )a/  Create OpenFile instance for the currently selected item

For example, in a notebook you might do something like

.. code-block::

    [ ]: sel = FileSelector(); sel

    # user selects their file

    [ ]: with sel.open_file('rb') as f:
    ...      out = f.read()

Parameters
----------
mode: str (optional)
    Open mode for the file.
compression: str (optional)
    The interact with the file as compressed. Set to 'infer' to guess
    compression from the file ending
encoding: str (optional)
    If using text mode, use this encoding; defaults to UTF8.
zNo file selected)r   r*   r   r   )r   modecompressionencodings       r   	open_fileFileSelector.open_fileJ  s3    0 <</00t(KKr   c                 0    Xl         U R                  5         g r]   )r   r   )r   valuess     r   r   FileSelector.filters_changedf  s    r   c                     U R                   c  g U R                  R                  U R                   5      (       a4  U R                  R                  U R                   5      U R                  l        U R                  5         g r]   )r   r   isdir_strip_protocolr   r    r   r   r   s     r   r   FileSelector.selection_changedj  sN    <<77==&&!WW44T\\BDHHNr   c                   ^^ U R                   U R                  R                  :w  d  U R                  U R                  :w  a3  S U l        U R                  R                  U l         U R                  U l        [        U R                  R                  U R                  R                  SS9S S9nU V^s/ s H+  m[        U4S jU R                   5       5      (       a  M)  TPM-     nnU Vs0 s H-  nUS   S:X  d  M  SUS	   R                  S
S5      S   -   US	   _M/     nnU Vs0 s H-  nUS   S:X  d  M  SUS	   R                  S
S5      S   -   US	   _M/     nnU R                  (       aM  UR                  5        VV^s0 s H/  u  nm[        U4S jU R                   5       5      (       d  M,  UT_M1     nnnU R                  R!                  [#        S0 UDUD65        g s  snf s  snf s  snf s  snnf )NT)detailc                     U S   $ )Nr'   ri   )xs    r   <lambda>)FileSelector.go_clicked.<locals>.<lambda>z  s    1V9r   )keyc              3   p   >#    U  H+  oR                  TS    R                  SS5      S   5      v   M-     g7f)r'   /r   r   N)matchrsplit).0r   ls     r   	<genexpr>*FileSelector.go_clicked.<locals>.<genexpr>  s1     Rkwwqy//Q7;<<ks   36type	directoryu   📁 r'   r   r   r   r   u   📄 c              3   F   >#    U  H  nTR                  U5      v   M     g 7fr]   )endswith)r   extvs     r   r   r     s     ?,3qzz#,s   !ri   )r   r   r    r   r   r   r   r   lsr   anyr   r   r   itemsr   ro   dict)	r   r   listingr   ofoldersfileskr   s	      `    `r   r   FileSelector.go_clickedq  s   $--"5"554#7#77DH!%!4!4D#33DGGJJtxx~~dJ39L

 
RdkkRR  	 
 
yK' >Gai&&sA.r22AfI= 	 
 
yF" >Gai&&sA.r22AfI= 	 

 << "KKM)DAq?$,,?? 1)  
 			d6W667+




s0   0(GG(G"9#G""G'3#G'=+G,,G,c                 V    S U l         / U R                  l        SU R                  l        g )N )r   r   r   r   r    r   s     r   r   FileSelector.protocol_changed  s     		r   c                     U R                   U R                  l        U R                  U R                  l        U R
                  U R                  l        U R                  5         g r]   )r   r   r    r   r=   r   r   r   r   s     r   r   FileSelector.home_clicked  s?    "00 ,,r   c                     U R                   R                  U R                  R                  5      U R                  l        U R	                  5         g r]   )r   _parentr   r    r   r   s     r   r   FileSelector.up_clicked  s,    8r   )r   r   r   r   r   r   r   r   r   r=   r   r   r   r   r   r   r   )NNNNr]   )rbNN)r^   r_   r`   ra   rb   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rh   r   r   s   @r   r   r      s    G I&E8+Z' 9 9   
 
L8 8D
 r   r   )r   rf   rd   r   r   typingr   r   r   r   corer   r   r   registryr	   	extension	getLoggerrO   r   rk   r   ri   r   r   <module>r     sd    
   	 	 %  @ @ + 			<	(U Up$'7 $'NP7 Pr   