
    ZiP8                         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mZmZmZmZ 	 d dlZdZn# e$ r d	ZY nw xY w	 d d
lmZ n# e$ r  G d de          ZY nw xY wg dZd Z G d de          ZdS )    N)watch)ApiException   )EagerDiscovererLazyDiscoverer)api_exceptionKubernetesValidateMissing)ResourceResourceListSubresourceResourceInstanceResourceFieldTF)VersionNotSupportedErrorc                       e Zd ZdS )r   N)__name__
__module____qualname__     T/root/projects/butler/venv/lib/python3.11/site-packages/kubernetes/dynamic/client.pyr   r   "   s        r   r   )DynamicClientr   r
   r   r   r   r   r   c                       fd}|S )zC Handles parsing response structure and translating API Exceptions c                    |                     dd          }|                     dt                    }	  | g|R i |}n!# t          $ r}t          |          d }~ww xY w|r	 t          j        r# || t          j        |j                            S  || t          j        |j        	                    d                              S # t          $ r2 t          j        r	|j        cY S |j        	                    d          cY S w xY w|S )N	serializeT
serializerutf8)popr   r   r   sixPY2jsonloadsdatadecode
ValueError)selfargskwargsserialize_responser   respefuncs          r   innerzmeta_request.<locals>.inner3   s6   #ZZT::ZZ.>??
	#4.t...v..DD 	# 	# 	#"""	# 	007 C%:dDJty,A,ABBB!z$
493C3CF3K3K(L(LMMM 0 0 07 %9$$$y''/////0 s5   A 
AAA%.C
 5C
 
D)DDr   )r+   r,   s   ` r   meta_requestr-   1   s#        $ Lr   c                       e Zd ZdZddZed             Zed             Zd Zd Z	ddZ
dd	Zdd
ZddZddZddZddZedd            ZddZdS )r   zb A kubernetes client that dynamically discovers and interacts with
        the kubernetes API
    Nc                 `    |pt           }|| _        |j        | _         || |          | _        d S N)r   clientconfiguration_DynamicClient__discoverer)r%   r1   
cache_file
discoverers       r   __init__zDynamicClient.__init__M   s:      1>
#1&JtZ88r   c                     | j         S r0   )r3   r%   s    r   	resourceszDynamicClient.resourcesV   s      r   c                     | j         j        S r0   )r3   versionr8   s    r   r;   zDynamicClient.versionZ   s     ((r   c                     |p(|                     di                                d          }|s-t          d                    |j        |j                            |S )Nmetadata	namespacezNamespace is required for {}.{})getr$   formatgroup_versionkind)r%   resourcer>   bodys       r   ensure_namespacezDynamicClient.ensure_namespace^   s]    J*b!9!9!=!=k!J!J	 	n>EEhF\^f^kllmmmr   c                 n    t          t          |dd                    r|                                S |pi S )zSerialize body to raw dict so apiserver can handle it

        :param body: kubernetes resource body, current support: Union[Dict, ResourceInstance]
        to_dictN)callablegetattrrG   )r%   rD   s     r   serialize_bodyzDynamicClient.serialize_bodyd   s8     GD)T2233 	"<<>>!zrr   c                 N    |                     ||          } | j        d|fi |S )Nnamer>   r?   )pathrequest)r%   rC   rM   r>   r'   rN   s         r   r?   zDynamicClient.getn   s3    }}$)}<<t|E4226222r   c                     |                      |          }|j        r|                     |||          }|                    |          } | j        d|fd|i|S )N)r>   postrD   )rJ   
namespacedrE   rN   rO   )r%   rC   rD   r>   r'   rN   s         r   createzDynamicClient.creater   sl    ""4(( 	I--h	4HHI}}y}11t|FD>>t>v>>>r   c                     |s|s|st          d          |j        r|s|s|st          d          |                    ||          } | j        d|f|||d|S )Nz>At least one of name|label_selector|field_selector is requiredzCAt least one of namespace|label_selector|field_selector is requiredrL   delete)rD   label_selectorfield_selector)r$   rR   rN   rO   )	r%   rC   rM   r>   rD   rV   rW   r'   rN   s	            r   rU   zDynamicClient.deletey   s     	_ 	_. 	_]^^^ 	d 	d. 	dI 	dbccc}}$)}<<t|Hd~nes~~w}~~~r   c                 l   |                      |          }|p(|                    di                               d          }|s-t          d                    |j        |j                            |j        r|                     |||          }|                    ||          } | j	        d|fd|i|S )Nr=   rM   z!name is required to replace {}.{}rL   putrD   )
rJ   r?   r$   r@   rA   rB   rR   rE   rN   rO   )r%   rC   rD   rM   r>   r'   rN   s          r   replacezDynamicClient.replace   s    ""4((;txx
B//33F;; 	p@GGH^`h`mnnooo 	I--h	4HHI}}$)}<<t|E4==d=f===r   c                    |                      |          }|p(|                    di                               d          }|s-t          d                    |j        |j                            |j        r|                     |||          }|                    dd          }|	                    ||          } | j
        d|f||d|S )	Nr=   rM   name is required to patch {}.{}content_typez&application/strategic-merge-patch+jsonrL   patch)rD   r]   )rJ   r?   r$   r@   rA   rB   rR   rE   r   rN   rO   )r%   rC   rD   rM   r>   r'   r]   rN   s           r   r^   zDynamicClient.patch   s    ""4((;txx
