
    n,                     b   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  e
j6                  e
j8                  j:                        e
j<                   G d de
j>                                      Z  e
j6                  e
j8                  jB                        e
j<                   G d de                     Z" e
j6                  e
j8                  jF                        e
j<                   G d de"                    Z$y)z&Commands for updating backend buckets.    )absolute_import)division)unicode_literals)encoding)base_classes)base)cdn_flags_utils)
exceptions)flags)scope)signed_url_flags)backend_buckets_utils)logc                   \    e Zd ZdZdZdZdZed        Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zy)UpdateMUpdate a backend bucket.

  *{command}* is used to update backend buckets.
  NFc                    t        j                  | |d| j                         t         j                  j	                  |       t        j                  |dd       t        j                  |dd       t        j                  d      | _        | j                  j	                  |       t        j                  |       t        j                  |       y	)
z"Set up arguments for this command.updateF )requiredunspecified_helpzbackend bucketT)update_command)resourceN)backend_buckets_flagsAddUpdatableArgssupport_regional_global_flagsGCS_BUCKET_ARGAddArgumentr   AddSignedUrlCacheMaxAge	cdn_flagsAddCdnPolicyArgssecurity_policy_flags+EdgeSecurityPolicyArgumentForTargetResourceEDGE_SECURITY_POLICY_ARGAddCacheKeyExtendedCachingArgsAddCompressionMode)clsparsers     -lib/surface/compute/backend_buckets/update.pyArgszUpdate.Args1   s     **VXs@@ ((44V<,,5 v'7M 	II%	'     ,,V488@,,V4    c                    |j                  d      xsp |j                  d      xs] |j                  d      xsJ |j                  d      xs7 |j                  d      xs$ |j                  d      xs |j                  d      S )zDReturns true if any args for updating backend bucket were specified.descriptiongcs_bucket_name
enable_cdnedge_security_policycache_key_include_http_header cache_key_query_string_whitelistcompression_mode)IsSpecifiedselfargss     r)   AnyArgsSpecifiedzUpdate.AnyArgsSpecifiedF   s    ]+ 1./1\*1 341 <=	1
 ?@1 /02r+   c                    t        |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d	      |j                  d
      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      f      S )zSReturns true if any Flexible Cache args for updating backend bucket were specified.
cache_mode
client_ttlno_client_ttldefault_ttlno_default_ttlmax_ttl
no_max_ttlcustom_response_headerno_custom_response_headersnegative_cachingnegative_caching_policyno_negative_caching_policiesserve_while_staleno_serve_while_stalebypass_cache_on_request_headers"no_bypass_cache_on_request_headers)anyr4   r5   s     r)   AnyFlexibleCacheArgsSpecifiedz$Update.AnyFlexibleCacheArgsSpecifiedP   s    			,	')9)9,)G			/	*D,<,<],K			*	+T-=-=i-H			,	'			2	3			6	7			,	-			3	4			8	9			-	.			0	1			;	<			>	?	AB Br+   c                 n   |j                         dk(  rW|j                  j                  d|j                  j	                  |j
                  |j                  |j                               fS |j                  j                  d|j                  j                  |j
                  |j                               fS )z1Returns a request to retrieve the backend bucket.compute.regionBackendBucketsGet)projectregionbackendBucket)rO   rQ   )

Collectionapitools_clientregionBackendBucketsmessages%ComputeRegionBackendBucketsGetRequestrO   rP   NamebackendBucketsComputeBackendBucketsGetRequest)r6   clientbackend_bucket_refs      r)   GetGetRequestzUpdate.GetGetRequesta   s    $$&*HH

 
 
5
5

//
?
?(00'...335 @   ""115OO;;*220557 < 9: :r+   c                 r   |j                         dk(  rX|j                  j                  d|j                  j	                  |j
                  |j                  |j                         |      fS |j                  j                  d|j                  j                  |j
                  |j                         |      fS )z/Returns a request to update the backend bucket.rM   Patch)rO   rP   rQ   backendBucketResource)rO   rQ   r_   )
rR   rS   rT   rU   'ComputeRegionBackendBucketsPatchRequestrO   rP   rW   rX   !ComputeBackendBucketsPatchRequest)r6   rZ   r[   replacements       r)   GetSetRequestzUpdate.GetSetRequestr   s    $$&*HH

 
 
5
5

//
A
A(00'...335$/	 B 	 	 ""117OO==*220557&1 > 34 4r+   c           	          |j                         dk(  rt        j                  d      |j                  j                  d|j
                  j                  |j                  |j                         |j
                  j                  |            fS )z@Returns a request to set the edge policy for the backend bucket.rM   z?Regional backend buckets do not support edge security policies.SetEdgeSecurityPolicy)securityPolicy)rO   rQ   securityPolicyReference)
rR   r
   ArgumentErrorrS   rX   rU   1ComputeBackendBucketsSetEdgeSecurityPolicyRequestrO   rW   SecurityPolicyReference)r6   rZ   r[   security_policy_refs       r)   GetSetEdgeSecurityPolicyRequestz&Update.GetSetEdgeSecurityPolicyRequest   s     $$&*HH$$
