
    G                        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ZdZdZdZdZdZd Zd Zd Z d?dZ!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d@d!Z,dAd"Z-	 	 dBd#Z.	 	 dCd$Z/	 	 dDd%Z0	 	 dDd&Z1d?d'Z2d( Z3d) Z4	 d?d*Z5d+ Z6dAd,Z7d- Z8d. Z9d/ Z:d0 Z;d1 Z<d2 Z=d3 Z>d4 Z?d5 Z@d6 ZAd7 ZB	 dAd8ZCd9eDd:eEd;eEfd<ZFd= ZGd> ZHy )EzUtility for making API calls.    )absolute_import)division)unicode_literals)
exceptions)http_wrapper)
list_pager)iam)util)apis)iam_util)	resourcesartifactregistryv1storagezstorage.objects.listz/cloudkms.projects.locations.keyRings.cryptoKeysc                  >    t        j                  t        t              S N)r   GetClientInstanceSTORAGE_API_NAMESTORAGE_API_VERSION     4lib/googlecloudsdk/command_lib/artifacts/requests.pyGetStorageClientr   +       			 02E	FFr   c                  >    t        j                  t        t              S r   )r   GetMessagesModuler   r   r   r   r   GetStorageMessagesr   /   r   r   c                     | j                   dk\  rt        j                  j                  |       t	        j
                  |       S )z5Wrap http_wrapper.CheckResponse to skip retry on 501.i  )status_codeapitools_exceptions	HttpErrorFromResponser   CheckResponse)responses    r   SkipRetryOn500Errorsr%   3   s8    S 

'
'
4
4X
>>		#	#H	--r   c                 \    t        j                  t        t        |       }t        |_        |S )N)skip_activation_prompt)r   r   ARTIFACTREGISTRY_API_NAMEARTIFACTREGISTRY_API_VERSIONr%   check_response_func)r'   clients     r   	GetClientr,   :   s*    !!"3&
  4&	-r   c                  >    t        j                  t        t              S r   )r   r   r(   r)   r   r   r   GetMessagesr.   D   s    			 9 <
> >r   c                  6    t        j                  t        d      S Nv1beta2)r   r   r(   r   r   r   GetClientV1beta2r2   I       			 9 )
+ +r   c                  6    t        j                  t        d      S r0   )r   r   r(   r   r   r   GetMessagesV1beta2r5   N   r3   r   c                     |j                  |      }| j                  j                  |      }t        ||j                        s%t        j                  dj                  ||            y)zDeletes a tag by its name.namezFailed to delete tag {}: {}N)FArtifactregistryProjectsLocationsRepositoriesPackagesTagsDeleteRequest-projects_locations_repositories_packages_tagsDelete
isinstanceEmptyar_exceptionsArtifactRegistryErrorformat)r+   messagestagdelete_tag_reqerrs        r   	DeleteTagrE   S   sj    bb c .<<CC	#	C	(

-
-%,,S#68 8 
)r   c                     |j                  |j                         |j                               }|j                  |j	                         ||j
                        }| j                  j                  |      S )z7Creates a tag associated with the given docker version.)r8   version)parentrB   tagId)Tag
GetTagNameGetVersionNameFArtifactregistryProjectsLocationsRepositoriesPackagesTagsCreateRequestGetPackageNamerB   r:   Create)r+   rA   
docker_tagdocker_versionrB   create_tag_reqs         r   CreateDockerTagrS   ^   st      "N,I,I,K 	 	M#bb&&(c c I.		=	=	D	D
 r   c                 \    |j                  |      }| j                  j                  |      S )zGets a tag by its name.r7   )CArtifactregistryProjectsLocationsRepositoriesPackagesTagsGetRequestr:   Get)r+   rA   rB   get_tag_reqs       r   GetTagrX   h   s2    \\ ] +		=	=	A	A+	NNr   c                 \    |j                  |      }| j                  j                  |      S )zDeletes a version by its name.r7   )JArtifactregistryProjectsLocationsRepositoriesPackagesVersionsDeleteRequest1projects_locations_repositories_packages_versionsr;   )r+   rA   rG   delete_ver_reqs       r   DeleteVersionr]   o   s7    ff g .		A	A	H	H
 r   c                 \    |j                  |      }| j                  j                  |      S )zDeletes a package by its name.r7   )BArtifactregistryProjectsLocationsRepositoriesPackagesDeleteRequest(projects_locations_repositories_packagesr;   )r+   rA   packagedelete_pkg_reqs       r   DeletePackagerc   w   s2    ^^ _ .		8	8	?	?	OOr   c                     t               } t               }|j                  |      }| j                  j	                  |      S )zGets a version by its name.r7   )r,   r.   rU   r:   rV   )r+   rA   rG   get_ver_reqs       r   
