
    -                        S 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rSrSrS	rS
rSrSrSr\R&                  " S\ S\ S35      r\R&                  " S\ S\ S\ S\ S3	5      r\R&                  " S\ S\ S35      r\R&                  " S5      rSSSSS.r " S S5      rS r " S S5      rS rS  rS! r " S" S#5      r " S$ S%5      r  " S& S'5      r!S( r" " S) S*5      r#S+ r$ " S, S-5      r%S. r&S/ r'S0 r(g)1z@Common utility functions for Developer Connect Insights Configs.    N)
exceptions)projects_api)utilz
google-mfpzU^([^\.]+)-docker.pkg.dev/([^/]+)/([^/]+)/([^@:]+)((@sha256:[a-f0-9]+)|(:[\w\-\.]+))?$z@^(.*gcr.io)/([^/]+)/([^@:]+)((@sha256:[a-f0-9]+)|(:[\w\-\.]+))?$zprojects/([^/]+)z//apphub.googleapis.comz//container.googleapis.comz//run.googleapis.comz$([a-zA-Z0-9-._~%!$&'()*+,;=@]{1,64})z^(?:zL/)?projects/((?:[^:]+:.)?[a-z0-9\\-]+)/locations/([\w-]{2,40})/applications/$zP/)?projects/((?:[^:]+:.)?[a-z0-9\\-]+)/(locations|zones)/([\w-]{2,40})/clusters//k8s/namespaces//apps/deployments/zH/)?projects/((?:[^:]+:.)?[a-z0-9\\-]+)/locations/([\w-]{2,40})/services/z*^(?:projects/)?((?:[^:]+:.)?[a-z0-9\\-]+)$useuasia)z	us.gcr.iozgcr.ioz	eu.gcr.iozasia.gcr.ioc                   $    \ rS rSrSrS rS rSrg)Project7   zRepresents a project.c                     [         R                  " [        R                  " U5      5      nUR                  U l        UR                  U l        g N)r   Getprojects_utilParseProject	projectId
project_idprojectNumberproject_number)selfproject_identifierproject_detailss      8lib/googlecloudsdk/command_lib/developer_connect/name.py__init__Project.__init__:   s>    "&&""#56O &//DO)77D    c                      SU R                    3$ )N	projects/r   r   s    r   resource_nameProject.resource_nameA   s    t'((r   )r   r   N__name__
__module____qualname____firstlineno____doc__r   r#   __static_attributes__ r   r   r   r   7   s    8)r   r   c                 j    [         R                  " [        U 5      nU(       a  UR                  S5      $ g)z)Extracts the project from a resource URI.   N)research_PROJECT_PATTERNgroupurimatchs     r   extract_projectr6   E   s'    
))$c
*%
;;q>	r   c                   .    \ rS rSrSrS r\S 5       rSrg)ArtifactRegistryUriM   z/Parses and represents an Artifact Registry URI.c                 4    Xl         X l        X0l        X@l        g r   )	_locationr   _repository_image_name)r   locationproject
repository
image_names        r   r   ArtifactRegistryUri.__init__P   s    NO!!r   c                     U R                   [        ;   a(  U R                    SU R                   SU R                   3$ U R                   SU R                   SU R                    SU R                   3$ )z(The artifact URI without the SHA suffix./z-docker.pkg.dev/)r<   _GCR_HOST_TO_AR_LOCATIONr   r=   r;   r"   s    r   base_uriArtifactRegistryUri.base_uriV   su     33  !4??"31T5E5E4FGGnn-doo->a@P@P?QQRSWScScRdeer   )r=   r;   r<   r   N)	r&   r'   r(   r)   r*   r   propertyrF   r+   r,   r   r   r8   r8   M   s     7" f fr   r8   c                    [         R                  " [        U 5      =n(       aE  UR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nOv[         R                  " [        U 5      =n(       aS  UR                  S5      n[
        R                  U5      nU(       d  gUR                  S5      nUnUR                  S5      nOg[        X#XE5      $ )zValidates the artifact URI.r.            N)r/   r5   _ARTIFACT_URI_PATTERNr2   _CONTAINER_REGISTRY_URI_PATTERNrE   getr8   )r4   r5   r>   r?   r@   rA   	host_names          r   validate_artifact_urirQ   _   s     hh,c22U2{{1~Hkk!nGQJQJ8#>>u>AI'++I6Hkk!nGJQJ	X
	GGr   c                 ,    U R                  [        5      $ )z:Checks if the app hub application is a management project.)
startswith!_APPHUB_MANAGEMENT_PROJECT_PREFIX)app_hub_applications    r   is_management_projectrV   w   s    		'	'(I	JJr   c                 V    [         R                  " [        R                  " U 5      5      $ )zValidates the project.)r   r   r   r   r!   s    r   validate_projectrX   |   s    			-44Z@	AAr   c                   *    \ rS rSrSrS rS rS rSrg)
GKECluster   zRepresents a GKE cluster.c                 (    Xl         X l        X0l        g r   )r?   location_id
cluster_id)r   r?   r]   r^   s       r   r   GKECluster.__init__   s    L" Or   c                     U R                   $ r   )r^   r"   s    r   idGKECluster.id   s    ??r   c                 `    [          SU R                   SU R                   SU R                   3$ )N
/projects//locations/
/clusters/)GKE_SERVICE_PREFIXr?   r]   r^   r"   s    r   r#   GKECluster.resource_name   s4     !DLL>TEUEUDVV`aeapap`qrrr   )r^   r]   r?   N)	r&   r'   r(   r)   r*   r   ra   r#   r+   r,   r   r   rZ   rZ      s    !!
sr   rZ   c                   $    \ rS rSrSrS rS rSrg)GKENamespace   zRepresents a GKE namespace.c                     Xl         X l        g r   gke_clusternamespace_id)r   rn   ro   s      r   r   GKENamespace.__init__   s    "$r   c           	          [          SU R                  R                   SU R                  R                   SU R                  R                   SU R
                   3	$ )Nrd   re   rf   r   )rg   rn   r?   r]   r^   ro   r"   s    r   r#   GKENamespace.resource_name   s     !D,<,<,D,D+E[QUQaQaQmQmPnnxy}  zJ  zJ  zU  zU  yV  Vf  gk  gx  gx  fy  z  zr   rm   Nr%   r,   r   r   rj   rj      s    #%zr   rj   c                   $    \ rS rSrSrS rS rSrg)GKEWorkload   zRepresents a GKE workload.c                     Xl         X l        g r   )gke_namespacedeployment_id)r   rw   rx   s      r   r   GKEWorkload.__init__   s    
 '&r   c                     [          SU R                  R                  R                   SU R                  R                  R                   SU R                  R                  R
                   SU R                  R                   SU R                   3$ )Nrd   re   rf   r   r   )rg   rw   rn   r?   r]   r^   ro   rx   r"   s    r   r#   GKEWorkload.resource_name   s     !D,>,>,J,J,R,R+SS^_c_q_q_}_}  `J  `J  _K  KU  VZ  Vh  Vh  Vt  Vt  V  V  U@  @P  QU  Qc  Qc  Qp  Qp  Pq  qC  DH  DV  DV  CW  X  Xr   )rx   rw   Nr%   r,   r   r   rt   rt      s    "'Xr   rt   c                 J   [         R                  U 5      nU(       a  [        UR                  5       5      S:w  a  g[	        [        [        UR                  S5      UR                  S5      UR                  S5      5      UR                  S5      5      UR                  S5      S9$ )z/Parses a GKE deployment URI into a GKEWorkload.   Fr.   rK   rL      )rx   )gke_deployment_path_regex	fullmatchlengroupsrt   rj   rZ   r2   r3   s     r   parse_gke_deployment_urir      s    
#
-
-c
2%	#elln%*	
kk!nkk!nkk!n
 ++a. KKN

 
r   c                   $    \ rS rSrSrS rS rSrg)CloudRunService   zRepresents a Cloud Run service.c                 `    UR                   U l         UR                  U l        X l        X0l        g)zInitializes a CloudRunService instance.

