a
    !f                     @   s~   d dl Z G dd de jZG dd deZG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZ	dS )    Nc                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdddZdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zdd0d1Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z dd?d@Z!dAdB Z"dCdD Z#dEdF Z$dGdH Z%dIdJ Z&dKdL Z'dMdN Z(dOdP Z)dQdR Z*dSdT Z+dUdV Z,ddWdXZ-dYdZ Z.d[d\ Z/d]d^ Z0d_d` Z1dadb Z2dcdd Z3dedf Z4dgdh Z5didj Z6dkdl Z7dmdn Z8dodp Z9dqdr Z:dsdt Z;dudv Z<dwdx Z=dydz Z>d{d| Z?d}d~ Z@dd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dS )	Test_Blobc                 O   s4   ddl m} |dd }||i |}|p,i |_|S )Nr   Blob
properties)gcloud.storage.blobr   pop_properties)selfargskwr   r   blob r   Y/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/storage/test_blob.py_makeOne   s
    
zTest_Blob._makeOnec                 C   sr   d}t  }ddi}| j|||d}| |j|u  | |j| | |j| | |jj	 | |jj
|u  d S )N	blob-namekeyvaluebucketr   )_Bucketr   
assertTruer   assertEqualnamer   assertFalse_aclloadedr   )r	   	BLOB_NAMEr   r   r   r   r   r   	test_ctor   s    zTest_Blob.test_ctorc                 C   sB   ddl m} d}t }d|j }| j|||d}| |j| d S )Nr   r   r   
   )r   
chunk_size)r   r   object_CHUNK_SIZE_MULTIPLEr   r   _chunk_size)r	   r   r   BUCKETr   r   r   r   r   test_chunk_size_ctor&   s    
zTest_Blob.test_chunk_size_ctorc                 C   sF   d}t  }| j||d}| |jd  t  }||_| |j|u  d S Nr   r   )r    r   r   r   r"   r   )r	   r   r#   r   ZVALUEr   r   r   test_chunk_size_getter.   s    z Test_Blob.test_chunk_size_getterc                 C   sD   d}t  }| j||d}| |jd  d|_d|_| |jd d S )Nr   r&   r      )r    r   r   r"   r!   r   r	   r   r#   r   r   r   r   test_chunk_size_setter7   s    z Test_Blob.test_chunk_size_setterc                 C   s`   d}t  }| j||d}| |jd  d|_| t d|_W d    n1 sR0    Y  d S )Nr   r&   r      )r    r   r   r"   r!   assertRaises
ValueErrorr   r)   r   r   r    test_chunk_size_setter_bad_value@   s    z*Test_Blob.test_chunk_size_setter_bad_valuec                 C   sJ   ddl m} t }| jd |d}|j}| t|| | ||ju  d S )Nr   )	ObjectACLr&   )gcloud.storage.aclr/   r   r   aclr   
isinstancer   )r	   r/   FAKE_BUCKETr   r1   r   r   r   test_acl_propertyI   s    zTest_Blob.test_acl_propertyc                 C   s,   t  }d}| j||d}| tt|d d S )Nr   r&   path)r    r   r,   AttributeErrorgetattr)r	   r3   NAMEr   r   r   r   test_path_no_bucketQ   s    zTest_Blob.test_path_no_bucketc                 C   s(   t  }| jd |d}| tt|d d S )Nr&   r5   )r   r   r,   r-   r7   )r	   r   r   r   r   r   test_path_no_nameW   s    zTest_Blob.test_path_no_namec                 C   s.   d}t  }| j||d}| |jd|  d S )Nr   r&   /b/name/o/%sr   r   r   r5   r	   r   r   r   r   r   r   test_path_normal\   s    zTest_Blob.test_path_normalc                 C   s*   d}t  }| j||d}| |jd d S )Nparent/childr&   z/b/name/o/parent%2Fchildr<   r=   r   r   r   test_path_w_slash_in_nameb   s    z#Test_Blob.test_path_w_slash_in_namec                 C   s.   d}t  }| j||d}| |jd|  d S )Nr   r&   z&https://storage.googleapis.com/name/%sr   r   r   Z
public_urlr=   r   r   r   test_public_urlh   s    zTest_Blob.test_public_urlc                 C   s*   d}t  }| j||d}| |jd d S )Nr?   r&   z2https://storage.googleapis.com/name/parent%2FchildrA   r=   r   r   r   test_public_url_w_slash_in_namep   s    z)Test_Blob.test_public_url_w_slash_in_nameNc              	   C   s   ddl m} ddlm} d}d}t }t|}t|}| j||d}	d}
t }|||d* |	j	||d	}| 
||
 W d    n1 s0    Y  d
|f }|d u rtjf}n|f}d|d|d d d d d}| 
|j||fg d S )Nr   _Monkeyr   r   2014-10-16T20:34:37.000Zr&   ]http://example.com/abucket/a-blob-name?Signature=DEADBEEF&Expiration=2014-10-16T20:34:37.000Zgenerate_signed_urlcredentials/name/%shttps://storage.googleapis.comGETZapi_access_endpoint
expirationmethodresourcecontent_typeZresponse_typeZresponse_disposition
generationgcloud._testingrE   Zgcloud.storager   _Connection_Clientr   r   _SignerrJ   r   rL   _signed)r	   rL   rE   MUTr   
EXPIRATION
connectionclientr   r   URISIGNER
signed_uriPATHEXPECTED_ARGSEXPECTED_KWARGSr   r   r   !_basic_generate_signed_url_helperx   s:    *