B//33F;; 	n>EEhF\^f^kllmmm 	I--h	4HHIzz.2Z[[}}$)}<<t|GTZ<ZZSYZZZr   c                    |                      |          }|p(|                    di                               d          }|s-t          d                    |j        |j                            |j        r|                     |||          }|                    ddi           |	                    ||          } | j
        d|f||d|S )	Nr=   rM   r\   r]   zapplication/apply-patch+yamlrL   r^   )rD   force_conflicts)rJ   r?   r$   r@   rA   rB   rR   rE   updaterN   rO   )r%   rC   rD   rM   r>   r`   r'   rN   s           r   server_side_applyzDynamicClient.server_side_apply   s    ""4((;txx
B//33F;; 	n>EEhF\^f^kllmmm 	I--h	4HHI 	~'EFGGG}}$)}<<t|GT`o``Y_```r   c
           
   #      K   |st          j                    }|rd| }|                    |j        ||||d||	          D ]}
t	          ||
d                   |
d<   |
V   dS )a6  
        Stream events for a resource from the Kubernetes API

        :param resource: The API resource object that will be used to query the API
        :param namespace: The namespace to query
        :param name: The name of the resource instance to query
        :param label_selector: The label selector with which to filter results
        :param field_selector: The field selector with which to filter results
        :param resource_version: The version with which to filter results. Only events with
                                 a resource_version greater than this value will be returned
        :param timeout: The amount of time in seconds to wait before terminating the stream
        :param watcher: The Watcher object that will be used to stream the resource
        :param allow_watch_bookmarks: Ask the API server to send BOOKMARK events

        :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 ResourceInstance wrapping raw_object.

        Example:
            client = DynamicClient(k8s_client)
            watcher = watch.Watch()
            v1_pods = client.resources.get(api_version='v1', kind='Pod')

            for e in v1_pods.watch(resource_version=0, namespace=default, timeout=5, watcher=watcher):
                print(e['type'])
                print(e['object'].metadata)
                # If you want to gracefully stop the stream watcher
                watcher.stop()
        zmetadata.name=F)r>   rW   rV   resource_versionr   timeout_secondsallow_watch_bookmarksobjectN)r   Watchstreamr?   r   )r%   rC   r>   rM   rV   rW   rd   timeoutwatcherrf   events              r   r   zDynamicClient.watch   s      > /%+--  	54d44N^^L))-#"7 $ 	
 	
 	 	E /xxIIE(OKKKK	 	r   c                 ^	   |                     d          sd|z   }|                    di           }|                    dg           }|                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d	          |                    d
|d	         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d|d         f           |                    d          |                    d |d         f           |                    d!i           }g }i }	t          d" |                                D                       }
d#|
vr| j                            d$d%g          |d&<   |                    d'          r|d'         |d(<   n| j                            d)g          |d(<   d*g}| j                            ||	                                ||||||                    d+          |	|d,|                    d-d.          |                    d/          0          }|                    d+          r|                                S |S )1N/path_paramsquery_paramspretty	_continuecontinueinclude_uninitializedincludeUninitializedrW   fieldSelectorrV   labelSelectorlimitrd   resourceVersionre   timeoutSecondsr   grace_period_secondsgracePeriodSecondspropagation_policypropagationPolicyorphan_dependentsorphanDependentsdry_rundryRunfield_managerfieldManagerr`   forcerf   allowWatchBookmarksheader_paramsc              3   H   K   | ]\  }}|                                 |fV  d S r0   )lower).0keyvalues      r   	<genexpr>z(DynamicClient.request.<locals>.<genexpr>  s3       ^ ^*#u#))++u!5 ^ ^ ^ ^ ^ ^r   acceptzapplication/jsonzapplication/yamlAcceptr]   zContent-Typez*/*BearerToken	async_reqF_return_http_data_onlyT_request_timeout)rD   post_paramsr   filesauth_settings_preload_contentr   r   )

startswithr?   appenddictitemsr1   select_header_acceptselect_header_content_typecall_apiupper)r%   methodrN   rD   paramsro   rp   r   form_paramslocal_var_filesnew_header_paramsr   api_responses                r   rO   zDynamicClient.request   s   s## 	:Djj33zz."55::h+6(+; <===::k"".VK-@ ABBB::-..:!7@W9X YZZZ::&''3&9I2J KLLL::&''3&9I2J KLLL::g*&/ :;;;::())5!2F;M4N OPPP::'((4!16:K3L MNNN::g*&/ :;;;::,--9!5v>T7U VWWW::*++7!4f=Q6R STTT::)**6!3V<O5P QRRR::i  ,6)+< =>>>::o&&21H IJJJ::'((4&1B*C DEEE::-..:!6?V8W XYYY

