
    v                         d Z ddlmZ ddlmZ ddlmZ ddlZddlmZ ej                  j                         D  cg c]  } | j                   c} ZdZdZ G d	 d
e      Zd Zd Zyc c} w )z;Helpers to separate release tracks in declarative commands.    )absolute_import)division)unicode_literalsN)baserelease_tracksgroupc                       e Zd Zy)DoesNotExistForTrackErrorN)__name__
__module____qualname__     5lib/googlecloudsdk/calliope/command_release_tracks.pyr
   r
      s    r   r
   c                 0   t        | t              rt        | v }t        | v r|| t           vr
t	               | t        = || v r | |   j                         D ]
  \  }}|| |<    t        D ]
  }|| v s| |=  t        | j                               D ]  \  }}	 t        ||        |r| s
t	               | S t        | t              r3t        |       }g | dd |D ]  }	 | j                  t        ||               | S # t        $ r | |= Y xw xY w# t        $ r Y @w xY w)a  Recursively modify an object to have only values for the provided track.

  Args:
    obj: The object to modify.
    track: The track to extract the values for.

  Returns:
    The modified object
  Raises:
    DoesNotExistForTrackError: if the object does not exist for the track.
  N)

isinstancedictGROUPRELEASE_TRACKSr
   items
ALL_TRACKSlist_SetValuesForTrackappend)objtrackis_groupkeyvalue	track_keychildchildrens           r   r   r   %   s;    T|H	c.)	)'))
n
|E
((**#uC +  		c		N  
 399;'
U5%( (
  &'' 
* #t CyHCF

%eU34 
 
*! ' H ' s$   C7D	7DD		DDc              #     K   t        | t              s| g} | D ]T  }|j                  t              }|sg d}|D ]2  }t	        j
                  |      }	 t        ||       |g|t        <   | 4 V y# t        $ r Y w xY ww)aV  Separate combined track definitions.

  If a file does not specify tracks, the same implementation may be used for
  all track implementations the command is present in.

  Args:
    command_impls: A single or list of declarative command implementation(s).

  Yields:
    One implementation for each distinct track implmentation in a file.
  )ALPHABETAGAN)r   r   getr   copydeepcopyr   r
   )command_implsimplr   r   
track_impls        r    SeparateDeclarativeCommandTracksr-   X   s      
M4	("OMdXXn-N.n==&j:u-
 %*7j   	  '  	s*   AA?A0A?0	A<9A?;A<<A?)__doc__
__future__r   r   r   r(   googlecloudsdk.callioper   ReleaseTrack	AllValuesidr   r   r   	Exceptionr
   r   r-   )ts   0r   <module>r6      sj     B &  '  ( --779:9qadd9:
!	 0f} ;s   A'