
    ԋg                     H   d dl mZ d dlZd dlZd dlZd dlZd dlZd dl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Zd dlmZ d dlmZ d d	lmZ erd d
lmZ  ej6                  e      Zd ZddZdddZ ddZ! G d d      Z" G d de
e"         Z#dd	 	 	 	 	 	 	 	 	 ddZ$y)    )annotationsN)IterableSequence)import_module)
ModuleType)TYPE_CHECKINGcast)tmpfile)Server)import_file)Clientc           
        |s| j                   j                  dd      s|S |r| j                   j                  dd      sw|D cg c]  }|j                  d      s| }}|D ]  }t        j                  |       t        j
                  dt        |      dkD  rdnddd	j                  |      d
      | j                   j                  d      D ci c]  }t        |      s|t        |       }}|j                         D cg c]4  }t        t        |dd      t        j                        rt        |dd      6 }	}t        |	      dkD  r/t        j
                  dt        |j                               z        |r|	st        j
                  d      |	s|S |	d   }
t        j                   |
d      } |
j#                  | t        |             |S c c}w c c}w c c}w )zKClick option callback providing validation of preload subcommand arguments.preloadN-zGot unexpected extra argument   s z: ( )
dask_setupz<Multiple --preload modules with click-configurable setup: %szPUnknown argument specified: %r Was click-configurable --preload target provided?r   Fallow_extra_args)paramsget
startswithclickNoSuchOption
UsageErrorlenjoinis_webaddress_import_modulevalues
isinstancegetattrCommandlistkeysContext
parse_args)ctxparamvaluevunexpected_argsanamepreload_modulesmpreload_commandspreload_commands              6lib/python3.12/site-packages/distributed/preloading.pyvalidate_preload_argvr7      s   	48SZZ^^It4&+Aeq||C/@1eA A$$Q'' !%j1ns",chhuo?
 	
 JJNN9--DT" 	nT""-   !''))Agat4emmD 	<&)   q J?'')*+
 	

 %^
 	
 *1-
--%
@CsDK0LM Bs   GGG9Gc                $    | j                  d      S )N)zhttp://zhttps://)r   )r   s    r6   r!   r!   M   s    <</00    c                   | j                  d      r|t        j                  j                  |       }t        j                  j	                  ||      }t        j                  j                  |      r,t        j                  | |      st        j                  d|       t        j                  | |       t        |      d   }nt        |       d   }nd| vr1| t        j                  vrt        |        t        j                  |    }nJt!        d      5 }t#        |d      5 }|j%                  |        ddd       t'        ||	      cddd       S t        j)                  d
|        S # 1 sw Y   7xY w# 1 sw Y   -xY w)a  Imports module and extract preload interface functions.

    Import modules specified by name and extract 'dask_setup'
    and 'dask_teardown' if present.

    Parameters
    ----------
    name : str
        Module name, file path, or text of module or script
    file_dir : string
        Path of a directory where files should be copied

    Returns
    -------
    Nest dict of names to extracted module interface components if present
    in imported module.
    z.pyNzFile name collision: %sr   r   )	extensionw)modefile_dirzImport preload module: %s)endswithospathbasenamer    existsfilecmpcmploggererrorshutilcopyr   sysmodulesr   r
   openwriter"   info)r1   r?   rC   copy_dstmodulefnfs          r6   r"   r"   Q   s"   $ }}Uww''-Hww||Hh7Hww~~h'{{42LL!:HEKKh' *1-F &q)F	Ds{{"$T" u%bs#q $!"x8 &%
 KK+T2M $# &%s$   E5!E)3E5)E2	.E55E>c           	     t   t         j                  d|        t        |       sJ dd l}|j	                         5 }|j                  d| |j                  j                  g dd            }|j                  }d d d        t        | d      }t        |       }t        ||j                         |S # 1 sw Y   9xY w)	NzDownloading preload at %sr   GET)i  i  i  i  g?)status_forcelistbackoff_factor)methodurlretriesexec)rG   rO   r!   urllib3PoolManagerrequestutilRetrydatacompiler   r[   __dict__)rY   r\   httpresponsesourcecompiledrQ   s          r6   _download_modulerh      s    
KK+S1 				$<<LL&&!5" '    
  
 vsF+H_F6??#M 
	s   >B..B7c                  h    e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   	 	 	 	 	 	 	 	 ddZd Zd Zy)Preloada  
    Manage state for setup/teardown of a preload module

    Parameters
    ----------
    dask_server: dask.distributed.Server
        The Worker or Scheduler
    name: str
        module name, file name, or web address to load
    argv: [str]
        List of string arguments passed to click-configurable `dask_setup`.
    file_dir: str
        Path of a directory where files should be copied
    Server | Clientdask_objectstrr1   	list[str]argv
str | Noner?   r   rQ   c                    || _         || _        t        |      | _        || _        t
        j                  d| j                         t        |      rt        |      | _	        y t        ||      | _	        y )NzCreating preload: %s)rl   r1   r'   ro   r?   rG   rO   r!   rh   rQ   r"   )selfrl   r1   ro   r?   s        r6   __init__zPreload.__init__   sZ     '	J	 *DII6*40DK(x8DKr9   c                  K   t        | j                  dd      }|rt        j                  d| j                         t        |t        j                        rs|j                  d| j                  d      } |j                  | j                  g|j                  i |j                  }t        j                  |      r| d{    yy || j                        }t        j                  |      r| d{    yyy7 :7 	w)z-Run when the server finishes its start methodr   NzRun preload setup: %sFr   )r%   rQ   rG   rO   r1   r$   r   r&   make_contextro   callbackrl   argsr   inspectisawaitable)rr   r   contextresultfutures        r6   startzPreload.start   s     T[[,=
KK/;*emm4$11 $))e 2  -,,$$'.||7>~~ &&v. LL / $D$4$45&&v. LL /  ! !s$   C DC=2D5C?6D?Dc                   K   t        | j                  dd      }|rSt        j                  d| j                          || j
                        }t        j                  |      r| d{    yyy7 w)z+Run when the server starts its close methoddask_teardownNzRun preload teardown: %s)r%   rQ   rG   rO   r1   rl   rx   ry   )rr   r   r|   s      r6   teardownzPreload.teardown   sb     _dCKK2DII>"4#3#34F""6* +  s   A&A2(A0)A2N)rl   rk   r1   rm   ro   zIterable[str]r?   rp   )__name__