GetVersionrf   ~   sE    ;&](JJ K   
	=	=	A	A+	NNr   c                 F   |j                  |      }| j                  j                  |      }|j                  r't	        |j                  j                  d            dk7  r$t        j                  dj                  |            |j                  j                  d      d   S )z"Gets a version name by a tag name.r7   /
   z!Internal error. Corrupted tag: {})	rU   r:   rV   rG   lensplitr>   r?   r@   )r+   rA   rB   rW   get_tag_ress        r   GetVersionFromTagrn      s    \\ ] +DDHH+			K$7$7$=$=c$B Cr I

-
-+22379 9				"	"3	'	++r   Nc           	          |j                  ||      }t        t        j                  | j                  ||dd            S )z;Lists all tags under a package with the given package name.rH   filterpageSizetags
batch_sizebatch_size_attributefield)DArtifactregistryProjectsLocationsRepositoriesPackagesTagsListRequestlistr   YieldFromListr:   )r+   rA   ra   	page_sizeserver_filterlist_tags_reqs         r   ListTagsr~      sM    __] ` ,-	

>
>
)
 r   c           	          |j                  |dj                  |            }t        t        j                  | j
                  ||dd            S )z-Lists tags associated with the given version.zversion="{}"rp   rr   rs   rt   )rx   r@   ry   r   rz   r:   )r+   rA   ra   rG   r{   r}   s         r   ListVersionTagsr      sY    __-44W= ` ?-	

>
>
)
 r   c           
          |j                  |||      }t        t        j                  | j                  |||dd            S )z&Lists all packages under a repository.rH   orderByrq   rr   packageslimitru   rv   rw   )@ArtifactregistryProjectsLocationsRepositoriesPackagesListRequestry   r   rz   r`   )r+   rA   repor{   order_byr   r|   list_pkgs_reqs           r   ListPackagesr      sY     OOx P ?  


9
9
)
 r   c           
          |}||||k  r|}|j                  ||||      }	t        t        j                  | j                  |	||dd            S )z#Lists all versions under a package.)rH   viewr   rq   rr   versionsr   )HArtifactregistryProjectsLocationsRepositoriesPackagesVersionsListRequestry   r   rz   r[   )
r+   rA   pkgversion_viewr{   r   r   r|   
page_limitlist_vers_reqs
             r   ListVersionsr      sr     *
]y,U1BJcc|Xm d M-	

B
B
)
 r   c           	          t               }t               }|j                  | ||      }t        t	        j
                  |j                  ||dd            S )z'Lists all repositories under a project.r   rr   repositoriesrt   )r,   r.   8ArtifactregistryProjectsLocationsRepositoriesListRequestry   r   rz   projects_locations_repositories)projectr{   r   r|   r+   rA   list_repos_reqs          r   ListRepositoriesr      se     ;&](GG(= H B  


0
0
) 
! !r   c           	          |j                  |||      }t        t        j                  | j                  ||dd            S )z#Lists all files under a repository.)rH   rq   r   rr   filesrt   )=ArtifactregistryProjectsLocationsRepositoriesFilesListRequestry   r   rz   %projects_locations_repositories_files)r+   rA   r   r|   r{   r   list_files_reqs          r   	ListFilesr      sV     LLmX M ?  


6
6
)
 r   c                     t        |      }t               }|j                  |       }|j                  j	                  |      }|S )z#Gets the repository given its name.r7   )r,   r.   7ArtifactregistryProjectsLocationsRepositoriesGetRequestr   rV   )r   r'   r+   rA   get_repo_reqget_repo_ress         r   GetRepositoryr      sI    +,&](QQ R ,77;;LI,	r   c                     t               }t               }|j                  |       }|j                  j	                  |      }|S )z1Gets the IAM policy for the specified repository.)resource)r,   r.   @ArtifactregistryProjectsLocationsRepositoriesGetIamPolicyRequestr   GetIamPolicy)repo_resr+   rA   get_iam_policy_reqget_iam_policy_ress        r   r   r      sJ    ;&](`` a ==JJ	r   c                     t               }t               }|j                  | |j                  |            }|j                  j                  |      S )z1Sets the IAM policy for the specified repository.)policy)r   setIamPolicyRequest)r,   r.   @ArtifactregistryProjectsLocationsRepositoriesSetIamPolicyRequestSetIamPolicyRequestr   SetIamPolicy)r   r   r+   ar_messagesset_iam_policy_reqs        r   r   r     sW    ;&+ #cc%999H d  
	/	/	<	<=O	PPr   c                     t        |      }t               }|j                  dj                  | |      |j                  j                  d      d   |      }|j                  j                  |      S )aj  Creates the repository given its parent.

  Args:
    project: str: The project to create the repository in.
    location: str: The region to create the repository in.
    repository: messages.Repository to create.
    skip_activation_prompt: bool: If true, do not prompt for service activation

  Returns:
    The resulting operation from the create request.
  zprojects/{}/locations/{}rh   rj   )rH   repositoryId
repository)r,   r.   :ArtifactregistryProjectsLocationsRepositoriesCreateRequestr@   r8   rl   r   rO   )r   locationr   r'   r+   rA   requests          r   CreateRepositoryr     so     +,&](OO'..wA??((-b1 P ' 
	/	/	6	6w	??r   c                     t               }t               }|j                  |       }|j                  j	                  |      }|S )z Gets the package given its name.r7   )r,   r.   ?ArtifactregistryProjectsLocationsRepositoriesPackagesGetRequestr`   rV   )ra   r+   rA   get_package_reqget_package_ress        r   
