
    Pi                        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	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Zd dlZd dlZd dlmZ d dlmZ d dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)Z)d dl*Z*d dl+m,Z- d dl+m.Z/ d dl+m0Z1 d d	l2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>  e?            @                     eAd d
                    @                     eAdd                    @                     eAdd                    ZBdZCdZDd ZEdZFdZGdZHdZI ejJ        dd          dk    ZKddZL G d d          ZMdd ZNdd#ZOdd$ZPdd&ZQdd'ZRdd0ZSdd5ZTdd8ZUdd:ZVdd>ZWdddBZXddDZY G dE dFe!          ZZ G dG dHe!          Z[ G dI dJe!          Z\ddMZ]ddRZ^ddTZ_ddUZ`ddVZadddXZbdd[Zcdd\Zddd_ZeddaZfddfZgddiZh G dj dkeji                  ZjeNe4e5eCeDeEeFdeGeHdldmddmeKeIddldndoddZkdS )    )annotationsN)partial)
ModuleType)AnyBinaryIOCallableIteratorListLiteral
NamedTupleOptionalSequenceTextIOTupleUnioncastoverload)_azure)_common)_gcp)
CHUNK_SIZE DEFAULT_CONNECTION_POOL_MAX_SIZE!DEFAULT_MAX_CONNECTION_POOL_COUNTConfigDirEntryErrorRemoteOrLocalPathRequest RestartableStreamingWriteFailureStatget_log_threshold_for_errorpath_to_str	             i      
      BLOBFILE_USE_BLIND_WRITES01fnCallable[..., object]argsr   c                     | |  d S N )r-   r/   s     e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/blobfile/_context.py_execute_fn_and_ignore_resultr4   J   s    BIIII    c                  \   e Zd ZdVdZ	 	 	 	 	 dWdXdZdYdZdZdZd[d\dZ	 d]d^dZdYdZ	d_d`d Z
d_dad!Zdbd#Zdbd$Zdbd%Zdcd'Z	 ddded+Z	 	 dfdgd,Z	 	 dhdid3ZdZd4Zdjd7Zdkd9ZdZd:Zdld=ZdZd>Zdmd@ZdndBZdodDZe	 	 	 	 	 dpdqdO            Ze	 	 	 	 	 	 drdsdR            Z	 	 	 	 	 	 dtdudUZdS )vContextconfr   c                    || _         d S r1   )_conf)selfr8   s     r3   __init__zContext.__init__O   s    


r5   FNsrcr   dst	overwriteboolparallelparallel_executor%Optional[concurrent.futures.Executor]
return_md5dst_versionOptional[str]returnc                	   t          |          }t          |          }t          |          rt          d| d          t          |          rt          d| d          |s(|                     |          rt	          d| d          |t          |          sJ d| d            |rd }t          |          st          |          rt          |          rt          }t          |          r*t          |          rt          t          j        |          }t          |          rt          |          rt          j        }t          |          r`t          |          rQt          j        |          \  }	}
}
t          j        |          \  }}
}
|	|k    rt          t          j        |          }||jt          j                            t%          j        | j        j                            5 } || j        ||||	          cd d d            S # 1 swxY w Y   n || j        ||||	          S t          |          r,t          |          rt          j        | j        |||
          S t          |          r<t          |          r-|J d| d            t          j        | j        |||
          S t/          t1          j                              D ]\  }}	 |                     |dd          5 }|                     |dd|          5 }t7          j                    }	 |                    t<                    }|dk    rn-|r|                    |           |                     |           N|r.|!                                cd d d            cd d d            c S 	 d d d            d d d             d S # 1 swxY w Y   d d d            n# 1 swxY w Y   
