
    2                        d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlm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 G d d      Z G d dej*                        Zy)z%GCS API-specific resource subclasses.    )absolute_import)division)unicode_literalsN)encoding)full_resource_formatter)resource_reference)resource_utilc                 R    t        j                  t        j                  |             S )zSee _get_json_dump docstring.)jsonloadsr   MessageToJsonmetadatas    Jlib/googlecloudsdk/command_lib/storage/resources/gcs_resource_reference.py_json_dump_helperr      s    	H**84	55    c           
          t        j                  t        j                  d| j                  j
                  fd| j                  fdt        | j                        fg            S )zFormats GCS resource metadata for printing.

  Args:
    resource (GcsBucketResource|GcsObjectResource): Resource object.

  Returns:
    Formatted JSON string for printing.
  urltyper   )	r	   configured_json_dumpscollectionsOrderedDictstorage_url
url_stringTYPE_STRINGr   r   )resources    r   _get_json_dumpr   #   s`     
	,	,(&&11
28''
(():):;
< 	

 
r   c                    | t        | t              s| S g }| D ]  }|j                         }|j                  d      dk(  r$|j	                  dd       |j	                  dd       |j	                  dd       |j	                  dd       |j	                  dd       |j	                  dd       |j	                  d	d       |j                  |        |S )
z$Removes unnecessary fields from acl.Nkindzstorage#objectAccessControlobject
generationbucketidselfLinketag)
isinstancelistcopygetpopappend)aclformatted_acl	acl_entryacl_entry_copys       r   _get_formatted_aclr0   4   s    [
3-J-i^^%N&!%BB4(t,vt$x&tT"z4(vt$(  
r   c                   8    e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd Zy)GcsAnywhereCacheResourcezHolds Anywhere Cache metadata.Nc                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        || _        y N)admission_policyanywhere_cache_idr"   create_timer#   r   r   pending_updatestater   ttlupdate_timezone)selfr5   r6   r"   r7   	id_stringr   r   r8   r9   r   r:   r;   r<   s                 r   __init__z!GcsAnywhereCacheResource.__init__J   se      -D.DDK"DDGDIDM(DDJ"DDH"DDIr   c                    t        || j                        st        S | j                  |j                  k(  xrD | j                  |j                  k(  xr( | j
                  |j
                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r4   )r&   	__class__NotImplementedr5   r6   r"   r7   r#   r   r   r8   r9   r   r:   r;   r<   r=   others     r   __eq__zGcsAnywhereCacheResource.__eq__h   sS   eT^^,!7!77 	$""e&=&==	$KK5<<'	$  1 11	$ GGuxx		$
 II#	$ MMU^^+	$ 5#7#77	$ JJ%++%	$  1 11	$ HH		!	$  1 11	$ II#r   )NNNNNNNNNNNNN)__name__
__module____qualname____doc__r?   rE    r   r   r2   r2   G   s8    & 
<r   r2   c                        e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	 fd	Zed        Zed        Zed        Z fdZ	d Z
d Z xZS )
GcsBucketResourcea  API-specific subclass for handling metadata.

  Additional GCS Attributes:
    autoclass (dict|None): Autoclass settings for the bucket
    autoclass_enabled_time (datetime|None): Datetime Autoclass feature was
      enabled on bucket. None means the feature is disabled.
    custom_placement_config (dict|None): Dual Region of a bucket.
    default_acl (dict|None): Default object ACLs for the bucket.
    default_kms_key (str|None): Default KMS key for objects in the bucket.
    location_type (str|None): Region, dual-region, etc.
    per_object_retention (dict|None): Contains object retention settings for
      bucket.
    project_number (int|None): The project number to which the bucket belongs
      (different from project name and project ID).
    public_access_prevention (str|None): Public access prevention status.
    rpo (str|None): Recovery Point Objective status.
    satisfies_pzs (bool|None): Zone Separation status.
    soft_delete_policy (dict|None): Soft delete settings for bucket.
    uniform_bucket_level_access (bool|None): True if all objects in the bucket
      share ACLs rather than the default, fine-grain ACL control.
  c$                 >   t         t        |   |||||	||||||||||||"|#       || _        || _        || _        || _        |