GetPackager   ,  sH    ;&](\\ ] /CCGG/	r   c                     t               }t               }|j                  d| z         }t        j                  |j
                  ||dd      }t        |D cg c]  }|j                   c}      S c c}w )z(Lists all locations for a given project.	projects/r7   rr   	locationsrt   )r2   r5   ,ArtifactregistryProjectsLocationsListRequestr   rz   projects_locationssorted
locationId)
project_idr{   r+   rA   list_locs_reqr   locs          r   ListLocationsr   7  sx    &!(GG# H %-&&%) 
959C95	665s   A1c                     t               }t               }|j                  | t        |      }|j                  j                  |      S )zETests storage IAM permission for a given bucket for the user project.)bucketpermissionsuserProject)r   r   'StorageBucketsTestIamPermissionsRequest_GCR_PERMISSIONbucketsTestIamPermissions)r   r   r+   rA   test_reqs        r   TestStorageIAMPermissionr   F  sD    &!(==g > G(		*	*8	44r   c                 v    t         j                  j                  | t              }t	        j
                  |      S )z+Gets the IAM policy for a given crypto key.relative_name
collection)r   REGISTRYParseRelativeNameCRYPTO_KEY_COLLECTIONkms_iamGetCryptoKeyIamPolicy)kms_keycrypto_key_refs     r   GetCryptoKeyPolicyr   O  s4    %%77(= 8 ?.		&	&~	66r   c                 z    t         j                  j                  | t              }t	        j
                  ||d      S )z;Adds Encrypter/Decrypter role to the given service account.r   z*roles/cloudkms.cryptoKeyEncrypterDecrypter)r   r   r   r   r   AddPolicyBindingToCryptoKey)r   service_accountr   s      r   AddCryptoKeyPermissionr   V  s>    %%77(= 8 ?.		,	,o2
4 4r   c                     t        j                         \  }}|j                  j                  |j	                  t        j                  |                   S )z)Gets the service account given its email.r7   )iam_apiGetClientAndMessagesprojects_serviceAccountsrV   $IamProjectsServiceAccountsGetRequestr   EmailToAccountResourceName)r   r+   rA   s      r   GetServiceAccountr   _  sR    113&(		(	(	,	,3322?C 4 E
F Fr   c                     t               }t               }|j                  d| z   dz         }|j                  j	                  |      S )Nr   /projectSettingsr7   )r,   r.   1ArtifactregistryProjectsGetProjectSettingsRequestprojectsGetProjectSettings)r   r+   rA   get_settings_reqs       r   r   r   g  sK    ;&](OO#&88 P :		+	+,<	==r   c                     t               }t               }|j                  d| z   dz   |z   dz         }|j                  j	                  |      S )z/Gets VPC SC Config on the project and location.r   /locations//vpcscConfigr7   )r,   r.   6ArtifactregistryProjectsLocationsGetVpcscConfigRequestr   GetVpcscConfig)r   location_idr+   rA   get_vpcsc_reqs        r   GetVPCSCConfigr   o  sY    ;&](QQ#m3kA R - 
	"	"	1	1-	@@r   c                    t               }t               }|j                  d| z   dz   |z   dz   |j                  j                  j                        }|j                  d| z   dz   |z   dz   |      }|j                  j                  |      S )z=Allows requests in Remote Repository inside VPC SC perimeter.r   r   r   r8   vpcscPolicyr8   vPCSCConfig)r,   r.   VPCSCConfigVpcscPolicyValueValuesEnumALLOW9ArtifactregistryProjectsLocationsUpdateVpcscConfigRequestr   UpdateVpcscConfig)r   r   r+   rA   vcupdate_vpcsc_reqs         r   AllowVPCSCConfigr  y  s    ;&](#m3kA&&AAGG  I" WW#m3kA X  
	"	"	4	45E	FFr   c                    t               }t               }|j                  d| z   dz   |z   dz   |j                  j                  j                        }|j                  d| z   dz   |z   dz   |      }|j                  j                  |      S )z=Denies requests in Remote Repository inside VPC SC perimeter.r   r   r   r   r   )r,   r.   r  r  DENYr  r   r  )r   r   r+   rA   r  r   s         r   DenyVPCSCConfigr    s    ;&](#m3kA&&AAFF  H" TT#m3kA U - 
	"	"	4	4]	CCr   c                 j    t               }t        | |j                  j                  j                        S r   )r.   SetUpgradeRedirectionStateProjectSettings%LegacyRedirectionStateValueValuesEnumREDIRECTION_FROM_GCR_IO_ENABLEDr   rA   s     r   EnableUpgradeRedirectionr    s-    ](	#(**PP&&
( (r   c                 j    t               }t        | |j                  j                  j                        S r   )r.   r  r  r   REDIRECTION_FROM_GCR_IO_DISABLEDr  s     r   DisableUpgradeRedirectionr    s-    ](	#(**PP''
) )r   c                 j    t               }t        | |j                  j                  j                        S r   )r.   r  r  r  !REDIRECTION_FROM_GCR_IO_FINALIZEDr  s     r   FinalizeUpgradeRedirectionr    s-    ](	#(**PP((
* *r   c                     t               }t               }|j                  |      }d}|r||_        |j	                  d| z   dz   ||      }|j
                  j                  |      S )z<Sets the upgrade redirection state for the supplied project.)legacyRedirectionStatelegacy_redirection_stater   r   )r8   projectSettings