# tD          $ r}| j        j#        || j        j#        k    r |tI          | j        tK          |                    k    r(| j        &                    d| d| d| d|dd	           tO          j(        |           Y d }~d }~ww xY wd S )NIs a directory: ''zDestination 'z*' already exists and overwrite is disabledz8Destination version was specified, but destination path z! does not support a version check)rE   
mp_context)rD   )r=   r>   rD   rbT)	streamingwb)rN   versionr5   zerror z% when executing a streaming write to z	 attempt z, sleeping for z.1fz seconds before retrying))r"   _guess_isdirIsADirectoryErrorexistsFileExistsError_is_azure_path_is_gcp_path_is_local_path_parallel_downloadr   azureparallel_uploadgcp
split_pathparallel_remote_copy
concurrentfuturesProcessPoolExecutormpget_contextr:   multiprocessing_start_methodremote_copy	enumeratecommonexponential_sleep_generatorBlobFilehashlibmd5readr   updatewrite	hexdigestr   retry_limitr!   strlog_callbacktimesleep)r;   r=   r>   r?   rA   rB   rD   rE   copy_fnsrc_account_dst_accountexecutorattemptbackoffsrc_fdst_fmblockerrs                       r3   copyzContext.copyR   s{    ##  	@#$>$>$>$>??? 	@#$>$>$>$>??? 	{{3 %SCSSS   "!  q qp#pppq q   	cGs## -|C'8'8 -nS>Q>Q -,c"" R~c':': R!%"7[QQQc"" .|C'8'8 .-c"" [~c':': [$)$4S$9$9!Q$)$4S$9$9!Q+-- &e&@kZZZG"$,#+??#%>$*2Y#Z#Z @   ^!&wtz8S#R\]]]^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
 #74:/@#sWabbbb  	Xc!2!2 	X?4:3CJWWWW# 	Z>##6#6 	Z ##p#ppp $##$TZScjYYYY )&*L*N*N O O 	$ 	$GW$]]3]== { IV I I A+ %

: 6 6 C<<!% ,HHUOOOE***+ "  {{}}                                                       4 $ $ $ :)5'TZE[:[:[9$*c#hhOOOOJ++ W  W  W3  W  WY`  W  Wqx  W  W  W  W   
7########$#	$ 	$s   7HH H'O*?OA8OOO*,O-O8O*O

OO
OO*O!	!O*$O!	%O**
Q>4A?Q99Q>pathc                   t          |          }t          |          rt          j                            |          S t          |          r3t          j        | j        |          }|dS | 	                    |          S t          |          r3t          j        | j        |          }|dS | 	                    |          S t          d| d          )NTUnrecognized path: 'rJ   )r"   rW   osr   rS   rV   r[   
maybe_statr:   isdirrU   rY   r   )r;   r   sts      r3   rS   zContext.exists   s    4  $ 	87>>$'''$ 	8
D11B~t::d###D!! 	8!$*d33B~t::d###6t666777r5   rp   c                d   t          |          }t          |          r2t          j        |          \  }}|                    d          d         S t          |          r3t          j        |          \  }}}|                    d          d         S t          j        	                    |          S N/)
r"   rV   r[   r\   splitrU   rY   r   r   basename)r;   r   rv   objs       r3   r   zContext.basename   s    4   	*^D))FAs99S>>"%%D!! 	*(..IAq#99S>>"%%7##D)))r5   patternIterator[str]c              #     K   t          |          r2d|v sd|v sd|v rt          d          t          |          E d {V  d S |                     ||          D ]}|j        V  d S )N?[]'Advanced glob queries are not supported)r   rA   )rW   r   _local_globscanglobr   )r;   r   rA   entrys       r3   globzContext.glob   s      '"" 		! g~~3'>>EFFF"7+++++++++++wJJ ! !j    ! !r5   r   shard_prefix_lengthintIterator[DirEntry]c              #  P	  K   d|v sd|v sd|v rt          d          t          |          rt          |          D ]~}t          j        |          }t          j        |j                  }t          || 	                    |          || |rd n"t          |j        |j        |j        d d                     V  d S t          |          st          |          rd|vrt!          | j        |          }||V  d S t          |          r@t%          j        |          \  }}	d|v rt          d          t%          j        |d	          }
nKt+          j        |          \  }}}	d|v sd|v rt          d
          t+          j        | j        ||d	          }
|dk    rt-          d	t/          |	                    g}n|s
J d            g }d t1          d          D             }|	                    dd          \  }}t1          d|dz             D ]}}t5          j        ||          D ]d}d	}|D ]}|t9          |          z  }||k    }|r||z   }n||z   dz   |z   }|                    t-          d	t/          |                               e~|rKt=          j        | j        j                   }|!                                }|D ]}|"                    |           tG          |          }|!                                }d}|$                    tJ          | j        |
||f          5  ||k     r|&                                }tO          |tP                    r
|j)        V  nZtO          |t,                    r|"                    |           |dz  }n*tO          |tT                    r|dz  }nt          d          ||k     d d d            n# 1 swxY w Y   d S d S tW          j,                    }|D ]}|                    |           tG          |          dk    rw|-                                }t]          | j        |
|          D ]6}tO          |tP                    r
|j)        V  !|                    |           7tG          |          dk    ud S d S t          d| d          )Nr   r   r   r   sizemtimectimerj   rP   )r   nameis_diris_filestat*z'Wildcards cannot be used in bucket name z0Wildcards cannot be used in account or containerr   zQYou probably want to use parallel=True if you are setting shard_prefix_length > 0c           	         g | ]<}|t                               t          d           t          d          g          v:|=S )r   r   )INVALID_CHARSunionord.0is     r3   
<listcomp>z$Context.scanglob.<locals>.<listcomp>  sL       Qm6I6I3s88UXY\U]U]J^6_6_-_-_A-_-_-_r5         )maxsplitrepeatinitializerinitargszInvalid result)r8   roottUnrecognized path 'rJ   )/r   rW   r   r   r   stat_moduleS_ISDIRst_moder   r   r    st_sizest_mtimest_ctimerV   rU   
_get_entryr:   r[   r\   combine_pathrY   	_GlobTask_split_pathranger   	itertoolsproductchrappendra   rb   rc   QueueputlenPool_glob_workerget
isinstance
_GlobEntryr   _GlobTaskCompletecollectionsdequepopleft_process_glob_task)r;   r   rA   r   filepathsr   r   bucketblob_prefixr   account	containerinitial_tasksvalid_charspattern_prefixpattern_suffixr   charsprefixcexactpatmp_ctxtasksr   tasks_enqueuedresults
tasks_donerdqs                                  r3   r   zContext.scanglob   s      '>>SG^^sg~~ABBB'"" e	:'00  
 GH%%$,QY77!x00! &JYaj
PT^b  
 
 
 
 
 
 
 $ '"" R	:nW&=&= R	:'!!"4:w77$KKKG$$ 	N&)nW&=&=#&== IJJJ'33272B72K2K/K'>>SI%5%5 RSSS)$*gy"MM"a''!*2{;/G/G!H!H I g gfg g " $Szz   2=1B1B3QR1B1S1S.#A':Q'>?? N NF!*!2;v!N!N!N N N!#!& - -A"c!ff,FF !'*= =  Q"06"9CC"06"9C"?."PC%,,Yr;s;K;K-L-LMMMMN"  !)
(OPP& ! !AIIaLLLL!$]!3!3 ,,..
[[ ,
D%QX7Y !   : : %~55#KKMM%a44 :"#'MMMM'955 :!IIaLLL*a/NN'+<== :&!OJJ"'(8"9"99 %~55: : : : : : : : : : : : : : : : : : : 4?3D3F3F& ! !AIIaLLLL"ggkk

A/TZdaPPP ) )%a44 )"#'MMMMIIaLLLL "ggkkkkkk 8g888999s   'BOOOc                F   t          |          }t          |          rt          j                            |          S t          |          rt          j        | j        |          S t          |          rt          j        | j        |          S t          d| d          Nr   rJ   )r"   rW   r   r   r   rV   r[   r:   rU   rY   r   r;   r   s     r3   r   zContext.isdirL  s    4  $ 	87==&&&$ 	89TZ...D!! 	8;tz40006t666777r5   c              #  n   K   t          |          }|                     ||          D ]}|j        V  d S )N)r   )r"   scandirr   )r;   r   r   r   s       r3   listdirzContext.listdirW  sN      4  \\$<O\PP 	 	E*	 	r5   c              #  ,  K   t          |          }t          |          st          |          r|                    d          s|dz  }|                     |          st          d| d          |                     |          st          d| d          t          |          rt          j
        |          D ]}|                                r>t          |j        t          j                            |j                  ddd           V  T|                                }t          |j        t          j                            |j                  ddt#          |j        |j        |j        d d                     V  d S t          |          st          |          r^|d	k    rt+          | j        |d
          E d {V  d S t/          j        | j        j                  }|                                }|                                }d	}d t7          d          D             }	t7          d|dz             D ]W}
t9          j        |	|
          D ]>}d}|D ]}|t=          |          z  }|
|k    }|                    |||f           |dz  }?Xd	}|                     tB          | j        ||f          5  ||k     r&|"                                }||dz  }"|V  ||k     &d d d            d S # 1 swxY w Y   d S tG          d| d          )Nr   ,The system cannot find the path specified: 'rJ    The directory name is invalid: 'TF)r   r   r   r   r   r   r   )r8   r   exclude_prefixc                J    g | ] }|t           v|t          d           k    |!S r   )r   r   r   s     r3   r   z#Context.scandir.<locals>.<listcomp>  s7    aaaQ8N8NSTX[\_X`X`S`S`qS`S`S`r5   r   r   r   r   r   r   )$r"   rV   rU   endswithrS   FileNotFoundErrorr   NotADirectoryErrorrW   r   r   r   r   r   r   abspathr   r    r   r   r   _list_blobs_in_dirr:   ra   rb   rc   r   r   r   r   r   r   r   _sharded_listdir_workerr   r   )r;   r   r   der   r   prefixesitemsr   r   r   r   r   r   r   r   r   s                    r3   r   zContext.scandir\  s     4   	."6"6 	c@R@R 	CKD{{4   	\#$ZSW$Z$Z$Z[[[zz$ 	Q$%O%O%O%OPPP$ =	8j&&  99;; "WW__RW55# %!       		A"WW__RW55$ $!!""#*"#* $$(         0 $ $	8>$#7#7 $	8"a''-4:d[_````````````
(OPP!<<>>!"aa%**aaa#A':Q'>?? , ,F!*!2;v!N!N!N , ,!#!& - -A"c!ff,FF !'*= = dFE%:;;;&!+, 
[[ 74:xY^B_ !   $ $ %~55 %		 =&!OJ$# %~55$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 6t666777s   <-K66K:=K:Nonec                @   t          |          }t          |          rt          j        |d           d S t	          |          rt          j        | j        |           d S t          |          rt          j        | j        |           d S t          d| d          )NTexist_okr   rJ   )r"   rW   r   makedirsrV   r[   	mkdirfiler:   rU   rY   r   r   s     r3   r  zContext.makedirs  s    4  $ 	8Kt,,,,,,$ 	8M$*d+++++D!! 	8ODJ-----6t666777r5   c                0   t          |          }t          |          rt          j        |           d S t	          |          rY|                    d          rt          d| d          t          j        | j        |          }|st          d| d          d S t          |          rY|                    d          rt          d| d          t          j        | j        |          }|st          d| d          d S t          d| d          )Nr   rI   rJ   r   r   )r"   rW   r   removerV   r   rR   r[   r:   r   rU   rY   r   )r;   r   oks      r3   r	  zContext.remove  sP   4  $ 	8IdOOOOO$ 	8}}S!! E'(CD(C(C(CDDDDJ--B `'(^W[(^(^(^___` `D!! 	8}}S!! E'(CD(C(C(CDDDdj$//B `'(^W[(^(^(^___` ` 6t666777r5   c                
   t          |          }t          |          rt          j        |           d S |                    d          s|dz  }t          |          rt          j        |          \  }}n;t          |          rt          j        |          \  }}}nt          d| d          |dk    rt          d| d          |                     |          }	 t          |           t          d| d          # t          $ r Y d S t          $ r Y nw xY wt          |          rZt          j        |          \  }}t!          t          j        d||          d	d
          }t          j        | j        |           d S t          |          r\t          j        |          \  }}}t!          t          j        |d||          d	d          }t          j        | j        |           d S t          d| d          )Nr   r   rJ   r   zCannot delete bucket: 'zThe directory is not empty: '!/storage/v1/b/{bucket}/o/{object}r   objectDELETE)   urlmethodsuccess_codes/{container}/{blob}r   blob)   )r"   rW   r   rmdirr   rV   r[   r\   rU   rY   r   r   nextOSErrorr   StopIterationr   	build_urlexecute_api_requestr:   )	r;   r   rv   r  itr   reqr   r   s	            r3   r  zContext.rmdir  sU   4  $ 	HTNNNF }}S!! 	CKD 	8nT**GAttD!! 	8)$//JAq$$6t6667772::9$999:::\\$
	CHHH A$AAABBB ! 	 	 	FF 	 	 	D	  	8>$//LFDM"Ef]abbb$  C
 #DJ44444D!! 		8','7'='=$GYOG-Bi^bccc$  C
 %dj#666666t666777s    D 
D	DDr    c                   t          |          }t          |          r7t          j        |          }t	          |j        |j        |j        d d           S t          |          r1t          j
        | j        |          }|t          d| d          |S t          |          r1t          j
        | j        |          }|t          d| d          |S t          d| d          )Nr   No such file: 'rJ   r   )r"   rW   r   r   r    r   r   r   rV   r[   r   r:   r   rU   rY   r   )r;   r   r   r   s       r3   r   zContext.stat  s    4  $ 	8AQYaj
PT^bcccc$ 	8
D11Bz'(A$(A(A(ABBBID!! 	8!$*d33Bz'(A$(A(A(ABBBI6t666777r5   r   floatrP   c                P   t          |          }t          |          r|J t          j        |||f           dS t	          |          rt          j        | j        |||          S t          |          rt          j        | j        |||          S t          d| d          )N)timesT)r   r   rP   r   rJ   )r"   rW   r   utimerV   r[   	set_mtimer:   rU   rY   r   )r;   r   r   rP   s       r3   r'  zContext.set_mtime  s     4  $ 		8???HT%00004$ 	8=$eWUUUUD!! 	8?4:DwWWWW6t666777r5   c                    t                                                   st          d d          t                    rt	          j                   d S t                    st                    re                    d          sdz  t                    r fd}t          j
        }n5t                    r fd}t          j
        }nt          d d          |r|?t          j                            t!          j         j        j                            }|}n|}t)          j                    }g }|5   |            D ]9}	|                    t.          | j        |	          }
|                    |
           :	 d d d            n# 1 swxY w Y   |D ]}
|
                                 d S  |            D ]}	 | j        |	           d S t          d d          )Nr   rJ   r   c               3  P  K   t          j                  \  } }t          j        j                  D ]p}t	          |          }t          j        |          \  }}|| k    r|                    |          sJ t          t          j        d| |          dd          }|V  qd S )Nr  r  r  )r    r  )r[   r\   
list_blobsr:   _get_slash_path
startswithr   r  )	r   r  r   entry_slash_pathentry_bucket
entry_blobr   r   r;   s	          r3   request_generatorz)Context.rmtree.<locals>.request_generator.  s      #&>$#7#7LFD!$
D!A!A " "+:5+A+A(36>BR3S3S0j+v55*:O:OPT:U:U55U% # C'-'1! ! !
 $, +5
 
 
 "				" "r5   c            	   3  b  K   t          j        	          \  } }}t          j        
j        	          D ]x}t	          |          }t          j        |          \  }}}|| k    r||k    r|                    |          sJ t          t          j        | d||          dd          }|V  yd S )Nr  r  r  )r  r*  r  )rY   r\   r+  r:   r,  r-  r   r  )r   r   r  r   r.  entry_accountentry_containerr0  r   r   r;   s            r3   r1  z)Context.rmtree.<locals>.request_generatorE  s      /4/?/E/E,GY!&!1$*d!C!C " "+:5+A+A(EJEU,F FB
 *W44 /9 < < * 5 5d ; ; != << & % ')>)Zd! ! ! $, +5   "				'" "r5   r   rK   )r"   r   r   rW   shutilrmtreerV   rU   r   r[   r  rY   r   r^   r_   r`   ra   rb   r:   rc   
contextlibnullcontextsubmitr4   r   result)r;   r   rA   rB   r1  r-   rx   contextr_   r   fs   ``         r3   r6  zContext.rmtree  s    4  zz$ 	Q$%O%O%O%OPPP$ O	8M$$ M	8>$#7#7 M	8==%% D!! 2<" " " " " "& ,%% <" " " " " ". .:4:::;;; ($,)1EE#%>$*2Y#Z#Z  F    H 'GG0H(466G * *0022 * *$OO,I2tz[^__q))))** * * * * * * * * * * * * * * !  AHHJJJJ  -,.. ( (CBtz3''''( ( 6t666777s   AFF!$F!Ttoptopdownonerror#Optional[Callable[[OSError], None]]2Iterator[Tuple[str, Sequence[str], Sequence[str]]]c              #     K   t          |          }                     |          sd S t          |          rt          j                            |          }t          j        |||          D ]g\  }}}t          |t                    sJ |	                    t          j
                  r
