
    Pig                        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mZmZmZmZmZmZ d dl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Z)dZ*dZ+de,fd	Z-d
e.de.fdZ/de0de.de.fdZ1de0dee0ef         de.fdZ2de0de0dee0         de"fdZ3de0de0de0de"fdZ4dee0ef         fdZ5dee0ef         dee0         de"fdZ6de0de0de0fdZ7de"dee0e0f         de"fdZ8	 	 	 d^d!e0d"e0d#e9d$e0d%eee0e0f                  d&eee0e0f                  dee0ee9         f         fd'Z:d(ed)e0de,fd*Z;d(ed)e0ddfd+Z<d)e0dee0e0f         fd,Z=d!e0d-e0de0fd.Z>d/ee0ef         dee0         fd0Z?d1e0de9fd2Z@d3ee0ef         de%fd4ZAd(ed5edeee9f         fd6ZBd(ede"dd7fd8ZC G d9 d:e          ZD G d; d<e          ZEd(ed)e0dee%         fd=ZFd(ed)e0de,fd>ZGd(ed)e0d?e0d@e0de,f
dAZHd(ed)e0dBeIdCeIdDe0de0fdEZJd(ed!e0d"e0ddfdFZKd(edGejL        jM        dHe0dDe0dIe,dee0         fdJZNd(edKe0d$e0d%ee0e0f         deee0ef                  f
dLZOd_d(ed)e0dMee0         dee         fdNZPd!e0dOee0ef         dee         fdPZQd)e0defdQZRd)e0dRe%defdSZSd(ed)e0dee0ee9         f         fdTZTd_d(ed)e0dUe9dVee0         de,f
dWZUd(ed)e0de0fdXZVd(edHe0dDe0dIe,dee0         f
dYZWd(edZe0d[e0de0fd\ZX e&eBd]          ZYdS )`    N)AnyDictIteratorListMappingOptionalTuple)_common)GCP_BASE_URLBaseStreamingReadFileBaseStreamingWriteFileConfigDirEntryErrorFileBodyRequestRequestFailure RestartableStreamingWriteFailureStatTokenManager	path_joinstrip_slashesi:	 oauth_token	anonymousreturnc                  `    	 t          j        dd           n# t           j        $ r Y dS w xY wdS )Nzmetadata.google.internalP   FT)socketgetaddrinfogaierror     a/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/blobfile/_gcp.py_is_gce_instancer$   (   sG    5r::::?   uu4s    ++sc                 *    t          j        |           S N)base64urlsafe_b64encode)r%   s    r#   
_b64encoder*   0   s    #A&&&r"   private_keymsgc                     ddl m} ddlm} ddlm} |                    |           }|                    |          }|                    |                              |          S )Nr   )SHA256)RSA)pkcs1_15)	Cryptodome.Hashr.   Cryptodome.PublicKeyr/   Cryptodome.Signaturer0   
import_keynewsign)r+   r,   r.   r/   r0   keyhs          r#   _signr9   4   sx    &&&&&&((((((------
..
%
%C

3A<<!!!$$$r"   datac                 >   t          t          j        ddd                              d                    }t          t          j        |                              d                    }|dz   |z   }t          t	          | |                    }|dz   |z   dz   |z   S )NRS256JWT)algtyputf8   .)r*   jsondumpsencoder9   )r+   r:   
header_b64body_b64to_signsignature_b64s         r#   _create_jwtrI   >   s    DJwu'E'EFFMMfUUVVJ$*T**11&99::H4(*Gu['::;;Mx'$.>>r"   client_emailscopesc                    t          j                     }| d                    |          d|dz   |d}dt          ||          d}t          dddd	it          j                            |                              d
                    S )N *https://www.googleapis.com/oauth2/v4/tokeni  )issscopeaudexpiatz+urn:ietf:params:oauth:grant-type:jwt-bearer)
