
    "                        S 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S	KJr  SS
KJr  SSKJ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\\R=                  S5      -   rSr Sr!S\!-   \ -   r"\" \\"5      r#\" \\ 5      r$\" \\!5      r%\RL                  RN                  r'\'RP                  r( " S S\	5      r)g)z+This module provides the command to gsutil.    )absolute_import)print_functionN)metrics)Command)CommandArgument)ubla)ApiSelector)CommandException)NO_URLS_MATCHED_TARGET)CreateHelpText)storage_v1_messages)NO_MAX)InsistOnOrOffz>
  gsutil bucketpolicyonly set (on|off) gs://<bucket_name>...
z5
  gsutil bucketpolicyonly get gs://<bucket_name>...

a  
<B>SET</B>
  The ``bucketpolicyonly set`` command enables or disables the uniform bucket-level
  access feature on Google Cloud Storage buckets.

<B>SET EXAMPLES</B>
  Configure your buckets to use uniform bucket-level access:

    gsutil bucketpolicyonly set on gs://redbucket gs://bluebucket

  Configure your buckets to NOT use uniform bucket-level access:

    gsutil bucketpolicyonly set off gs://redbucket gs://bluebucket
a&  
<B>GET</B>
  The ``bucketpolicyonly get`` command shows whether uniform bucket-level
  access is enabled for the specified Cloud Storage bucket.

<B>GET EXAMPLES</B>
  Check if your buckets are using uniform bucket-level access:

    gsutil bucketpolicyonly get gs://redbucket gs://bluebucket
a  
  The Bucket Policy Only feature is now known as `uniform bucket-level access
  <https://cloud.google.com/storage/docs/uniform-bucket-level-access>`_.
  The ``bucketpolicyonly`` command is still supported, but we recommend using
  the equivalent ``ubla`` `command
  <https://cloud.google.com/storage/docs/gsutil/commands/ubla>`_.

  The ``bucketpolicyonly`` command is used to retrieve or configure the
  uniform bucket-level access setting of Cloud Storage buckets. This command has
  two sub-commands, ``get`` and ``set``.
c                      \ rS rSrSr\R                  " S\S\SSSS\	R                  /\	R                  \R                  " S5      /\" SS	S
/S9\R                  " 5       /S.S9r\R                  " S/ SS\\\S.S9r\R*                  R,                  r\R.                  S   R.                  S   r\R3                  SS5      \R.                  S   R.                  S'   S rS rS rS rS rSrg)BucketPolicyOnlyCommand\   z/Implements the gsutil bucketpolicyonly command.bucketpolicyonly    F   modeonoff)choicesgetset)
usage_synopsismin_argsmax_argssupported_sub_argsfile_url_okprovider_url_okurls_start_arggs_api_supportgs_default_apiargparse_argumentscommand_helpz%Configure uniform bucket-level access)	help_namehelp_name_aliases	help_typehelp_one_line_summary	help_textsubcommand_help_textr      zUniform bucket-level accesszBucket Policy Onlyc                 h    UR                   R                  S:w  a  [        SU R                  -  5      eg )Ngsz7The %s command can only be used with gs:// bucket URLs.)storage_urlschemer
   command_name)selfblrs     2platform/gsutil/gslib/commands/bucketpolicyonly.py,_ValidateBucketListingRefAndReturnBucketNameDBucketPolicyOnlyCommand._ValidateBucketListingRefAndReturnBucketName   s7    
%
C


  &    c                    U R                  U5        UR                  nU R                  R                  UR                  S/UR
                  S9nUR                  nUR                  n[        U5      R                  S5      UR                  S.nSnUR                  (       a  UR                  US'   SnU(       a  [        SU-   R                  " S
0 UD65        g	g	)z1Gets the Bucket Policy Only setting for a bucket.iamConfigurationfieldsprovider/)bucketenabledr   locked_timez  LockedTime: {locked_time}
z>Bucket Policy Only setting for {bucket}:
  Enabled: {enabled}
