
                            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	Z
d
ZdZdZdZ G d dej                        Zy)zEWraps a Serverless WorkerPool message, making fields more convenient.    )absolute_importannotations)division)unicode_literals)instance_split)
k8s_object)revisionzrun.googleapis.com/minScalezrun.googleapis.com/maxScalez&run.googleapis.com/manualInstanceCountzrun.googleapis.com/scalingModezrun.googleapis.com/operation-idc                      e Zd ZdZdZd Zed        Zed        Zed        Z	ed        Z
e
j                  d        Z
ed        Zed	        Zed
        Zd Zed        Z fdZed        Zed        Zed        Zed        Zej                  d        Zed        Zej                  d        Zed        Zej                  d        Z xZS )
WorkerPoolzWraps a Serverless WorkerPool message, making fields more convenient.

  Setting properties on a WorkerPool (where possible) writes through to the
  nested Kubernetes-style fields.
  zrun.googleapis.comc                B   | j                   j                  j                  s<t        j                  | j                               | j                   j                  _        t        j                  j                  | j                   j                  | j                               }|S N)	spectemplatemetadatar	   MakeMetaMessagesModuler
   RevisionTemplate)selfrets     -lib/googlecloudsdk/api_lib/run/worker_pool.pyr   zWorkerPool.template,   sk    99&&$.$7$78K8K8M$Ndii!



$
$TYY%7%79L9L9N
OCJ    c                    | j                          t        j                  | j                  | j                  j
                        S r   )AssertFullObjectr	   AnnotationsFromMetadata	_messagesr   r   r   s    r   template_annotationszWorkerPool.template_annotations3   s4    --.. r   c                .    | j                   j                  S r   )r   labelsr   s    r   revision_labelszWorkerPool.revision_labels:   s    ==r   c                .    | j                   j                  S r   r   namer   s    r   revision_namezWorkerPool.revision_name>   s    ==r   c                &    || j                   _        y r   r$   r   values     r   r&   zWorkerPool.revision_nameB   s    DMMr   c                .    | j                   j                  S r   )statuslatestCreatedRevisionNamer   s    r   latest_created_revisionz"WorkerPool.latest_created_revisionF   s    ;;000r   c                .    | j                   j                  S r   )r+   latestReadyRevisionNamer   s    r   latest_ready_revisionz WorkerPool.latest_ready_revisionJ   s    ;;...r   c                    | j                   j                  D cg c]  }|j                  s|j                   c}S c c}w r   )r+   instanceSplitspercentrevisionName)r   is     r   serving_revisionszWorkerPool.serving_revisionsN   s0    $(KK$>$>L$>q!))ANN$>LLLs   <<c                    | j                   j                  xr# |j                  | j                   j                  k(  }|j                  xs |S )zBReturns True if the split's percent is part of the latest percent.)r+   r/   r4   latestRevision)r   splitis_latest_by_names      r   _ShouldIncludeInLatestPercentz(WorkerPool._ShouldIncludeInLatestPercentR   sH     	++ 	F$++"E"EE  4#44r   c                T     t         fd j                  j                  D              S )zCThe percent of instance split assigned tothe latest ready revision.c              3  `   K   | ]%  }j                  |      r|j                  xs d  ' yw)r   N)r;   r3   ).0r9   r   s     r   	<genexpr>z;WorkerPool.latest_percent_instance_split.<locals>.<genexpr>]   s3      /E--e4 	/s   +.)sumr+   r2   r   s   `r   latest_percent_instance_splitz(WorkerPool.latest_percent_instance_splitZ   s)      [[//  r   c                    | j                   du r&| j                  r| j                  | j                  k7  ryt        t        |          S )NF)!yellow)readyr0   r-   superr   ReadySymbolAndColor)r   	__class__s    r   rG   zWorkerPool.ReadySymbolAndColorc   s?    

e&&((D,F,FFT688r   c                8    | j                   j                  d      S )Nz serving.knative.dev/lastModifier)r   getr   s    r   last_modifierzWorkerPool.last_modifierl   s     BCCr   c                    | j                          t        j                  | j                  | j                  j
                        S r   )r   r   InstanceSplitsr   r   r2   r   s    r   
spec_splitzWorkerPool.spec_splitp   s4    ((		00 r   c                    | j                          t        j                  | j                  | j                  g       S | j                  j
                        S r   )r   r   rM   r   r+   r2   r   s    r   status_splitzWorkerPool.status_splitw   sK    ((kk! '+{{'A'A r   c                .    | j                   j                  S r   r   imager   s    r   rS   zWorkerPool.image   s    ==r   c                &    || j                   _        y r   rR   r(   s     r   rS   zWorkerPool.image   s    DMMr   c                @    | j                   j                  t              S r   )r   rJ   OPERATION_ID_ANNOTATIONr   s    r   operation_idzWorkerPool.operation_id   s     788r   c                *    || j                   t        <   y r   )r   rV   r(   s     r   rW   zWorkerPool.operation_id   s    05D,-r   c                T    | j                   j                  t        j                        S r   )r   rJ   r	   DESCRIPTION_ANNOTATIONr   s    r   descriptionzWorkerPool.description   s    
 A ABBr   c                "    || j                   d<   y )Nzrun.googleapis.com/descriptionr   r(   s     r   r[   zWorkerPool.description   s    9>D56r   )__name__
__module____qualname____doc__API_CATEGORYKINDpropertyr   r   r"   r&   setterr-   r0   r6   r;   rA   rG   rK   rN   rP   rS   rW   r[   __classcell__)rH   s   @r   r   r   "   s    &,	$            1 1 / / M M5  9 D D       	<<    9 9 6 6 C C ? ?r   r   N)r`   
__future__r   r   r   r   googlecloudsdk.api_lib.runr   r	   r
    WORKER_POOL_MIN_SCALE_ANNOTATION WORKER_POOL_MAX_SCALE_ANNOTATION MANUAL_INSTANCE_COUNT_ANNOTATION#WORKER_POOL_SCALING_MODE_ANNOTATIONrV   KubernetesObjectr    r   r   <module>rn      sU    L & "  ' 5 1 / $A  #@  #K  &F #; s?,, s?r   