
    o9iD                     `   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZmZ d dlmZ dd	lmZmZmZmZmZ dd
lmZmZ dZ G d de      Z G d de      Z  G d de      Z! G d de      Z" G d dejF                        Z$ G d dejJ                        Z&y)    N)partial)defaultdict)abstractmethodabstractproperty)JSONDecodeError)ProtocolErrorMaxRetryError)__version__   )NotFoundErrorResourceNotFoundErrorResourceNotUniqueErrorApiExceptionServiceUnavailableError)ResourceResourceListapisc                       e Zd ZdZd ZddZd Zd Zed        Z	e
dd       Ze
d	        Zed
        ZddZddZd Zd Zd Zy)
Discovererz
        A convenient container for storing discovered API resources. Allows
        easy searching and retrieval of specific resources.

        Subclasses implement the abstract methods with different loading strategies.
    c                    || _         | j                   j                  j                  }t        j                  r|j                  d      }	 dj                  t        j                  |d      j                               }|xs2 t        j                  j                  t        j                         |      | _        | j#                          y # t        $ r5 dj                  t        j                  |      j                               }Y w xY w)Nzutf-8zosrcp-{0}.jsonF)usedforsecurity)clientconfigurationhostsixPY3encodeformathashlibmd5	hexdigest	TypeErrorospathjointempfile
gettempdir_Discoverer__cache_file_Discoverer__init_cache)selfr   
cache_filedefault_cache_iddefault_cachefile_names        e/var/www/html/leadgen/airagagent/rag_env/lib/python3.12/site-packages/kubernetes/dynamic/discovery.py__init__zDiscoverer.__init__,   s    ;;449977/66w?	h%5%<%<W[[IYkp=q={={=}%~" 'e"'',,x7J7J7LNd*e	  	h%5%<%<W[[IY=Z=d=d=f%g"	hs   
4C
 
;DDc                 |   |s)t         j                  j                  | j                        sdt        i| _        d}n	 t        | j                  d      5 }t        j                  |t        t        | j                              | _        d d d        | j
                  j                  d      t        k7  r| j                          | j#                          | j%                          |r| j'                          y y # 1 sw Y   oxY w# t        $ r0}t        j                   d|       | j                          Y d }~td }~ww xY w)Nlibrary_versionTrclszload cache error: %s)r#   r$   existsr(   r
   _cacheopenjsonloadr   CacheDecoderr   getinvalidate_cache	Exceptionloggingerror_load_server_infodiscover_write_cache)r*   refreshfes       r.   __init_cachezDiscoverer.__init_cache9   s    "''..):):;,k:DKG($++S1 WQ"&))A7<3U"VDKW;;??#45D))+ 	  W W
  (4a8%%''(s/   D 5C6:D 6C?;D 	D;&D66D;c                     	 t        | j                  d      5 }t        j                  | j                  |t
               d d d        y # 1 sw Y   y xY w# t        $ r Y y w xY w)Nwr3   )r7   r(   r8   dumpr6   CacheEncoderr=   )r*   rD   s     r.   rB   zDiscoverer._write_cacheL   sS    	d''- <		$++ql;< < < 		s-   A 'AA AA A 	A A c                 (    | j                  d       y )NT)rC   )r)   r*   s    r.   r<   zDiscoverer.invalidate_cacheT   s    $'    c                      y N rL   s    r.   
api_groupszDiscoverer.api_groupsW       rM   Nc                      y rO   rP   )r*   prefixgroupapi_versionkindkwargss         r.   searchzDiscoverer.search[   rR   rM   c                      y rO   rP   rL   s    r.   rA   zDiscoverer.discover_   rR   rM   c                     | j                   S rO   )_Discoverer__versionrL   s    r.   versionzDiscoverer.versionc   s    ~~rM   c                     i }dd|rt        d| j                  dddd            n
t        d      ii|d<   ddt        ddt        | j                        gi      ii|t        <   |S )N v1Tapi	resourcesList)ResourceGroupget_resources_for_api_versionr   r   DISCOVERY_PREFIX)r*   request_resourcesgroupss      r.   default_groupszDiscoverer.default_groupsg   s    $ !$$2T2TUZ\^`dfj2km*7*=
 u
 %'-6L<U;V2WX)
 $  rM   c                    | j                   j                  d      r|r`| j                   j                  di       | j                   d<   | j                  j                  ddj	                  t
                    j                  }| j                  |      }|D ]  }i }|d   D ]  }|d   }| j                   j                  di       j                  t
        i       j                  |d   i       j                  |      }	||d   k(  }
|	r|	j                  ni }|r| j                  t
        |d   ||
      }t        |
|	      ||<    ||t
           |d   <    | j                   d   j                  |       | j                          | j                   d   S )
z1 Discovers all API groups present in the cluster rc   GETz/{}rh   versionsr]   namepreferredVersionrb   )r6   r;   r   requestr   rg   ri   rj   rc   rf   re   updaterB   )r*   rh   rr   groups_responseri   rU   	new_groupversion_rawr]   resource_group	preferredrc   s               r.   parse_api_groupszDiscoverer.parse_api_groupss   s   {{{+v'+{{{B'GDKK$"kk11%FV9WX__O((;L(MF( 
D	#(#4 WK))4G%)[[__["%E%I%IJZ\^%_%c%cdijpdqsu%v%z%z  |C  &DN +u5G/H HI<J 8 8PRI($($F$FGWY^_eYfhoqz${	)6yI)VIg&W ;D'(v7
D KK$++F3{{;''rM   c                     d }| j                   j                  d      s.	 d| j                  j                  dd|      i| j                   d<   | j                   d   | _        y # t        t
        f$ r}t        |t
              rt        |j                  t              s | j                  j                  j                  j                  d      s,t	        d| j                  j                  j                  z         d }~ww xY w)	Nc                     |S rO   rP   )_
serializeds     r.   	just_jsonz/Discoverer._load_server_info.<locals>.just_json   s    rM   r]   
kubernetesr;   z/version)
serializerzhttps://zGHost value %s should start with https:// when talking to HTTPS endpoint)r6   r;   r   rq   
ValueErrorr	   
isinstancereasonr   r   r   
startswithr\   )r*   r}   rE   s      r.   r@   zDiscoverer._load_server_info   s    	 {{y) $++"5"5eZT]"5"^*I& Y/ . a/
188]8[{{0055@@L$%n%)[[%>%>%C%C&D E E s   -A" "C=1BC88C=c                    t        t              }i }dj                  t        d|||g            }	 | j                  j                  d|      j                  xs g }t        t        d |            }	t        t        d |            }
|
D ]8  }|d   j                  dd      \  }}|j                  |      si ||<   |||   |<   : |	D ]  }dD ]  }|j                  |d        t        d|||| j                  ||j                  |d         d	|}||d
      j                  |       t        | j                  |||d
         }||j                     j                  |        |S # t        t        f$ r g }Y w xY w)zT returns a dictionary of resources associated with provided (prefix, group, version)/Nrl   c                     d| d   vS Nr   ro   rP   resources    r.   <lambda>z:Discoverer.get_resources_for_api_version.<locals>.<lambda>   s    S@P5P rM   c                     d| d   v S r   rP   r   s    r.   r   z:Discoverer.get_resources_for_api_version.<locals>.<lambda>   s    x?O8O rM   ro   r   )rT   rU   rV   r   rw   )rT   rU   rV   r   rw   subresourcesrW   )rU   rV   	base_kindrP   )r   listr%   filterr   rq   rc   r   r   splitr;   popr   appendr   rW   )r*   rT   rU   r]   rw   rc   r   r$   resources_responseresources_rawsubresources_rawsubresourcer   ro   keyresourceobjresource_lists                    r.   rf   z(Discoverer.get_resources_for_api_version   s     %	xxtfeW%=>?	$!%!4!4UD!A!K!K!Qr
 V$PRdef'OQc de+ 	7K(066sA>NHd##H-)+X&+6L"4(		7 & 	@HP (S$'( # #{{#)--hv.>? K hv&'..{;(EwbjkqbrsMm(()00?#	@$ = (9 	$!#	$s   *E% %E:9E:c           	          | j                   di |}t        |      dkD  r3|j                  d      r"|D cg c]  }|j                  |d   k(  s| }}t        |      dkD  rGt	        |D cg c]  }t        |t               c}      s |D cg c]  }t        |t              r| }}t        |      dk(  r|d   S |st        dj                  |            t        dj                  ||            c c}w c c}w c c}w )z Same as search, but will throw an error if there are multiple or no
            results. If there are multiple results and only one is an exact match
            on api_version, that resource will be returned.
        r   rV   r   zNo matches found for {}z!Multiple matches found for {}: {}rP   )
rY   lenr;   group_versionallr   r   r   r   r   )r*   rX   resultsresultxs        r.   r;   zDiscoverer.get   s    
 $++''w<!

= 9%,!0D0D}H]0]G  w<!Cg(VA|)D(V$W,3\&:fl;[v\G\w<11:'(A(H(H(PQQ()L)S)STZ\c)dee )W\s   C3C3+C8C=#C=)FNNNN)FF)__name__
__module____qualname____doc__r/   r)   rB   r<   r   rQ   r   rY   rA   propertyr]   rj   rx   r@   rf   r;   rP   rM   r.   r   r   $   s     &(        
(00('RfrM   r   c                   L    e Zd ZdZd Zd Zd Zed        Zd Z	d Z
dd	Zd
 Zy)LazyDiscovererz A convenient container for storing discovered API resources. Allows
        easy searching and retrieval of specific resources.

        Resources for the cluster are loaded lazily.
    c                 @    t         j                  | ||       d| _        y NF)r   r/   _LazyDiscoverer__update_cacher*   r   r+   s      r.   r/   zLazyDiscoverer.__init__   s    D&*5#rM   c                 2    | j                  d      | _        y )NFrm   )rx   _LazyDiscoverer__resourcesrL   s    r.   rA   zLazyDiscoverer.discover   s    0050IrM   c                 L    | j                   r| j                          d| _         y y r   )r   rB   rL   s    r.   __maybe_write_cachez"LazyDiscoverer.__maybe_write_cache   s$    "'D rM   c                 J    | j                  dd      d   j                         S )NFTrh   rr   r   rx   keysrL   s    r.   rQ   zLazyDiscoverer.api_groups   s&    $$uT$J6RWWYYrM   c                 "   	 | j                   | j                  di || j                  g       }|s=| j	                          | j                   | j                  di || j                  g       }| j                          |S # t        $ r g }Y ^w xY w)NrP   )_LazyDiscoverer__search_LazyDiscoverer__build_searchr   r   r<   "_LazyDiscoverer__maybe_write_cacher*   rX   r   s      r.   rY   zLazyDiscoverer.search   s    	mm$7D$7$7$A&$A4CSCSUWXG !!#mm$7D$7$7$A&$A4CSCSUWXG  " % 	G	s   -B   BBc           	      <   |d   }|dk7  r=|j                  |      }|sg S t        |t              rt        |      dk7  rt	        d|z        |j
                  sO|d   |d   |}}}	 | j                  ||||j                        |_        || j                  d   |   |   |<   d| _        | j                  |dd  |j
                  |      S t        |t              r| j                  |dd  |||gz         S |d   dk7  rMt        |d   t              r:|D ]3  }	|d   j                         D ]  \  }
}t        |	|
      |k(  s|	gc c S  5 g S |S g }|j!                         D ]+  }|j#                  | j                  |g|dd  z   ||             - |S # t        $ r t        w xY w)Nr   *   z2prefix and group params should be present, have %sr   rc   T)r;   r   re   r   r   rc   rf   rw   r   r   r6   r   r   dictitemsgetattrr   extend)r*   partsrc   	reqParamspartresourcePartrT   rU   r]   	_resourcetermvaluematchesr   s                 r.   __searchzLazyDiscoverer.__search  s   Qx3;$==.L	L-8y>Q&$%Y\e%eff#---6q\9Q<7EF4151S1S"E41G1G2I.
 HTDKK,V4U;GD*.D'}}U12Y0F0F	RRL$/ }}U12Yi4&>PRR8s?z%(D'A%1 3	+08>>+; 3KD%&y$75@(1{ 233
 I''G ~~' Wt}}cUU12Y->	9UVWN1 ) 4334s   &#F FNc                 t    |s|rd|v r|j                  d      \  }}|||||g}t        t        d |            S )Nr   c                     | xs dS Nr   rP   r   s    r.   r   z/LazyDiscoverer.__build_search.<locals>.<lambda>0  
    !(s rM   r   r   mapr*   rT   rU   rV   rW   rX   r   s          r.   __build_searchzLazyDiscoverer.__build_search+  F    );!,!2!23!7E;T6:C*E233rM   c           	   #     K   | j                   j                         D ]  \  }}|j                         D ]  \  }}|j                         D ]~  \  }}|j                  sB| j                  ||||j                        |_        || j
                  d   |   |   |<   d| _        t        j                  |j                        D ]	  \  }}|     | j                          y w)Nrc   T)
r   r   rc   rf   rw   r6   r   r   	iteritemsr   )	r*   rT   ri   rU   rn   r]   rgr{   r   s	            r.   __iter__zLazyDiscoverer.__iter__2  s     "..446 
	'NFF#)<<> 	'x#+>>#3 'KGR<<'+'I'I"E7BLL(BKMK08?H.2+'*}}R\\'B '8&''	'
	' 	  "s   CCr   )r   r   r   r   r/   rA   r   r   rQ   rY   r   r   r   rP   rM   r.   r   r      sB    $J(
 Z Z
(T4#rM   r   c                   L    e Zd ZdZd Zd Zd Zed        Zd Z	ddZ
d	 Zd
 Zy)EagerDiscovererz A convenient container for storing discovered API resources. Allows
        easy searching and retrieval of specific resources.

        All resources are discovered for the cluster upon object instantiation.
    c                     || _         y rO   )_EagerDiscoverer__resources)r*   rc   s     r.   rr   zEagerDiscoverer.updateH  s
    $rM   c                 2    t         j                  | ||       y rO   )r   r/   r   s      r.   r/   zEagerDiscoverer.__init__K  s    D&*5rM   c                 2    | j                  d      | _        y )NTrm   )rx   r   rL   s    r.   rA   zEagerDiscoverer.discoverN  s    0040HrM   c                 J    | j                  dd      d   j                         S )z list available api groups Tr   r   r   rL   s    r.   rQ   zEagerDiscoverer.api_groupsQ  s(     $$tD$I&QVVXXrM   c                     | j                   | j                  di || j                        }|s<| j                          | j                   | j                  di || j                        }|S )aW   Takes keyword arguments and returns matching resources. The search
            will happen in the following order:
                prefix: The api prefix for a resource, ie, /api, /oapi, /apis. Can usually be ignored
                group: The api group of a resource. Will also be extracted from api_version if it is present there
                api_version: The api version of a resource
                kind: The kind of the resource
                arbitrary arguments (see below), in random order

            The arbitrary arguments can be any valid attribute for an Resource object
        rP   )_EagerDiscoverer__search_EagerDiscoverer__build_searchr   r<   r   s      r.   rY   zEagerDiscoverer.searchW  sf     -- 3 3 3 =f =t?O?OP!!#mm$7D$7$7$A&$A4CSCSTGrM   Nc                 t    |s|rd|v r|j                  d      \  }}|||||g}t        t        d |            S )Nr   c                     | xs dS r   rP   r   s    r.   r   z0EagerDiscoverer.__build_search.<locals>.<lambda>m  r   rM   r   r   s          r.   r   zEagerDiscoverer.__build_searchh  r   rM   c           	      "   |d   }|j                  |      }|dk7  r|rt        |t              r| j                  |dd  |j                        S t        |t
              r| j                  |dd  |      S |d   dk7  rMt        |d   t
              r:|D ]3  }|d   j                         D ]  \  }}t        ||      |k(  s|gc c S  5 g S |S |dk(  rAg }|j                         D ]*  }	|j                  | j                  |	g|dd  z   |             , |S g S )Nr   r   r   )
r;   r   re   r   rc   r   r   r   r   r   )
r*   r   rc   r   r   r   r   r   r   r   s
             r.   r   zEagerDiscoverer.__searcho  s%   Qx }}T*3;<,6}}U12Y0F0FGGL$/}}U12Y==8s?z%(D'A%1 3	+08>>+; 3KD%&y$75@(1{ 233 I''S[G ~~' Lt}}cUU12Y->	JKLN	rM   c              #      K   | j                   j                         D ]Q  \  }}|j                         D ]9  \  }}|j                         D ]!  \  }}|j                         D ]	  \  }}|  # ; S y wrO   )r   r   )r*   r{   ri   rn   rc   r   s         r.   r   zEagerDiscoverer.__iter__  sz     ))//1 	'IAv%||~ '8$,NN$4 'LAy'0'8 '8&'''	's   A0A2r   )r   r   r   r   rr   r/   rA   r   rQ   rY   r   r   r   rP   rM   r.   r   r   A  sA    %6I Y Y
"42'rM   r   c                       e Zd ZdZddZd Zy)re   z%Helper class for Discoverer containerNc                 (    || _         |xs i | _        y rO   rw   rc   )r*   rw   rc   s      r.   r/   zResourceGroup.__init__  s    ""brM   c                 6    d| j                   | j                  dS )Nre   )_typerw   rc   r   rL   s    r.   to_dictzResourceGroup.to_dict  s    $
 	
rM   rO   )r   r   r   r   r/   r   rP   rM   r.   re   re     s    /)
rM   re   c                       e Zd Zd Zy)rJ   c                 "    |j                         S rO   )r   )r*   os     r.   defaultzCacheEncoder.default  s    yy{rM   N)r   r   r   r   rP   rM   r.   rJ   rJ     s    rM   rJ   c                       e Zd Zd Zd Zy)r:   c                 p    || _         t        j                  j                  | g|d| j                  i| y )Nobject_hook)r   r8   JSONDecoderr/   r   )r*   r   argsrX   s       r.   r/   zCacheDecoder.__init__  s2    !!$VtVD4D4DVvVrM   c                     d|vr|S |j                  d      }|dk(  rt        d	d| j                  i|S |dk(  rt        | j                  fi |S |dk(  r"t	        |d   | j                  |d               S |S )
Nr   r   r   r   re   rw   rc   rb   rP   )r   r   r   r   re   r   )r*   objr   s      r.   r   zCacheDecoder.object_hook  s    #J J64;;6#66n$3s33o% [!1T=M=McR]N^=_``
rM   N)r   r   r   r/   r   rP   rM   r.   r:   r:     s    W
rM   r:   )'r#   r   r8   r>   r   r&   	functoolsr   collectionsr   abcr   r   json.decoderr   urllib3.exceptionsr   r	   r~   r
   
exceptionsr   r   r   r   r   r   r   r   rg   objectr   r   r   re   JSONEncoderrJ   r   r:   rP   rM   r.   <module>r      s    
 
      # 0 ( ; " { { ,  wf wft`#Z `#FL'j L'^
F 
4## 4## rM   