
    $                         S 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Q5      r\" / S	Q5      r " S
 S\5      r " S S\5      r " S S\5      rS rS rS rS rS\S\S\4S jrg)zCUtilities for handling Compute DisksService and RegionDisksService.    )absolute_import)division)unicode_literals)Any)utils)Error)z
pd-extremez
cs-extremezhyperdisk-extremehyperdisk-balanced$hyperdisk-balanced-high-availability)zcs-throughputzhyperdisk-throughputr	   zhyperdisk-mlr
   c                       \ rS rSrSrSrg)UnknownDiskResourceError*   zCRaised when a disk resource argument is neither regional nor zonal. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       0lib/googlecloudsdk/api_lib/compute/disks_util.pyr   r   *   s    Kr   r   c                   ^    \ rS rSrSrS r\S 5       rS rS r	S r
S rS	 rS
 rS rS rSrg)
_ZonalDisk.   z5A wrapper for Compute Engine DisksService API client.c                     X l         Xl        UR                  =(       d    UR                  R                  U l        X0l        g N)	_disk_ref_clientdisksapitools_client_service	_messagesselfclientdisk_refmessagess       r   __init___ZonalDisk.__init__1   s-    NLLL@F$:$:$@$@DMNr   c                     g)z@Gets the zonal operation collection of a compute disk reference.zcompute.zoneOperationsr   clss    r   GetOperationCollection!_ZonalDisk.GetOperationCollection7   s     $r   c                     U R                   $ r   r    r#   s    r   
GetService_ZonalDisk.GetService<       ==r   c                 j    U R                   R                  " S0 U R                  R                  5       D6$ )z0Gets the zonal compute disk get request message.r   )r!   ComputeDisksGetRequestr   AsDictr0   s    r   GetDiskRequestMessage _ZonalDisk.GetDiskRequestMessage?   s'    >>00K4>>3H3H3JKKr   c                 X    U R                  5       nU R                  R                  U5      $ r   r7   r    Getr#   request_msgs     r   GetDiskResource_ZonalDisk.GetDiskResourceC   %    ,,.K==[))r   c                 .    U R                   R                  $ r   )r!   ZoneSetLabelsRequestr0   s    r   GetSetLabelsRequestMessage%_ZonalDisk.GetSetLabelsRequestMessageG   s    >>...r   c           
          U R                   R                  nU" U R                  R                  U R                  R                  U R                  R
                  U R                   R                  UR                  US9S9$ )NlabelFingerprintlabels)projectresourcezonezoneSetLabelsRequest)r!   ComputeDisksSetLabelsRequestr   rI   diskrK   rB   rG   r#   rN   rH   reqs       r   GetSetDiskLabelsRequestMessage)_ZonalDisk.GetSetDiskLabelsRequestMessageJ   sk    
..
5
5C&&$$^^  !^^@@!226 A C	D Dr   c                 V    [         R                  " U R                  R                  5      $ r   )compute_utilsZoneNameToRegionNamer   rK   r0   s    r   GetDiskRegionName_ZonalDisk.GetDiskRegionNameS   s    --dnn.A.ABBr   c           	      :   U R                   R                  U R                  R                  5       U R                  R                  U R                  R
                  U R                   R                  US9S9nUR                  U R                  R                  SU4/5      $ )NresourcePolicies)rN   rI   rK   disksAddResourcePoliciesRequestAddResourcePolicies)
r!   &ComputeDisksAddResourcePoliciesRequestr   NamerI   rK   DisksAddResourcePoliciesRequestMakeRequestsr   r   r#   resource_policiesclient_to_make_requestadd_requests       r   MakeAddResourcePoliciesRequest)_ZonalDisk.MakeAddResourcePoliciesRequestV   s    ..GG^^  "&&^^  (,	(	(:K	(	L H NK "..
,,

3[	ABD Dr   c           	      :   U R                   R                  U R                  R                  5       U R                  R                  U R                  R
                  U R                   R                  US9S9nUR                  U R                  R                  SU4/5      $ )NrY   )rN   rI   rK   "disksRemoveResourcePoliciesRequestRemoveResourcePolicies)
r!   )ComputeDisksRemoveResourcePoliciesRequestr   r^   rI   rK   "DisksRemoveResourcePoliciesRequestr`   r   r   r#   rb   rc   remove_requests       r   !MakeRemoveResourcePoliciesRequest,_ZonalDisk.MakeRemoveResourcePoliciesRequesta   s    ^^MM^^  "&&^^  +/>>	+	+=N	+	O N QN "..
,,

6	GHJ Jr   r   r   r!   r    Nr   r   r   r   r   r'   classmethodr,   r1   r7   r>   rC   rQ   rV   re   rn   r   r   r   r   r   r   .   sK    = $ $L*/DC	D	Jr   r   c                   ^    \ rS rSrSrS r\S 5       rS rS r	S r
S rS	 rS
 rS rS rSrg)_RegionalDiskm   z;A wrapper for Compute Engine RegionDisksService API client.c                 J    X l         Xl        UR                  U l        X0l        g r   )r   r   regionDisksr    r!   r"   s       r   r'   _RegionalDisk.__init__p   s    NL&&DMNr   c                     g)Nzcompute.regionOperationsr   r*   s    r   r,   $_RegionalDisk.GetOperationCollectionv   s    %r   c                     U R                   $ r   r/   r0   s    r   r1   _RegionalDisk.GetServicez   r3   r   c                 j    U R                   R                  " S0 U R                  R                  5       D6$ )Nr   )r!   ComputeRegionDisksGetRequestr   r6   r0   s    r   r7   #_RegionalDisk.GetDiskRequestMessage}   s.    >>66 #
