
    $                         S r SSKJr  SSKJr  SSKJr  SSKrSSK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SKJr  SSKJr  SSKJr  S rS rS rS rS rS rS rg)z/Utility for parsing Artifact Registry versions.    )absolute_import)division)unicode_literalsN)	protojson)filter_rewriter)common_args)containeranalysis_util)requests)util)log)
properties)	resourcesc                    / nU R                    HH  n[        R                  R                  UR                  S5      nUR                  UR                  5        MJ     [        R                  " [        R                  " U 5      5      nUR                  SS5        U(       a  X%S'   U R                  bI  U R                  R                   Vs0 s H$  nUR                  UR                  R                   _M&     snUS'   U$ s  snf )z'Convert the tag resources into tag IDs.z>artifactregistry.projects.locations.repositories.packages.tagsrelatedTagsNmetadata)r   r   REGISTRYParseRelativeNamenameappendtagsIdjsonloadsr   encode_messagepopr   additionalPropertieskeyvaluestring_value)responseunused_argstagsttagjson_objprops          8lib/googlecloudsdk/command_lib/artifacts/version_util.pyShortenRelatedTagsr'   #   s    	$a



.
.	PC 	KK

	   ZZ	00:;(
,,}d#	"]" %%:::D 	$**))):HZ 
/	s   +C:c                    UR                   (       d  U $ [        R                  R                  U S   S5      n[        R                  R	                  UR
                  UR                  UR                  S.SS9n[        R                  " 5       n[        R                  " UR                  5       5      nU(       a  UR                  (       d  [        R                  " S5        U $ UR                  UR                  R                   R"                  :X  a  [%        U5      u  pbOUR                  UR                  R                   R&                  :X  a  [)        U5      u  pbOTUR                  UR                  R                   R*                  :X  a  [-        U5      u  pbO[        R                  " S5        U $ [.        R0                  " Xb5      nUR3                  5       (       a!  U R5                  UR3                  5       5        U $ U R5                  SS	05        U $ )
zHCall CA APIs for vulnerabilities if --show-package-vulnerability is set.r   zBartifactregistry.projects.locations.repositories.packages.versions)
projectsIdlocationsIdz0artifactregistry.projects.locations.repositories)params
collectionzICould not determine repository format, so cannot show vulnerability scan.zCUnsupported repository format. Skipping showing vulnerability scan.package_vulnerability_summaryzNo vulnerability data found.)show_package_vulnerabilityr   r   r   ParserepositoriesIdr)   r*   r
   GetMessagesGetRepositoryRelativeNameformatr   warning
RepositoryFormatValueValuesEnumMAVEN"_GenerateMavenResourceFromResponseNPM'_GenerateNPMPackageResourceFromResponsePYTHON*_GeneratePythonPackageResourceFromResponseca_utilGetArtifactOccurrencesArtifactsDescribeViewupdate)r   argsresourcerepo_resourcemessages
repositoryprojectr   s           r&   ListOccurrencesrH   9   s   		(	(O11vJ(
 $$** ++"" D + 	- !!#(%%m&@&@&BC*	:,,KK	 O(--CCIII:8DGXH//EEIII?IGXH//EELLLB8LGXKKM O++G>(##%%OOH2245 
/	 OO	(*HI 
/    c                    [        U S5      (       a+  [        R                  " [        R                  " U 5      5      nOU nSU;   af  US   (       a\  US    HS  n[        UR                  S5      [        5      (       d  M)  [        R                  " US   5      R                  5       US'   MU     SU;   aK  UR                  S5      (       a5  SUS   ;   a,  0 nUS   R                  S/ 5       H  nUS   XES   '   M     XBS'   U$ )z.Convert fingerprint and annotations to a dict.check_initializedfingerprintsr   annotationsr   r   )hasattrr   r   r   r   
isinstancegetstrbase64	b64decodehex)r   r    rC   hrM   ps         r&   ConvertFingerprintrW   p   s    X*++zz)228<=H HxH^$<n%	AEE'NC	(	(%%aj1557'
 &
 h8<<#>#>-!88k&**+A2F! !'
eH G +}	/rI   c           
      R   [         R                  R                  5       nUR                  SS5        U R                  S-   U R
                  -   n[         R                  R                  UR                  SU R                  U R                  U R                  US95      nU R                  U4$ )zGenerates the maven artifact resource  from the version resource name.

Args:
  resource: The version resource name.

Returns:
  The project ID and the maven artifact package resource name.
artifactregistryv1:z?artifactregistry.projects.locations.repositories.mavenArtifacts)r)   r*   r0   mavenArtifactsIdr   r   CloneRegisterApiByName
packagesId
versionsIdResourcer3   Creater)   r*   r0   )rC   registrymaven_artifacts_idmaven_resources       r&   r9   r9      s     %%'(
/6**S083F3FF%%22oo
K((**!00-  . 
		n	,,rI   c           
      R   [         R                  R                  5       nUR                  SS5        U R                  S-   U R
                  -   n[         R                  R                  UR                  SU R                  U R                  U R                  US95      nU R                  U4$ )zGenerates the npm package resource from the version resource name.

Args:
  resource: The version resource name.

Returns:
  The project ID and the npm package resource name.
rY   rZ   r[   z<artifactregistry.projects.locations.repositories.npmPackages)r)   r*   r0   npmPackagesIdr]   )rC   rd   npm_package_idnpm_resources       r&   r;   r;      s     %%'(
/6&&,x/B/BB.##00oo
H((**!00&  , 
		l	**rI   c           
      R   [         R                  R                  5       nUR                  SS5        U R                  S-   U R
                  -   n[         R                  R                  UR                  SU R                  U R                  U R                  US95      nU R                  U4$ )zGenerates the python package resource  from the version resource name.

Args:
  resource: The version resource name.

Returns:
  The project ID and the python package resource name.
rY   rZ   r[   z?artifactregistry.projects.locations.repositories.pythonPackages)r)   r*   r0   pythonPackagesIdr]   )rC   rd   python_package_idpython_resources       r&   r=   r=      s     %%'(
/6))C/(2E2EE&&33oo
K((**!00,  / 
		o	--rI   c           
         [         R                  " 5       n[         R                  " 5       nU R                  n[        R
                  " U 5      n[        R                  " U 5      nU R                  =(       d2    [        R                  R                  R                  R                  5       nU R                  nUR                  SS5      R                  SS5      nUR                  SS5      n[        R                  " U R                   5      n	U R"                  n
[$        R&                  " 5       R)                  U R*                  5      u  pU	b  SU	;   a  Sn	U R"                  b!  U R*                  b  Ub  U R"                  nOSnSn
[,        R.                  R1                  [,        R2                  R5                  S	UUUUS
95      nUUUUUU	U
S.n[        R6                  " [         R8                  40 UD6u  nnU(       d+  U(       a  XR*                  :X  a  SU l        U	(       a  SU l        [:        R<                  R?                  SRA                  XVXG5      5        U$ )zwLists package versions in a given package.

Args:
  args: User input arguments.

Returns:
  List of package versiions.
/z%2F+z%2B^z%5EN,z9artifactregistry.projects.locations.repositories.packages)r)   r*   r0   r`   )clientrE   pkgserver_filter	page_sizeorder_bylimitzHListing items under project {}, location {}, repository {}, package {}.
)!r
   	GetClientr1   rw   r   GetRepo
GetProjectlocationr   VALUES	artifactsGetpackagereplacer   ParseSortByArgsort_byry   r   RewriterRewritefilterr   rb   r3   r   rc   RetryOnInvalidArgumentsListVersionsr   statusPrintr4   )rB   rt   rE   rw   reporG   r}   r   escaped_pkgrx   ry   _rv   pkg_pathserver_argsserver_args_skipped	lversionss                    r&   r   r      s    &!!#(nn)	d	$OOD!']]Hj//99BBFFH(LL'U+33C?+##C/+''5(
**%$--/77D!
h h	ZZ 7  **i ie,,
E    ( $+ $(#?#?$*$ y 
 ++5dkdl**fW> 
rI   )__doc__
__future__r   r   r   rR   r   apitools.base.protorpcliter    googlecloudsdk.api_lib.artifactsr   googlecloudsdk.api_lib.utilr   $googlecloudsdk.command_lib.artifactsr	   r>   r
   r   googlecloudsdk.corer   r   r   r'   rH   rW   r9   r;   r=   r    rI   r&   <module>r      sY    6 &  '   0 < 3 R 9 5 # * ),4n2-6+4.4IrI   