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

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

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

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

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

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

    gsutil ubla get gs://redbucket gs://bluebucket
z
  The ``ubla`` command is used to retrieve or configure the
  `uniform bucket-level access
  <https://cloud.google.com/storage/docs/bucket-policy-only>`_ setting of
  Cloud Storage bucket(s). This command has two sub-commands, ``get`` and
  ``set``.
z--format=multi[terminator="z2"](name:format="value(format('Uniform bucket-levelz! access setting for gs://{}:'))",zD iamConfiguration.uniformBucketLevelAccess.enabled.yesno(no="False")z:format="value[terminator='z'](format('  Enabled: {}'))",zC iamConfiguration.uniformBucketLevelAccess.lockedTime.sub("T", " ")z,:format="value(format('  LockedTime: {}'))")c                   v   \ rS rSrSr\R                  " S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.S9r\" \" SSS\S/0 S9\" \" / SQ0 S9\" / SQ0 S9S.0 S9S.0 S9rS rS rS rS rS rSrg )!UblaCommandc   z#Implements the gsutil ubla command.ublauniformbucketlevelaccess    F   modeonoff)choicesgetset)command_name_aliases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_textstoragebucketslistz--raw)gcloud_commandflag_map)r3   r4   updatez--uniform-bucket-level-access)r3   r4   r8   z --no-uniform-bucket-level-access)r   r   c                 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     &platform/gsutil/gslib/commands/ubla.py,_ValidateBucketListingRefAndReturnBucketName8UblaCommand._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	)z:Gets the Uniform bucket-level access setting for a bucket.iamConfigurationfieldsprovider/)bucketenabledr   locked_timez  LockedTime: {locked_time}
zGUniform bucket-level access setting for {bucket}:
  Enabled: {enabled}
N )rA   r;   
gsutil_api	GetBucketbucket_namer<   rE   bucketPolicyOnlystrrstriprK   
lockedTimeprintformat)r>   r?   
bucket_urlbucket_metadata
iam_configuniform_bucket_level_accessrG   locked_time_lines           r@   _GetUblaUblaCommand._GetUbla   s    55c:Joo//
0F0F8J7K9C9J9J 0 LO !11J #-"="= j/((-.66F
 "--9DDf]8" &(89:@&A KCIK L #rC   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
)zDSets the Uniform bucket-level access setting for a bucket on or off.r   )rE   Enabling	Disablingz! Uniform bucket-level access for rI   z...rE   rF   r   )rA   r;   IamConfigurationValueuniformBucketLevelAccessValuerQ   rK   apitools_messagesBucketrU   rR   rS   rN   PatchBucketrP   r<   )r>   r?   setting_argrW   rY   rX   setting_verbs          r@   _SetUblaUblaCommand._SetUbla   s    55c:J&(J #@"AJ+6$+>J''..
KO!,!4:+L	Z//46 7 	OO
 6 6 /(:';)3):):   < rC   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 ubla command on a Cloud Storage bucket.r   r   zubla only supports get|setNr   r    z-Only on and off values allowed for set optionFT)argspopr	   r\   rh   r   append$RaiseWrongNumberOfArgumentsExceptionGetBucketUrlIterFromArgr
   r5   )
r>   
subcommandsubcommand_funcsubcommand_argsrf   some_matchedurl_argsurl_strbucket_iterbucket_listing_refs
             r@   _UblaUblaCommand._Ubla   s    q!J'9::OOKUo	u	oIIMM!$kKCE[) LyyH
//1009k +
*=_= !,  3d8nDEErC   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)z)Command entry point for the ubla command.r:   )rH   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)rN   GetApiSelectorr   JSONr	   jointextwrapwrapr=   rk   ParseSubOptsr   LogCommandParamsr|   rx   )r>   action_subcommands     r@   
RunCommandUblaCommand.RunCommand
  s    %%t%48H8HHTYY
--R!!"#$ % %
 		!&E!%6%%?6,=+>?
jjlL./ 0 0rC   rM   N)__name__
__module____qualname____firstlineno____doc__r   CreateCommandSpec	_SYNOPSISr   r   r   r   MakeNCloudURLsArgument%MakeZeroOrMoreCloudBucketURLsArgumentcommand_specHelpSpec_DETAILED_HELP_TEXT_get_help_text_set_help_text	help_specr   _GCLOUD_FORMAT_STRINGgcloud_storage_maprA   r\   rh   rx   r   __static_attributes__rM   rC   r@   r   r   c   s>   +**67!&&' %%!88;=ftUm<CCE	,( 34C#
) ( F4I"   +.  (* +.  (*", /#H K&PL6."H0rC   r   )/r   
__future__r   r   getoptr   gslibr   gslib.commandr   gslib.command_argumentr   gslib.cs_api_mapr   gslib.exceptionr	   r
   gslib.help_providerr   "gslib.third_party.storage_apitoolsr   rc   gslib.utils.constantsr   gslib.utils.shim_utilr   gslib.utils.text_utilr   gslib.utilsr   _SET_SYNOPSIS_GET_SYNOPSISlstripr   _SET_DESCRIPTION_GET_DESCRIPTION_DESCRIPTIONr   r   r   rd   ra   BucketPolicyOnlyValuerb   get_format_flag_newliner   r   rM   rC   r@   <module>r      sS   2 & %    ! 2 ( , 2 . W ( 2 / ! M0066	 	   ** %Y= /?@/?@ *00FF  5 K K  ')J)J)LL9:() KK #	# &/%F%F%H	I
 '' JJ 55 x0' x0rC   