|d d         }|t          |          t          |          fV  hd S t          |          st          |          rt           j        |          }|	                    d          s|dz  }|r{t!          j                    }|                    |           t'          |          dk    r=|                                	                    d          sJ t          |          rt+          j         j        d          }n?t          |          rt/          j         j        d          }nt1          d| d          g }g }|D ]T}	t3          |	          }
|
k    r|	j        r|                    |	j                   :|                    |	j                   Ut9                    ||fV  |                     fd|D                        t'          |          dk    ;d S d S t          |          rt+          j         j        |          }n=t          |          rt/          j         j        |          }nt1          d| d          g g g}g g}|D ]}	t3          |	          }||k    r|t'          |          d          }|                    d          }|d d         }|k    r|d t'                             k    rp|d                              z   |                                 |                                 fV                                    |d t'                             k    p|k    ru|t'                             }                    |           |                    g            |d                             |           |                    g            |k    u|	j!        r |d                             |	j                   t'                    dk    rh|d                              z   |                                 |                                 fV                                    t'                    dk    ht9          |          |                                 |                                 fV  t'          |          dk    rt'          |          dk    sJ d S t1          d| d          )	N)r=  r>  r?  r   r   r   	delimiterr   rJ   c              3  J   K   | ]}                     |          d z   V  dS )r   N)join)r   dirnamecurr;   s     r3   	<genexpr>zContext.walk.<locals>.<genexpr>  s6      TTdiiW55;TTTTTTr5   )"r"   r   rW   r   r   normpathwalkr   rp   r   sepsortedrV   rU   _normalize_pathr:   r   r   r   r   r   r[   r+  rY   r   r,  r   r   _strip_slashextendr   rF  popr   )r;   r=  r>  r?  r   dirnames	filenamesr   r  r   
entry_pathdirnames_stackfilenames_stackr.  relpathpartsdirpathrG  rH  s   `                 @r3   rK  zContext.walkw  s      #zz# 	F# J	7'""3''C-/WgW^-_-_-_ B B)h	!$,,,,,==(( %9DVH--vi/@/@AAAAA	B B
 # C	7."5"5 C	7!$*c22C<<$$ s
 =N-8->-@-@		#"ggkk**,,C<<,,,,,#C(( C ^DJsKKK',, C"-dj#MMM#$A3$A$A$ABBB!H "I!# 9 9%4U%;%;
%,,$ < 9$OOEJ7777%,,UZ8888',,h	BBBBIITTTTT8TTTTTT) "ggkkkkkk,  $$ ?
C88BB#C(( ?)$*c::BB =s = = =>>>"$#%$ ? ?E'6u'='=$'3.. .s3xxzz:G#MM#..E#CRCjG#~~!WZs3xxZ%888#&##68J8J8L8LoNaNaNcNc"ddddGGIII "WZs3xxZ%888 "Wnn&-c#hh&7GJJw///+222666*2.55g>>>*11"555 "Wnn } ?'+225:>>>#hhll#.0B0B0D0DoFYFYF[F[\\\\GGIII #hhll $C((.*<*<*>*>@S@S@U@UVVVV>**a//C4H4HA4M4M4MM4M4M5s555666r5   c                   t          |          }t          |          rt          j        | j        |          S t          |          rt          j        | j        |          S t          j                            |          S r1   )	r"   rV   r[   rG  r:   rU   rY   r   r   r   s     r3   rG  zContext.dirname  sk    4   	);tz4000D!! 	)=T2227??4(((r5   ar/   c                ^    t          |          }|}|D ]}t          | j        ||          }|S r1   )r"   _join2r:   )r;   r[  r/   outbs        r3   rF  zContext.join  s;    NN 	- 	-AS!,,CC
r5   Tuple[str, Optional[float]]c                   t          |          }t          |          rt          j        | j        |          S t          |          rt          j        | j        |          S t          |          rd| d fS t          d| d          )Nzfile://r   rJ   )	r"   rV   r[   get_urlr:   rU   rY   rW   r   r   s     r3   rb  zContext.get_url  s    4   	8;tz4000D!! 	8=T222D!! 	8#T##T))6t666777r5   c                   t          |          }t          |          rt          j        | j        |          }|t          d| d          |j        }||S |                     |d          5 }t          j	        |          
                                }d d d            n# 1 swxY w Y   |j        J t          j        | j        ||j        |           |S t          |          rt          j        | j        |          }|t          d| d          |j        }|~|                     |d          5 }t          j	        |          
                                }d d d            n# 1 swxY w Y   |j        J t          j        | j        ||j        |           |S |                     |d          5 }t          j	        |          
                                cd d d            S # 1 swxY w Y   d S )Nr"  rJ   rM   )r"   rV   r[   r   r:   r   rj   rh   rf   	block_md5hexrP   maybe_update_md5rU   rY   )r;   r   r   hr<  r:  s         r3   rj   zContext.md5  s   4   	1
D11Bz'(A$(A(A(ABBBA} tT** 3a)!,,00223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 :))) T2:vFFFMD!! 	1!$*d33Bz'(A$(A(A(ABBBAy]]4.. 2!(++//11A2 2 2 2 2 2 2 2 2 2 2 2 2 2 2z---&tz4QGGGHtT** 1a'**..001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s6   /'B""B&)B&6'E))E-0E-6&G))G-0G-fileTextIO | BinaryIOc                   |}t          |t          j                  r|j        }t          |t          j        t          j        f          r|j        }t          |t          j        t          j	        f          st          d          |j        S )Nz7File was not an Azure BlobFile opened in streaming mode)r   ioTextIOWrapperbufferBufferedReaderBufferedWriterrawrY   StreamingReadFileStreamingWriteFile
ValueError_version)r;   rh  actuals      r3   last_version_seenzContext.last_version_seen  s|    fb.// 	#]Ffr0"2CDEE 	 ZF&5#:E<T"UVV 	XVWWWr5   c                    |                      |d          5 }|                                cd d d            S # 1 swxY w Y   d S )Nr   rh   rk   r;   r   r<  s      r3   	read_textzContext.read_text  s    ]]4%% 	6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   8<<bytesc                    |                      |d          5 }|                                cd d d            S # 1 swxY w Y   d S )NrM   rx  ry  s      r3   
read_byteszContext.read_bytes  s    ]]4&& 	!6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r{  textc                    |                      |d          5 }|                    |           d d d            d S # 1 swxY w Y   d S )Nwrh   rm   )r;   r   r  r<  s       r3   
write_textzContext.write_text  s    ]]4%% 	GGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   :>>datac                    |                      |d          5 }|                    |           d d d            d S # 1 swxY w Y   d S )NrO   r  )r;   r   r  r<  s       r3   write_byteszContext.write_bytes"  s    ]]4&& 	!GGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r  .modeLiteral['rb', 'wb', 'ab']rN   Optional[bool]buffer_sizeOptional[int]	cache_dir	file_sizer   c                    d S r1   r2   r;   r   r  rN   r  r  r  rP   s           r3   rh   zContext.BlobFile&  	     	r5   Literal['r', 'w', 'a']r   c                    d S r1   r2   r  s           r3   rh   zContext.BlobFile3  r  r5   r   (Literal['r', 'rb', 'w', 'wb', 'a', 'ab']c                6   t          |          }t          |          rt          d| d          ||dv }||dv s
J d            |rt          |          r
J d            t          |          rEd|v rA|                     |          dk    r(|                     |                     |                     || j        j        }|r|d	vrt          d
| d          |t          d          t          |          rJt          j
        ||          }d|v rt          j        ||          }n.t          j        ||          }nt          |          rz|rt          d          |dv rt          j        | j        |          }n|dv r3t          j        | j        ||          }t          j        ||          }nt          d| d          t%          |          rk|dv rt'          j        | j        ||          }n^|dv r4t'          j        | j        |||          }t          j        ||          }n&t          d| d          t          d| d          t)          t*          |          }	d|v r|	S t          j        |	d          }
t/          |
d          rt1          |
d|           t)          t2          |
          S d}d}|dvrt          d| d          ||dvrt          d          |                     |          }|dk    rd}t          |          st%          |          r|}|dv rVt7          j                    }|                     ||          }|                     |          r|                     ||           n|dv r-|At7          j                    }|                     ||          }|                     ||           n9t          |          st          d| d          |                     |           tA          j!        |"                    d                    #                                }|                     || d          }|                     || d           }tI          j%        |          5  d}t          |          rGt          j&        | j        |          }|tO          d!| d          |j(        J |j(        }|j!        }nit%          |          rGt'          j&        | j        |          }|tO          d!| d          |j(        J |j(        }|j!        }nt          d| d          d"}|d#}n-|                     |||          }|                     |           }|r|                     ||d#d#$          }|
J d%            |                     |||          }tS          j        |                     |          d#&           tR          j*                            |          rtS          j+        |           ntS          j,        ||           |Wt%          |          rt'          j-        | j        |||           nGt          |          rt          j-        | j        |||           n|J |                     |||          }ddd           n# 1 swxY w Y   nOt7          j                    }|                     ||          }n%t          |          r|}nt          d| d          t]          | |||||'          }d|v rt          j        ||          }nt          j        ||          }t)          t*          |          }	d|v r|	S t          j        |	d          }
t)          t2          |
          S )(a  
        Open a local or remote file for reading or writing

        Args:
            path: local or remote path
            mode: one of "r", "rb", "w", "wb", "a", "ab" indicating the mode to open the file in
            streaming: the default for `streaming` is `True` when `mode` is in `"r", "rb"` and `False` when `mode` is in `"w", "wb", "a", "ab"`.
                * `streaming=True`:
                    * Reading is done without downloading the entire remote file.
                    * Writing is done to the remote file directly, but only in chunks of a few MB in size. `flush()` will not cause an early write.
                    * Appending is not implemented.
                * `streaming=False`:
                    * Reading is done by downloading the remote file to a local file during the constructor.
                    * Writing is done by uploading the file on `close()` or during destruction.
                    * Appending is done by downloading the file during construction and uploading on `close()` or during destruction.
            buffer_size: number of bytes to buffer, this can potentially make reading more efficient.
            cache_dir: a directory in which to cache files for reading, only valid if `streaming=False` and `mode` is in `"r", "rb"`.   You are reponsible for cleaning up the cache directory.
            file_size: size of the file being opened, can be specified directly to avoid checking the file size when opening the file.  While this will avoid a network request, it also means that you may get an error when first reading a file that does not exist rather than when opening it.  Only valid for modes "r" and "rb".  This valid will be ignored for local files.
            version: a version number of the file being opened, used to prevent overwriting a file that has changed since it was opened.  Only valid for modes "w", "wb", "a", "ab"

        Returns:
            A file-like object
        rI   rJ   N)r   rM   z'Can only specify file_size when readingz1Cannot specify version when writing to local filer  r   )r  rO   r   rM   z"Invalid mode for streaming file: 'z,Cannot specify cache_dir for streaming filesr  r   )r  z$Cannot specify version for GCP files)r  rO   )r   zUnsupported mode: ')r   rP   r   r_  utf8)encoding_CHUNK_SIZE)r  rO   r   rM   r[  abzInvalid mode: 'z%cache_dir only supported in read modez	local.tmp)r[  r  z!cache_dir must be a local path: 'z.lockz.tmpr"  FT)r?   rD   zfailed to return md5r  )ctx
local_pathr  tmp_dirremote_pathrP   )/r"   rQ   rR   rW   rG  r  r:   default_buffer_sizer   rk  FileIOrn  ro  rV   NotImplementedErrorr[   rr  rq  rU   rY   r   r   rl  hasattrsetattrr   r   tempfilemkdtemprF  rS   r   ri   rj   encodern   filelockFileLockr   r   rP   r   r   r	  replacerf  
_ProxyFile)r;   r   r  rN   r  r  r  rP   r<  binary_ftext_fr  r  local_filenamer  path_md5	lock_pathtmp_pathremote_versionr   remote_hashperform_copyexpected_local_pathlocal_hexdigests                           r3   rh   zContext.BlobFile@  s   B 4   	A#$?$?$?$?@@@+I ;&&&(Q&&& 	a%d++``-```+ $ 	2C4KK ||D!!R''dll400111*8K h	,111HHHHIII$JKKKd## <Id...$;;)!EEEAA)!EEEAAd## < V-.TUUU;&&.tz4@@AA[((-dj$YOOOA)!EEEAA =d = = =>>>%% 	<;&&0T7KKAA[((/
DyZabbbA)!EEEAA =d = = =>>>:4:::;;; Ha((Hd{{)(VDDD 6=11 @FM;???FF+++KG<<<5d555666$[)@)@CDDD!]]400N##!,D!! V<^D%9%9 V<";&&&.00G!%7N!C!CJ{{;// ;		+z:::[(( ("*"2"4"4%)YYw%G%G
		+z::::-i88 Z"'(XI(X(X(X"Y"YYi000#*;t{{6/B/B#C#C#M#M#O#O$(IIiH9K9K9K$L$L	#'99Y88I8I8I#J#J%.y99 <_ <_-/N+D11 L%(^DJ%E%E#%:*;<Ud<U<U<U*V*V$V')z'='='=13.0f!/!5!5 
L &+%5dj$%G%G#%:*;<Ud<U<U<U*V*V$V')z'='='=13.0f&+,J4,J,J,J&K&K K+0L*2 046:ii$-{N7" 7" 3 48;;?R3S3S/S+ _26))$/TVZ 3< 3" 3" (7'B'BDZ'B'B'B .2YYy/Sa-b-b
 "DLL,D,Dt T T T T#%7>>*#=#= !E$&Ih$7$7$7$7$&Jx$D$D$D#.#6'5d';'; %*(-(>,0Jno)* )* )* )* *6d);); %*(+(<,0Jno)* )* )* (3'>'>'>-1YYy+~-^-^
y<_ <_ <_ <_ <_ <_ <_ <_ <_ <_ <_ <_ <_ <_ <_| '.00G!%7N!C!CJJ%% <!

:4:::;;;%'  A d{{%a[AAA%a[AAAHa((Hd{{)(VDDDFF+++s   HZ44Z8;Z8)r8   r   )FFNFN)r=   r   r>   r   r?   r@   rA   r@   rB   rC   rD   r@   rE   rF   rG   rF   )r   r   rG   r@   )r   r   rG   rp   )F)r   rp   rA   r@   rG   r   )Fr   )r   rp   rA   r@   r   r   rG   r   )r   )r   r   r   r   rG   r   )r   r   r   r   rG   r   )r   r   rG   r  )r   r   rG   r    r1   )r   r   r   r#  rP   rF   rG   r@   )FN)r   r   rA   r@   rB   rC   rG   r  )TN)r=  r   r>  r@   r?  r@  rG   rA  )r[  r   r/   rp   rG   rp   )r   r   rG   r`  )rh  ri  rG   rF   )r   r   rG   r|  )r   r   r  rp   rG   r  )r   r   r  r|  rG   r  )...NN)r   r   r  r  rN   r  r  r  r  rF   r  r  rP   rF   rG   r   )....NN)r   r   r  r  rN   r  r  r  r  rF   r  r  rP   rF   rG   r   )r   NNNNN)r   r   r  r  rN   r  r  r  r  rF   r  r  rP   rF   )__name__
__module____qualname__r<   r   rS   r   r   r   r   r   r   r  r	  r  r   r'  r6  rK  rG  rF  rb  rj   rv  rz  r~  r  r  r   rh   r2   r5   r3   r7   r7   N   s"            CG %)c$ c$ c$ c$ c$J8 8 8 8"	* 	* 	* 	*
! 
! 
! 
! 
! PQk: k: k: k: k:Z	8 	8 	8 	8    
E8 E8 E8 E8 E8N	8 	8 	8 	88 8 8 8&88 88 88 88t8 8 8 8& OS8 8 8 8 8$ CG	Y8 Y8 Y8 Y8 Y8| 7;	T7 T7 T7 T7 T7l) ) ) )   	8 	8 	8 	8!1 !1 !1 !1F	 	 	 	             
 %(%(#&#'!%
 
 
 
 X
  (+$'%(#&#'!%
 
 
 
 X
 :=$(%)#'#'!%a, a, a, a, a, a, a,r5   r7   msgrp   rG   r  c                *    t          d|             d S )Nz
blobfile: )print)r  s    r3   default_log_fnr  $  s    	
s

r5   r   r@   c                V    t           j                            |           }|j        dk    S )Ngs)urllibparseurlparseschemer   r  s     r3   rV   rV   (  s$    
,


%
%C:r5   c                    t           j                            |           }|j        dk    o|j                            d          p
|j        dk    S )Nhttpsz.blob.core.windows.netaz)r  r  r  r  netlocr   r  s     r3   rU   rU   -  sK    
,