grant_type	assertionPOSTContent-Type!application/x-www-form-urlencodedr@   urlmethodheadersr:   )timejoinrI   r   urllibparse	urlencoderD   )rJ   r+   rK   now	claim_setr:   s         r#   _create_token_requestrd   F   s    
)++C&!!;W} I D i88 D 8!DE\##D))0088	   r"   	client_idclient_secretrefresh_tokenc                     d|| |d}t          ddddit          j                            |                              d                    S )	Nrg   )rT   rg   re   rf   rN   rV   rW   rX   r@   rY   )r   r_   r`   ra   rD   )re   rf   rg   r:   s       r#   _refresh_access_token_requestri   \   se    
 &&&	 D 8!DE\##D))0088	   r"   c                     dt           j        v rt           j        d         } t           j                            |           st	          d|  d          t          |           5 }t          j        |          cd d d            S # 1 swxY w Y   t          j	                    dk    r1t           j        
                    t           j        d         d          }n0t           j        
                    t           j        d         d          }t           j                            |          r;t          |          5 }t          j        |          cd d d            S # 1 swxY w Y   i S )	NGOOGLE_APPLICATION_CREDENTIALSzcredentials not found at zC specified by environment variable 'GOOGLE_APPLICATION_CREDENTIALS'WindowsAPPDATAz+gcloud/application_default_credentials.jsonHOMEz3.config/gcloud/application_default_credentials.json)osenvironpathexistsr   openrB   loadplatformsystemr^   )
creds_pathfdefault_creds_paths      r#   _load_credentialsrz   n   s   '2:55Z @A
w~~j)) 	{J{{{   * 	 9Q<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 I%%W\\Jy!#P
 
  W\\Jv U
 
 
w~~())  $%% 	 9Q<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 Is$   "BB
B4EEEcredsc                     d| v rt          | d         | d         |          S d| v r$t          | d         | d         | d                   S t          d          )Nr+   rJ   rg   re   rf   )rg   re   rf   zCredentials not recognized)rd   ri   r   r{   rK   s     r#   _create_access_token_requestr~      su    $U>%:E-<PRXYYY	E	!	!,0K(0
 
 
 	
 0111r"   templatec                 2    t          j        t          | fi |S r'   )common	build_urlr   )r   r:   s     r#   r   r      s    L(;;d;;;r"   reqauthc                 f   | j         i }n&t          | j                                                   }| j        i }n&t          | j                                                  }|\  }}|t          k    r	d| |d<   n|t
          k    rnt          d| d          | j        }|Gt          |t                    r2t          j
        |                              d          }d|vsJ d|d<   t          | j        | j        |||| j        t!          | j                  t!          | j                            S )	NzBearer Authorizationzunrecognized auth kind ``r@   rW   zapplication/json)r[   rZ   paramsr\   r:   preload_contentsuccess_codesretry_codes)r\   dictcopyr   OAUTH_TOKEN	ANONYMOUSr   r:   
isinstancerB   rC   rD   r   r[   rZ   r   tupler   r   )r   r   r\   r   kindtokenr:   s          r#   create_api_requestr      sF   
{s{##((**
zcj!!&&((KD%{#4U#4#4  			6t6667778DJtT22z$&&v..W,,,,"4zG+C-..#/**	 	 	 	r"   GETbucketname
expirationr[   r   r\   c                 >   |i }n!t          |                                          }|i }n!t          |                                          }t                      }d|vrt          d          |t          k    rt          dt           d          t
          j                            |d          }	d|  d|	 }
t          j        	                    t          j
        j                  }|                    d	          }|                    d
          }| d}|d          d| }d|d<   d}t          |                                          }|D ]R\  }}t          |                                          }t          |                                          }|| d| dz  }Sg }|D ];\  }}t          |                                          }|                    |           <d                    |          }d|d<   ||d<   ||d<   t          |          |d<   ||d<   g }t          |                                          }|D ]{\  }}t
          j                            t          |          d          }t
          j                            t          |          d          }|                    | d|            |d                    |          }d                    ||
|||dg          }t'          j        |                                                                          }d                    d|||g          } t/          j        t3          |d         |                     d                                                  d          }!d}"|" |
 d| d|! }#|#|fS )Nr+   zPrivate key not found in credentials.  Please set the `GOOGLE_APPLICATION_CREDENTIALS` environment variable to point to a JSON key for a service account to use this callz Expiration can't be longer than z	 seconds. )safe/)tzz%Y%m%dT%H%M%SZz%Y%m%dz/auto/storage/goog4_requestrJ   zstorage.googleapis.comhost:
