
    ?gLD                     T   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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jB                        Z" G d dejF                        Z$y)    N)partial)defaultdict)abstractmethodabstractproperty)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        Q/var/www/openai/venv/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_cache8   s    "''..):):;,k:DKG($++S1Q"&))A7<3U"VDK 2;;??#45D))+ 	   21
  (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wr2   )r6   r'   r7   dumpr5   CacheEncoderr<   )r)   rC   s     r-   rA   zDiscoverer._write_cacheK   sJ    	d''-		$++ql; .-- 		s-   A 'AA AA A 	A A c                 (    | j                  d       y )NT)rB   )r(   r)   s    r-   r;   zDiscoverer.invalidate_cacheS   s    $'    c                      y N rK   s    r-   
api_groupszDiscoverer.api_groupsV       rL   Nc                      y rN   rO   )r)   prefixgroupapi_versionkindkwargss         r-   searchzDiscoverer.searchZ   rQ   rL   c                      y rN   rO   rK   s    r-   r@   zDiscoverer.discover^   rQ   rL   c                     | j                   S rN   )_Discoverer__versionrK   s    r-   versionzDiscoverer.versionb   s    ~~rL   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_groupsf   s    $ !$$2T2TUZ\^`dfj2km*7*=
 u
 %'-6L<U;V2WX)
 $  rL   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 rb   GETz/{}rg   versionsr\   namepreferredVersionra   )r5   r:   r   requestr   rf   rh   ri   rb   re   rd   updaterA   )r)   rg   rq   groups_responserh   rT   	new_groupversion_rawr\   resource_group	preferredrb   s               r-   parse_api_groupszDiscoverer.parse_api_groupsr   s}   {{{+v'+{{{B'GDKK$"kk11%FV9WX__O((;L(MF(	#(#4K))4G%)[[__["%E%I%IJZ\^%_%c%cdijpdqsu%v%z%z  |C  &DN +u5G/H HI<J 8 8PRI($($F$FGWY^_eYfhoqz${	)6yI)VIg& $5 ;D'(v7 ) KK$++F3{{;''rL   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 rN   rO   )_
serializeds     r-   	just_jsonz/Discoverer._load_server_info.<locals>.just_json   s    rL   r\   
kubernetesr:   z/version)
serializerzhttps://zGHost value %s should start with https:// when talking to HTTPS endpoint)r5   r:   r   rp   
ValueErrorr   
isinstancereasonr   r   r   
startswithr[   )r)   r|   rD   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        $ r g }Y w xY w)zT returns a dictionary of resources associated with provided (prefix, group, version)/Nrk   c                     d| d   vS Nr   rn   rO   resources    r-   <lambda>z:Discoverer.get_resources_for_api_version.<locals>.<lambda>   s    S@P5PrL   c                     d| d   v S r   rO   r   s    r-   r   z:Discoverer.get_resources_for_api_version.<locals>.<lambda>   s    x?O8OrL   rn   r
   )rS   rT   rU   r   rv   )rS   rT   rU   r   rv   subresourcesrV   )rT   rU   	base_kindrO   )r   listr$   filterr   rp   rb   r   splitr:   popr   appendr   rV   )r)   rS   rT   r\   rv   rb   r   r#   resources_responseresources_rawsubresources_rawsubresourcer   rn   keyresourceobjresource_lists                    r-   re   z(Discoverer.get_resources_for_api_version   s     %	xxtfeW%=>?	$!%!4!4UD!A!K!K!Qr V$PRdef'OQc de+K(066sA>NHd##H-)+X&+6L"4(	 , &HPS$' Q # #{{#)--hv.>? K hv&'..{;(EwbjkqbrsMm(()00?# &$ ; ' 	$!#	$s   *E% %E43E4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
   rU   r   zNo matches found for {}z!Multiple matches found for {}: {}rO   )
rX   lenr:   group_versionallr   r   r   r   r   )r)   rW   resultsresultxs        r-   r:   zDiscoverer.get   s    
 $++''w<!

= 9%,%,60D0D}H]0]W   w<!Cg(VgA|)Dg(V$W,3\G&:fl;[vGG\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(   rA   r;   r   rP   r   rX   r@   propertyr\   ri   rw   r?   re   r:   rO   rL   r-   r   r   #   s     &(        
(00(&PfrL   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#rL   c                 2    | j                  d      | _        y )NFrl   )rw   _LazyDiscoverer__resourcesrK   s    r-   r@   zLazyDiscoverer.discover   s    0050IrL   c                 L    | j                   r| j                          d| _         y y r   )r   rA   rK   s    r-   __maybe_write_cachez"LazyDiscoverer.__maybe_write_cache   s$    "'D rL   c                 J    | j                  dd      d   j                         S )NFTrg   rq   r   rw   keysrK   s    r-   rP   zLazyDiscoverer.api_groups   s&    $$uT$J6RWWYYrL   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)NrO   )_LazyDiscoverer__search_LazyDiscoverer__build_searchr   r   r;   "_LazyDiscoverer__maybe_write_cacher)   rW   r   s      r-   rX   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
   rb   T)r:   r   rd   r   r   rb   re   rv   r   r   r5   r   r   dictitemsgetattrr   extend)r)   partsrb   	reqParamspartresourcePartrS   rT   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	+08>>+;KD%&y$75@(1{ 2 ,< &2
 I''G ~~'t}}cUU12Y->	9UV (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   rO   r   s    r-   r   z/LazyDiscoverer.__build_search.<locals>.<lambda>.  
    !(s(rL   r   r   mapr)   rS   rT   rU   rV   rW   r   s          r-   __build_searchzLazyDiscoverer.__build_search)  F    );!,!2!23!7E;T6:C*E233rL   c           	   #     K   | j                   j                         D ]  \  }}|j                         D ]  \  }}|j                         D ]~  \  }}|j                  sB| j                  ||||j                        |_        || j
                  d   |   |   |<   d| _        t        j                  |j                        D ]	  \  }}|     | j                          y w)Nrb   T)
r   r   rb   re   rv   r5   r   r   	iteritemsr   )	r)   rS   rh   rT   rm   r\   rgrz   r   s	            r-   __iter__zLazyDiscoverer.__iter__0  s     "..446NFF#)<<>x#+>>#3KGR<<'+'I'I"E7BLL(BKMK08?H.2+'*}}R\\'B8& (C $4 $2 7 	  "s   CCr   )r   r   r   r   r.   r@   r   r   rP   rX   r   r   r   rO   rL   r-   r   r      sB    $J(
 Z Z
(T4#rL   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 rN   )_EagerDiscoverer__resources)r)   rb   s     r-   rq   zEagerDiscoverer.updateF  s
    $rL   c                 2    t         j                  | ||       y rN   )r   r.   r   s      r-   r.   zEagerDiscoverer.__init__I  s    D&*5rL   c                 2    | j                  d      | _        y )NTrl   )rw   r   rK   s    r-   r@   zEagerDiscoverer.discoverL  s    0040HrL   c                 J    | j                  dd      d   j                         S )z list available api groups Tr   r   r   rK   s    r-   rP   zEagerDiscoverer.api_groupsO  s(     $$tD$I&QVVXXrL   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
        rO   )_EagerDiscoverer__search_EagerDiscoverer__build_searchr   r;   r   s      r-   rX   zEagerDiscoverer.searchU  sf     -- 3 3 3 =f =t?O?OP!!#mm$7D$7$7$A&$A4CSCSTGrL   Nc                 t    |s|rd|v r|j                  d      \  }}|||||g}t        t        d |            S )Nr   c                     | xs dS r   rO   r   s    r-   r   z0EagerDiscoverer.__build_search.<locals>.<lambda>k  r   rL   r   r   s          r-   r   zEagerDiscoverer.__build_searchf  r   rL   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   rd   r   rb   r   r   r   r   r   )
r)   r   rb   r   r   r   r   r   r   r   s
             r-   r   zEagerDiscoverer.__searchm  s   Qx }}T*3;<,6}}U12Y0F0FGGL$/}}U12Y==8s?z%(D'A%1	+08>>+;KD%&y$75@(1{ 2 ,< &2 I''S[G ~~'t}}cUU12Y->	JK (N	rL   c              #      K   | j                   j                         D ]Q  \  }}|j                         D ]9  \  }}|j                         D ]!  \  }}|j                         D ]	  \  }}|  # ; S y wrN   )r   r   )r)   rz   rh   rm   rb   r   s         r-   r   zEagerDiscoverer.__iter__  sf     ))//1IAv%||~8$,NN$4LAy'0'88& (9 %5  . 2s   A0A2r   )r   r   r   r   rq   r.   r@   r   rP   rX   r   r   r   rO   rL   r-   r   r   ?  sA    %6I Y Y
"42'rL   r   c                       e Zd ZdZddZd Zy)rd   z%Helper class for Discoverer containerNc                 (    || _         |xs i | _        y rN   rv   rb   )r)   rv   rb   s      r-   r.   zResourceGroup.__init__  s    ""brL   c                 6    d| j                   | j                  dS )Nrd   )_typerv   rb   r   rK   s    r-   to_dictzResourceGroup.to_dict  s    $
 	
rL   rN   )r   r   r   r   r.   r   rO   rL   r-   rd   rd     s    /)
rL   rd   c                       e Zd Zd Zy)rI   c                 "    |j                         S rN   )r   )r)   os     r-   defaultzCacheEncoder.default  s    yy{rL   N)r   r   r   r   rO   rL   r-   rI   rI     s    rL   rI   c                       e Zd Zd Zd Zy)r9   c                 p    || _         t        j                  j                  | g|d| j                  i| y )Nobject_hook)r   r7   JSONDecoderr.   r   )r)   r   argsrW   s       r-   r.   zCacheDecoder.__init__  s2    !!$VtVD4D4DVvVrL   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   rd   rv   rb   ra   rO   )r   r   r   r   rd   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^=_``
rL   N)r   r   r   r.   r   rO   rL   r-   r9   r9     s    W
rL   r9   )%r"   r   r7   r=   r   r%   	functoolsr   collectionsr   abcr   r   urllib3.exceptionsr   r   r}   r	   
exceptionsr   r   r   r   r   r   r   r   rf   objectr   r   r   rd   JSONEncoderrI   r   r9   rO   rL   r-   <module>r      s    
 
      # 0 ; " { { ,  vf vfr`#Z `#FL'j L'^
F 
4## 4## rL   