KM M""113JOOMM*220557(.(O(O#6 )P )8 N 9: :r+   c                 D   t        j                  | j                               }|j                  }t	        j
                  |      }g }|j                  d      r|j                  |_        |j                  r|j                  |_	        |j                  |j                  |_        t        j                  |||d|       |j                  |j                  |_        |j                   rg |_        |j                  s|j#                  d       |j$                  +|j$                  j&                  r|j                  durd|_        |j(                  4|j*                  j,                  j/                  |j(                        |_        |j                  s|j#                  d       ||fS )z0Modifies and returns the updated backend bucket.r-   T)	is_updatecleared_fieldscustomResponseHeadersF)r   ComputeApiHolderReleaseTrackrZ   r   CopyProtoMessager4   r-   r.   
bucketNamer/   	enableCdnr   ApplyCdnPolicyArgsrA   rp   rB   append	cdnPolicy	cacheModer3   rU   BackendBucketCompressionModeValueValuesEnumcompressionMode)r6   r7   existingholderrZ   rb   ro   s          r)   ModifyzUpdate.Modify   sk   **4+<+<+>?F]]F++H5KN& $ 0 0k#33k""ook,,%' "".*.*E*Ek'&&*,k',,34)''DOO5,H"k(
//
'
'
F
F##% ! ""M*&&r+   c                    t        j                  | j                               }|j                  }| j                  rYt
        j                  j                  ||j                  t        j                  |      t        j                  j                        }n&| j                  j                  ||j                        }| j                  ||      }|j!                  |g      }| j#                  ||d         \  }}|d   |k(  rMt%        |dd      =t&        j(                  j+                  dj-                  |d   j.                               |S g }	nG|j0                  j3                  |      5  |j!                  | j5                  |||      g      }	ddd       t%        |dd      |j7                         dk(  rt9        j:                  d      t%        |dd      r5| j<                  j                  ||j                        j?                         }
nd}
| jA                  |||
      }|j!                  |g      }	|z   S g }	|z   S # 1 sw Y   xY w)z3Makes the requests for updating the backend bucket.)scope_listerdefault_scoper   r0   Nz/No change requested; skipping update for [{0}].rM   z`argument --edge-security-policy: Regional backend buckets do not support edge security policies.)!r   rq   rr   rZ   r   r   "GLOBAL_REGIONAL_BACKEND_BUCKET_ARGResolveAsResource	resourcescompute_flagsGetDefaultScopeListercompute_scope	ScopeEnumGLOBALBACKEND_BUCKET_ARGr\   MakeRequestsr   getattrr   statusPrintformatnamerS   IncludeFieldsrc   rR   r
   rh   r$   SelfLinkrl   )r6   r7   r~   rZ   r[   get_requestobjects
new_objectro   backend_bucket_resultrk   edge_security_policy_requestedge_security_policy_results                r)   r   zUpdate.MakeRequests   sJ   **4+<+<+>?F]]F))0SSee



$::6B%//66	 f   22DD
   $$V-?@K!!;-0G!%T71:!>J
 qzZ	-t	4	<

=DD
!	"  !!//? & 3 3(:JGH!J @
 t+T2>		&	&	(,J	J&&/
 	
 
-t	4";;MM&""$$,HJ 	 #%)%I%I
$&9&;"$*$7$7'
(%*!
 !#>>> %'! #>>>1 @?s   '$H==Ic                     | j                  |      sH|j                  d      s7|j                  d      s&| j                  |      st        j                  d      | j                  |      S )z;Issues the request necessary for updating a backend bucket.signed_url_cache_max_agerequest_coalescingz'At least one property must be modified.)r8   r4   rK   r
   UpdatePropertyErrorr   r5   s     r)   Runz
Update.Run   sc    !!$'7812..t4**
35 5T""r+   )__name__
__module____qualname____doc__r   r$   r   classmethodr*   r8   rK   r\   rc   rl   r   r   r    r+   r)   r   r   $   sX    
 !"'5 5(2B":"4&:('T:?x#r+   r   c                       e Zd ZdZdZy)
UpdateBetar   FNr   r   r   r   r   r   r+   r)   r   r     s    
 #(r+   r   c                       e Zd ZdZdZy)UpdateAlphar   TNr   r   r+   r)   r   r     s    
 #'r+   r   N)%r   
__future__r   r   r   apitools.base.pyr   googlecloudsdk.api_lib.computer   googlecloudsdk.callioper   "googlecloudsdk.command_lib.computer	   r    r
   r   r   r   r   r   2googlecloudsdk.command_lib.compute.backend_bucketsr   r   4googlecloudsdk.command_lib.compute.security_policiesr"   googlecloudsdk.corer   ReleaseTracksrr   GAUniverseCompatibleUpdateCommandr   BETAr   ALPHAr   r   r+   r)   <module>r      s	   - &  ' % 7 ( K 9 E E ? T ]$ # D%%(()Z#T Z#  *Z#z D%%**+( (  ,( D%%++,'* '  -'r+   