N )r9   r3   
gsutil_api	GetBucketbucket_namer4   r=   bucketPolicyOnlystrrstriprC   
lockedTimeprintformat)r6   r7   
bucket_urlbucket_metadata
iam_configbucket_policy_onlyr?   locked_time_lines           r8   _GetBucketPolicyOnly,BucketPolicyOnlyCommand._GetBucketPolicyOnly   s    55c:Joo//
0F0F8J7K9C9J9J 0 LO !11J#44 j/((-%--F
 $$0;;f]8 &(89:@&A KCIK L r;   c                    U R                  U5        UR                  n[        5       n[        5       Ul        US:H  UR                  l        [        R                  " US9nUS:X  a  SOSn[        U< S[        U5      R                  S5      < S35        U R                  R                  UR                  US/UR                  S	9  g
)z;Sets the Bucket Policy Only setting for a bucket on or off.r   )r=   Enabling	Disablingz Bucket Policy Only for rA   z...r=   r>   r   )r9   r3   IamConfigurationValueBucketPolicyOnlyValuerI   rC   apitools_messagesBucketrM   rJ   rK   rF   PatchBucketrH   r4   )r6   r7   setting_argrO   rQ   rP   setting_verbs          r8   _SetBucketPolicyOnly,BucketPolicyOnlyCommand._SetBucketPolicyOnly   s    55c:J&(J"7"9J+6$+>J''..
KO!,!4:+L	Z//46 7 	OO
 6 6 /(:';)3):):   < r;   c                    U R                   R                  S5      nUS;  a  [        S5      eSn/ nSnUS:X  a  U R                  nOJUS:X  aD  U R                  nU R                   R                  S5      n[        US5        UR                  U5        SnU R                   nU(       d  U R                  5         U H(  nU R                  U5      nU H  n	S	nU" U	/UQ76   M     M*     U(       d  [        [        [        U5      -  5      eg)
z;Handles bucketpolicyonly command on a Cloud Storage bucket.r   r   z&bucketpolicyonly only supports get|setNr   r   z-Only on and off values allowed for set optionFT)argspopr
   rT   r`   r   append$RaiseWrongNumberOfArgumentsExceptionGetBucketUrlIterFromArgr   list)
r6   
subcommandsubcommand_funcsubcommand_argsr^   some_matchedurl_argsurl_strbucket_iterbucket_listing_refs
             r8   _BucketPolicyOnly)BucketPolicyOnlyCommand._BucketPolicyOnly   s    q!J'EFFOOKU11o	u	11oIIMM!$kKCE[) LyyH
//1009k +
*=_= !,  3d8nDEEr;   c                    U R                   R                  SS9[        R                  :w  a;  [	        SR                  [        R                  " SU R                  -  5      5      5      eU R                  S   nU R                  SS9  US:X  d  US	:X  aD  [        R                  " U R                  S
9  [        R                  " U/S9  U R                  5         g[	        SU-  5      e)z5Command entry point for the bucketpolicyonly command.r2   )r@   r   zBThe "%s" command can only be used with the Cloud Storage JSON API.r   T)
check_argsr   r   )sub_opts)subcommandsz-Invalid subcommand "%s", use get|set instead.N)rF   GetApiSelectorr	   JSONr
   jointextwrapwrapr5   rc   ParseSubOptsr   LogCommandParamsru   rq   )r6   action_subcommands     r8   
RunCommand"BucketPolicyOnlyCommand.RunCommand   s    %%t%48H8HHTYY
--R!!"#$ % %
 		!&E!%6%%?6,=+>?
L./ 0 0r;   rE   N) __name__
__module____qualname____firstlineno____doc__r   CreateCommandSpec	_SYNOPSISr   r	   rx   r   MakeNCloudURLsArgument%MakeZeroOrMoreCloudBucketURLsArgumentcommand_specHelpSpec_DETAILED_HELP_TEXT_get_help_text_set_help_text	help_specr   UblaCommandgcloud_storage_mapgcloud_commandformat_flagreplacer9   rT   r`   rq   r   __static_attributes__rE   r;   r8   r   r   \   s   7**!&&' %%!88;=ftUm<CCE	,& "C#
) ''::"11%8GGJ+<35 ##E*99	L2*"H0r;   r   )*r   
__future__r   r   getoptrz   gslibr   gslib.commandr   gslib.command_argumentr   gslib.commandsr   gslib.cs_api_mapr	   gslib.exceptionr
   r   gslib.help_providerr   "gslib.third_party.storage_apitoolsr   r[   gslib.utils.constantsr   gslib.utils.text_utilr   _SET_SYNOPSIS_GET_SYNOPSISlstripr   _SET_DESCRIPTION_GET_DESCRIPTION_DESCRIPTIONr   r   r   r\   rY   rZ   r   rE   r;   r8   <module>r      s    2 & %    ! 2  ( , 2 . W ( / M0066	 	 
 
 *
* %Y= /?@/?@ *00FF -CC S0g S0r;   