
    Zi9                         d dl Z d dlZd dlmZ d dlm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          ZdS )    N)partial)pformatc                   f    e Zd ZdZ	 	 	 ddZd Zed             Zd Zed             Z	dd	Z
d
 ZdS )Resourceza Represents an API resource type, containing the information required to build urls for requests NFc                 T    d |||fv rt          d          | _        | _        | _        | _        | _        | _        | _        | _        |	 _	        |
p|r
|d d         nd _
        | _        | _         fd|pi                                 D              _        | _        d S )Nz7At least prefix, kind, and api_version must be provided c                 2    i | ]\  }}|t          fi |S  )Subresource.0kvselfs      V/root/projects/butler/venv/lib/python3.11/site-packages/kubernetes/dynamic/resource.py
<dictcomp>z%Resource.__init__.<locals>.<dictcomp>,   s<     
 
 
*.!QA{4%%1%%
 
 
    )
ValueErrorprefixgroupapi_versionkind
namespacedverbsname	preferredclientsingular_nameshort_names
categoriesitemssubresources
extra_args)r   r   r   r   r   r   r   r   r   r   singularName
shortNamesr!   r#   kwargss   `              r   __init__zResource.__init__   s     Kv...VWWW
&	$
	")H4.Gd3B3iiR%$
 
 
 
3?3E22L2L2N2N
 
 
 !r   c                 
   d| j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        d | j                                        D             d}|                    | j                   |S )Nr   c                 >    i | ]\  }}||                                 S r   )to_dict)r   r   srs      r   r   z$Resource.to_dict.<locals>.<dictcomp>@   s&    TTTBQ

TTTr   )_typer   r   r   r   r   r   r   r   r%   r&   r!   r#   )r   r   r   r   r   r   r   r   r   r    r!   r#   r"   updater$   r   ds     r   r+   zResource.to_dict2   s    kZ+I/ZI .*/TT$:K:Q:Q:S:STTT
 
 	
!!!r   c                 ^    | j         r d                    | j         | j                  S | j        S )N{}/{})r   formatr   r   s    r   group_versionzResource.group_versionE   s/    : 	@>>$*d.>???r   c                 X    d                     | j        j        | j        | j                  S )Nz<{}({}/{})>)r3   	__class____name__r5   r   r4   s    r   __repr__zResource.__repr__K   s&    ##DN$;T=OQUQZ[[[r   c                 "   d                     | j        | j                  }| j                                        }d                     ||          d                     ||          d                     ||          d                     ||          dS )Nr2   z/{}/{}z/{}/namespaces/{{namespace}}/{}z/{}/{}/{{name}}z(/{}/namespaces/{{namespace}}/{}/{{name}})basenamespaced_basefullnamespaced_full)r3   r   r5   r   lower)r   full_prefixresource_names      r   urlszResource.urlsN   s    nnT[$2DEE	))OOK??@GGUbcc%,,[-HHIPPQ\^kll	
 
 	
r   c                 
   g }i }| j         r|r|                    d           ||d<   |r|                    d           ||d<   n|                    d            | j        d                    |                   j        di |S )Nr   	namespacer=   r   r;   _r   )r   appendrB   joinr3   )r   r   rD   url_typepath_paramss        r   pathzResource.pathY   s    ? 	1y 	1OOL)))'0K$ 	$OOF###"&KOOF###3ty(++,3BBkBBBr   c                 t    || j         v r| j         |         S t          t          | j        |          |           S N)r#   r   getattrr   r   r   s     r   __getattr__zResource.__getattr__f   s:    4$$$$T**wt{D114888r   )NNNNFNNFNNNNNNN)r8   
