
    2                        S r SSKJr  SSKJr  SSKJr  SSKrSSKrSSKJr  SSK	J
r
  SSK	Jr  SS	K	Jr  S
 rS rS r " S S\R                   5      r " S S\R$                  5      r " S S5      r " S S\R*                  5      rg)z%GCS API-specific resource subclasses.    )absolute_import)division)unicode_literalsN)encoding)full_resource_formatter)resource_reference)resource_utilc                 V    [         R                  " [        R                  " U 5      5      $ )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           
          [         R                  " [        R                  " SU R                  R
                  4SU R                  4S[        U R                  5      4/5      5      $ )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                    U b  [        U [        5      (       d  U $ / nU  H  nUR                  5       nUR                  S5      S:X  a$  UR	                  SS5        UR	                  SS5        UR	                  SS5        UR	                  SS5        UR	                  SS5        UR	                  SS5        UR	                  S	S5        UR                  U5        M     U$ )
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                   B    \ rS rSrSr             SS jrS rSrg)GcsAnywhereCacheResourceG   zHolds Anywhere Cache metadata.Nc                     Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        Xl
        Xl        Xl        g Nadmission_policyanywhere_cache_idr"   create_timer#   r   r   pending_updatestater   ttlupdate_timezone)selfr7   r8   r"   r9   	id_stringr   r   r:   r;   r   r<   r=   r>   s                 r   __init__!GcsAnywhereCacheResource.__init__J   sK      -.K"GIM(J"H"Ir   c                 |   [        XR                  5      (       d  [        $ U R                  UR                  :H  =(       Ga|    U R                  UR                  :H  =(       Ga[    U R
                  UR
                  :H  =(       Ga:    U R                  UR                  :H  =(       Ga    U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       ay    U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r5   )r&   	__class__NotImplementedr7   r8   r"   r9   r#   r   r   r:   r;   r   r<   r=   r>   r?   others     r   __eq__GcsAnywhereCacheResource.__eq__h   sh   e^^,,!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   r6   )NNNNNNNNNNNNN)__name__
__module____qualname____firstlineno____doc__rA   rH   __static_attributes__ r   r   r2   r2   G   s8    & 
<r   r2   c                      ^  \ rS rSrSr                                  SU 4S jjr\S 5       r\S 5       r\S 5       r	U 4S jr
S rS	 rS
rU =r$ )GcsBucketResource|   a[  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$                 ,  > [         [        U ]  UUUUU	UUUUUUUUUUUU"U#S9  X0l        X@l        Xpl        Xl        Xl        Xl        UU l	        UU l
        UU l        UU l        UU l        UU l        UU l        UU l        UU l        U U l        U!U l        g)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)superrR   rA   	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,   rc   rd   rU   rV   re   rf   rW   rg   rX   r%   rh   rY   rZ   r[   ri   r\   r   r!   r]   rj   rk   rl   r^   r_   rm   rn   ro   rp   r=   rq   rr   r`   ra   rD   s%                                       r   rA   GcsBucketResource.__init__   s    R 

T+#!93)%%%)-%% , ( N"8#: "*,&D 4D(D$<D!DH&D0D'BD$ DO,D,Dr   c                 \    U R                   (       a  U R                   R                  S5      $ g )NdataLocations)re   r)   r?   s    r   data_locations GcsBucketResource.data_locations   s%    ##))--o>>r   c                     U R                   (       a8  U R                   R                  S5      (       a  [        U R                   S   5      $ g )NretentionPeriod)r_   r)   intrw   s    r   retention_period"GcsBucketResource.retention_period   s<    !6!6!:!:;L!M!M&&'89::r   c                 `    U R                   =(       a    U R                   R                  SS5      $ )NisLockedF)r_   r)   rw   s    r   retention_policy_is_locked,GcsBucketResource.retention_policy_is_locked   s+    !! 9!!%%j%8:r   c                   > [         [        U ]  U5      =(       Ga    U R                  UR                  :H  =(       Ga    U R                  UR                  :H  =(       Ga|    U R
                  UR
                  :H  =(       Ga[    U R                  UR                  :H  =(       Ga:    U R                  UR                  :H  =(       Ga    U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       a    U R                  UR                  :H  =(       ay    U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                   UR                   :H  $ r5   )rb   rR   rH   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   r?   rG   rD   s     r   rH   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                     [        U 5      $ r5   r   rw   s    r   get_json_dumpGcsBucketResource.get_json_dump      $r   c                     [         R                  [        U R                  5      [         R                  [        U R
                  5      0$ zSee base class.)r   ACL_KEYr0   r,   DEFAULT_ACL_KEYrf   rw   s    r   get_formatted_acl#GcsBucketResource.get_formatted_acl
  s=     	 '');DHH)E//1C2
 r   )rc   rd   re   rf   rg   r!   rr   rh   ri   rj   rk   rl   rm   rn   ro   rq   rp   )"NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN)rJ   rK   rL   rM   rN   rA   propertyrx   r}   r   rH   r   r   rO   __classcell__rD   s   @r   rR   rR   |   s    2  ""# #
"&MM-^  
  
 : :(  r   rR   c                   D    \ rS rSrSrS r\S 5       r\S 5       rS r	Sr
g)	GcsHmacKeyResourcei  zHolds HMAC key metadata.c                     Xl         g r5   r   )r?   r   s     r   rA   GcsHmacKeyResource.__init__  s    Mr   c                 J    [        U R                  SS 5      n[        USS 5      $ )Nr   accessIdgetattrr   )r?   key_metadatas     r   	access_idGcsHmacKeyResource.access_id  s#    4==*d;L<T22r   c                 0    [        U R                  SS 5      $ )Nsecretr   rw   s    r   r   GcsHmacKeyResource.secret  s    4==(D11r   c                 t    [        XR                  5      (       d  [        $ U R                  UR                  :H  $ r5   )r&   rD   rE   r   rF   s     r   rH   GcsHmacKeyResource.__eq__#  s*    e^^,,==ENN**r   r   N)rJ   rK   rL   rM   rN   rA   r   r   r   rH   rO   rP   r   r   r   r     s7      3 3 2 2+r   r   c                      ^  \ rS rSrSr                              S	U 4S jjrU 4S jrS rS rS r	Sr
U =r$ )
GcsObjectResourcei)  a  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                     > [         [        U ]  UUUUUUUUU	U
UUUUUUUUUUUUUUUU5        Xl        UU l        UU l        UU l        UU l        g)zInitializes GcsObjectResource.N)rb   r   rA   contextsrr   retention_settingsrq   storage_class_update_time)!r?   rs   r,   cache_controlcomponent_countcontent_dispositioncontent_encodingcontent_languagecontent_typecrc32c_hashrV   r   custom_fieldscustom_timedecryption_key_hash_sha256encryption_algorithmr%   event_based_holdrr   kms_keymd5_hashr   r]   noncurrent_timeretention_expirationr   sizerq   storage_classr   temporary_holdr=   rD   s!                                   r   rA   GcsObjectResource.__init__5  s    F 

T+"58 M,D0D,D%>D"r   c                 j  > [         [        U ]  U5      =(       a    U R                  UR                  :H  =(       ay    U R                  UR                  :H  =(       aY    U R
                  UR
                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r5   )rb   r   rH   r   rr   r   rq   r   r   s     r   rH   GcsObjectResource.__eq__z  s    -e4 	NMMU^^+	N!!U%;%;;	N ##u'?'??	N !!U%;%;;		N
 **e.M.MMr   c                     [        U 5      $ r5   r   rw   s    r   r   GcsObjectResource.get_json_dump  r   r   c                 ~    U R                   (       a  U R                   R                  OSnU=(       d    U R                  $ )NF)r   
kmsKeyNamer   )r?   cmek_in_metadatas     r   is_encryptedGcsObjectResource.is_encrypted  s+    37==t}}//e>t>>>r   c                 L    [         R                  [        U R                  5      0$ r   )r   r   r0   r,   rw   s    r   r   #GcsObjectResource.get_formatted_acl  s    #++-?-IJJr   )r   rr   r   rq   r   )NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN)rJ   rK   rL   rM   rN   rA   rH   r   r   r   rO   r   r   s   @r   r   r   )  s    	 !% $AC?J ?K Kr   r   )rN   
__future__r   r   r   r   r   apitools.base.pyr   ,googlecloudsdk.command_lib.storage.resourcesr   r   r	   r   r   r0   CloudResourcer2   BucketResourcerR   r   ObjectResourcer   rP   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   