
                             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ZdZd Zd Zd Zd Z	 ddZd Z G d dej0                        Zy)zFTraffic-specific printer and functions for generating traffic formats.    )absolute_import)division)print_function)unicode_literals)service)traffic_pair)	platforms)console_attr)custom_printer_basetraffic-c                    t        j                         t         j                  k(  r| j                  j	                  t
        j                        }| j                  j	                  t
        j                        }||k(  r|S |xs t        }|xs t        }dj                  ||      S | j                  j	                  t
        j                        t
        j                  k(  rt
        j                  S t
        j                  S )z5Gets the ingress traffic allowed to call the service.z{} (currently {}))r	   GetPlatformPLATFORM_MANAGEDannotationsgetr   INGRESS_ANNOTATIONINGRESS_STATUS_ANNOTATION_INGRESS_UNSPECIFIEDformatlabelsENDPOINT_VISIBILITYCLUSTER_LOCALINGRESS_INTERNALINGRESS_ALL)recordspec_ingressstatus_ingresss      >lib/googlecloudsdk/command_lib/run/printers/traffic_printer.py_GetIngressr    !   s    	 : ::%%))'*D*DEL''++G,M,MNN~%!9%9l%=)=n ''nEE!!	#&-&;&;	<###    c                 T    | j                   j                  t        j                        S )z1Gets the IAP traffic allowed to call the service.)r   r   r   IAP_ANNOTATION)r   s    r   _GetIapr$   3   s    					 6 6	77r!   c                    | j                   r'| j                  sdj                  | j                        S | j                   s'| j                  rdj                  | j                        S dj                  | j                        S )zHReturns the tag with padding and an adding/removing indicator if needed.z  {} (Adding):z  {} (Deleting):z  {}:)inSpecinStatusr   tag)r(   s    r   _GetTagAndStatusr)   8   sY    ZZ""377++::#,,$$SWW-->>#''""r!   c                    t        j                         }| j                  |j                  | j                        t        j                  | j                  D cg c]  }dt        |      |j                  f c}      fS c c}w )zDTransforms a single TrafficTargetPair into a marker class structure. )
r
   GetConsoleAttrdisplayPercent	EmphasizedisplayRevisionIdcpTabletagsr)   url)pairconsolets      r   _TransformTrafficPairr7   B   sk    '')'


w001G1GH
((diiHiR)!,aee4iH
I
K KHs   A>Nc                    t        j                  t        j                  d | D              g      }t        j                  d|fg      g}|'|j	                  t        j                  d|fg             |'|j	                  t        j                  d|fg             |j	                  t        j                  d|fg             t        j                  |d      S )zCTransforms a List[TrafficTargetPair] into a marker class structure.c              3   2   K   | ]  }t        |        y w)N)r7   ).0ps     r   	<genexpr>z)_TransformTrafficPairs.<locals>.<genexpr>N   s     @-Q%a(-s   URLIngresszIap EnabledTraffic<   )max_column_width)r0   Sectionr1   Labeledappend)traffic_pairsservice_urlservice_ingressservice_iaptraffic_sectionroute_sections         r   _TransformTrafficPairsrK   I   s     JJ	xx@-@@A/ ::{3456- i%A$BCDm[%A$BCDrzzI#?"@AB	MB	77r!   c                    | j                   du }t        j                  | j                  | j                  | j
                  |rt        n| j                   j                        }t        ||rdn| j                  t        |       t        |             S )ac  Transforms a service's route fields into a marker class structure to print.

  Generates the custom printing format for a service's url, ingress, and traffic
  using the marker classes defined in custom_printer_base.

  Args:
    service_record: A Service object.

  Returns:
    A custom printer marker object describing the route fields print format.
  Nr+   )statusr   GetTrafficTargetPairsspec_trafficstatus_traffic
is_managedr   latestReadyRevisionNamerK   domainr    r$   )service_record	no_statusrE   s      r   TransformRouteFieldsrV   Y   s     ##t+)44!!>#@#@
 '..FF	I-
 
 b>00.!n	
 r!   c                   *     e Zd ZdZd fd	Zd Z xZS )TrafficPrinterz=Prints a service's traffic in a custom human-readable format.c                 0    t         t        |   |d|       y)z3Overrides ResourcePrinter.Print to set single=True.TN)superrX   Print)self	resourcessingleintermediate	__class__s       r   r[   zTrafficPrinter.Printv   s     
.$%i|Dr!   c                 B    |r|d   j                   }nd}t        ||      S )z@Transforms a List[TrafficTargetPair] into a marker class format.r   r+   )
serviceUrlrK   )r\   r   rF   s      r   	TransformzTrafficPrinter.Transform   s&    1I((kk!&+66r!   )FF)__name__
__module____qualname____doc__r[   rc   __classcell__)r`   s   @r   rX   rX   s   s    E	E7r!   rX   )NN)rg   
__future__r   r   r   r   googlecloudsdk.api_lib.runr   r   googlecloudsdk.command_lib.runr	   googlecloudsdk.core.consoler
   googlecloudsdk.core.resourcer   r0   TRAFFIC_PRINTER_FORMATr   r    r$   r)   r7   rK   rV   CustomPrinterBaserX    r!   r   <module>rq      sl    M &  % ' . 3 4 4 B #  $8
#K CG8 47R)) 7r!   