%
%C
gO#*"5"56N"O"O	t	r5   Optional[ModuleType]c                ^    t          |           rt          S t          |           rt          S d S r1   )rV   r[   rU   rY   r   s    r3   _get_moduler  4  s1    D 
			 tr5   c                $    t          |           d u S r1   )r  r  s    r3   rW   rW   =  s    t$$r5   r8   r   r=   r>   startr   r   src_file_sizec           
     6   t          |           }|                    |d|          5 }|                    |           t          |d          5 }|                    |           d}		 t	          t
          ||	z
            }
|
dk    sJ |                    |
          }|dk    r|	|k    rt          d| d| d	|	           n(|                    |           |	t          |          z  }		 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
NrM   )r  zrb+r   Tr5   z&read wrong number of bytes from file `z`, expected z
 but read )
r7   rh   seekopenminr   rk   r   rm   r   )r8   r=   r>   r  r   r  r  r{   r|   
bytes_readnr~   s               r3   _download_chunkr  A  s    $--C	c4=	9	9 )U

5#u 	)JJuJ)
D:$566Avvvv

1C<<!T))#rSrrVZrrfprr   E"""c%jj(
) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s6   &DBC6*D6C:	:D=C:	>DDDrx   concurrent.futures.ExecutorrD   rF   c                \   t          |           }|                    |          }t          j                            |          dk    r3t          j        t          j                            |          d           t          |d          5 }|j        dk    r2|                    |j        dz
             |	                    d           d d d            n# 1 swxY w Y   t          |d	t          j                    pd          }t          t          j        |j        |z            t          j                  }	d}
