
    c                        d 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dlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ dZdj5                  dj7                  e            Zdj5                  e      ZdZeej?                  d      z   Z dZ!dZ"de"z   e!z   Z# ee e#      Z$ eee!      Z% eee"      Z& eg di       Z' eg di       Z( G d de      Z)y)z/This module provides the rpo command to gsutil.    )absolute_import)print_functionN)metrics)Command)CommandArgument)ApiSelector)CommandException)NO_URLS_MATCHED_TARGET)CreateHelpText)storage_v1_messages)NO_MAX)GcloudStorageMap)ASYNC_TURBODEFAULTz({})|z+
  gsutil rpo set {} gs://<bucket_name>...
z(
  gsutil rpo get gs://<bucket_name>...

am  
<B>SET</B>
  The ``rpo set`` command configures turbo replication
  for dual-region Google Cloud Storage buckets.

<B>SET EXAMPLES</B>
  Configure your buckets to use turbo replication:

    gsutil rpo set ASYNC_TURBO gs://redbucket gs://bluebucket

  Configure your buckets to NOT use turbo replication:

    gsutil rpo set DEFAULT gs://redbucket gs://bluebucket
z
<B>GET</B>
  The ``rpo get`` command returns the replication setting
  for the specified Cloud Storage buckets.

<B>GET EXAMPLES</B>
  Check if your buckets are using turbo replication:

    gsutil rpo get gs://redbucket gs://bluebucket
a  
  The ``rpo`` command is used to retrieve or configure the
  `replication setting
  <https://cloud.google.com/storage/docs/availability-durability#cross-region-redundancy>`_
  of dual-region Cloud Storage buckets.
  This command has two sub-commands: ``get`` and ``set``.
)storagebucketslistzL--format=value[separator=": "](format("gs://{}", name),rpo.yesno(no="None"))z--rawgcloud_commandflag_map)r   r   updatez--recovery-point-objectivec                   J   e Zd ZdZ ej
                  dg ededdddej                  gej                   e
j                  d      g e
d ee             e
j                         gd	
      Z ej                   dg ddeeed	      Z eeed	i       Zd Zd Zd Zd Zd Zy)
RpoCommandz"Implements the gsutil rpo command.rpo    F   mode)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 replication)	help_namehelp_name_aliases	help_typehelp_one_line_summary	help_textsubcommand_help_textr   c                 f    |j                   j                  dk7  rt        d| j                  z        y )Ngsz7The %s command can only be used with gs:// bucket URLs.)storage_urlschemer	   command_name)selfblrs     %platform/gsutil/gslib/commands/rpo.py,_ValidateBucketListingRefAndReturnBucketNamez7RpoCommand._ValidateBucketListingRefAndReturnBucketName   s7    
%
C


  &    c                     |j                   }| j                  j                  |j                  dg|j                        }|j
                  }t        |      j                  d      }t        |d|       y)z"Gets the rpo setting for a bucket.r   fieldsprovider/z: N)	r9   
gsutil_api	GetBucketbucket_namer:   r   strrstripprint)r<   r=   
bucket_urlbucket_metadatar   buckets         r>   _GetRpozRpoCommand._GetRpo   si    Joo//
0F0F8=w9C9J9J 0 LO 

C_##C(F	fc
"#r@   c                 r   |j                   }|}|t        vrt        dj                  t                    t        j                  |      }| j                  j                  d|dt        |      j                  d             | j                  j                  |j                  |dg|j                         y)	z"Sets the rpo setting for a bucket.z.Invalid value for rpo set. Should be one of {})r   zSetting rpo z for rE   r   rB   r   )r9   VALID_RPO_VALUESr	   formatVALID_RPO_VALUES_STRINGapitools_messagesBucketloggerinforI   rJ   rF   PatchBucketrH   r:   )r<   r=   	rpo_valuerL   formatted_rpo_valuerM   s         r>   _SetRpozRpoCommand._SetRpo   s    J#"22!!'(?!@B B (..3FGOKK)3z?+A+A#+FH I 	OO
 6 6 /(-w)3):):   < r@   c           
         | j                   j                  d      }|dvrt        d      d}g }|dk(  r| j                  }n=|dk(  r8| j                  }| j                   j                  d      }|j                  |       | j                  j                  d      t        j                  k7  r:t        dj                  t        j                  d	| j                  z                    d
}| j                   }|s| j                          |D ]  }| j                  |      }|D ]  }	| j                  j                  |	j                   j"                        t        j                  k7  r:t        dj                  t        j                  d| j                  z                    d} ||	g|    |st        t$        t'        |      z        y)z-Handles rpo command on Cloud Storage buckets.r   r"   zrpo only supports get|setNr#   r$   r8   r   z=The "%s" command can only be with the Cloud Storage JSON API.Fz2The "%s" command can only be used for GCS buckets.T)argspopr	   rO   r[   appendrF   GetApiSelectorr   JSONjointextwrapwrapr;   $RaiseWrongNumberOfArgumentsExceptionGetBucketUrlIterFromArgr9   r:   r
   r   )
r<   
subcommandsubcommand_funcsubcommand_argssetting_argsome_matchedurl_argsurl_strbucket_iterbucket_listing_refs
             r>   _RpozRpoCommand._Rpo   s   q!J'899OOUo	u	oIIMM!$k[) %%d+{/?/??TYY
-- %(,(9(9: ;< = =
 LyyH
//1009k +
??))**1136A6F6FG mm (+/+<+<= >"? @ @ *=_= !,  3d8nDEEr@   c                    | j                   d   }| j                  d       |dk(  s|dk(  rGt        j                  | j                         t        j                  |g       | j                         S t        d|z        )	z(Command entry point for the rpo command.r   T)
check_argsr#   r$   )sub_opts)subcommandsz-Invalid subcommand "%s", use get|set instead.)r]   ParseSubOptsr   LogCommandParamsrs   rp   r	   )r<   action_subcommands     r>   
RunCommandzRpoCommand.RunCommand   sy    		!&E!%6%%?6,=+>?YY[L./ 0 0r@   N)__name__
__module____qualname____doc__r   CreateCommandSpec	_SYNOPSISr   r   ra   r   MakeNCloudURLsArgumentr   rQ   %MakeZeroOrMoreCloudBucketURLsArgumentcommand_specHelpSpec_DETAILED_HELP_TEXT_get_help_text_set_help_text	help_specr   GET_COMMANDSET_COMMANDgcloud_storage_mapr?   rO   r[   rp   rx    r@   r>   r   r   c   s    ****!&&' %%8/88;<fd3C.DECoCCE	,( g3#
) ( 	$(,\0r@   r   )*r|   
__future__r   r   rc   gslibr   gslib.commandr   gslib.command_argumentr   gslib.cs_api_mapr   gslib.exceptionr	   r
   gslib.help_providerr   "gslib.third_party.storage_apitoolsr   rT   gslib.utils.constantsr   gslib.utils.shim_utilr   rQ   rR   rb   rS   _SET_SYNOPSIS_GET_SYNOPSISlstripr~   _SET_DESCRIPTION_GET_DESCRIPTION_DESCRIPTIONr   r   r   r   r   r   r   r@   r>   <module>r      s   6 & %   ! 2 ( , 2 . W ( 2-  --1A(BC 
F"#  M0066	 	   ** %Y= /?@/?@ /
 )+,  	I0 I0r@   