
                             d Z ddlmZ ddlmZ ddlmZ ddlZddlmZ ddlm	Z	 ddlm
Z
 d	 Zd
 Zd Z G d de	j                        Z G d de	j                         Zy)z$S3 API-specific resource subclasses.    )absolute_import)division)unicode_literalsN)errors)resource_reference)resource_utilc                 >   t        | t              r| D cg c]  }t        |       c}S t        | t              st	        j
                  |       S t        j                  t        | j                                     }|j                         D ]  \  }}t        |t              rt        |      ||<   %t        |t              r!|D cg c]  }t        |       }}|sP|||<   V|st	        j                  |      snt	        j
                  |      ||<    |S c c}w c c}w )zSee _get_json_dump docstring.)
isinstancelist_json_dump_recursion_helperdictr   convert_to_json_parsable_typecollectionsOrderedDictsorteditems$should_preserve_falsy_metadata_value)metadataitemformatted_dictkeyvalueformatted_lists         Ilib/googlecloudsdk/command_lib/storage/resources/s3_resource_reference.pyr   r      s    $:BC($'-(CC	Hd	#66x@@ **6(..2B+CD."((*jc5%7>nS	E4	 FKLed3D9enL	,s	-DDUK)GGNnS + 
) D Ms   DDc           
          t        j                  t        j                  d| j                  j
                  fd| j                  fdt        | j                        fg            S )zFormats S3 resource metadata as JSON.

  Args:
    resource (S3BucketResource|S3ObjectResource): Resource object.

  Returns:
    Formatted JSON string.
  urltyper   )	r   configured_json_dumpsr   r   storage_url
url_stringTYPE_STRINGr   r   )resources    r   _get_json_dumpr#   6   s`     
	,	,(&&11
28''
(283D3DE
F 	

 
    c                 d    t        | t        j                        r| S t        j                  |       S )z4Returns error if value is error or existence string.)r
   r   XmlApiErrorr   get_exists_string)r   s    r   _get_error_or_exists_stringr(   G   s(    v))*L**511r$   c                       e Zd ZdZd Zy)S3BucketResource,API-specific subclass for handling metadata.c                     t        |       S Nr#   selfs    r   get_json_dumpzS3BucketResource.get_json_dumpR       $r$   N)__name__
__module____qualname____doc__r1    r$   r   r*   r*   O   s
    4 r$   r*   c                   |     e Zd ZdZdddddddej
                  ddddddddddddddddddf fd	Zd Z fdZ xZ	S )S3ObjectResourcer+   Nc                 l    t         t        |   |||||||||	|
||||||||||||||||       || _        y)zInitializes S3ObjectResource.N)superr9   __init__tags)r0   storage_url_objectaclcache_controlcomponent_countcontent_dispositioncontent_encodingcontent_languagecontent_typecrc32c_hashcreation_timer=   custom_fieldscustom_timedecryption_key_hash_sha256encryption_algorithmetagevent_based_holdkms_keymd5_hashr   metagenerationnoncurrent_timeretention_expirationsizestorage_classtemporary_holdupdate_time	__class__s                               r   r<   zS3ObjectResource.__init__Z   sm    B 

D*"58 DIr$   c                     t        |       S r-   r.   r/   s    r   r1   zS3ObjectResource.get_json_dump   r2   r$   c                     t        || j                        st        S t        t        |   |      xr | j                  |j                  k(  S r-   )r
   rW   NotImplementedr;   r9   __eq__r=   )r0   otherrW   s     r   r[   zS3ObjectResource.__eq__   sA    eT^^,,U3 	$II#r$   )
r3   r4   r5   r6   r   NOT_SUPPORTED_DO_NOT_DISPLAYr<   r1   r[   __classcell__)rW   s   @r   r9   r9   V   ss    4  %AA!%?=B  r$   r9   )r6   
__future__r   r   r   r   googlecloudsdk.api_lib.storager   ,googlecloudsdk.command_lib.storage.resourcesr   r   r   r#   r(   BucketResourcer*   ObjectResourcer9   r7   r$   r   <module>rd      sV    + &  '  1 K F4
"2 )88  N)88 Nr$   