__module____qualname____doc____annotations__rs   r}   r    r9   r6   rj   rj      sZ     ! 
I
O9$9 9 	9
 9&!(r9   rj   c                  >    e Zd ZU ded<   d	dZd
dZd
dZd ZddZy)PreloadManagerlist[Preload]	_preloadsc                    || _         y Nr   )rr   preloadss     r6   rs   zPreloadManager.__init__   s	    !r9   c                   K   | j                   D ]  }	 |j                          d {     y 7 # t        $ r# t        j	                  d|j
                         Y Lw xY ww)NzFailed to start preload: %s)r   r}   	ExceptionrG   	exceptionr1   rr   r   s     r6   r}   zPreloadManager.start   sQ     ~~GNmmo%% &% N  !>MNs1   A0.0A0)AAAAc                   K   t        | j                        D ]  }	 |j                          d {     y 7 # t        $ r# t        j                  d|j                         Y Lw xY ww)NzFailed to tear down preload: %s)reversedr   r   r   rG   r   r1   r   s     r6   r   zPreloadManager.teardown   sY     /GR&&((( 0( R  !BGLLQRs1   A(979A(9)A%"A($A%%A(c                     | j                   |   S r   r   )rr   indexs     r6   __getitem__zPreloadManager.__getitem__   s    ~~e$$r9   c                ,    t        | j                        S r   )r   r   )rr   s    r6   __len__zPreloadManager.__len__   s    4>>""r9   N)r   r   )returnNone)r   int)	r   r   r   r   rs   r}   r   r   r   r   r9   r6   r   r      s#    "NR%#r9   r   r>   c                  t        |t              r|g}|r-t        |d   t              rt        d|      gt        |      z  }n|st        dg       gt        |      z  }t        |      t        |      k7  r#t	        dt        |       dt        |             t        t        ||      D cg c]  \  }}t        | |||       c}}      S c c}}w )Nr   rn   z1preload and preload_argv have mismatched lengths z != )r$   rm   r	   r   
ValueErrorr   ziprj   )dask_serverr   preload_argvr?   pro   s         r6   process_preloadsr      s     '3)
<?C8[,783w<G["-.W=
7|s<((?7|nD\!2 35
 	

  w5	
54 KD(35	
 	
s   ,C
)r   rm   r   boolr   )r1   rm   r?   rp   r   r   )rY   rm   r   r   )
r   rk   r   zstr | list[str]r   zlist[str] | list[list[str]]r?   rp   r   r   )%
__future__r   rE   rx   loggingrA   rI   rK   collections.abcr   r   	importlibr   typesr   typingr   r	   r   
dask.utilsr
   distributed.corer   distributed.utilsr   distributed.clientr   	getLoggerr   rG   r7   r!   r"   rh   rj   r   r   r   r9   r6   <module>r      s    "    	  
 . #  &   # ))			8	$.b1-`2D DN#Xg& #@    .
  r9   