;zGOOG4-RSA-SHA256zX-Goog-AlgorithmzX-Goog-CredentialzX-Goog-DatezX-Goog-ExpireszX-Goog-SignedHeaders=&zUNSIGNED-PAYLOADr@   zhttps://storage.googleapis.com?z&X-Goog-Signature=)r   r   rz   r   MAX_EXPIRATIONr_   r`   quotedatetimerb   timezoneutcstrftimesorteditemsstrlowerappendr^   hashlibsha256rD   	hexdigestbinasciihexlifyr9   decode)$r   r   r   r[   r   r\   pr8   r{   escaped_object_namecanonical_uridatetime_nowrequest_timestamp	datestampcredential_scope
credentialcanonical_headersordered_headerskvlower_kstrip_vsigned_headers_parts_signed_headerscanonical_query_string_partsordered_params	encoded_k	encoded_vcanonical_query_stringcanonical_requestcanonical_request_hashstring_to_sign	signature	host_name
signed_urls$                                       r#   generate_signed_urlr      s    ~LLMM   EE!! x
 
 	
 N""P~PPPQQQ ,,,T,;;666!466M$((H,=,A(BBL$--.>??%%h//I#@@@.)>>,<>>J(AfIQWWYY''O 6 61a&&,,..a&&,,..55'5555 - -1a&&,,..##G,,,,XX233N.A'A(Amj//A .A#% AGGII&&N H H1L&&s1vvB&77	L&&s1vvB&77	$++y,F,F9,F,FGGGG XX&BCC		"	
	 	 %^,=,D,D,F,FGGQQSSYY	.0@BXY N  u]';^=R=RSY=Z=Z![![\\cc I 1Id}dd/EddYbddJz!!r"   confrq   c           	         |                     d          s|dz  }t          |          \  }}|dk    r<t          t          d|          dd          }t	          | |          }|j        dk    S t          t          d	|          dt          |dd
          d          }t	          | |          }|j        dk    rdS t          j        |j	                  }d|v pd|v S )Nr   r   z/storage/v1/b/{bucket}r   r        rZ   r[   r   r   /storage/v1/b/{bucket}/o1)prefix	delimiter
maxResultsrZ   r[   r   r   r   Fr   prefixes)
endswith
split_pathr   r   execute_api_requeststatusr   rB   loadsr:   )r   rq   r   blobr   respresults          r#   isdirr     s   == d##LFDrzz26BBB$
 
 

 #4--{c!!4VDDDtssCCC$	
 
 
 #4--;#5DI&&& 8J&$88r"   c                    |                     d          s|dz  }t          |          \  }}t          t          d|          dt	          d|          d          }t          | |          }|j        d	k    rt          d
| d          d S )Nr   /upload/storage/v1/b/{bucket}/or   rV   media
uploadTyper   r     r   r   z4Unable to create directory, bucket does not exist: '')r   r   r   r   r   r   r   r   r   rq   r   r   r   r   s         r#   	mkdirfiler   2  s    == d##LFD
7GGGwT222 	  C tS))D{cR4RRRSSS r"   c                     |                      d          st          d|  d          | t          d          d          } |                     d          \  }}}|dk    rt          d|  d          ||fS )Ngs://zInvalid path: 'r   r   r   )
startswithr   len	partition)rq   r   r   objs       r#   r   r   A  s    ??7## /-d---...GD^^C((NFAs||-d---...3;r"   r   c                     d|  d| S )Nr   r   r!   )r   r   s     r#   combine_pathr   K  s    !6!!C!!!r"   metadatac                     d| v r,t          j        | d                                                   S d| v rd| d         v r| d         d         S d S )Nmd5Hashr   md5)r(   	b64decodehexr   s    r#   get_md5r  O  s^    H 34488:::X%8J+?"?"?
#E**4r"   textc                 f    t           j                             | d                                          S )Nz%Y-%m-%dT%H:%M:%S.%f%z)r   strptime	timestamp)r  s    r#   _parse_timestampr  Z  s(    %%d,DEEOOQQQr"   itemc                    d| v r&d| d         v rt          | d         d                   }nt          | d                   }t          t          | d                   |t          | d                   t	          |           | d                   S )Nr   blobfile-mtimeupdatedsizetimeCreated
generation)r  mtimectimer   version)floatr  r   intr  )r	  r  s     r#   	make_statr  ^  s    T.$z2BBBd:&'7899 i11ftM233DMM\"   r"   r7   c                   	 t           j                            dd          dk    rt          dft	          d          fS t          j                    }t                      	t          	          dk    rdt          f	fd}t          j
        | |          }t          j        |j                  }|j        d	k    ra|d
         }|                    dd          }d| d| }|dk    r&|                    d          r|dz  }n|dk    r|dz  }t!          |          |j        dk    sJ t"          |d         f|t	          |d                   z   fS t           j                            dd                                          dk    rnt'                      r`dt          fd}t          j
        | |          }t          j        |j                  }t"          |d         f|t	          |d                   z   fS t          dft	          d          fS )N$BLOBFILE_FORCE_GOOGLE_ANONYMOUS_AUTH0r   r   infr   r   c                  :    t          dg          } d| _        | S )Nz7https://www.googleapis.com/auth/devstorage.full_controlr}   r   )r~   r   )r   r{   s    r#   	build_reqz$_get_access_token.<locals>.build_reqv  s/    .%^$_  C !+CJr"   r   errorerror_descriptionz<missing description>z Error with google credentials: [z] invalid_grantzInvalid JWT:z1