Args:
  project: The Project object.
  location_id: The location of the service.
  service_id: The ID of the service.
N)r   r   r]   
service_id)r   r?   r]   r   s       r   r   CloudRunService.__init__   s*     ((DO!00D" Or   c                 `    [          SU R                   SU R                   SU R                   3$ )Nrd   re   z
/services/)RUN_SERVICE_PREFIXr   r]   r   r"   s    r   r#   CloudRunService.resource_name   s5     !DOO+<KHXHXGYYcdhdsdsctuur   )r]   r   r   r   Nr%   r,   r   r   r   r      s    '!vr   r   c                     [         R                  U 5      nU(       a  [        UR                  5       5      S:w  a  g[	        UR                  S5      5      n[        UUR                  S5      UR                  S5      5      $ )z=Parses a Cloud Run service URI into a CloudRunService object.rK   Fr.   rJ   )cloud_run_service_path_regexr   r   r   r   r2   r   )r4   r5   r?   s      r   parse_cloud_run_service_urir      sb    
&
0
0
5%	#elln%*EKKN#'	kk!nkk!n
 r   c                   $    \ rS rSrSrS rS rSrg)AppHubApplication   z"Represents an App Hub Application.c                 `    UR                   U l         UR                  U l        X l        X0l        g)zInitializes an AppHubApplication instance.

