
    =KiD                     `   S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
JrJr  S SKJr  S SKJrJr  S SKJr  SS	KJrJrJrJrJr  SS
KJrJr  Sr " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r" " S S\RF                  5      r$ " S S\RJ                  5      r&g)    N)partial)defaultdict)abstractmethodabstractproperty)JSONDecodeError)ProtocolErrorMaxRetryError)__version__   )NotFoundErrorResourceNotFoundErrorResourceNotUniqueErrorApiExceptionServiceUnavailableError)ResourceResourceListapisc                       \ rS rSrSrS rSS jrS rS r\	S 5       r
\SS	 j5       r\S
 5       r\S 5       rSS jrSS jrS rS rS rSrg)
Discoverer$   z
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                 *   Xl         U R                   R                  R                  n[        R                  (       a  UR                  S5      n SR                  [        R                  " USS9R                  5       5      nU=(       d3    [        R                  R                  [        R                  " 5       U5      U l        U R#                  5         g ! [         a6    SR                  [        R                  " U5      R                  5       5      n Nf = f)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        ^/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/kubernetes/dynamic/discovery.py__init__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   2C =DDc                    U(       d.  [         R                  R                  U R                  5      (       d  S[        0U l        SnO [        U R                  S5       n[        R                  " U[        [        U R                  5      S9U l        S S S 5        U R
                  R                  S5      [        :w  a  U R                  5         U R#                  5         U R%                  5         U(       a  U R'                  5         g g ! , (       d  f       Nz= f! [         a1  n[        R                   " SU5        U R                  5          S nANS nAff = f)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_cacheDiscoverer.__init_cache9   s    "''..):):;;,k:DKG($++S1Q"&))A7<3U"VDK 2;;??#45D))+ 	   21
  (4a8%%''(s0   D 3D;D 
DD 
E'EEc                      [        U R                  S5       n[        R                  " U R                  U[
        S9  S S S 5        g ! , (       d  f       g = f! [         a     g f = f)Nwr5   )r9   r)   r:   dumpr8   CacheEncoderr?   )r+   rF   s     r/   rD   Discoverer._write_cacheL   sJ    	d''-		$++ql; .-- 		s-   A %AA 
AA A 
A$#A$c                 "    U R                  SS9  g )NT)rE   )r*   r+   s    r/   r>   Discoverer.invalidate_cacheT   s    $'    c                     g N rP   s    r/   
api_groupsDiscoverer.api_groupsW       rR   Nc                     g rT   rU   )r+   prefixgroupapi_versionkindkwargss         r/   searchDiscoverer.search[   rX   rR   c                     g rT   rU   rP   s    r/   rC   Discoverer.discover_   rX   rR   c                     U R                   $ rT   )_Discoverer__versionrP   s    r/   versionDiscoverer.versionc   s    ~~rR   c                     0 nSSU(       a  [        SU R                  SSSS5      S9O
[        S5      00US'   SS[        SS[        U R                  5      /0S900U[        '   U$ )N v1Tapi	resourcesList)ResourceGroupget_resources_for_api_versionr   r   DISCOVERY_PREFIX)r+   request_resourcesgroupss      r/   default_groupsDiscoverer.default_groupsg   s    $ !$$2T2TUZ\^`dfj2km*7*=
 u
 %'-6L<U;V2WX)
 $  rR   c                 6   U R                   R                  S5      (       a  U(       Gac  U R                   R                  S0 5      U R                   S'   U R                  R                  SSR	                  [
        5      5      R                  nU R                  US9nU H  n0 nUS    H  nUS   nU R                   R                  S0 5      R                  [
        0 5      R                  US   0 5      R                  U5      n	XuS   :H  n
U	(       a  U	R                  O0 nU(       a  U R                  [
        US   X5      n[        XS	9Xh'   M     Xd[
           US   '   M     U R                   S   R                  U5        U R                  5         U R                   S   $ )
z0Discovers all API groups present in the cluster rl   GETz/{}rq   versionsre   namepreferredVersionrk   )r8   r=   r   requestr   rp   rr   rs   rl   ro   rn   updaterD   )r+   rq   r|   groups_responserr   r[   	new_groupversion_rawre   resource_group	preferredrl   s               r/   parse_api_groupsDiscoverer.parse_api_groupss   su   {{{++v'+{{{B'GDKK$"kk11%FV9WX__O((;L(MF(	#(#4K))4G%)[[__["%E%I%IJZ\^%_%c%cdijpdqsu%v%z%z  |C  &DN +5G/H HI<J 8 8PRI($($F$FGWY^_eYfho${	)6y)VI& $5 ;D'(v7 ) KK$++F3{{;''rR   c                 $   S nU R                   R                  S5      (       d+   SU R                  R                  SSUS90U R                   S'   U R                   S   U l        g ! [        [
        4 a  n[        U[
        5      (       a   [        UR                  [        5      (       d  e U R                  R                  R                  R                  S5      (       d,  [	        SU R                  R                  R                  -  5      ee S nAff = f)	Nc                     U$ rT   rU   )_
serializeds     r/   	just_json/Discoverer._load_server_info.<locals>.just_json   s    rR   re   
kubernetesr=   z/version)
serializerzhttps://zGHost value %s should start with https:// when talking to HTTPS endpoint)r8   r=   r   r{   
ValueErrorr	   
isinstancereasonr   r   r   
startswithrd   )r+   r   rG   s      r/   rB   Discoverer._load_server_info   s    	 {{y)) $++"5"5eZT]"5"^*I& Y/ . a//
188]8[8[{{0055@@LL$%n%)[[%>%>%C%C&D E E s   *A$ $D4BD

Dc                 
   [        [        5      n0 nSR                  [        SXU/5      5      n U R                  R                  SU5      R                  =(       d    / n[        [        S U5      5      n	[        [        S U5      5      n
U
 H;  nUS   R                  SS5      u  pUR                  U5      (       d  0 Xl'   XU   U'   M=     U	 H  nS H  nUR                  US5        M     [        SUUUU R                  UUR                  US   5      S	.UD6nX\S
      R                  U5        [        U R                  X#US
   S9nUUR                     R                  U5        M     U$ ! [        [        4 a    / n GN"f = f)zSreturns a dictionary of resources associated with provided (prefix, group, version)/Nrv   c                     SU S   ;  $ Nr   ry   rU   resources    r/   <lambda>:Discoverer.get_resources_for_api_version.<locals>.<lambda>   s    S@P5PrR   c                     SU S   ;   $ r   rU   r   s    r/   r   r      s    x?O8OrR   ry   r   )rZ   r[   r\   r   r   )rZ   r[   r\   r   r   subresourcesr]   )r[   r\   	base_kindrU   )r   listr&   filterr   r{   rl   r   r   splitr=   popr   appendr   r]   )r+   rZ   r[   re   r   rl   r   r%   resources_responseresources_rawsubresources_rawsubresourcer   ry   keyresourceobjresource_lists                    r/   ro   (Discoverer.get_resources_for_api_version   s     %	xxtfW%=>?	$!%!4!4UD!A!K!K!Qr
 V$PRdef'OQc de+K(066sA>NH##H--)+&+6"4(	 , &HPS$' Q # #{{#)--hv.>? K v&'..{;(EbjkqbrsMm(()00?# &$ = (9 	$!#	$s   /E, ,FFc           	      F   U R                   " S0 UD6n[        U5      S:  a<  UR                  S5      (       a&  U Vs/ s H  o3R                  US   :X  d  M  UPM     nn[        U5      S:  aX  [	        U Vs/ s H  n[        U[        5      PM     sn5      (       d)  U Vs/ s H  n[        U[        5      (       a  M  UPM     nn[        U5      S:X  a  US   $ U(       d  [        SR                  U5      5      e[        SR                  X5      5      es  snf s  snf s  snf )zSame 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   r\   r   zNo matches found for {}z!Multiple matches found for {}: {}rU   )
r_   lenr=   group_versionallr   r   r   r   r   )r+   r^   resultsresultxs        r/   r=   Discoverer.get   s    
 ++''w<!

= 9 9%,%,60D0D}H]0]W   w<!Cg(VgA|)Dg(V$W$W,3\G&:fl;[vGG\w<11:'(A(H(H(PQQ()L)S)STZ)dee )W\s   DD6D D=D)__cache_file	__versionr8   r   )FNNNN)FF)__name__
__module____qualname____firstlineno____doc__r0   r*   rD   r>   r   rV   r   r_   rC   propertyre   rs   r   rB   ro   r=   __static_attributes__rU   rR   r/   r   r   $   s     &(        
(00('RfrR   r   c                   V    \ rS rSrSrS rS rS r\S 5       r	S r
S rSS
 jrS rSrg	)LazyDiscoverer   zA convenient container for storing discovered API resources. Allows
easy searching and retrieval of specific resources.

Resources for the cluster are loaded lazily.
c                 >    [         R                  XU5        SU l        g NF)r   r0   _LazyDiscoverer__update_cacher+   r   r,   s      r/   r0   LazyDiscoverer.__init__   s    D*5#rR   c                 ,    U R                  SS9U l        g )NFrw   )r   _LazyDiscoverer__resourcesrP   s    r/   rC   LazyDiscoverer.discover   s    0050IrR   c                 V    U R                   (       a  U R                  5         SU l         g g r   )r   rD   rP   s    r/   __maybe_write_cache"LazyDiscoverer.__maybe_write_cache   s$    "'D rR   c                 D    U R                  SSS9S   R                  5       $ )NFTrq   r|   r   r   keysrP   s    r/   rV   LazyDiscoverer.api_groups   s&    $$uT$J6RWWYYrR   c                 .    U R                  U R                  " S0 UD6U R                  / 5      nU(       d=  U R	                  5         U R                  U R                  " S0 UD6U R                  / 5      nU R                  5         U$ ! [         a    / n Ndf = f)NrU   )_LazyDiscoverer__search_LazyDiscoverer__build_searchr   r   r>   "_LazyDiscoverer__maybe_write_cacher+   r^   r   s      r/   r_   LazyDiscoverer.search   s    	mmD$7$7$A&$A4CSCSUWXG !!#mmD$7$7$A&$A4CSCSUWXG  " % 	G	s   -B BBc           	      t   US   nUS:w  GaV  UR                  U5      nU(       d  / $ [        U[        5      (       a  [        U5      S:w  a  [	        SU-  5      eUR
                  (       dK  US   US   Upn U R                  XgXER                  5      Ul        XPR                  S   U   U   U'   SU l        U R                  USS  UR
                  U5      $ [        U[        5      (       a  U R                  USS  XSU/-   5      $ US   S:w  aU  [        US   [        5      (       a=  U H5  n	US   R                  5        H  u  p[        X5      U:X  d  M  U	/s  s  $    M7     / $ U$ / nUR!                  5        H+  nUR#                  U R                  U/USS  -   X#5      5        M-     U$ ! [         a    [        ef = f)Nr   *   z2prefix and group params should be present, have %sr   rl   T)r=   r   rn   r   r   rl   ro   r   r   r   r8   r   r   dictitemsgetattrr   extend)r+   partsrl   	reqParamspartresourcePartrZ   r[   re   	_resourcetermvaluematchesr   s                 r/   __searchLazyDiscoverer.__search  s   Qx3;$==.L	L-88y>Q&$%Y\e%eff#---6q\9Q<7F4151S1S"41G1G2I.
 HTKK,V4U;GD*.D'}}U12Y0F0F	RRL$// }}U12Y4&>PRR8s?z%(D'A'A%1	+08>>+;KD&y75@(1{ 2 ,< &2
 I''G ~~'t}}cUU12Y->	UV (N1 ) 4334s   6!F& &F7Nc                     U(       d   U(       a  SU;   a  UR                  S5      u  p#XX4U/n[        [        S U5      5      $ )Nr   c                     U =(       d    S$ Nr   rU   r   s    r/   r   /LazyDiscoverer.__build_search.<locals>.<lambda>0  
    !(s(rR   r   r   mapr+   rZ   r[   r\   r]   r^   r   s          r/   __build_searchLazyDiscoverer.__build_search+  @    );!,!2!23!7E6:C*E233rR   c           	   #     #    U R                   R                  5        H  u  pUR                  5        H  u  p4UR                  5        H  u  pVUR                  (       d?  U R                  XXVR                  5      Ul        X`R
                  S   U   U   U'   SU l        [        R                  " UR                  5       H	  u  pxUv   M     M     M     M     U R                  5         g 7f)Nrl   T)
r   r   rl   ro   r   r8   r   r   	iteritemsr   )	r+   rZ   rr   r[   rx   re   rgr   r   s	            r/   __iter__LazyDiscoverer.__iter__2  s     "..446NF#)<<>#+>>#3KG<<'+'I'I"7LL(BKMK08?H.2+'*}}R\\'B& (C $4 $2 7 	  "s   C$C&)__resources__update_cacher   )r   r   r   r   r   r0   rC   r   r   rV   r_   r   r   r   r   rU   rR   r/   r   r      sB    $J(
 Z Z
(T4#rR   r   c                   V    \ rS rSrSrS rS rS r\S 5       r	S r
SS	 jrS
 rS rSrg)EagerDiscovereriA  zA 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                     Xl         g rT   )_EagerDiscoverer__resources)r+   rl   s     r/   r|   EagerDiscoverer.updateH  s    $rR   c                 0    [         R                  XU5        g rT   )r   r0   r   s      r/   r0   EagerDiscoverer.__init__K  s    D*5rR   c                 ,    U R                  SS9U l        g )NTrw   )r   r   rP   s    r/   rC   EagerDiscoverer.discoverN  s    0040HrR   c                 D    U R                  SSS9S   R                  5       $ )zlist available api groups Tr   r   r   rP   s    r/   rV   EagerDiscoverer.api_groupsQ  s(     $$tD$I&QVVXXrR   c                     U R                  U R                  " S0 UD6U R                  5      nU(       d<  U R                  5         U R                  U R                  " S0 UD6U R                  5      nU$ )a  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
rU   )_EagerDiscoverer__search_EagerDiscoverer__build_searchr   r>   r   s      r/   r_   EagerDiscoverer.searchW  s`     -- 3 3 =f =t?O?OP!!#mmD$7$7$A&$A4CSCSTGrR   Nc                     U(       d   U(       a  SU;   a  UR                  S5      u  p#XX4U/n[        [        S U5      5      $ )Nr   c                     U =(       d    S$ r   rU   r   s    r/   r   0EagerDiscoverer.__build_search.<locals>.<lambda>m  r   rR   r   r   s          r/   r   EagerDiscoverer.__build_searchh  r   rR   c           	      Z   US   nUR                  U5      nUS:w  a  U(       a  [        U[        5      (       a  U R                  USS  UR                  5      $ [        U[
        5      (       a  U R                  USS  U5      $ US   S:w  aU  [        US   [
        5      (       a=  U H5  nUS   R                  5        H  u  pg[        XV5      U:X  d  M  U/s  s  $    M7     / $ U$ US:X  aC  / nUR                  5        H+  n	UR                  U R                  U	/USS  -   U5      5        M-     U$ / $ )Nr   r   r   )
r=   r   rn   r  rl   r   r   r   r   r   )
r+   r   rl   r   r   r   r   r   r   r   s
             r/   r   EagerDiscoverer.__searcho  s   Qx }}T*3;<,66}}U12Y0F0FGGL$//}}U12Y==8s?z%(D'A'A%1	+08>>+;KD&y75@(1{ 2 ,< &2 I''S[G ~~'t}}cUU12Y->	JK (N	rR   c              #      #    U R                   R                  5        HT  u  pUR                  5        H;  u  pUR                  5        H"  u  pUR                  5        H	  u  pUv   M     M$     M=     MV     g 7frT   )r   r   )r+   r   rr   rx   rl   r   s         r/   r   EagerDiscoverer.__iter__  s]     ))//1IA%||~$,NN$4LA'0'8& (9 %5  . 2s   A4A6)r   r   )r   r   r   r   r   r|   r0   rC   r   rV   r_   r  r  r   r   rU   rR   r/   r   r   A  sA    %6I Y Y
"42'rR   r   c                   (    \ rS rSrSrSS jrS rSrg)rn   i  z%Helper class for Discoverer containerNc                 0    Xl         U=(       d    0 U l        g rT   r   rl   )r+   r   rl   s      r/   r0   ResourceGroup.__init__  s    ""brR   c                 6    SU R                   U R                  S.$ )Nrn   )_typer   rl   r  rP   s    r/   to_dictResourceGroup.to_dict  s    $
 	
rR   r  rT   )r   r   r   r   r   r0   r  r   rU   rR   r/   rn   rn     s    /)
rR   rn   c                       \ rS rSrS rSrg)rM   i  c                 "    UR                  5       $ rT   )r  )r+   os     r/   defaultCacheEncoder.default  s    yy{rR   rU   N)r   r   r   r   r  r   rU   rR   r/   rM   rM     s    rR   rM   c                        \ rS rSrS rS rSrg)r<   i  c                 p    Xl         [        R                  R                  " U /UQ7SU R                  0UD6  g )Nobject_hook)r   r:   JSONDecoderr0   r  )r+   r   argsr^   s       r/   r0   CacheDecoder.__init__  s0    !!$VtVD4D4DVvVrR   c                     SU;  a  U$ UR                  S5      nUS:X  a  [        S	SU R                  0UD6$ US:X  a  [        U R                  40 UD6$ US:X  a  [	        US   U R                  US   5      S9$ U$ )
Nr  r   r   r   rn   r   rl   rk   rU   )r   r   r   r   rn   r  )r+   objr  s      r/   r  CacheDecoder.object_hook  s    #J J64;;6#66n$3s33o% [!1T=M=McR]N^=_``
rR   )r   N)r   r   r   r   r0   r  r   rU   rR   r/   r<   r<     s    W
rR   r<   )'r$   r   r:   r@   r    r'   	functoolsr   collectionsr   abcr   r   json.decoderr   urllib3.exceptionsr   r	   r   r
   
exceptionsr   r   r   r   r   r   r   r   rp   objectr   r   r   rn   JSONEncoderrM   r  r<   rU   rR   r/   <module>r-     s    
 
      # 0 ( ; " { { ,  wf wft`#Z `#FL'j L'^
F 
4## 4## rR   