Please verify that your system clock is correct.zBad Requestz
Your credentials may be expired, please run the following commands: `gcloud auth application-default revoke` (this may fail but ignore the error) then `gcloud auth application-default login`r   access_token
expires_inNO_GCE_CHECKfalsetruec                  *    t          ddddi          S )Nr   zZhttp://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/tokenzMetadata-FlavorGoogle)r[   rZ   r\   )r   r!   r"   r#   r  z$_get_access_token.<locals>.build_req  s'    p*H5   r"   )ro   rp   getr   r  r]   rz   r   r   r   execute_requestrB   r   r:   r   r   r   r   r   r$   )
r   r7   rb   r  r   r   r  descriptionr,   r{   s
            @r#   _get_access_tokenr)  l  s%   	z~~<cBBcII2e,,
)++C E
5zzA~~	7 	 	 	 	 	 	 %dI66DI&&;#7OE **%8:QRRKKUKKkKKC'')).99 ^OOCC M11  ^  ^C**{c!!!!VN34cE&BV<W<W6WWW		0	0	6	6	8	8F	B	BGWGYGY	B	7 	 	 	 	 %dI66DI&&VN34cE&BV<W<W6WWW2e,,r"   urllib3.BaseHTTPResponsec                 L     dt           f fd}t          j         |          S )Nr   c                  Z    t          t                               d                    S )Nr   )r7   )r   )r   access_token_manager	get_token)r   r   s   r#   r  z&execute_api_request.<locals>.build_req  s+    !#,@,J,J4UW,J,X,XYYYYr"   )r   r   r'  )r   r   r  s   `` r#   r   r     sK    Zw Z Z Z Z Z Z Z !$	222r"   c            	       d     e Zd Zdededee         ddf fdZ	 ddeded	ee         dd
fdZ	 xZ
S )StreamingReadFiler   rq   r  r   Nc                     |,t          ||          }|t          d| d          |j        }t                                          |||           d S )NNo such file or bucket: 'r   )r   rq   r  )
maybe_statFileNotFoundErrorr  super__init__)selfr   rq   r  st	__class__s        r#   r6  zStreamingReadFile.__init__  sb    <D$''Bz'(KD(K(K(KLLL7DdD99999r"   	streamingstartendr*  c           
          t          | j                  \  }}t          t          d||          dt	          d          dt          j        ||          id| 	          }t          | j        |          S )
Nz/storage/v1/b/{bucket}/o/{name})r   r   r   r   )altRanger;  r<  )   i  )rZ   r[   r   r\   r   r   )	r   _pathr   r   r   r   
calc_ranger   _conf)r7  r:  r;  r<  r   r   r   s          r#   _request_chunkz StreamingReadFile._request_chunk  s     "$*--;FQUVVVG$$$f/eEEEF$ !*M	
 	
 	
 #4:s333r"   r'   )__name__
__module____qualname__r   r   r   r  r6  boolrE  __classcell__r9  s   @r#   r0  r0    s        :V :3 :hsm : : : : : : : AE4 44&)4084	#4 4 4 4 4 4 4 4r"   r0  c                   X     e Zd Zdededdf fdZdededdfdZd	e	d
ededdfdZ
 xZS )StreamingWriteFiler   rq   r   Nc                 x   t          |          \  }}t          t          d|          dt          |          d          }t	          ||          }|j        dv rt          d| d	          |j        d
         | _        |j	        dz  dk    sJ t                                          ||j	                   d S )Nz4/upload/storage/v1/b/{bucket}/o?uploadType=resumabler   rV   )r   )r   r   r   rZ   r[   r:   r   )r   r   r2  r   Locationi   r   )r   