z+Test_Blob._basic_generate_signed_url_helperc                 C   s   |    d S N)rf   r	   r   r   r   )test_generate_signed_url_w_default_method   s    z3Test_Blob.test_generate_signed_url_w_default_methodc              	   C   s   ddl m} ddlm} d}d}t }t|}t|}| j||d}d}	t }
d}|||
d	* |j	||d
}| 
||	 W d    n1 s0    Y  d|f }tjf}d|d||d d d d}| 
|
j||fg d S )Nr   rD   rF   r   rG   r&   rH   z	text/htmlrI   rT   rM   rN   rO   rP   rV   )r	   rE   r\   r   r]   r^   r_   r   r   r`   ra   CONTENT_TYPE
signed_urlrc   rd   re   r   r   r   'test_generate_signed_url_w_content_type   s8    *

z1Test_Blob.test_generate_signed_url_w_content_typec                 C   s   t  }| j|d d S )NrK   )r    rf   )r	   rL   r   r   r   &test_generate_signed_url_w_credentials   s    z0Test_Blob.test_generate_signed_url_w_credentialsc              	   C   s   ddl m} ddlm} d}d}t }t|}t|}| j||d}d}	t }
|||
d& |	|}| 
||	 W d    n1 s0    Y  tjf}d	|d
dd d d d d}| 
|
j||fg d S )Nr   rD   rF   r?   rG   r&   rH   rI   rN   rO   z/name/parent%2FchildrP   rV   )r	   rE   r\   r   r]   r^   r_   r   r   r`   ra   rl   rd   re   r   r   r   (test_generate_signed_url_w_slash_in_name   s0    
*
z2Test_Blob.test_generate_signed_url_w_slash_in_namec              	   C   s   ddl m} ddlm} d}d}t }t|}t|}| j||d}d}	t }
|||
d* |j	|d	d
}| 
||	 W d    n1 s0    Y  d|f }tjf}d|d	|d d d d d}| 
|
j||fg d S )Nr   rD   rF   r   rG   r&   rH   rI   POST)rR   rM   rN   rP   rV   )r	   rE   r\   r   r]   r^   r_   r   r   r`   ra   rb   rc   rd   re   r   r   r   %test_generate_signed_url_w_method_arg   s2    *

z/Test_Blob.test_generate_signed_url_w_method_argc                 C   sT   ddl m} d}d|idf}t|}t|}t|}| j||d}| |  d S )Nr   	NOT_FOUNDZnonesuchstatus    r&   )six.moves.http_clientrs   rX   rY   r   r   r   exists)r	   rs   ZNONESUCHnot_found_responser^   r_   r   r   r   r   r   test_exists_miss  s    zTest_Blob.test_exists_missc                 C   s^   ddl m} d}d|idf}t|}t|}t|}| j||d}d|j|< | |  d S )Nr   OKr   rt   ru   r&      )	rv   r{   rX   rY   r   r   _blobsr   rw   )r	   r{   r   Zfound_responser^   r_   r   r   r   r   r   test_exists_hit  s    
zTest_Blob.test_exists_hitc                 C   sz   ddl m} d}d|idf}t|}t|}t|}| j||d}d|j|< |  | |	  | 
|j|d fg d S )Nr   rr   r   rt   ru   r&   r|   )rv   rs   rX   rY   r   r   r}   deleter   rw   r   _deleted)r	   rs   r   rx   r^   r_   r   r   r   r   r   test_delete  s    
zTest_Blob.test_deletec                 C   s   ddl m} ddl m} ddlm} d}d}|dd}|d	d}t|d
f|df}|dd}	|	d|ifg|_t|}
t|
}| j	||d}| }|
| | | d | |j| d S )Nr   rz   PARTIAL_CONTENTBytesIOr   http://example.com/media/bytes 0-2/6rt   zcontent-rangebytes 3-5/6   abc   defzapplication/json)rt   zcontent-type	mediaLinkr&      abcdef)rv   r{   r   ior   rX   
_responsesrY   r   r   download_to_filer   getvalue
media_link)r	   r{   r   r   r   
MEDIA_LINKchunk1_responsechunk2_responser^   Zreload_responser_   r   r   fhr   r   r   #test_download_to_file_wo_media_link&  s0    

z-Test_Blob.test_download_to_file_wo_media_linkc                 C   s   ddl m} ddl m} ddlm} d}|dd}|dd}t|d	f|d
f}t|}	t|	}
d}d|i}| j||
|d}|d urd|_	||_
| }|| | | d d S )Nr   rz   r   r   r   r   r   r   r   r   r   r   r   r|   r   )rv   r{   r   r   r   rX   rY   r   r   r!   r   r   r   r   )r	   r   r{   r   r   r   r   r   r^   r_   r   r   r   r   r   r   r   r   _download_to_file_helper@  s2    
z"Test_Blob._download_to_file_helperc                 C   s   |    d S rg   r   rh   r   r   r   test_download_to_file_defaultY  s    z'Test_Blob.test_download_to_file_defaultc                 C   s   | j dd d S )N   )r   r   rh   r   r   r   %test_download_to_file_with_chunk_size\  s    z/Test_Blob.test_download_to_file_with_chunk_sizec              	   C   s:  dd l }dd l}ddlm} ddlm} ddlm} d}|dd}|dd}t|d	f|d
f}	t|	}
t	|
}d}|dd}| j
|||d}d|_d|_| n}||j t|jd6}| }|j|j}||j }W d    n1 s0    Y  W d    n1 s0    Y  | |d | || d S )Nr   rz   r   _NamedTemporaryFiler   r   r   r   r   r   r   2014-12-06T13:13:50.690Zr   updatedr   r|   r   rbr   )ostimerv   r{   r   rW   r   rX   rY   r   r   r!   r   download_to_filenamer   openreadr5   getmtimemktimer   	timetupler   )r	   r   r   r{   r   r   r   r   r   r^   r_   r   r   r   r   tempfile_objwrotemtimeupdatedTimer   r   r   test_download_to_filename_  sB    Nz#Test_Blob.test_download_to_filenamec              	   C   s  dd l }dd l}ddlm} ddlm} ddlm} d}d}d}d}	|d	d
}
|dd
}t|
df|df}t|}t	|}d}|dd}| j
|||d}d|_d|_| t}|j|j|d t|jd6}| }|j|j}||j }W d    n1 s0    Y  W d    n1 s&0    Y  |jj}tdd |d d  D }| |d d | |d | | |d |	 | |d | || d S )Nr   rz   r   r   r    aa426195405adee2c8081bb9e7e74b19,YWE0MjYxOTU0MDVhZGVlMmM4MDgxYmI5ZTdlNzRiMTk=,V3Kwe46nKc3xLv96+iJ707YfZfFvlObta8TQcx2gpm0=r   r   r   r   r   r   r   r   r   r|   r   encryption_keyr   c                 S   s    g | ]\}}|  t|fqS r   titlestr.0xyr   r   r   
<listcomp>  ru   z=Test_Blob.test_download_to_filename_w_key.<locals>.<listcomp>headersX-Goog-Encryption-AlgorithmAES256X-Goog-Encryption-KeyX-Goog-Encryption-Key-Sha256r   )r   r   rv   r{   r   rW   r   rX   rY   r   r   r!   r   r   r   r   r   r5   r   r   r   r   http
_requesteddictitemsr   )r	   r   r   r{   r   r   r   KEYHEADER_KEY_VALUEHEADER_KEY_HASH_VALUEr   r   r^   r_   r   r   r   r   r   r   r   r   r   rqr   r   r   r   test_download_to_filename_w_key  sZ    P
z)Test_Blob.test_download_to_filename_w_keyc                 C   s   ddl m} ddl m} d}|dd}|dd}t|df|d	f}t|}t|}d
}	d|	i}
| j|||
d}d|_d|_|	 }| 
|d d S )Nr   rz   r   r   r   r   r   r   r   r   r   r   r|   r   r   )rv   r{   r   rX   rY   r   r   r!   r   Zdownload_as_stringr   )r	   r{   r   r   r   r   r^   r_   r   r   r   r   Zfetchedr   r   r   test_download_as_string  s,    z!Test_Blob.test_download_as_stringc                 C   sj   d}t  }t|}t|}| j||d}t }| t |j|d d W d    n1 s\0    Y  d S )Nr   r&   )size)rX   rY   r   r   r    r,   r-   upload_from_file)r	   r   r^   r_   r   r   r   r   r   r   "test_upload_from_file_size_failure  s    z,Test_Blob.test_upload_from_file_size_failure   c              	   C   s  ddl m} ddlm} ddlm} ddlm}	 d}
d}|d u rD|}d|i}t|d	f}t|}t	|}| j
|
||d
}d|_||_|	 }t|jd}|| W d    n1 s0    Y  t|jd }|j|d|d W d    n1 s0    Y  W d    n1 s0    Y  |jj}| t|d | |d d d |d d }||\}}}}}| |d | |d | |d | t||d|
d tdd |d d  D }| |d d | |d | d S )Nr   rz   	parse_qslurlsplitr   r      ABCDEFrt      {}r   r|   wbr   T)rewindrT   rR   rp   urir   example.com	/b/name/omediaZ
uploadTyper   c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r     ru   zBTest_Blob._upload_from_file_simple_test_helper.<locals>.<listcomp>r   Content-Length6Content-Type)rv   r{   six.moves.urllib.parser   r   rW   r   rX   rY   r   r   r!   r   r   r   writer   r   r   r   lenr   r   )r	   r   content_type_argexpected_content_typer   rt   r{   r   r   r   r   DATAresponser^   r_   r   r   r   r   r   r   schemenetlocr5   qs_r   r   r   r   $_upload_from_file_simple_test_helper  sP    (Dz.Test_Blob._upload_from_file_simple_test_helperc              	      sd  ddl m} ddlm} ddlm} ddlm} d}d}d ||d	}|jd
d}d|i}	t|df|df|	df}
t	|
}t
|}| j||d}d|_d|_ddlm} | } fdd}t||_dd }||_|| t|d |
jj}| t|d tdd |d d D }| |d d | |d d |d d }||\}}}}}| |d! | |d" | |d# | t||d$|d% | |d d&d'd dd( td)d |d d D }| |d* d+ | |d d,| d d d dd- td.d |d/ d D }| |d* d0 | |d/ d,| dd  d dd- d S )1Nr   rz   r   r   http_wrapperr   "http://example.com/upload/name/keys   ABCDErt   location	bytes 0-4rt   rangert   ru   r   r&   r|   r   )_Streamc                    s&   |   t k r| jS |  p dS d S )NT)tellr   _closedclose)streamr   r   r   is_stream_closed  s    z@Test_Blob.test_upload_from_file_stream.<locals>.is_stream_closedc                  S   s   ddl m}  |  d S )Nr   UnsupportedOperation)r   r   r   r   r   r   fileno_mock#  s    z;Test_Blob.test_upload_from_file_stream.<locals>.fileno_mockclosedr   c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r   3  ru   z:Test_Blob.test_upload_from_file_stream.<locals>.<listcomp>r   r   0X-Upload-Content-Typeapplication/octet-streamr   r   r   r   	resumabler   rp    rR   bodyconnection_typeredirectionsc                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r   H  ru   Content-Rangezbytes 0-4/*PUTrR   r   r  r  r  c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r   T  ru      z	bytes */5)rv   r{   r   r   r   gcloud.streamingr   RESUME_INCOMPLETErX   rY   r   r   r!   r   Zgcloud.streaming.test_transferr   propertyr   filenor   delattrr   r   r   r   r   r   r   )r	   r{   r   r   r   r   
UPLOAD_URLloc_responser   r   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r5   r   r   r   r   r   test_upload_from_file_stream  s    







	

z&Test_Blob.test_upload_from_file_streamc                 C   s   | j dd d S )Nr  r   r   rh   r   r   r   test_upload_from_file_simple^  s    z&Test_Blob.test_upload_from_file_simplec                 C   sR   ddl m} ddlm} | | | j|d W d    n1 sD0    Y  d S )Nr   rr   NotFound)rt   )rv   rs   gcloud.exceptionsr  r,   r   )r	   rs   r  r   r   r   &test_upload_from_file_simple_not_foundb  s    z0Test_Blob.test_upload_from_file_simple_not_foundc                 C   s   | j dd d d S )Nr  )r   r   r  rh   r   r   r   .test_upload_from_file_simple_w_chunk_size_Noneh  s    z8Test_Blob.test_upload_from_file_simple_w_chunk_size_Nonec                 C   s   d}| j d|i|d d S Nfoo/barcontentType)r   r   r  r	   EXPECTED_CONTENT_TYPEr   r   r   .test_upload_from_file_simple_with_content_typem  s
    z8Test_Blob.test_upload_from_file_simple_with_content_typec                 C   s   d}| j ||d d S Nr  )r   r   r  r   r   r   r   5test_upload_from_file_simple_with_content_type_passeds  s
    z?Test_Blob.test_upload_from_file_simple_with_content_type_passedc                 C   s    d}d}| j d|i||d d S Nr  zfoo/bazr  )r   r   r   r  r	   r!  ZALT_CONTENT_TYPEr   r   r   6test_upload_from_file_simple_both_content_type_sourcesy  s    z@Test_Blob.test_upload_from_file_simple_both_content_type_sourcesc              
   C   s  ddl m} ddlm} ddlm} ddlm} ddlm} ddlm	} ddlm
} d	}d
}	d}
||	d}|jdd}d|i}t|df|df|df}t|}t|}| j||d}d|_d|_||dd | }t|jd}||
 W d    n1 s0    Y  t|jd}|j|dd W d    n1 s@0    Y  W d    n1 s`0    Y  W d    n1 s0    Y  |jj}| t|d tdd |d d D }| |d d | |d  d! |d d"}||\}}}}}| |d# | |d$ | |d% | t||d&|d' | |d d(d)d dd* td+d |d d D }| |d, d- | |d d.|	|
