
                            d 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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ZeejA                  d      z   Z!dZ"dZ#ddjI                  e"e#z   g      z   Z% ee!e%      Z& eee#      Z' eee"      Z(d ejR                         z   dz   Z* eddde*dgi       Z+ eg di       Z, G d  d!e	      Z-y")#zGImpl. of default bucket storage class command for Google Cloud Storage.    )absolute_import)print_function)division)unicode_literals)metrics)Command)CommandArgument)ApiSelector)CommandException)NO_URLS_MATCHED_TARGET)CreateHelpText)storage_v1_messages)NO_MAX)GcloudStorageMap)NormalizeStorageClass)	shim_utilzD
  gsutil defstorageclass set <storage-class> gs://<bucket_name>...
z4
  gsutil defstorageclass get gs://<bucket_name>...

a{  
<B>SET</B>
  The "defstorageclass set" command sets the default
  `storage class <https://cloud.google.com/storage/docs/storage-classes>`_ for
  the specified bucket(s). If you specify a default storage class for a certain
  bucket, Google Cloud Storage applies the default storage class to all new
  objects uploaded to that bucket, except when the storage class is overridden
  by individual upload requests.

  Setting a default storage class on a bucket provides a convenient way to
  ensure newly uploaded objects have a specific storage class. If you don't set
  the bucket's default storage class, it will default to Standard.
z;
<B>GET</B>
  Gets the default storage class for a bucket.
z5
  The defstorageclass command has two sub-commands:
z)--format=value[separator=": "](name.sub("z", "gs://"),storageClass)storagebucketslistz--rawgcloud_commandflag_map)r   r   updatez--default-storage-classc                   `   e Zd ZdZ ej
                  dededdddej                  ej                  gej                   ej                          ej                         g ej                         gd      Z ej                  d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)DefStorageClassCommandz1Implementation of gsutil defstorageclass command.defstorageclass    F)setget)
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defaultstorageclasscommand_helpz/Get or set the default storage class on buckets)r!   r    )	help_namehelp_name_aliases	help_typehelp_one_line_summary	help_textsubcommand_help_textr   c                 ^    |j                  d      st        d| j                  d|d      y )Nzgs://"z" does not support the URL "z#". Did you mean to use a gs:// URL?)
startswithr   command_name)selfurl_strs     1platform/gsutil/gslib/commands/defstorageclass.py_CheckIsGsUrlz$DefStorageClassCommand._CheckIsGsUrl   s2    g&%%w01 1 '    c                 ~    | j                   s| j                          | j                   d   j                         dk(  ryy)Nr   r    r      )args$RaiseWrongNumberOfArgumentsExceptionlower)r8   s    r:   _CalculateUrlsStartArgz-DefStorageClassCommand._CalculateUrlsStartArg   s4    99
//1yy|u$r<   c           
      X   t        | j                  d         }| j                  dd }|s| j                          d}|D ]  }| j                  |       | j	                  |dg      }|D ]  }d}t        j                         }| j                  j                  d|d	|j                  j                  d
             ||_        | j                  j                  |j                  j                  ||j                  j                   dg         |st#        t$        t'        |      z        y)z,Sets the default storage class for a bucket.r   r>   NFidbucket_fieldsTz"Setting default storage class to "z" for bucket /)providerfields)r   r?   r@   r;   GetBucketUrlIterFromArgapitools_messagesBucketloggerinfo
url_stringrstripstorageClass
gsutil_apiPatchBucketstorage_urlbucket_nameschemer   r   r   )r8   normalized_storage_classurl_argssome_matchedr9   bucket_iterblrbucket_metadatas           r:   _SetDefStorageClassz*DefStorageClassCommand._SetDefStorageClass   s     5TYYq\Byy}H
//1L
!000Ok#+2242CNN4I4I#4NP 	Q'?$##COO$?$?$3-0__-C-C,06 	$ 	3 	  3d8nDEE r<   c                 >   | j                   }d}|D ]m  }| j                  |       | j                  |dg      }|D ]A  }d}t        |j                  j                  d      d|j                  j                         C o |st        t        t        |      z        y)z,Gets the default storage class for a bucket.FrQ   rE   TrG   z: N)r?   r;   rJ   printrO   rP   root_objectrQ   r   r   r   )r8   rX   rY   r9   rZ   r[   s         r:   _GetDefStorageClassz*DefStorageClassCommand._GetDefStorageClass   s     yyHL
!00@N?O 1 Qk#~~$$S)3??+G+GI 	J 	  3d8nDEE r<   c           	      f   | j                   j                  d      }|g}|dk(  r| j                  }nd|dk(  r6| j                  }t	        | j                   d         }|j                  |       n)t        d|d| j                  d| j                  d      t        j                  |        |        y)	z4Command entry point for the defstorageclass command.r   r!   r    zInvalid subcommand "z
" for the z command.
See "gsutil help z".)subcommands)
r?   popra   r]   r   appendr   r7   r   LogCommandParams)r8   action_subcommandsubcommand_argsfuncrW   s        r:   
RunCommandz!DefStorageClassCommand.RunCommand   s    		a(()OE!%%d	e	#%%d!6tyy|!D56 d//1B1BDE E 9Fr<   N)__name__
__module____qualname____doc__r   CreateCommandSpec	_SYNOPSISr   r
   XMLJSONr	   MakeFreeTextArgument%MakeZeroOrMoreCloudBucketURLsArgumentcommand_specHelpSpec_DETAILED_HELP_TEXT_get_help_text_set_help_text	help_specr   SHIM_GET_COMMAND_MAPSHIM_SET_COMMAND_MAPgcloud_storage_mapr;   rB   r]   ra   rj    r<   r:   r   r   \   s    9 +**!oo{'7'78 %% 3o224CoCCE
 H/GGIK,* g!./M#
) (%% 1F4F r<   r   N).rn   
__future__r   r   r   r   gslibr   gslib.commandr   gslib.command_argumentr	   gslib.cs_api_mapr
   gslib.exceptionr   r   gslib.help_providerr   "gslib.third_party.storage_apitoolsr   rK   gslib.utils.constantsr   gslib.utils.shim_utilr   gslib.utils.text_utilr   gslib.utilsr   _SET_SYNOPSIS_GET_SYNOPSISlstriprp   _SET_DESCRIPTION_GET_DESCRIPTIONjoin_DESCRIPTIONrw   rx   ry   get_format_flag_caret_GCLOUD_FORMAT_STRINGr{   r|   r   r~   r<   r:   <module>r      s'   N & %  '  ! 2 ( , 2 . W ( 2 7 ! M0066	  

ii!$44567 %Y= /?@/?@ G888:;>))  ( 	9f&;W   (N vW vr<   