chunk_size)r   r   r   r   r   r   r4  r\   _upload_urlgoogle_write_chunk_sizer5  r6  )r7  r   rq   r   r   r   r   r9  s          r#   r6  zStreamingWriteFile.__init__  s    !$''PY_```4)	
 
 
 #4--;*$$#$G$G$G$GHHH<
3+z:a????dt/KLLLLLr"   chunkfinalizec                 v   | j         }t          |          dk    r|r|                     |||           d S d}|t          |          k     rn|| j        j        z   }|t          |          k    }|||         }|                     |||o|           |}|t          |          z  }|t          |          k     ld S d S )Nr   )_offsetr   _upload_piecerD  rS  )r7  rT  rU  offsetr;  r<  
last_piecepieces           r#   _upload_chunkz StreamingWriteFile._upload_chunk  s    u::??x?vuh777Fc%jj  $*<<CE

*J%)$Evuh.E:FFFEc%jj F c%jj      r"   rY  r[  c                    |}|t          |          z   dz
  }d}|r|t          |          z   }dd| d| d| d}t          |          dk    r
|rd	| |d
<   t          | j        ||d|rdnd          }	 t          | j        |           d S # t
          $ r<}	|	j        dv r-t          |	j        |	j	        |	j        |	j
        |	j                   d }	~	ww xY w)N   *zapplication/octet-streamzbytes -r   )rW   Content-Ranger   zbytes */ra  PUT)r      )i4  )rZ   r:   r\   r[   r   )r   i  )messagerequest_stringresponse_statusr  r  )r   r   rR  r   rD  r   rf  r   rd  re  r  r  )
r7  rY  r[  rU  r;  r<  
total_sizer\   r   es
             r#   rX  z StreamingWriteFile._upload_piece  s?   s5zz!A%
 	-#e**,J 7@e@@c@@J@@
 
 u::??x? (?*'>'>GO$ (0<**f
 
 
	
C00000 	 	 	 J..6I#$#3$%$5'&'&9    	s   7B 
C7CC)rF  rG  rH  r   r   r6  
memoryviewrI  r\  r  rX  rJ  rK  s   @r#   rM  rM    s        MV M3 M4 M M M M M M !: ! !$ ! ! ! ! &C &
 &d &t & & & & & & & &r"   rM  c                     t          |          \  }}|dk    rd S t          t          d||          dd          }t          | |          }|j        dk    rd S t          t          j        |j                            S )Nr   !/storage/v1/b/{bucket}/o/{object}r   objectr   r   r   r   )	r   r   r   r   r   r  rB   r   r:   r   s         r#   r3  r3    s    d##LFDrzzt
9&QUVVV   C
 tS))D{ctTZ	**+++r"   c                     t          |          \  }}|dk    rt          d| d          t          t          d||          dd          }t	          | |          }|j        d	k    S )
Nr   z,The system cannot find the path specified: 'r   rk  rl  DELETE   r   r   rq  )r   r4  r   r   r   r   r   s         r#   removerr    s    d##LFDrzz Vt V V VWWW
9&QUVVV   C
 tS))D;#r"   r  r   c           	          t          |          \  }}t          t          d||          dt          |          t          d|i          d          }t	          | |          }|j        d	k    S )
Nrk  rl  PATCHifGenerationMatchr   r  r   r   i  rZ   r[   r   r:   r   r   )r   r   r   r   r   r   )r   rq   r  r   r   r   r   r   s           r#   maybe_update_md5ry  "  s    d##LFD
9&QUVVVj111E9-...%  C tS))D;#r"   r;  r  dstc                    t          |          \  }}t          t          d|          dt          d|          t	          ||||z             d          }t          | |          }t          j        |j                  }	|	d	         S )
Nr   r   rV   r   r   r@  r   rx  r  )	r   r   r   r   r   r   rB   r   r:   )
r   rq   r;  r  rz  r   r   r   r   r   s
             r#   _upload_partr}  1  s    c??LFD