d d d dd/ td0d |d1 d D }| |d, d2 | |d1 d.|	|
dd  d dd/ d S )3Nr   rz   r   r   rD   r   r   transferr   r   r   r   r   r   rt   ru   r   r&   r|   r   ZRESUMABLE_UPLOAD_THRESHOLDr   r   Tr   r   c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r     ru   z=Test_Blob.test_upload_from_file_resumable.<locals>.<listcomp>r   X-Upload-Content-Lengthr   r  r  r   r   r   r   r  r   rp   r  r  c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r     ru   r	  zbytes 0-4/6r
  r  c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r     ru   r  zbytes 5-5/6)rv   r{   r   r   r   rW   rE   r   r  r   r)  r  rX   rY   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   r   )r	   r{   r   r   rE   r   r   r)  r   r  r   r  r   r   r^   r_   r   r   r   r   r   r   r   r   r   r5   r   r   r   r   r   test_upload_from_file_resumable  s    
*n



	

z)Test_Blob.test_upload_from_file_resumablec                 C   sb  ddl m} ddlm} ddlm} ddlm} ddlm} ddlm	} ddl
m} d	}d
}	d|i}
t|
df}t|}t|}| j||d}d|_d|_||dd | }t|jd}||	 W d    n1 s0    Y  t|jdJ}| | |j|dd W d    n1 s$0    Y  W d    n1 sD0    Y  W d    n1 sd0    Y  W d    n1 s0    Y  |jj}| t|d tdd |d d D }| |d d | |d d |d d}||\}}}}}| |d | |d | |d | t||d |d! | |d d"d#d dd$ d S )%Nr   rr   r   r   rD   r   r(  )	HttpErrorr   r   rt   s   {"error": "no such bucket"}r&   r|   r   r*  r   r   Tr+  c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r     ru   zETest_Blob.test_upload_from_file_resumable_w_error.<locals>.<listcomp>r   r,  r   r  r  r   r   r   r   r  r   rp   r  r  )rv   rs   r   r   r   rW   rE   r   r  r)  Zgcloud.streaming.exceptionsr.  rX   rY   r   r   r!   r   r   r   r   r,   r   r   r   r   r   r   r   r   )r	   rs   r   r   rE   r   r)  r.  r   r   r  r^   r_   r   r   r   r   r   r   r   r   r   r5   r   r   r   r   r   'test_upload_from_file_resumable_w_error  s`    (

