
    $                         d Z ddlmZ ddlmZ ddlmZ ddlZddl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y)z*File utils for Artifact Registry commands.    )absolute_import)division)unicode_literalsN)	protojson)
exceptions)filter_rewriter)common_args)requests)util)
properties)	resourcesc           
          t         j                  j                  d| j                  | j                  | j
                  | j                  j                  dd      j                  dd      j                  dd            S 	z4Escapes slashes, pluses and hats from request names.6artifactregistry.projects.locations.repositories.files/%2F+%2B^%5E
projectsIdlocationsIdrepositoriesIdfilesId)r   REGISTRYCreater   r   r   r   replace)refs    5lib/googlecloudsdk/command_lib/artifacts/file_util.pyEscapeFileNamer!   "   sf    				"	">//''kk!!#u-wsEwsE 
# 
     c           
      (   t         j                  j                  d| j                  | j                  | j
                  | j                  j                  dd      j                  dd      j                  dd            }|j                         |_	        |S r   )
r   r   r   r   r   r   r   r   RelativeNamename)r   unused_argsreqfiles       r    EscapeFileNameHookr)   /   sz    				"	">//''kk!!#u-wsEwsE 
# 
$  #(	*r"   c           
          t         j                  j                  d| |||j                  dd      j                  dd      j                  dd            S )	z.Escapes slashes and pluses from request names.r   r   r   r   r   r   r   r   )r   r   r   r   )
project_idlocation_idrepo_idfile_ids       r    EscapeFileNameFromIDsr/   >   sR    				"	">ooc5)wsEwsE 
# 
 r"   c                 @    | D cg c]  }t        |d       c}S c c}w )z+Convert hashes of file list to hex strings.N)ConvertFileHashes)filesfs     r    ConvertFilesHashesr4   K   s"    .3	4e
At
$e	44	4s   c                    t        j                  t        j                  |             }g }| j                  D ]8  }|j                  |j                  |j                  j                         d       : |r||d<   i }| j                  r4| j                  j                  D ]  }|j                  ||j                  <    |r||d<   |S )z#Convert file hashes to hex strings.)typevaluehashesannotations)jsonloadsr   encode_messager8   appendr6   r7   hexr9   additionalPropertieskey)responser&   json_objr8   hr9   ps          r    r1   r1   P   s     ZZ	00:;(&??a
MM  
 HX
 +!!6677k!%% 7)H]	/r"   c           
      Z   t        j                         }t        j                         }t        j                  |       }t        j
                  |       }t        j                  |       }| j                  }| j                  }t        j                  j                  t        j                  j                  d|||||            }dj                  |      }	t        j                  j                  t        j                  j                  d|||            }
t        j                  |||
|	      }|S )zLists the Generic Files stored.Bartifactregistry.projects.locations.repositories.packages.versionsr   r   r   
packagesId
versionsId
owner="{}"0artifactregistry.projects.locations.repositoriesr   r   r   )r
   	GetClientGetMessagesr   
GetProjectGetLocationGetRepopackageversionr   Resourcer$   r   r   format	ListFiles)argsclientmessagesprojectlocationreporR   rS   version_patharg_filters	repo_pathr2   s               r    ListGenericFilesr`   r   s   &!!#(OOD!'d#(	d	$LL'LL'##00
N   	, ##L1+  --
<	   ) 

VXy+
F%	,r"   c           
         t        j                         }t        j                         }t        j                  |       }| j
                  xs2 t        j                  j                  j
                  j                         }t        j                  |       }| j                  }| j                  }| j                  }| j                  }	t        j                   | j"                        }
t%        j&                         j)                  | j*                        \  }}|
d|
v rd}
|s|s|rd}
| j,                  | j*                  || j,                  }	nd}	|r|s|s|rd}|rt/        j0                  d|      r|j3                  ddd      j3                  ddd      j3                  d	dd      j3                  d
dd      j5                  d      }t7        t9        |            D cg c]  }||   	 c}\  }}}}|r4|j3                  dd      j3                  dd      }|j3                  dd      }|r|rt;        j<                  d      |r[|rYt>        j@                  jC                  t>        jD                  jG                  d|||||            }t        jH                  |||      }|rV|rTt>        j@                  jC                  t>        jD                  jG                  d|||||            }djK                  |      }nn|rSt>        j@                  jC                  t>        jD                  jG                  d||||            }djK                  |      }n|s|rt;        j<                  d      t>        j@                  jC                  t>        jD                  jG                  d|||            }|||||	|
d}t        jL                  t         jN                  fi |\  }}|s!|r|| j*                  k(  rd| _        |
rd| _        tQ        |      S c c}w )zjLists files in a given project.

  Args:
    args: User input arguments.

  Returns:
    List of files.
  N,z;projects\/.*\/locations\/.*\/repositories\/.*\/packages\/.*z	projects/    z/locations/ z/repositories/z
/packages/r   r   r   r   r   r   z:Specify either --version or --tag with --package argument.z>artifactregistry.projects.locations.repositories.packages.tags)r   r   r   rH   tagsIdrF   rG   rJ   z9artifactregistry.projects.locations.repositories.packages)r   r   r   rH   z8Package name is required when specifying version or tag.rK   rL   )rX   rY   r\   server_filter	page_sizeorder_by))r
   rM   rN   r   rO   r[   r   VALUES	artifactsGetrQ   rR   rS   tagrh   r	   ParseSortByArgsort_byr   RewriterRewritefilterlimitrematchr   splitrangelenr   InvalidInputValueErrorr   rT   r$   r   r   GetVersionFromTagrU   RetryOnInvalidArgumentsrV   r4   )rW   rX   rY   rZ   r[   r\   rR   rS   rm   rh   ri   _rg   paramsitag_pathr]   package_pathr_   server_argsserver_args_skippedlfiless                         r    rV   rV      s    &!!#(OOD!']]Hj//99BBFFH(	d	$LL'LL'#nn)''5($--/77D!]
h h'S h	ZZ 7  **i i'S m 	xxF //+r1
-7=#q)7#S!,7<a(5:  >C3v;=O)P=O&)=O)P&gxw ooc5)11#u=Gooc5)G 

+
+D  !!..!!L  	" 	
	H ((8DG%%22!!P  	" 	
	L !''5M%%22!!G  	" 	
L !''5M#

+
+B    --
<	   ) $+ !% < <!'!v 
 $++5dkdl	F	##a *Qs   O<)__doc__
__future__r   r   r   r:   rt   apitools.base.protorpcliter    googlecloudsdk.api_lib.artifactsr   r   googlecloudsdk.api_lib.utilr	   $googlecloudsdk.command_lib.artifactsr
   r   googlecloudsdk.corer   r   r!   r)   r/   r4   r1   r`   rV    r"   r    <module>r      sW    1 &  '  	 0 7 < 3 9 5 * )

5
DBJ$r"   