__module____qualname____doc__r(   r+   propertyr5   r9   rB   rJ   rO   r   r   r   r   r      s        kkGKRVSW! ! ! !2  &     X 
\ \ \ 
 
 X
C C C C9 9 9 9 9r   r   c                   `    e Zd ZdZddZd Zd Zd Zdd	Zdd
Z	d Z
d Zd Zd Zd Zd ZdS )ResourceListz" Represents a list of API objects r	   v1Nc                     || _         || _        || _        |pd                    |          | _        || _        || _        d | _        d S )Nz{}List)r   r   r   r3   r   	base_kindbase_resource_lookup_ResourceList__base_resource)r   r   r   r   rY   r   rZ   s          r   r(   zResourceList.__init__o   sM    
&6HOOI66	"$8!#r   c                    | j         r| j         S | j        r( | j        j        j        di | j        | _         | j         S | j        r=| j        j                            | j        | j        | j                  | _         | j         S d S )N)r   r   r   r   )r[   rZ   r   	resourcesgetrY   r   r   r4   s    r   base_resourcezResourceList.base_resourcex   s     	(''& 	(#<4;#8#<#Y#Yt?X#Y#YD ''^ 	(#';#8#<#<4:[_[krv  sA#<  $B  $BD ''tr   c                     |t          d          |d         }|d         }|                    d          }|st          d           j        |k    r(t          d                     j        |                    || fd|D             d	S )
aN   Takes a List body and return a dictionary with the following structure:
            {
                'api_version': str,
                'kind': str,
                'items': [{
                    'resource': Resource,
                    'name': str,
                    'namespace': str,
                }]
            }
        Nz>You must provide a body when calling methods on a ResourceList
apiVersionr   r"   zVThe `items` field in the body must be populated when calling methods on a ResourceListzXMethods on a {} must be called with a body containing the same kind. Received {} insteadc                 :    g | ]}                     |          S r   )_item_to_resourcer   itemr   s     r   
<listcomp>z4ResourceList._items_to_resources.<locals>.<listcomp>   s'    EEEtd,,T22EEEr   )r   r   r"   )r   r^   r   r3   )r   bodyr   r   r"   s   `    r   _items_to_resourcesz ResourceList._items_to_resources   s     <]^^^<(F|!! 	wuvvv9w~~  @D  @I  KO  P  P  Q  Q  Q 'EEEEuEEE
 
 	
r   c                 b   |                     di           }|                                 }|sW|                     d| j                  }|                     d| j                  }| j        j                             ||          }|||                     d          |                     d          dS )Nmetadatara   r   )r   r   r   rD   )resource
definitionr   rD   )r^   r_   r   rY   r   r]   )r   re   rj   rk   r   r   s         r   rc   zResourceList._item_to_resource   s    88J++%%'' 	U((<1ABBK88FDN33D{,00[t0TTH LL((!k22	
 
 	
r   c                     |rt          d          |                     |          }t          j        |          }fd|d         D             |d<   t	          | |          S )NEOperations on ResourceList objects do not support the `name` argumentc                 |    g | ]8} |d          j         d|d         |d         pd                                9S rk   r   rD   r   rD   r   )r^   r+   r   re   r'   rD   s     r   rf   z$ResourceList.get.<locals>.<listcomp>   sd     
 
 
 !D gd6ld;>O>\S\gg`fggooqq
 
 
r   r"   r   rh   copydeepcopyResourceInstancer   rg   r   rD   r'   resource_listresponses      ``  r   r^   zResourceList.get        	fdeee0066=&&
 
 
 
 
%g.
 
 
  h///r   c                     |rt          d          |                     |          }t          j        |          }fd|d         D             |d<   t	          | |          S )Nrn   c                 |    g | ]8} |d          j         d|d         |d         pd                                9S rp   )deleter+   rr   s     r   rf   z'ResourceList.delete.<locals>.<listcomp>   sd     
 
 
 $D#jfkARA_V_jjcijjrrtt
 
 
r   r"   rs   rw   s      ``  r   r}   zResourceList.delete   rz   r   c                     |                      |          }t          j        |          }fd|d         D             |d<   t          | |          S )Nc                 |    g | ]8} t          |d                    dd|d         i                                9S )rk   rg   rl   r   )rM   r+   )r   re   r'   verbs     r   rf   z,ResourceList.verb_mapper.<locals>.<listcomp>   s^     
 
 
 ,GD$d++NNl1CNvNNVVXX
 
 
r   r"   )rh   rt   ru   rv   )r   r   rg   r'   rx   ry   s    ` `  r   verb_mapperzResourceList.verb_mapper   so    0066=&&
 
 
 
 
%g.
 
 
  h///r   c                 $     | j         dg|R i |S )Ncreater   r   argsr'   s      r   r   zResourceList.create   s%    t:4:::6:::r   c                 $     | j         dg|R i |S )Nreplacer   r   s      r   r   zResourceList.replace   s%    t	;D;;;F;;;r   c                 $     | j         dg|R i |S )Npatchr   r   s      r   r   zResourceList.patch   s%    t9$999&999r   c                 :    d| j         | j        | j        | j        dS )NrV   )r-   r   r   r   rY   )r   r   r   rY   r4   s    r   r+   zResourceList.to_dict   s)    #Z+I
 
 	
r   c                 r    |                                  r"t          |                                  |          S d S rL   )r_   rM   rN   s     r   rO   zResourceList.__getattr__   s7     	74--//666tr   )r	   rW   r	   NNrP   )r8   rQ   rR   rS   r(   r_   rh   rc   r^   r}   r   r   r   r   r+   rO   r   r   r   rV   rV   l   s        ,,$ $ $ $	 	 	
 
 
<
 
 

0 
0 
0 
0
0 
0 
0 
00 0 0; ; ;< < <: : :
 
 
    r   rV   c                   B    e Zd ZdZd ZddZed             Zd Zd Z	dS )	r   z Represents a subresource of an API resource. This generally includes operations
        like scale, as well as status objects for an instantiated resource
    c                    || _         |j        | _        |j        | _        |j        | _        |                    d          | _        |                    d          | _        |                    dd           p| j                            d          d         | _        |                    dd          | _	        |                    dd           | _
        || _        d S )	Nr   r   subresource/   r   Fr   )parentr   r   r   popr   r   splitr   r   r   r$   )r   r   r'   s      r   r(   zSubresource.__init__   s    m\
!-JJv&&	JJv&&	!::mT::Udiooc>R>RST>U **\599ZZ..
 r   Nc                 ^   |p(|                     di                                d          }| j        j                            |          }| j        j        r&| j        j                            | j        ||          }|                     ||          } | j        j        j        d|fd|i|S )Nrj   r   rq   postrg   )r^   r   r   serialize_bodyr   ensure_namespacerJ   request)r   rg   r   rD   r'   rJ   s         r   r   zSubresource.create   s    ;txx
B//33F;;{!0066;! 	Z*;;DKTXYYIyydiy88)t{!)&$LLTLVLLLr   c                     d                     | j        | j                  }d                     || j        j        | j                  d                     || j        j        | j                  dS )Nr2   z/{}/{}/{{name}}/{}z+/{}/namespaces/{{namespace}}/{}/{{name}}/{})r=   r>   )r3   r   r5   r   r   r   )r   r@   s     r   rB   zSubresource.urls  sq    nnT[$2DEE(//T[=MtO_``LSST_aealaqsw  tD   E   E
 
 	
r   c                 R    t          t          | j        j        |          |           S rL   )r   rM   r   r   rN   s     r   rO   zSubresource.__getattr__
  s!    wt{1488$???r   c                 |    | j         | j        | j        | j        | j        d}|                    | j                   |S )N)r   r   r   r   r   )r   r   r   r   r   r.   r$   r/   s     r   r+   zSubresource.to_dict  sC    II+/Z
 
 	
!!!r   )NNN)
r8   rQ   rR   rS   r(   r   rT   rB   rO   r+   r   r   r   r   r      s         
! 
! 
!M M M M 
 
 X
@ @ @	 	 	 	 	r   r   c                   b     e Zd ZdZd Zd Zd Zd Zd Zd Z	 fdZ
 fd	Zd
 Zd Zd Z xZS )rv   z A parsed instance of an API resource. It exists solely to
        ease interaction with API objects by allowing attributes to
        be accessed with '.' notation.
    c                    || _         |d         }|                    d          rDd|v r@|d         d d         }|d         sg |d<   |d         D ]}d|vr|d         |d<   d|vr||d<   |                     |          | _        d| _        d S )Nr   Listr"   ra   T)r   endswith_ResourceInstance__deserialize
attributes_ResourceInstance__initialised)r   r   instancer   re   s        r   r(   zResourceInstance.__init__  s     ==   	(W%8%8F#CRC(DG$ '$&! ) ( (t++)1,)?D&%%#'DL,,X66!r   c                      t          |t                    r.t           fd|                                D                       S t          |t          t
          f          r fd|D             S |S )Nc                 B    i | ]\  }}|                     |          S r   r   r   s      r   r   z2ResourceInstance.__deserialize.<locals>.<dictcomp>3  s:     ) ) )-1Q4%%a(() ) )r   )paramsc                 :    g | ]}                     |          S r   r   rd   s     r   rf   z2ResourceInstance.__deserialize.<locals>.<listcomp>7  s'    ???D&&t,,???r   )
isinstancedictResourceFieldr"   listtupler   fields   ` r   __deserializezResourceInstance.__deserialize1  s    eT"" 	  ) ) ) )5:[[]]) ) )     e}-- 	????????Lr   c                 "    t          |t                    r% fd|j                                        D             S t          |t          t
          f          r fd|D             S t          |t                    r|                                S |S )Nc                 B    i | ]\  }}|                     |          S r   _ResourceInstance__serializer   s      r   r   z0ResourceInstance.__serialize.<locals>.<dictcomp>=  :       +/1a4##A&&  r   c                 :    g | ]}                     |          S r   r   rd   s     r   rf   z0ResourceInstance.__serialize.<locals>.<listcomp>A  '    ===tD$$T**===r   )r   r   __dict__r"   r   r   rv   r+   r   s   ` r   __serializezResourceInstance.__serialize;  s    e]++ 		   38>3G3G3I3I    e}-- 	====u====/00 	==??"Lr   c                 6    |                      | j                  S rL   )r   r   r4   s    r   r+   zResourceInstance.to_dictG  s    000r   c                      t          |           S rL   )reprr4   s    r   to_strzResourceInstance.to_strJ  s    Dzzr   c           	          d                     | j        j        d                    t	          j        |                                                               d                              S )NzResourceInstance[{}]:
  {}z  T)r3   r   r   rG   yaml	safe_dumpr+   