7GGGwT222d%UT\:::  C tS))Dz$)$$HL!!r"   c                 j    t          t          d||          dd          }t          | |           d S )Nrk  rl  ro  rp  r   )r   r   r   )r   r   r   r   s       r#   _delete_partr  ?  sH    
9&QUVVV   C
 c"""""r"   executorsrc
return_md5c                 f   t          |d          5 }t          j        |          }d d d            n# 1 swxY w Y   t          j        |                              d          }t          j        |          }|j        dk    r/t          | |          5 }	 d d d            n# 1 swxY w Y   |r|nd S t          |          \  }	}
g }g }t          |dt          j                    pd          }t          t          j        |j        |z            t          j                  }d}d}g }||j        k     rd| }|                    t$          | ||t'          ||j        |z
            ||z             }|                    |           |                    |
|z              |dz  }||z  }||j        k     t+          ||          D ]4\  }}|                                }|                    ||d|id           5t/          t1          d	|	|

          dd|id          }t3          | |          }t5          j        |j                  }t;          | ||d         |           g }|D ]4}|                    t<          | |	|          }|                    |           5|D ]}|                                 |r|nd S )Nrbr@   r   _max_workersr^  z.part.rv  )r   r  objectPreconditionsz?/storage/v1/b/{destinationBucket}/o/{destinationObject}/compose)destinationBucketdestinationObjectrV   sourceObjectsr|  rO  r  )rs   r   	block_md5r   r   r   ro   statst_sizerM  r   getattr	cpu_countmaxmathceilPARALLEL_COPY_MINIMUM_PART_SIZEsubmitr}  minr   zipr   r   r   r   rB   r   r:   ry  r  )r   r  r  rz  r  rx   
md5_digestr   r%   	dstbucketdstnamesource_objectsobject_namesmax_workers	part_sizeir;  futuressuffixfuturer   r  r   r   r   delete_futuress                             r#   parallel_uploadr  H  ss    
c4 )A%a((
) ) ) ) ) ) ) ) ) ) ) ) ) ) )  ,,33F;;I
AyA~~c** 	a	 	 	 	 	 	 	 	 	 	 	 	 	 	 	&0yyD0#CIwNL(NBLNN4GaHHKDIai+5668^__I	AEG
!)

!$UC	19u;L,M,MsU[|
 
 	vGf,---	Q !)

 L'22 
 
f]]__
((;Z'H 	
 	
 	
 	
 M'%
 
 

 ~.	 	 	C tS))Dz$)$$HT3 6	BBB N & &tYEEf%%%%   ",99,s   266B!!B%(B%rZ   c              #     K   t          |                                          }	 t          |||d          }t          | |          }|j        dk    rd S t          j        |j                  }|V  d|vrd S |d         |d<   _)NTr   r   r   nextPageToken	pageToken)r   r   r   r   r   rB   r   r:   )r   rZ   r[   r   r   r   r   r   s           r#   _create_page_iteratorr    s       	VA	1#fQjQQQ"4--;#FDI&&&((E0+	1r"   r   c           
   #      K   i }|||d<   t          |          \  }}t          | t          d|          dt          dd|i|          }|D ]}t	          ||          E d {V  d S )Nr   r   r   r   r   )r   rZ   r[   r   r!   )r   r  r   r   _get_entries)r   rq   r   r   r   r   itr   s           r#   
list_blobsr    s      F'{%%NFF	0@@@,,6,V,,	
 
 
B  0 0//////////0 0r"   r   c              #   P  K   d|v r,|d         D ]#}t          | |          }t          |          V  $d|v rm|d         D ]f}t          | |d                   }|d                             d          rt          |          V  Et          |t	          |                    V  ed S d S )Nr   r   r   r   )r   entry_from_dirpathr   entry_from_path_statr  )r   r   r   rq   r	  s        r#   r  r    s      V
# 	+ 	+A**D$T******&7O 	B 	BDV55DF|$$S)) B(......*44AAAAAA 	B 	Br"   c                     |                      d          r
| d d         } t          |           \  }}|                    d          d         }t          || ddd           S )Nr   TFr   rq   is_diris_filer  r   r   splitr   )rq   r   r   r   s       r#   r  r    sa    }}S CRCyFAs99S>>"DDu4PPPPr"   r  c                     |                      d          rJ t          |           \  }}|                    d          d         }t          || dd|          S )Nr   r  FTr  r  )rq   r  r   r   r   s        r#   r  r    sX    }}S!!!!!FAs99S>>"DD4PPPPr"   c                 T    t          |          \  }}t          ||t                    S )N)r   )r   r   r   )r   rq   r   r   s       r#   get_urlr    s(    d##LFDvtGGGGr"   r  r  c                 B   t          |          \  }}d }|t          |          }t          t          d||          d|t          dt	          |          i          d          }t          | |          }|j        d	k    rt          d
| d          |j        dk    S )Nru  rk  rl  rt  r  r  rw  rx  r   zNo such file: 'r   r   )r   r   r   r   r   r   r   r4  )	r   rq   r  r  r   r   r   r   r   s	            r#   	set_mtimer    s    d##LFDF000
9&QUVVV,c%jj9:::%  C tS))D{c 9$ 9 9 9:::;#r"   c                     t          |          \  }}t          |          }d|v r@d                    |                    d          d d                   }t	          ||          S t	          |d          d d         S )Nr   r  r   )r   r   r^   r  r   )r   rq   r   r   s       r#   dirnamer    sv    T""KFC


C
czzhhsyy~~crc*++FC(((FB'',,r"   c           	         t          |          \  }}t          |          \  }}i }	 t          t          d||||          d|d          }	t          | |	          }
|
j        dk    rt          d| d	          t          j        |
j                  }|d
         r|rt          |d                   S d S |d         |d<   )NTzc/storage/v1/b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject})sourceBucketsourceObjectr  r  rV   r   r   r   zSource file not found: 'r   doneresourcerewriteToken)
r   r   r   r   r   r4  rB   r   r:   r  )r   r  rz  r  	srcbucketsrcnamer  r  r   r   r   r   s               r#   remote_copyr    s    #CIw#CIwF8u&$"+")   $
 
 
 #4--;##$Es$E$E$EFFFDI&&&> 	 vj1222!'!7~-8r"   abc                     |                     d          s|dz  }t          |          \  }}t          ||          }|                    d          r
|dd          }t	          ||          S )Nr   r^  )r   r   r   r   r   )r   r  r  r   r   s        r#   
join_pathsr    sl    ::c?? 	SQ--KFC
C

C
~~c !""g$$$r"   gcp)r   NNr'   )Zr(   r   concurrent.futures
concurrentr   r   rB   r  ro   ru   r   r]   urllib.parser_   typingr   r   r   r   r   r   r	   urllib3blobfiler
   r   blobfile._commonr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rI  r$   bytesr*   r   r9   rI   rd   ri   rz   r~   r   r   r  r   r   r   r   r   r  r  r  r)  r   r0  rM  r3  rr  ry  r  r}  r  r  Executorr  r  r  r  r  r  r  r  r  r  r  r-  r!   r"   r#   <module>r     s_	             				        F F F F F F F F F F F F F F F F F F  & & & & & &                               " "	$    '% 'E ' ' ' '%s % %5 % % % %?S ?S(9 ?e ? ? ? ? # tCy U\    ,#&7:   $4S>    22S#X 2S	 2g 2 2 2 2< <S <S < < < <!G !5c? !w ! ! ! !P *.+/X" X"X"
X" X" 	X"
 WS#X&'X" gc3h'(X" 3 X" X" X" X"v9 9c 9d 9 9 9 94TF T# T$ T T T TS U38_    " "3 "3 " " " "gc3h' HSM    R3 R5 R R R RGCH% $    ,-F ,- ,-sEz1B ,- ,- ,- ,-^3f 37 37Q 3 3 3 34 4 4 4 4- 4 4 44G G G G G/ G G GT,V ,3 ,8D> , , , ,
 
s 
t 
 
 
 
6  # # RV    "v "S " "C "c "c " " " "#v #s ## #$ # # # #@-
@-&.7@->A@-HK@-Y]@-c]@- @- @- @-F1
11$'118c1B1d38n1 1 1 1"0 0V 03 08C= 0HU]L^ 0 0 0 0 B Bgc3h&7 BHX<N B B B BQS QX Q Q Q QQs Q$ Q8 Q Q Q QH& H Hc8E?.B(C H H H H
 F # e hsm W[    $-& - - - - - -8f 83 8S 8d 8xPS} 8 8 8 8:%V % % % % % % % $|$5u==   r"   