g }|
|j        k     r`|                    t$          | |||
t'          |	|j        |
z
            |j                  }|                    |           |
|	z  }
|
|j        k     `|D ]}|                                 |ri|                    |d
          5 }t/          j        t          j        |                                        d          cd d d            S # 1 swxY w Y   d S d S )Nr8   r   Tr  rO   r   r       _max_workersrM   r  )r7   r   r   r   rG  r  r  r   r  rm   getattr	cpu_countmaxmathceilrf   PARALLEL_COPY_MINIMUM_PART_SIZEr9  r  r  r   r:  rh   binasciihexlifyrd  decode)r8   rx   r=   r>   rD   r  r   r<  max_workers	part_sizer  r_   futures                r3   rX   rX   Y  s    t


CA 
wsr!!
BGOOC((48888	c4 A6A::FF16A:GGENNN              
 (NBLNN4GaHHKDIaf{233V5[\\IEG
!&..T3UC	16E>4R4RTUTZ
 
 	v !&..    H\\#t$$ 	H#F$4Q$7$788??GG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	HH Hs$   >CCC9HH#&H#s1s2c                    t          t          |           t          |                    }t          |          D ]}| |         ||         k    r|c S |S r1   )r  r   r   )r  r  lengthr   s       r3   _string_overlapr  z  sV    R#b''""F6]]  a5BqE>>HHH Mr5   	List[str]c                    g }d}| D ]$}||z  }|dk    r|                     |           d}%|dk    r|                     |           |S )Nr   r   )r   )r   rX  partr   s       r3   r   r     sg     ED  	88LLDrzzTLr5   r   r  r   c              #  x  K   t          |           rt          j        }n/t          |           rt          j        }nt          d|  d          | }|D ]g}t          |          }t          ||          }||d          }|d |         }t          |          d d         D ]}	||	z  } ||          V  |V  |}hd S )Nr   rJ   r   )	rV   r[   entry_from_dirpathrU   rY   r   r,  r  r   )
r   r  r  previous_pathr   r.  offsetrW  rH  r  s
             r3   _expand_implicit_dirsr    s      D 3 3			 3"51$111222M ) )*511 0@AA"677+ww'(("- 	* 	*D4KC$$S))))))() )r5   r   r   rL  c                    d t          j        d|           D             }d}|D ]5}|dk    r
|d| dz  }|dk    r|dz  }|t          j        |          z  }6t          j        || d	z             S )
Nc                    g | ]
}|d k    |S )r   r2   )r   r   s     r3   r   z$_compile_pattern.<locals>.<listcomp>  s    :::A!r''a'''r5   z([*]+)r   r   z[^z]***z.*z?$)rer   escapecompile)r   rL  tokensregexptoks        r3   _compile_patternr    s    ::(A..:::FF % %#::l3lll"FFD[[dNFFbinn$FF:f#zzz)***r5   r   c              #  &  K   |                     d          \  }}}t          |          }t          |t          | |                    D ]E}t	          |          }t          |                    |                    r||k    r|j        rA|V  Fd S )Nr   r8   r   )r   r  )	partitionr  r  _list_blobsr,  r@   matchr   )r8   r   r   rv   
re_patternr   r.  s          r3   
_glob_fullr    s      $$S))LFAq!'**J&F{SY7Z7Z7Z[[[  *511
  !12233 	6))el)KKK r5   c                  $    e Zd ZU ded<   ded<   dS )r   rp   rH  zSequence[str]remNr  r  r  __annotations__r2   r5   r3   r   r     s'         HHHr5   r   c                      e Zd ZU ded<   dS )r   r   r   Nr  r2   r5   r3   r   r     s         OOOOOr5   r   c                      e Zd ZdS )r   N)r  r  r  r2   r5   r3   r   r     s        Dr5   r   r   &Iterator[Union[_GlobTask, _GlobEntry]]c              #  T  K   |j         |j        d         z   }|j        dd          }d|v r?t          | ||z   d                    |          z             D ]}t	          |          V  d S d|v rt          ||z             }|                    d          \  }}}||z   }	t          | |	d          D ]}t          |          }
|
|	k    r|j	        rt          |                    |
                    rct          |          dk    rt	          |          V  f|
                    |          sJ t          |
t          |          d          |          V  d S t          |          dk    r,||z   }	t          | |	          }|t	          |          V  d S d S t          ||          V  d S )Nr   r   r  r   r   r   r8   r   rD  )rH  r  r  rF  r   r  r   r  r,  r   r@   r  r   r-  r   r   )r8   r   r   rH  r  r   r  r   rv   r   r.  s              r3   r   r     s      %!%(
C
%)Cs{{dSj2773<<&?@@ 	$ 	$EU######	$ 	$	%dSj11
}}S))1f} dEEE 	H 	HE.u554''EL'J$$%56677 Hs88q==$U+++++++66t<<<<<#$4SYY[[$A3GGGGG	H 	H s88q==#:DtT**E  ''''''' !  C%%%%%%%r5   r   mp.Queue[_GlobTask]r   9mp.Queue[Union[_GlobEntry, _GlobTask, _GlobTaskComplete]]c                    	 |                                 }t          | ||          D ]}|                    |           |                    t                                 `)NT)r   r   )r   r   r   r   )r8   r   r   r   r   r   s         r3   r   r     sa    )IIKK#Dtq999 	 	AKKNNNN%''(((	)r5   r   c              #    K   t           j                            |           }|                     d          s|                     d          r|t           j        z  }d|v r|                    d          d         }|                    t           j                  ret           j                            |          }|                    t           j                  s|t           j        z  }|t          |          d          }nxt           j                            |          }t           j                            |          }t          |          dk    rt           j        |z   }n|t          |          d          }||z   }t          |t           j                  }t          j
        |          D ]l\  }}	fd|D             }
|
fd|	D             z  }
|
D ]D}t          j        ||          r-|                    t           j                  r
|d d         }|V  Emd S t           j                            |           }t           j                            |          r/|                    t           j                  r
|d d         }|V  d S d S )	Nr   \r   r   )rL  c                j    g | ]/}t           j                            |t           j        z             0S r2   )r   r   rF  rL  )r   rG  r   s     r3   r   z_local_glob.<locals>.<listcomp>$  s0    RRRgRW\\$"&(899RRRr5   c                P    g | ]"}t           j                            |          #S r2   )r   r   rF  )r   filenamer   s     r3   r   z_local_glob.<locals>.<listcomp>%  s)    MMMxbgll422MMMr5   r   )r   r   rJ  r   rL  r   r   r   rG  r  rK  r  r  rS   )r   normalized_patternr   base_dirr   rY  full_patternr  rR  rS  pathsr   r   s               @r3   r   r     su     ))'22 % 0 0 6 6 % 	bf$
   #))#..q1??26"" 	Dwv..H$$RV,, #BF"/F>NNgoof--Gww//H 7||q  !#*<!<!3CLLNN!C.0!,BF;;;)+):): 	 	%D(IRRRRRRREMMMM9MMMME  8FD)) }}RV,, )#CRCyJJJ		 	 ww''7>>$ 	}}RV$$ !CRCyJJJJJ	 	r5   c                D    |                      d          r
| d d         S | S r   )r   r  s    r3   rO  rO  3  s)    }}S CRCyr5   c                    t          |           r!t          j                            |           rdS t	          |           st          |           r|                     d          rdS dS )zL
    Guess if a path is a directory without performing network requests
    Tr   F)rW   r   r   r   rV   rU   r   r  s    r3   rQ   rQ   :  sj     d d 3 3 t
t

 t 4 4 $--:L:L t5r5   rD  c              #     K   i }|||d<   t          |          rt          j        | ||          E d {V  d S t          |          rt	          j        | ||          E d {V  d S t          d| d          )NrD  rC  r   rJ   )rV   r[   r+  rU   rY   r   )r8   r   rD  paramss       r3   r  r  E  s      F'{D 4>$	BBBBBBBBBBBB			 4#D$)DDDDDDDDDDDD24222333r5   r   r   c                2    | j         r
| j        dz   n| j        S )Nr   )r   r   )r   s    r3   r,  r,  R  s    $|;5:;r5   c                l    t          |          r$t          j        | gt          j        |          R  S |S r1   )rU   rY   r   r\   r  s     r3   rN  rN  V  s<    d A!$@)9$)?)?@@@@Kr5   r   r   c              #     K   t          | |          }t          | |d          D ]}|rt          |          |k    r|V  d S )Nr   r  )rN  r  r,  )r8   r   r   normalized_prefixr   s        r3   r   r   ]  sh      'f55$->#NNN   	oe448III r5   Optional[DirEntry]c                   t          |           }t          |          rt          j        | |          }|>|                    d          rt          j        |          S t          j        ||          S |                    |          rt          j        |          S nt          |          rt          j        | |          }|>|                    d          rt          j        |          S t          j        ||          S |                    |          rt          j        |          S nt          d| d          d S )Nr   r   rJ   )r7   rV   r[   r   r   r  entry_from_path_statr   rU   rY   r   )r8   r   r  r   s       r3   r   r   f  s;   
$--CD 4^D$''>}}S!! :-d333/b99999T?? 	0)$///	0			 
4dD))>}}S!! </5551$;;;99T?? 	2+D111	2 242223334r5   r   mp.Queue[Tuple[str, str, bool]]r  mp.Queue[Optional[DirEntry]]c                   	 |                     d          \  }}}|r-||z   }t          | |          }||                    |           n/t          | ||z   d          }|D ]}|                    |           |                    d            )NTF)r   )r   r   r   r   )	r8   r   r  baser   r   r   r   r  s	            r3   r   r     s    &ll400fe 	!&=DtT**E 		%   #D$-NNNB ! !		%    		$r5   r[  r_  c                   t          |          r t          j                            ||          S t	          |          rt          j        | ||          S t          |          rt          j        | ||          S t          d| d          r   )
rW   r   r   rF  rV   r[   
join_pathsrU   rY   r   )r8   r[  r_  s      r3   r]  r]    s    a 1w||Aq!!!	a 1~dAq)))			 1a+++/1///000r5   c                  ,     e Zd Zd fdZd fdZ xZS )r  r  r7   r  rp   r  r  r  rF   r  rP   rG   r  c                    t                                          ||           || _        || _        || _        || _        || _        d| _        || _        d S )Nr  F)	superr<   _ctx_mode_tmp_dir_local_path_remote_path_closedrt  )r;   r  r  r  r  r  rP   	__class__s          r3   r<   z_ProxyFile.__init__  sY     	$///	
%'r5   c                   t          | d          r| j        rd S t                                                       	 | j        6| j        dv r-| j                            | j        | j        d| j	                   | j
        2t          j        | j                   t          j        | j
                   n?# | j
        3t          j        | j                   t          j        | j
                   w w xY wd| _        d S )Nr3  )r  rO   r[  r  T)r?   rE   )r  r3  r-  closer2  r/  r.  r   r1  rt  r0  r   r	  r  )r;   r4  s    r3   r6  z_ProxyFile.close  s    tY'' 	4< 	F		( ,?U1U1U	$d&74UYUb    
 }(	$*+++''' }(	$*+++'''' ) s   =B3 3<C/)r  r7   r  rp   r  r  r  rF   r  rF   rP   rF   rG   r  )rG   r  )r  r  r  r<   r6  __classcell__)r4  s   @r3   r  r    s[                   $         r5   r  TFspawn)rq   connection_pool_max_sizemax_connection_pool_countazure_write_chunk_sizegoogle_write_chunk_sizeretry_log_thresholdretry_common_log_thresholdro   connect_timeoutread_timeoutoutput_az_paths&use_azure_storage_account_key_fallbackget_http_pooluse_streaming_readuse_blind_writesr  get_deadlinesave_access_token_to_diskrc   rq   Callable[[str], None]r9  r:  r;  r<  r=  r>  ro   r  r?  r@  rA  rB  rC  +Optional[Callable[[], urllib3.PoolManager]]rD  rE  r  rF  Optional[Callable[[], float]]rG  rc   c                    t          di d| d|d|d|d|d|d|d|d	|d
|	d|
d|d|d|d|d|d|d|d|}t          |          S )zm
    Same argument as configure(), but returns a Context object that has all the blobfile methods on it.
    rq   r9  r:  r;  r=  r>  ro   r<  r?  r@  rA  rB  rC  rD  r  rE  rF  rG  rc   r  r2   )r   r7   )rq   r9  r:  r;  r<  r=  r>  ro   r?  r@  rA  rB  rC  rD  rE  r  rF  rG  rc   r8   s                       r3   create_contextrL    s   6    !\!9!9 #<";  65	
 0/ $>#=  K !8 7 ( "\ ( 0V/U $m .- 0/  *)!" "\#$ #<";%& &B%A'D* r5   )r-   r.   r/   r   )r  rp   rG   r  )r   rp   rG   r@   )r   rp   rG   r  )r8   r   r=   rp   r>   rp   r  r   r   r   r  r   rG   r  )r8   r   rx   r  r=   rp   r>   rp   rD   r@   rG   rF   )r  rp   r  rp   rG   r   )r   rp   rG   r  )r   rp   r  r   rG   r   r   )r   rp   rL  rp   )r8   r   r   rp   rG   r   )r8   r   r   rp   r   r   rG   r  )
r8   r   r   rp   r   r  r   r  rG   r  )r   rp   rG   r   )r   rp   rG   rp   r1   )r8   r   r   rp   rD  rF   rG   r   )r   r   rG   rp   )r8   r   r   rp   rG   rp   )r8   r   r   rp   r   r@   rG   r   )r8   r   r   rp   rG   r"  )r8   r   r   r%  r  r&  rG   r  )r8   r   r[  rp   r_  rp   rG   rp   )&rq   rH  r9  r   r:  r   r;  r   r<  r   r=  r   r>  r   ro   r  r?  r  r@  r  rA  r@   rB  r@   rC  rI  rD  r@   rE  r@   r  r   rF  rJ  rG  r@   rc   rp   )l
__future__r   r  r   concurrent.futuresr^   r7  ri   rk  r   r  multiprocessingra   r   r  r5  r   r   r  rr   urllib.parser  	functoolsr   typesr   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r  urllib3blobfiler   rY   r   rf   r   r[   blobfile._commonr   r   r   r   r   r   r   r   r   r    r!   r"   setr   r   r   DEFAULT_AZURE_WRITE_CHUNK_SIZEDEFAULT_GOOGLE_WRITE_CHUNK_SIZEDEFAULT_RETRY_LOG_THRESHOLD"DEFAULT_RETRY_COMMON_LOG_THRESHOLDDEFAULT_CONNECT_TIMEOUTDEFAULT_READ_TIMEOUTDEFAULT_BUFFER_SIZEgetenvDEFAULT_USE_BLIND_WRITESr4   r7   r  rV   rU   r  rW   r  rX   r  r   r  r  r  r   r   r   r   r   r   rO  rQ   r  r,  rN  r   r   r   r]  r  r  rL  r2   r5   r3   <module>ra     s8   " " " " " "               				          				 				                                                      "   $ $ $ $ $ $ & & & & & &                                       " EE#sOO,,2255c??CCII%%PSUYJZJZ[[!* "+  %& "   $29%@#FF#M    S, S, S, S, S, S, S, S,l      
      % % % %) ) ) )0H H H HB       ) ) ) ):
+ 
+ 
+ 
+ 
+       
   
       	 	 	 	 	
 	 	 	& & & &D
) 
) 
) 
)* * * *Z      
4 
4 
4 
4 
4< < < <         4   "1 1 1 1" " " " " " " "N +9$D%F #A#B:&H!%%<"6 38AE$5226&*(/-0 0 0 0 0 0 0 0r5   