Args:
  project: The Project object.
  location_id: The location of the application.
  application_id: The ID of the application.
N)r   r   r]   application_id)r   r?   r]   r   s       r   r   AppHubApplication.__init__   s+     ((DO!00D"(r   c                 T    SU R                    SU R                   SU R                   3$ )Nr    re   z/applications/)r   r]   r   r"   s    r   r#   AppHubApplication.resource_name   s/    t'{43C3C2DNSWSfSfRghhr   )r   r]   r   r   Nr%   r,   r   r   r   r      s    *)ir   r   c                 J   [         R                  U 5      nU(       a  [        UR                  5       5      S:w  a  [	        SU  35      e[        UR                  S5      5      nU(       d  [	        SU  35      eUR                  S5      nUR                  S5      n[        X#U5      $ )z<Parses an App Hub Application URI into an AppHubApplication.rK   zapp_hub_application must be in the format //apphub.googleapis.com/projects/{project}/locations/{location}/applications/{application}: r.   rJ   )app_hub_application_path_regexr   r   r   
ValueErrorr   r2   r   )r4   r5   r?   r>   r   s        r   parse_app_hub_application_urir      s    
(
2
23
7%	#elln%*
	5	 
 EKKN#'	
	5	 
 [[^(;;q>.	
 r   c                 L   / nU (       d  U$ [         R                  U 5       Hx  n[        R                  U5      nU(       a  [	        UR                  5       5      S:w  a  [        SU 35      eUR                  S5      n [        U5        UR                  U5        Mz     U$ ! [        R                   a    [        SR                  U5      5      e[        R                   a    [        SR                  U5      5      e[        R                   a  n[        SU SU 35      eSnAff = f)z/Parses a list of target projects into an array.r.   zEtarget_project must be in the format{project} or projects/{project}: zPermission denied when checking target project [{}]. Please ensure your account has necessary permissions or that the project exists.zTInvalid user-provided target project ID [{}]. Please ensure it is a valid project IDz!Error validating target project []: N)dictfromkeysproject_regexr   r   r   r   r2   rX   apitools_exceptionsHttpForbiddenErrorformatHttpBadRequestErrorr   Errorappend)target_projectsprojectstarget_projectr5   r   es         r   parse_target_projectsr   	  s#   (	Oo6n##N3EC'1, 
 QJz"  OOJ9 7: 
/! 11 ((.~(> 
 22 $f^4   -n-=S
D s   =BA.D#DD#c           	         0 nU (       d  U$ U  HV  nUR                  5        H?  u  p4[        U5      n [        U5        U(       a  XAUR                  '   M3  [        SU 35      e   MX     U$ ! [        R                   a    [        SR                  U5      5      e[        R                   a    [        SR                  U5      5      e[        R                   a  n[        SU SU 35      eSnAff = f)z4Parses a list of artifact configs into a dictionary.zPermission denied when checking build project [{}]. Please ensure your account has necessary permissions or that the project exists.zSInvalid user provided build project ID [{}]. Please ensure it is a valid project IDz Error validating build project [r   Nz=Invalid user provided artifact uri, please check the format: )itemsrQ   rX   r   r   r   r   r   r   r   rF   )user_artifact_configsartifact_configs_dictuser_config_datar4   build_project	valid_urir   s          r   parse_artifact_configsr   .  s   	  /.446',i
'" 
4Ai001 !#
 	
/ 7 08 
/ !33 
**0&*?
 	

 !44 
  &} 5
 	
  
.}oSD
 	

s   A**A.C.C))C.))r*   r/   apitools.base.pyr   r   +googlecloudsdk.api_lib.cloudresourcemanagerr   #googlecloudsdk.command_lib.projectsr   r   googlecloudsdk.corerT   rM   rN   r1   APPHUB_SERVICE_PREFIXrg   r   name_segment_recompiler   r   r   r   rE   r   r6   r8   rQ   rV   rX   rZ   rj   rt   r   r   r   r   r   r   r   r,   r   r   <module>r      s    G 	 > D E *$0 !p G   ' 1 1 + 9!#!""p  rA  qB  BC  D"  JJq  sB  rC  CS  Tc  Sd  dv  wF  vG  GH  I   "zzijyizz{|   

HI  ) )f f$H0K
B
s sz zX X&v v(
i i(."J!r   