z1Test_Blob.test_upload_from_file_resumable_w_errorc              	   C   s\  ddl m} ddlm} ddlm} ddlm} ddlm} d}d}d	}||d
}	|j	dd}
d|i}t
|	df|
df|df}t|}t|}| j||d}d|_d|_| }t|jd}|| W d    n1 s0    Y  t|jd2}|j|dd | | t| W d    n1 s,0    Y  W d    n1 sL0    Y  |jj}| t|d | |d d d | |d d | | |d d d  | |d d d |d d }||\}}}}}| |d | |d | |d | t||d dd! td"d# |d d$  D }| |d% d& | |d' d( d S ))Nr   rz   r   r   r   r   r?   z-http://example.com/upload/name/parent%2Fchildr   r   r   r   rt   {}r  r&   r|   r   r   r   Tr+  r  r  r  rR   rp   r   r   r   r   r   r   c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r   9  ru   zCTest_Blob.test_upload_from_file_w_slash_in_name.<locals>.<listcomp>r   r   r   r   r  )rv   r{   r   r   r   rW   r   r  r   r  rX   rY   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   r   )r	   r{   r   r   r   r   r   r  r   r  r   r   r^   r_   r   r   r   r   r   r   r   r   r5   r   r   r   r   r   r   %test_upload_from_file_w_slash_in_name  s`    
(Tz/Test_Blob.test_upload_from_file_w_slash_in_namec              	   C   s0  ddl m} ddlm} ddlm} ddlm} ddlm} d}d}d	}d
}	d}
d}d}d|i}||d}|j	dd}d|i}t
|df|df|df}t|}t|}| j|||d}d|_d|_|ddX}t|jd}|| W d    n1 s0    Y  |j|j||	d W d    n1 s,0    Y  |jj}| t|d | |d d d |d d }||\}}}}}| |d | |d  | |d! | t||d"|d# td$d% |d d&  D }| |d' d( | |d) |
 | |d* | | |d+ d, | |d- d d S ).Nr   rz   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   rt   r0  r  r   r|   r   .jpegsuffixr   )rT   r   rR   rp   r   r   r   r   r   r   c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r   n  ru   z=Test_Blob.test_upload_from_filename_w_key.<locals>.<listcomp>r   r   r   r   r   r   r   r   rv   r{   r   r   r   rW   r   r  r   r  rX   rY   r   r   r!   r   r   r   r   Zupload_from_filenamer   r   r   r   r   r   )r	   r{   r   r   r   r   r   r  r   r   r   r   r!  r   r  r   r   r^   r_   r   r   r   r   r   r   r   r   r5   r   r   r   r   r   r   test_upload_from_filename_w_key=  st    
(&
z)Test_Blob.test_upload_from_filename_w_keyc              	   C   s  ddl m} ddlm} ddlm} ddlm} ddlm} d}	d}
d	}||
d
}|j	dd}d|i}t
|df|df|df}t|}t|}| j|	||d}d|_d|_|ddV}t|jd}|| W d    n1 s0    Y  |j|j|d W d    n1 s0    Y  |jj}| t|d | |d d d |d d }||\}}}}}| |d | |d | |d | t||d|	d tdd  |d d!  D }| |d" d# | |d$ | d S )%Nr   rz   r   r   r   r   r   r   r   r   r   r   rt   r0  r  r   r|   r   r2  r3  r   rj   rR   rp   r   r   r   r   r   r   c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r     ru   z?Test_Blob._upload_from_filename_test_helper.<locals>.<listcomp>r   r   r   r   r5  )r	   r   r   r   r{   r   r   r   r   r   r  r   r  r   r   r^   r_   r   r   r   r   r   r   r   r   r5   r   r   r   r   r   r   !_upload_from_filename_test_helperv  s^    
(&z+Test_Blob._upload_from_filename_test_helperc                 C   s   | j dd d S )N
image/jpegr  r7  rh   r   r   r   test_upload_from_filename  s    z#Test_Blob.test_upload_from_filenamec                 C   s   d}| j d|i|d d S r  r9  r   r   r   r   +test_upload_from_filename_with_content_type  s
    z5Test_Blob.test_upload_from_filename_with_content_typec                 C   s   d}| j ||d d S r#  r9  r   r   r   r   2test_upload_from_filename_with_content_type_passed  s
    z<Test_Blob.test_upload_from_filename_with_content_type_passedc                 C   s    d}d}| j d|i||d d S r%  r9  r&  r   r   r   3test_upload_from_filename_both_content_type_sources  s    z=Test_Blob.test_upload_from_filename_both_content_type_sourcesc                 C   s  ddl m} ddlm} ddlm} ddlm} d}d}d}||d	}|jd