splitlinesr4   s    r   r9   zResourceInstance.__repr__M  sQ    ,33O IIdnT\\^^44??EEFF
 
 	
r   c                     d| j         vr(t          t          |                               |          S t	          | j        |          S Nr   )r   superrv   rO   rM   r   )r   r   r7   s     r   rO   zResourceInstance.__getattr__S  sA    /4=@@)400<<TBBBt---r   c                     d| j         vr)t          t          |                               ||          S || j         v r)t          t          |                               ||          S || j        |<   d S r   )r   r   rv   __setattr__r   )r   r   valuer7   s      r   r   zResourceInstance.__setattr__X  sq    /4=@@)400<<T5IIIT]"")400<<T5III$)DOD!!!r   c                     | j         |         S rL   r   rN   s     r   __getitem__zResourceInstance.__getitem__`  s    t$$r   c                     || j         |<   d S rL   r   r   r   r   s      r   __setitem__zResourceInstance.__setitem__c  s     %r   c                     t          t          |                     t          | j        j                                                  z   S rL   )dirtyper   r   r   keysr4   s    r   __dir__zResourceInstance.__dir__f  s2    4::do&>&C&C&E&E!F!FFFr   )r8   rQ   rR   rS   r(   r   r   r+   r   r9   rO   r   r   r   r   __classcell__)r7   s   @r   rv   rv     s         
" " "$  
 
 
1 1 1  
 
 
. . . . .
* * * * *% % %& & &G G G G G G Gr   rv   c                   N    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )r   z A parsed instance of an API resource attribute. It exists
        solely to ease interaction with API objects by allowing
        attributes to be accessed with '.' notation
    c                 *     | j         j        di | d S )Nr   )r   r.   )r   r   s     r   r(   zResourceField.__init__p  s#    &&v&&&&&r   c                 *    t          | j                  S rL   )r   r   r4   s    r   r9   zResourceField.__repr__s  s    t}%%%r   c                 "    | j         |j         k    S rL   r   )r   others     r   __eq__zResourceField.__eq__v  s    }..r   c                 6    | j                             |          S rL   )r   r^   rN   s     r   r   zResourceField.__getitem__y  s    }  &&&r   c                 `    | j                             |t          | j         |d                     S rL   )r   r^   rM   rN   s     r   rO   zResourceField.__getattr__~  s(    }  wt}dD'I'IJJJr   c                     || j         |<   d S rL   r   r   s      r   r   zResourceField.__setattr__  s    #dr   c                     t          t          |                     t          | j                                                  z   S rL   )r   r   r   r   r   r4   s    r   r   zResourceField.__dir__  s/    4::dm&8&8&:&:!;!;;;r   c              #   T   K   | j                                         D ]\  }}||fV  d S rL   )r   r"   )r   r   r   s      r   __iter__zResourceField.__iter__  s@      M'')) 	 	DAqa&LLLL	 	r   c                 ,    |                      |           S rL   _ResourceField__serializer4   s    r   r+   zResourceField.to_dict  s    %%%r   c                      t          |t                    r% fd|j                                        D             S t          |t          t
          f          r fd|D             S |S )Nc                 B    i | ]\  }}|                     |          S r   r   r   s      r   r   z-ResourceField.__serialize.<locals>.<dictcomp>  r   r   c                 :    g | ]}                     |          S r   r   rd   s     r   rf   z-ResourceField.__serialize.<locals>.<listcomp>  r   r   )r   r   r   r"   r   r   r   s   ` r   r   zResourceField.__serialize  s    e]++ 	   38>3G3G3I3I    edE]++ 	>====u====r   N)r8   rQ   rR   rS   r(   r9   r   r   rO   r   r   r   r+   r   r   r   r   r   r   j  s         
' ' '& & &/ / /' ' '
K K K$ $ $< < <  & & &    r   r   )rt   r   	functoolsr   pprintr   objectr   rV   r   rv   r   r   r   r   <module>r      s=                S9 S9 S9 S9 S9v S9 S9 S9ly y y y y8 y y yx. . . . .( . . .bNG NG NG NG NGv NG NG NGb+ + + + +F + + + + +r   