?B77 ! ^ ^H[H[H]H] ^ ^ ^^^,,,&*k&F&F""H ' 'M(# ::n%% 	\,2>,BM.)),0K,R,RTYSZ,[,[M.) '{++LLNN#jj--!'"#)::.F#M#M#ZZ(:;; , 
 
 ::k"" 	 ##%%%r   Fc           
         t           st                      t                      }t                      }	 |8	 | j        d         d         }n## t          $ r t          j                    }Y nw xY wt          j        |||           n# t
          j        j	        $ rL}|
                    dd                    d |j        D                       d|j                   Y d}~nud}~wt          $ r |
                    d|z             Y nNt
          j        j        $ r8}|
                    d	|j        d
|j        d|j        d           Y d}~nd}~ww xY w||fS )a  validate checks a kubernetes resource definition

        Args:
            definition (dict): resource definition
            version (str): version of kubernetes to validate against
            strict (bool): whether unexpected additional properties should be considered errors

        Returns:
            warnings (list), errors (list): warnings are missing validations, errors are validation failures
        N
kubernetes
gitVersionz(resource definition validation error at .c                 ,    g | ]}t          |          S r   )str)r   items     r   
<listcomp>z*DynamicClient.validate.<locals>.<listcomp>A  s#    WuWuWufjX[\`XaXaWuWuWur   z: z=Kubernetes version %s is not supported by kubernetes-validatez&Could not find schema for object kind z with API version z in Kubernetes version z (possibly Custom Resource?))HAS_KUBERNETES_VALIDATEr	   listr;   KeyErrorkubernetes_validatelatest_versionvalidateutilsValidationErrorr   joinrN   messager   SchemaNotFoundErrorrB   api_version)r%   
definitionr;   stricterrorswarningsr*   s          r   r   zDynamicClient.validate)  s    ' 	.+---66	@C"l<8FGG C C C1@BBGGGC(WfEEEE"(8 	D 	D 	DMMMchhWuWunontWuWuWuNvNvNvNvxy  yB  yB  C  D  D  D  D  D  D  D  D' 	e 	e 	eMMY\ccddddd"(< 	@ 	@ 	@OOOVVVQ]]]AIII? @ @ @ @ @ @ @ @	@ sM   B A
 	B 
A*'B )A**B EAC%EE.EE)NN)NNNNN)NNN)NNNN)NNNNNNNNr0   )NF)r   r   r   __doc__r6   propertyr9   r;   rE   rJ   r?   rS   rU   rZ   r^   rb   r   r-   rO   r   r   r   r   r   r   H   sX        9 9 9 9 ! ! X! ) ) X)    3 3 3 3? ? ? ?   > > > >[ [ [ [a a a a0 0 0 0d N  N  N  \N `           r   r   )r   r    r   r   kubernetes.client.restr   	discoveryr   r   
exceptionsr   r	   rC   r
   r   r   r   r   r   r   ImportErrorkubernetes_validate.utilsr   NotImplementedError__all__r-   rg   r   r   r   r   <module>r      s   


        / / / / / / 6 6 6 6 6 6 6 6 @ @ @ @ @ @ @ @ Z Z Z Z Z Z Z Z Z Z Z Z Z Z$" $ $ $#$BBBBBBB       #6     	 	 	  .         F          s!   ; AA	A A&%A&