d}	d|i}
t|df|	df|
df}t	|}t
|}| j||d}d|_d|_|| |jj}| t|d | |d d d |d d }||\}}}}}| |d | |d | |d | t||d|d tdd |d d  D }| |d d | |d d  | |d d! | d S )"Nr   rz   r   r   r   r   r   r   r   r   r   rt   r0  r  r&   r|   r   rR   rp   r   r   r   r   r   r   c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r     ru   z=Test_Blob.test_upload_from_string_w_bytes.<locals>.<listcomp>r   r   r   r   
text/plainr  )rv   r{   r   r   r   r  r   r  rX   rY   r   r   r!   r   upload_from_stringr   r   r   r   r   r   )r	   r{   r   r   r   r   r  r   r  r   r   r^   r_   r   r   r   r   r   r   r5   r   r   r   r   r   r   test_upload_from_string_w_bytes  sP    

z)Test_Blob.test_upload_from_string_w_bytesc                 C   s  ddl m} ddlm} ddlm} ddlm} d}d}d}|d	}||d
}	|jdd}
d|i}t	|	df|
df|df}t
|}t|d}| j||d}d|_d|_|| |jj}| t|d | |d d d |d d }||\}}}}}| |d | |d | |d | t||d|d tdd |d d  D }| |d tt| | |d  d! | |d d" | d S )#Nr   rz   r   r   r   r   r   	   ABCDEFሴutf-8r   r   r   rt   r0  r  r_   r&   r|   r   rR   rp   r   r   r   r   r   r   c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r   	  ru   z<Test_Blob.test_upload_from_string_w_text.<locals>.<listcomp>r   r   r   r>  r  rv   r{   r   r   r   r  r   encoder  rX   rY   r   r   r!   r   r?  r   r   r   r   r   r   r   )r	   r{   r   r   r   r   r  r   ENCODEDr  r   r   r^   r_   r   r   r   r   r   r   r5   r   r   r   r   r   r   test_upload_from_string_w_text  sR    



