
    $                         S 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.    )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__.   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.GetOperationCollection4   s     $r   c                     U R                   $ r   r   r    s    r   
GetService_ZonalDisk.GetService9       ==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   AsDictr-   s    r   GetDiskRequestMessage _ZonalDisk.GetDiskRequestMessage<   s'    >>00K4>>3H3H3JKKr   c                 X    U R                  5       nU R                  R                  U5      $ r   r4   r   Getr    request_msgs     r   GetDiskResource_ZonalDisk.GetDiskResource@   %    ,,.K==[))r   c                 .    U R                   R                  $ r   )r   ZoneSetLabelsRequestr-   s    r   GetSetLabelsRequestMessage%_ZonalDisk.GetSetLabelsRequestMessageD   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   rF   diskrH   r?   rD   r    rK   rE   reqs       r   GetSetDiskLabelsRequestMessage)_ZonalDisk.GetSetDiskLabelsRequestMessageG   sk    
..
5
5C&&$$^^  !^^@@!226 A C	D Dr   c                 V    [         R                  " U R                  R                  5      $ r   )compute_utilsZoneNameToRegionNamer   rH   r-   s    r   GetDiskRegionName_ZonalDisk.GetDiskRegionNameP   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)rK   rF   rH   disksAddResourcePoliciesRequestAddResourcePolicies)
r   &ComputeDisksAddResourcePoliciesRequestr   NamerF   rH   DisksAddResourcePoliciesRequestMakeRequestsr   r   r    resource_policiesclient_to_make_requestadd_requests       r   MakeAddResourcePoliciesRequest)_ZonalDisk.MakeAddResourcePoliciesRequestS   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      $ )NrV   )rK   rF   rH   "disksRemoveResourcePoliciesRequestRemoveResourcePolicies)
r   )ComputeDisksRemoveResourcePoliciesRequestr   r[   rF   rH   "DisksRemoveResourcePoliciesRequestr]   r   r   r    r_   r`   remove_requests       r   !MakeRemoveResourcePoliciesRequest,_ZonalDisk.MakeRemoveResourcePoliciesRequest^   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)   r.   r4   r;   r@   rN   rS   rb   rk   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)_RegionalDiskj   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__m   s    NL&&DMNr   c                     g)Nzcompute.regionOperationsr   r'   s    r   r)   $_RegionalDisk.GetOperationCollections   s    %r   c                     U R                   $ r   r,   r-   s    r   r.   _RegionalDisk.GetServicew   r0   r   c                 j    U R                   R                  " S0 U R                  R                  5       D6$ )Nr   )r   ComputeRegionDisksGetRequestr   r3   r-   s    r   r4   #_RegionalDisk.GetDiskRequestMessagez   s.    >>66 #
..


!# #r   c                 X    U R                  5       nU R                  R                  U5      $ r   r7   r9   s     r   r;   _RegionalDisk.GetDiskResource~   r=   r   c                 .    U R                   R                  $ r   )r   RegionSetLabelsRequestr-   s    r   r@   (_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$ )NrC   )rF   rG   regionregionSetLabelsRequest)r   "ComputeRegionDisksSetLabelsRequestr   rF   rK   r   r   rD   rL   s       r   rN   ,_RegionalDisk.GetSetDiskLabelsRequestMessage   sk    
..
;
;C&&$$~~$$#~~DD!226  E  C	D Dr   c                 .    U R                   R                  $ r   )r   r   r-   s    r   rS   _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      $ )NrV   )rK   rF   r   %regionDisksAddResourcePoliciesRequestrY   )
r   ,ComputeRegionDisksAddResourcePoliciesRequestr   r[   rF   r   %RegionDisksAddResourcePoliciesRequestr]   r   rt   r^   s       r   rb   ,_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      $ )NrV   )rK   rF   r   (regionDisksRemoveResourcePoliciesRequestrf   )
r   /ComputeRegionDisksRemoveResourcePoliciesRequestr   r[   rF   r   (RegionDisksRemoveResourcePoliciesRequestr]   r   rt   ri   s       r   rk   /_RegionalDisk.MakeRemoveResourcePoliciesRequest   s    ^^SS^^  "&&~~$$15	1	1. 
2 
0 T 1N "..
,,
"
"$<n	MNP Pr   rm   Nrn   r   r   r   rq   rq   j   sI    C & &#*1D!
J
Pr   rq   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   rq   )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)rF   rH   )
collectionparamsr   zcompute.regionDiskTypes)rF   r   )r   	resourcesParserF   rH   r   SelfLink)r   r"   r   type_refs       r   GetDiskTypeUrir      s     (/))//
(!))mm 0 h 
			"7	7))//
.!))  0 h   	r   N)r   typingr   googlecloudsdk.api_lib.computer   rQ   googlecloudsdk.core.exceptionsr   	frozensetr   r   r	   objectr   rq   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   