updateMask)r,   r.   r  pullPercent4ArtifactregistryProjectsUpdateProjectSettingsRequestr   UpdateProjectSettings)r   redirection_statepull_percentr+   rA   project_settingsupdate_maskupdate_settings_reqs           r   r  r    s     ;&](--. . 0*+#/ CCZ'*<<*  D   
	.	./B	CCr   rH   r{   r   c           
          t               }t               }|j                  |       }t        t	        j
                  |j                  ||dd|            S )z+Lists all docker images under a repository.)rH   rr   dockerImages)ru   rv   rw   r   )r,   r.   DArtifactregistryProjectsLocationsRepositoriesDockerImagesListRequestry   r   rz   ,projects_locations_repositories_dockerImages)rH   r{   r   r+   rA   list_images_reqs         r   ListDockerImagesr+    s^    ;&](aa b / 


=
=
)	
 	r   c                     t               }t               }|j                  ||j                  |             }|j                  j                  |      S )zCopies a repository.)sourceRepository)destinationRepositorycopyRepositoryRequest)r,   r.   BArtifactregistryProjectsLocationsRepositoriesCopyRepositoryRequestCopyRepositoryRequestr   CopyRepository)source_repodest_repo_namer+   rA   reqs        r   r2  r2    sX    ;&](SS*$::& ;  	T 	# 
	/	/	>	>s	CCr   c                    t               }t               }| r]|j                  | j                         j                         j	                         |j                  || j	                                     }nj|r]|j                  |j                         j                         j	                         |j                  ||j	                                     }nt        d      |j                  j                  |      S )z&Exports an artifact by version or tag.)gcsPathsourceVersion)r   exportArtifactRequest)r7  	sourceTagz(Either version or tag must be specified.)	r,   r.   BArtifactregistryProjectsLocationsRepositoriesExportArtifactRequestParentRelativeNameExportArtifactRequest
ValueErrorr   ExportArtifact)rG   rB   gcs_destinationr+   rA   r5  s         r   r@  r@    s    ;&](

U
U>>#**,99;&<<#!..0 = 
 V C 

U
U::<&&(557&<<#&&( = 
 V C ?
@@		/	/	>	>s	CCr   )F)NNr   )NNNN)NNNNN)NNN)I__doc__
__future__r   r   r   apitools.base.pyr   r    r   r    googlecloudsdk.api_lib.artifactsr>   googlecloudsdk.api_lib.cloudkmsr	   r   googlecloudsdk.api_lib.iamr
   r   googlecloudsdk.api_lib.utilr   googlecloudsdk.command_lib.iamr   googlecloudsdk.corer   r(   r)   r   r   r   r   r   r   r%   r,   r.   r2   r5   rE   rS   rX   r]   rc   rf   rn   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  strintr+  r2  r@  r   r   r   <module>rM     sn   $ &  ' > ) ' H : 6 , 3 ) / #   (I GG.>
+
+
8OPO	,

 48:>  6:JN& )-26!" 59'+Q ;@@.7574F>AGD()* 15D,S S  &
DDr   