| _        || _        || _	        || _
        || _        || _        || _        || _        || _        || _        || _        | | _        |!| _        y)z6Initializes resource. Args are a subset of attributes.)r,   cors_configcreation_timedefault_event_based_holddefault_storage_classr%   labelslifecycle_configlocationlogging_configmetagenerationr   requester_paysretention_policyr;   versioning_enabledwebsite_configN)superrL   r?   	autoclassautoclass_enabled_timecustom_placement_configdefault_acldefault_kms_keyip_filter_configlocation_typeper_object_retentionproject_numberpublic_access_preventionrposatisfies_pzssoft_delete_policyuniform_bucket_level_accessr!   soft_delete_timehard_delete_time)%r=   storage_url_objectr,   r\   r]   rN   rO   r^   r_   rP   r`   rQ   r%   ra   rR   rS   rT   rb   rU   r   r!   rV   rc   rd   re   rW   rX   rf   rg   rh   ri   r;   rj   rk   rY   rZ   rA   s%                                       r   r?   zGcsBucketResource.__init__   s    R 

T+#!93)%%%)-%% , ( DN"8D#:D "D*D,D&D 4D(D$<D!DH&D0D'BD$ DO,D,Dr   c                 R    | j                   r| j                   j                  d      S y )NdataLocations)r^   r)   r=   s    r   data_locationsz GcsBucketResource.data_locations   s%    ##))--o>>r   c                     | j                   r3| j                   j                  d      rt        | j                   d         S y )NretentionPeriod)rX   r)   intro   s    r   retention_periodz"GcsBucketResource.retention_period   s9    !6!6!:!:;L!M&&'89::r   c                 V    | j                   xr | j                   j                  dd      S )NisLockedF)rX   r)   ro   s    r   retention_policy_is_lockedz,GcsBucketResource.retention_policy_is_locked   s+    !! 9!!%%j%8:r   c                 (   t         t        |   |      xr| | j                  |j                  k(  xr` | j                  |j                  k(  xrD | j
                  |j
                  k(  xr( | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                   |j                   k(  S r4   )r[   rL   rE   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   r=   rD   rA   s     r   rE   zGcsBucketResource.__eq__   s   -e4 	-NNeoo-	-''5+G+GG	- ((E,I,II	-  1 11		-
   E$9$99	- !!U%;%;;	- %"5"55	- %%)C)CC	- 5#7#77	- ))U-K-KK	- HH		!	- %"5"55	- ##u'?'??	- ,,,,-r   c                     t        |       S r4   r   ro   s    r   get_json_dumpzGcsBucketResource.get_json_dump      $r   c                     t         j                  t        | j                        t         j                  t        | j
                        iS zSee base class.)r   ACL_KEYr0   r,   DEFAULT_ACL_KEYr_   ro   s    r   get_formatted_aclz#GcsBucketResource.get_formatted_acl
  s=     	 '');DHH)E//1C2
 r   )"NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN)rF   rG   rH   rI   r?   propertyrp   rt   rw   rE   r|   r   __classcell__rA   s   @r   rL   rL   |   s    2  ""# #
"&MM-^  
  
 : :( r   rL   c                   <    e Zd ZdZd Zed        Zed        Zd Zy)GcsHmacKeyResourcezHolds HMAC key metadata.c                     || _         y r4   r   )r=   r   s     r   r?   zGcsHmacKeyResource.__init__  s	    DMr   c                 J    t        | j                  dd       }t        |dd       S )Nr   accessIdgetattrr   )r=   key_metadatas     r   	access_idzGcsHmacKeyResource.access_id  s#    4==*d;L<T22r   c                 0    t        | j                  dd       S )Nsecretr   ro   s    r   r   zGcsHmacKeyResource.secret  s    4==(D11r   c                 l    t        || j                        st        S | j                  |j                  k(  S r4   )r&   rA   rB   r   rC   s     r   rE   zGcsHmacKeyResource.__eq__#  s)    eT^^,==ENN**r   N)	rF   rG   rH   rI   r?   r   r   r   rE   rJ   r   r   r   r     s7      3 3 2 2+r   r   c                   |     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fd	Z fdZd Zd Zd Z xZ	S )GcsObjectResourcea  API-specific subclass for handling metadata.

  Additional GCS Attributes:
    storage_class_update_time (datetime|None): Storage class update time.
    hard_delete_time (datetime|None): Time that soft-deleted objects will be
      permanently deleted.
    retention_settings (dict|None): Contains retention settings for individual
      object.
    soft_delete_time (datetime|None): Time that object was soft-deleted.
  c                      t         t        |   |||||||||	|
||||||||||||||||       || _        || _        || _        || _        || _        y)zInitializes GcsObjectResource.N)r[   r   r?   contextsrk   retention_settingsrj   storage_class_update_time)!r=   rl   r,   cache_controlcomponent_countcontent_dispositioncontent_encodingcontent_languagecontent_typecrc32c_hashrO   r   custom_fieldscustom_timedecryption_key_hash_sha256encryption_algorithmr%   event_based_holdrk   kms_keymd5_hashr   rV   noncurrent_timeretention_expirationr   sizerj   storage_classr   temporary_holdr;   rA   s!                                   r   r?   zGcsObjectResource.__init__5  s    F 

T+"58 DM,D0D,D%>D"r   c                 8   t         t        |   |      xr | j                  |j                  k(  xrj | j                  |j                  k(  xrO | j
                  |j
                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r4   )r[   r   rE   r   rk   r   rj   r   ry   s     r   rE   zGcsObjectResource.__eq__z  s    -e4 	NMMU^^+	N!!U%;%;;	N ##u'?'??	N !!U%;%;;		N
 **e.M.MMr   c                     t        |       S r4   r{   ro   s    r   r|   zGcsObjectResource.get_json_dump  r}   r   c                 j    | j                   r| j                   j                  nd}|xs | j                  S )NF)r   
kmsKeyNamer   )r=   cmek_in_metadatas     r   is_encryptedzGcsObjectResource.is_encrypted  s+    37==t}}//e>t>>>r   c                 L    t         j                  t        | j                        iS r   )r   r   r0   r,   ro   s    r   r   z#GcsObjectResource.get_formatted_acl  s    #++-?-IJJr   )NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN)
rF   rG   rH   rI   r?   rE   r|   r   r   r   r   s   @r   r   r   )  s    	 !% $AC?J ?Kr   r   )rI   
__future__r   r   r   r   r   apitools.base.pyr   ,googlecloudsdk.command_lib.storage.resourcesr   r   r	   r   r   r0   CloudResourcer2   BucketResourcerL   r   ObjectResourcer   rJ   r   r   <module>r      s    , &  '   % P K F6

"&21?? 2jU*99 Up+ +*dK*99 dKr   