z(Test_Blob.test_upload_from_string_w_textc                 C   s  ddl m} ddlm} ddlm} ddlm} d}d}d}d	}d
}	d}
|
d}||	d}|jdd}d|i}t	|df|df|df}t
|}t|d}| j||d}d|_d|_|j|
|d |jj}| t|d | |d d d |d d }||\}}}}}| |d | |d | |d | t||d|d td d! |d d"  D }| |d# d$ | |d% | | |d& | | |d' tt| | |d( d) | |d d* | d S )+Nr   rz   r   r   r   r   r   r   r   r   rA  rB  r   r   r   rt   r0  r  rC  r&   r|   r   r   rR   rp   r   r   r   r   r   r   c                 S   s    g | ]\}}|  t|fqS r   r   r   r   r   r   r   4  ru   z@Test_Blob.test_upload_from_string_text_w_key.<locals>.<listcomp>r   r   r   r   r   r   r   r>  r  rD  )r	   r{   r   r   r   r   r   r   r   r  r   rF  r  r   r   r^   r_   r   r   r   r   r   r   r5   r   r   r   r   r   r   "test_upload_from_string_text_w_key  sb    



z,Test_Blob.test_upload_from_string_text_w_keyc                 C   s   ddl m} ddlm} d}d|jdg}d|id|if}t|}t|}t|d	}| j||d
}	d|	j	_
|	  | t|	j	| |j}
| t|
d | |
d d d | |
d d d|  | |
d d d|i | |
d d ddi d S )Nr   rz   )
_ACLEntityr   ZallUsers)entityZrolert   r1   rC  r&   Tr|   rR   PATCHr5   r;   dataquery_paramsZ
projectionfull)rv   r{   r0   rI  ZREADER_ROLErX   rY   r   r   r1   r   Zmake_publicr   listr   r   )r	   r{   rI  r   Z
permissiveafterr^   r_   r   r   r   r   r   r   test_make_public>  s$    
zTest_Blob.test_make_publicc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   no-cacheZcacheControlr   r   r   r   Zcache_control)r	   r   r   CACHE_CONTROLr   r   r   r   r   test_cache_control_getterR  s    z#Test_Blob.test_cache_control_getterc                 C   sB   d}d}t  }| j||d}| |jd  ||_| |j| d S )Nr   rR  r&   rS  )r	   r   rT  r   r   r   r   r   test_cache_control_setterZ  s    z#Test_Blob.test_cache_control_setterc                 C   s0   t  }d}| jd|d|id}| |j| d S N*   r   ZcomponentCountr   r    r   r   component_countr	   r#   ZCOMPONENT_COUNTr   r   r   r   test_component_countc  s    zTest_Blob.test_component_countc                 C   s&   t  }| jd|d}| |jd  d S r%   rY  r	   r#   r   r   r   r   test_component_count_unsetj  s    z$Test_Blob.test_component_count_unsetc                 C   s4   t  }d}| jd|dt|id}| |j| d S rW  )r    r   r   r   rZ  r[  r   r   r   test_component_count_string_valo  s    
z)Test_Blob.test_component_count_string_valc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr    Attachment; filename=example.jpgZcontentDispositionr   r   r   r   content_disposition)r	   r   r   CONTENT_DISPOSITIONr   r   r   r   r   test_content_disposition_getterw  s    z)Test_Blob.test_content_disposition_getterc                 C   sB   d}d}t  }| j||d}| |jd  ||_| |j| d S )Nr   r`  r&   ra  )r	   r   rc  r   r   r   r   r   test_content_disposition_setter  s    z)Test_Blob.test_content_disposition_setterc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   gzipZcontentEncodingr   r   r   r   content_encoding)r	   r   r   CONTENT_ENCODINGr   r   r   r   r   test_content_encoding_getter  s    z&Test_Blob.test_content_encoding_getterc                 C   sB   d}d}t  }| j||d}| |jd  ||_| |j| d S )Nr   rf  r&   rg  )r	   r   ri  r   r   r   r   r   test_content_encoding_setter  s    z&Test_Blob.test_content_encoding_setterc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   pt-BRZcontentLanguager   r   r   r   Zcontent_language)r	   r   r   CONTENT_LANGUAGEr   r   r   r   r   test_content_language_getter  s    z&Test_Blob.test_content_language_getterc                 C   sB   d}d}t  }| j||d}| |jd  ||_| |j| d S )Nr   rl  r&   rm  )r	   r   rn  r   r   r   r   r   test_content_language_setter  s    z&Test_Blob.test_content_language_setterc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   r8  r  r   r   r   r   rT   )r	   r   r   rk   r   r   r   r   r   test_content_type_getter  s    z"Test_Blob.test_content_type_getterc                 C   sB   d}d}t  }| j||d}| |jd  ||_| |j| d S )Nr   r8  r&   rq  )r	   r   rk   r   r   r   r   r   test_content_type_setter  s    z"Test_Blob.test_content_type_setterc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   DEADBEEFcrc32cr   r   r   r   ru  )r	   r   r   CRC32Cr   r   r   r   r   test_crc32c_getter  s    zTest_Blob.test_crc32c_getterc                 C   sB   d}d}t  }| j||d}| |jd  ||_| |j| d S Nr   rt  r&   rv  )r	   r   rw  r   r   r   r   r   test_crc32c_setter  s    zTest_Blob.test_crc32c_setterc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   ETAGetagr   )r   r   r   r|  )r	   r   r   r{  r   r   r   r   r   	test_etag  s    zTest_Blob.test_etagc                 C   s0   t  }d}| jd|d|id}| |j| d S NrX  r   rU   r   r    r   r   rU   r	   r#   Z
GENERATIONr   r   r   r   test_generation  s    zTest_Blob.test_generationc                 C   s&   t  }| jd|d}| |jd  d S r%   r  r]  r   r   r   test_generation_unset  s    zTest_Blob.test_generation_unsetc                 C   s4   t  }d}| jd|dt|id}| |j| d S r~  )r    r   r   r   rU   r  r   r   r   test_generation_string_val  s    
z$Test_Blob.test_generation_string_valc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   IDidr   )r   r   r   r  )r	   r   r   r  r   r   r   r   r   test_id  s    zTest_Blob.test_idc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   rt  Zmd5Hashr   r   r   r   Zmd5_hash)r	   r   r   MD5_HASHr   r   r   r   r   test_md5_hash_getter  s    zTest_Blob.test_md5_hash_getterc                 C   sB   d}d}t  }| j||d}| |jd  ||_| |j| d S ry  r  )r	   r   r  r   r   r   r   r   test_md5_hash_setter  s    zTest_Blob.test_md5_hash_setterc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   r   r   r   )r   r   r   r   )r	   r   r   r   r   r   r   r   r   test_media_link   s    zTest_Blob.test_media_linkc                 C   s<   d}t  }ddi}d|i}| j|||d}| |j| d S )Nr   fooFoometadatar   r   r   r   r  )r	   r   r   METADATAr   r   r   r   r   test_metadata_getter  s    zTest_Blob.test_metadata_getterc                 C   sF   d}ddi}t  }| j||d}| |jd  ||_| |j| d S )Nr   r  r  r&   r  )r	   r   r  r   r   r   r   r   test_metadata_setter  s    zTest_Blob.test_metadata_setterc                 C   s0   t  }d}| jd|d|id}| |j| d S NrX  r   metagenerationr   r    r   r   r  r	   r#   ZMETAGENERATIONr   r   r   r   test_metageneration  s    zTest_Blob.test_metagenerationc                 C   s&   t  }| jd|d}| |jd  d S r%   r  r]  r   r   r   test_metageneration_unset   s    z#Test_Blob.test_metageneration_unsetc                 C   s4   t  }d}| jd|dt|id}| |j| d S r  )r    r   r   r   r  r  r   r   r   test_metageneration_string_val%  s    
z(Test_Blob.test_metageneration_string_valc                 C   sV   d}t  }ddd}d|i}| j|||d}|j}| |d d | |d d d S )	Nr   zproject-owner-12345Z23456)rJ  entityIdownerr   rJ  r  )r   r   r  r   )r	   r   r   ZOWNERr   r   r  r   r   r   
test_owner-  s    
zTest_Blob.test_ownerc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   http://example.com/self/ZselfLinkr   )r   r   r   Z	self_link)r	   r   r   Z	SELF_LINKr   r   r   r   r   test_self_link7  s    zTest_Blob.test_self_linkc                 C   s0   t  }d}| jd|d|id}| |j| d S NrX  r   r   r   r    r   r   r   r	   r#   ZSIZEr   r   r   r   	test_size?  s    zTest_Blob.test_sizec                 C   s&   t  }| jd|d}| |jd  d S r%   r  r]  r   r   r   test_size_unsetF  s    zTest_Blob.test_size_unsetc                 C   s4   t  }d}| jd|dt|id}| |j| d S r  )r    r   r   r   r   r  r   r   r   test_size_string_valK  s    
zTest_Blob.test_size_string_valc                 C   s8   d}t  }d}d|i}| j|||d}| |j| d S )Nr   r  ZstorageClassr   )r   r   r   Zstorage_class)r	   r   r   ZSTORAGE_CLASSr   r   r   r   r   test_storage_classR  s    zTest_Blob.test_storage_classc           
   	   C   sv   dd l }ddlm} ddlm} d}t }|j ddddd	d
|d}||}d|i}| j|||d}	| |	j| d S )Nr   _RFC3339_MICROSUTCr     r+   r   r(   "   %   tzinfoZtimeDeletedr   )	datetimegcloud._helpersr  r  r   strftimer   r   time_deleted)
r	   r  r  r  r   r   	TIMESTAMPZTIME_DELETEDr   r   r   r   r   test_time_deletedZ  s    
zTest_Blob.test_time_deletedc                 C   s&   t  }| jd|d}| |jd  d S r%   )r    r   r   r  r]  r   r   r   test_time_deleted_unsetf  s    z!Test_Blob.test_time_deleted_unsetc           
   	   C   sv   dd l }ddlm} ddlm} d}t }|j ddddd	d
|d}||}d|i}| j|||d}	| |	j| d S )Nr   r  r  r   r  r+   r   r(   r  r  r  r   r   )	r  r  r  r  r   r  r   r   r   )
r	   r  r  r  r   r   r  ZUPDATEDr   r   r   r   r   test_updatedk  s    
zTest_Blob.test_updatedc                 C   s&   t  }| jd|d}| |jd  d S r%   )r    r   r   r   r]  r   r   r   test_updated_unsetw  s    zTest_Blob.test_updated_unset)N)N)NNNr   N)NNN)\__name__
__module____qualname__r   r   r$   r'   r*   r.   r4   r9   r:   r>   r@   rB   rC   rf   ri   rm   rn   ro   rq   ry   r~   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r"  r$  r'  r-  r/  r1  r6  r7  r:  r;  r<  r=  r@  rG  rH  rQ  rU  rV  r\  r^  r_  rd  re  rj  rk  ro  rp  rr  rs  rx  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r      s   			
$" 

#-
     
/`T629   
1'(0								
r   c                   @   s   e Zd Zdd Zdd ZdS )
_Responderc                 G   s   |d d  | _ g | _d S rg   )r   r   r	   	responsesr   r   r   __init__  s    z_Responder.__init__c                 K   s,   | j | | jd | jdd   }| _|S )Nr   r|   )r   appendr   )r	   r   r   r   r   r   _respond  s    z_Responder._respondN)r  r  r  r  r  r   r   r   r   r  }  s   r  c                       s@   e Zd ZdZdZe Z fddZdd Zdefdd	Z	  Z
S )
rX   zhttp://example.comztesting 1.2.3c                    s$   t t| j|  g | _t| | _d S rg   )superrX   r  r[   _HTTPr   r  	__class__r   r   r    s    z_Connection.__init__c                 K   sF   ddl m} ddlm} | jf i |\}}|d|krB|||S )Nr   rr   r  rt   )rv   rs   r  r  r  get)r	   r   rs   r  infocontentr   r   r   api_request  s    z_Connection.api_requestNc                 C   sT   ddl m} ddl m} ddl m} ||p,i }||\}}	}
}
}
|||	||dfS )Nr   )	urlencoder   )
urlunsplitr  )r   r  r   r  )r	   r5   rM  Zapi_base_urlr  r   r  r   r   r   r   r   r   r   build_api_url  s    z_Connection.build_api_url)r  r  r  ZAPI_BASE_URLZ
USER_AGENTr    rL   r  r  r  __classcell__r   r   r  r   rX     s   rX   c                   @   s   e Zd Zi Zdd ZdS )r  c                 K   s,   t |dr| }| jf ||||d|S )Nr   )r   rR   r   r  )hasattrr   r  )r	   r   rR   r   r  r   r   r   r   request  s    
z_HTTP.requestN)r  r  r  connectionsr  r   r   r   r   r    s   r  c                   @   s(   e Zd ZdZdZdddZd	ddZdS )
r   z/b/namer   Nc                 C   s2   |d u rt  }t|}|| _i | _g | _g | _d S rg   )rX   rY   r_   r}   Z_copiedr   )r	   r_   r^   r   r   r   r    s    z_Bucket.__init__c                 C   s   | j |= | j||f d S rg   )r}   r   r  )r	   Z	blob_namer_   r   r   r   delete_blob  s    z_Bucket.delete_blob)N)N)r  r  r  r5   r   r  r  r   r   r   r   r     s   
	r   c                   @   s   e Zd Zdd Zdd ZdS )rZ   c                 C   s
   g | _ d S rg   )r[   rh   r   r   r   r    s    z_Signer.__init__c                 O   s   | j ||f d|d S )NzGhttp://example.com/abucket/a-blob-name?Signature=DEADBEEF&Expiration=%srQ   )r[   r  r  )r	   r
   kwargsr   r   r   __call__  s    z_Signer.__call__N)r  r  r  r  r  r   r   r   r   rZ     s   rZ   c                   @   s    e Zd Zdd Zedd ZdS )rY   c                 C   s
   || _ d S rg   _connection)r	   r^   r   r   r   r    s    z_Client.__init__c                 C   s   | j S rg   r  rh   r   r   r   r^     s    z_Client.connectionN)r  r  r  r  r  r^   r   r   r   r   rY     s   rY   )
Z	unittest2ZTestCaser   r    r  rX   r  r   rZ   rY   r   r   r   r   <module>   s"             u