..


!# #r   c                 X    U R                  5       nU R                  R                  U5      $ r   r:   r<   s     r   r>   _RegionalDisk.GetDiskResource   r@   r   c                 .    U R                   R                  $ r   )r!   RegionSetLabelsRequestr0   s    r   rC   (_RegionalDisk.GetSetLabelsRequestMessage   s    >>000r   c           
          U R                   R                  nU" U R                  R                  U R                  R                  U R                  R
                  U R                   R                  UR                  US9S9$ )NrF   )rI   rJ   regionregionSetLabelsRequest)r!   "ComputeRegionDisksSetLabelsRequestr   rI   rN   r   r   rG   rO   s       r   rQ   ,_RegionalDisk.GetSetDiskLabelsRequestMessage   sk    
..
;
;C&&$$~~$$#~~DD!226  E  C	D Dr   c                 .    U R                   R                  $ r   )r   r   r0   s    r   rV   _RegionalDisk.GetDiskRegionName   s    >>   r   c           	      :   U R                   R                  U R                  R                  5       U R                  R                  U R                  R
                  U R                   R                  US9S9nUR                  U R                  R                  SU4/5      $ )NrY   )rN   rI   r   %regionDisksAddResourcePoliciesRequestr\   )
r!   ,ComputeRegionDisksAddResourcePoliciesRequestr   r^   rI   r   %RegionDisksAddResourcePoliciesRequestr`   r   rw   ra   s       r   re   ,_RegionalDisk.MakeAddResourcePoliciesRequest   s    ..MM^^  "&&~~$$.2nn	.	.. 
/ 
0 N 1K "..
,,
"
"$9;	GHJ Jr   c           	      :   U R                   R                  U R                  R                  5       U R                  R                  U R                  R
                  U R                   R                  US9S9nUR                  U R                  R                  SU4/5      $ )NrY   )rN   rI   r   (regionDisksRemoveResourcePoliciesRequestri   )
r!   /ComputeRegionDisksRemoveResourcePoliciesRequestr   r^   rI   r   (RegionDisksRemoveResourcePoliciesRequestr`   r   rw   rl   s       r   rn   /_RegionalDisk.MakeRemoveResourcePoliciesRequest   s    ^^SS^^  "&&~~$$15	1	1. 
2 
0 T 1N "..
,,
"
"$<n	MNP Pr   rp   Nrq   r   r   r   rt   rt   m   sI    C & &#*1D!
J
Pr   rt   c                     U R                  5       S:X  a  gU R                  5       S:X  a  g[        SR                  U R                  5       5      5      e)a  Checks if a compute disk is zonal or regional.

Args:
  disk_ref: the disk resource reference that is parsed from resource arguments
    to modify.

Returns:
  Boolean, true when the compute disk resource to modify is a zonal compute
    disk resource, false when a regional compute disk resource.

Raises:
  UnknownDiskResourceError: when the compute disk resource is not in the
    correct format.
compute.disksTcompute.regionDisksFz'Unexpected disk resource argument of {})
Collectionr   format)r%   s    r   IsZonalr      sS    " o- 55
"1889L9L9NOQ Qr   c                 R    [        U 5      (       a  [        XU5      $ [        XU5      $ )zGets the zonal or regional disk api info.

Args:
  disk_ref: the disk resource reference that is parsed from resource
    arguments.
  client: the compute api_tools_client.
  messages: the compute message module.

Returns:
  _ZonalDisk or _RegionalDisk.
)r   r   rt   )r%   r$   r&   s      r   GetDiskInfor      s)     Xf11844r   c                 <    U R                  S5      S   nU[        ;   $ )zCheck if the given disk type (name or URI) supports IOPS provisioning.

Args:
  disk_type: name of URI of the disk type to be checked.

Returns:
  Whether the disk_type supports IOPS provisioning.
/)split_SUPPORTED_DISK_TYPES_IOPS	disk_typedisk_type_names     r   IsProvisioningTypeIopsr      s#     ??3'+.	5	55r   c                 <    U R                  S5      S   nU[        ;   $ )zCheck if the given disk type (name or URI) supports throughput provisioning.

Args:
  disk_type: name of URI of the disk type to be checked.

Returns:
  Boolean, true if the disk_type supports throughput provisioning, false
  otherwise.
r   r   )r    _SUPPORTED_DISK_TYPES_THROUGHPUTr   s     r   IsProvisioningTypeThroughputr      s#     ??3'+.	;	;;r   r   r%   compute_holderc                 ^   SnU (       a  UR                  5       S:X  a3  UR                  R                  U SUR                  UR                  S.S9nOFUR                  5       S:X  a2  UR                  R                  U SUR                  UR
                  S.S9nU(       a  UR                  5       $ g)	a  Get the disk type URI for a given disk type name and disk reference.

Args:
  disk_type: name of the disk type.
  disk_ref: the disk resource reference that is parsed from resource
    arguments.
  compute_holder: the compute api_tools_client.

Returns:
  The disk type URI.
Nr   zcompute.diskTypes)rI   rK   )
collectionparamsr   zcompute.regionDiskTypes)rI   r   )r   	resourcesParserI   rK   r   SelfLink)r   r%   r   type_refs       r   GetDiskTypeUrir      s     (/))//
(!))mm 0 h 
			"7	7))//
.!))  0 h   	r   N)r   
__future__r   r   r   typingr   googlecloudsdk.api_lib.computer   rT   googlecloudsdk.core.exceptionsr   	frozensetr   r   r   objectr   rt   r   r   r   r   strr   r   r   r   <module>r      s    J &  '  A 0& (   $- . $  Lu L<J <J~=PF =P@Q45$
6<""!"36"r   