
                         b    d dl Z d dlZd dlmZ dZdZdZ G d d      Zd Zd	 Z	 G d
 de
      Zy)    N)clientz:return:z:param bool follow:Listc                       e Zd Zd Zy)SimpleNamespacec                 :    | j                   j                  |       y N)__dict__update)selfkwargss     )lib/third_party/kubernetes/watch/watch.py__init__zSimpleNamespace.__init__#   s    MM     N)__name__
__module____qualname__r    r   r   r   r   !   s    !r   r   c                     t        j                  |       j                         D ]9  }|j                  t              s|t        t              d  j                         c S  y)N )pydocgetdoc
splitlines
startswithPYDOC_RETURN_LABELlenstrip)funclines     r   _find_return_typer   '   sM    ll4 ++-d)*#()*+1133 . 
r   c              #     K   d}| j                  d      D ]e  }t        |t              r|j                  d      }||z   }|j	                  d      }|j                  d      s|d   }|d d }nd}|D ]	  }|s|  g y w)Nr   F)decode_contentutf8
)read_chunked
isinstancebytesdecodesplitendswith)respprevseglinesr   s        r   iter_resp_linesr/   .   s     	$e4c#uJJvc
*CIIdOE<<2YdCRjed	
  5s   A4B 7	B c                   2    e Zd ZddZd Zd Zd Zd Zd Zy)	WatchNc                 `    || _         d| _        t        j                         | _        d | _        y )NF)_raw_return_type_stopr   	ApiClient_api_clientresource_version)r   return_types     r   r   zWatch.__init__A   s*    'DDJ'')D Dr   c                     d| _         y )NT)r4   )r   s    r   stopz
Watch.stopG   s	    DJr   c                     | j                   r| j                   S t        |      }|j                  t              r|d t	        t                S |S r   )r3   r   r*   TYPE_LIST_SUFFIXr   )r   r   r8   s      r   get_return_typezWatch.get_return_typeJ   sM    """#D)K,-03/0011r   c                 <    t         t        j                  |      v ryy)Nfollowwatch)PYDOC_FOLLOW_PARAMr   r   )r   r   s     r   get_watch_argument_namezWatch.get_watch_argument_nameR   s    U\\$//r   c                    	 t        j                  |      }|d   |d<   |rt        t        j                  |d               }| j
                  j                  ||      |d<   t        |d   d      r |d   j                  j                  | _	        |S t        |d   t              r!d|d   v rd|d   d   v r|d   d   d   | _	        |S # t        $ r |cY S w xY w)Nobject
raw_object)datametadataresourceVersion)jsonloads
ValueErrorr   dumpsr6   deserializehasattrrG   r7   r&   dict)r   rF   r8   jsobjs        r   unmarshal_eventzWatch.unmarshal_eventX   s    ::db (|B|B|,<!=>c%%11#{Cbl	Hz	* "8 5 5 F F I r(|T*zR\/IHj!99 "8Z 89J KI  ks   C CCc              /   @  K   d| _         | j                  |      }d|| j                  |      <   d|d<   d|v r
|d   | _        d|v }	  ||i |}	 t	        |      D ]$  }| j                  ||       | j                   s$ n |j                          |j                          | j                  | j                  |d<   nd| _         	 |s| j                   ry# |j                          |j                          | j                  | j                  |d<   w d| _         w xY ww)a  Watch an API resource and stream the result back via a generator.

        :param func: The API function pointer. Any parameter to the function
                     can be passed after this parameter.

        :return: Event object with these keys:
                   'type': The type of event such as "ADDED", "DELETED", etc.
                   'raw_object': a dict representing the watched object.
                   'object': A model representation of raw_object. The name of
                             model will be determined based on
                             the func's doc string. If it cannot be determined,
                             'object' value will be the same as 'raw_object'.

        Example:
            v1 = kubernetes.client.CoreV1Api()
            watch = kubernetes.watch.Watch()
            for e in watch.stream(v1.list_namespace, resource_version=1127):
                type = e['type']
                object = e['object']  # object is one of type return_type
                raw_object = e['raw_object']  # raw_object is a dict
                ...
                if should_stop:
                    watch.stop()
        FT_preload_contentr7   timeout_secondsN)r4   r=   rB   r7   r/   rR   closerelease_conn)r   r   argsr   r8   timeoutsr+   r   s           r   streamzWatch.streamj   s*    4 DJ&&t,K15F4''-.!&FV#$%78d!V+H
4"6"d#D)D$$T;7
7ZZ *
 	

  ,'+'<'<&#
$$*	TZZ!  	

  ,'+'<'<&#
$$*s&   AD.C ?C ADADDr   )	r   r   r   r   r:   r=   rB   rR   rZ   r   r   r   r1   r1   ?   s     !$2r   r1   )rI   r   
kubernetesr   r   rA   r<   r   r   r/   rD   r1   r   r   r   <module>r\      sF   "    *   ! !"]F ]r   