
    ?g7                         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	 d d
lmZ g dZd Z G d de      Zy# e$ r d	ZY #w xY w# e$ r  G d de      ZY 2w xY w)    N)watch)ApiException   )EagerDiscovererLazyDiscoverer)api_exceptionKubernetesValidateMissing)ResourceResourceListSubresourceResourceInstanceResourceFieldTF)VersionNotSupportedErrorc                       e Zd Zy)r   N)__name__
__module____qualname__     N/var/www/openai/venv/lib/python3.12/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                    |j                  dd      }|j                  dt              }	  | g|i |}|rl	 t        j
                  r& || t        j                  |j                              S  || t        j                  |j                  j                  d                  S |S # t        $ r}t        |      d }~ww xY w# t        $ r< t        j
                  r|j                  cY S |j                  j                  d      cY S w xY w)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   s    #ZZT:ZZ.>?
	#.t.v.D 077%dDJJtyy,ABB!$

4993C3CF3K(LMM
   	#""	#  07799$yy''//0s4   B' 5C 04C '	C 0B;;C %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y)r   zb A kubernetes client that dynamically discovers and interacts with
        the kubernetes API
    Nc                 d    |xs t         }|| _        |j                  | _         || |      | _        y N)r   clientconfiguration_DynamicClient__discoverer)r%   r1   
cache_file
discoverers       r   __init__zDynamicClient.__init__M   s2      1>
#11&tZ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                     |xs! |j                  di       j                  d      }|s/t        dj                  |j                  |j                              |S )Nmetadata	namespacezNamespace is required for {}.{})getr$   formatgroup_versionkind)r%   resourcer>   bodys       r   ensure_namespacezDynamicClient.ensure_namespace^   sQ    J*b!9!=!=k!J	>EEhF\F\^f^k^klmmr   c                 Z    t        t        |dd            r|j                         S |xs 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   s+     GD)T23<<>!zrr   c                 P    |j                  ||      } | j                  d|fi |S )Nnamer>   r?   )pathrequest)r%   rC   rM   r>   r'   rN   s         r   r?   zDynamicClient.getn   s,    }}$)}<t||E42622r   c                     | j                  |      }|j                  r| j                  |||      }|j                  |      } | j                  d|fd|i|S )N)r>   postrD   )rJ   
namespacedrE   rN   rO   )r%   rC   rD   r>   r'   rN   s         r   createzDynamicClient.creater   s\    ""4(--h	4HI}}y}1t||FD>t>v>>r   c                     |s|s|st        d      |j                  r|s|s|st        d      |j                  ||      } | 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   se    .]^^.Ibcc}}$)}<t||Hd~nes~w}~~r   c                 `   | j                  |      }|xs! |j                  di       j                  d      }|s/t        dj                  |j                  |j
                              |j                  r| j                  |||      }|j                  ||      } | 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;@GGH^H^`h`m`mnoo--h	4HI}}$)}<t||E4=d=f==r   c                    | j                  |      }|xs! |j                  di       j                  d      }|s/t        dj                  |j                  |j
                              |j                  r| j                  |||      }|j                  dd      }|j                  ||      } | 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;>EEhF\F\^f^k^klmm--h	4HIzz.2Z[}}$)}<t||GTZ<ZSYZZr   c                    | j                  |      }|xs! |j                  di       j                  d      }|s/t        dj                  |j                  |j
                              |j                  r| j                  |||      }|j                  ddi       |j                  ||      } | 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;>EEhF\F\^f^k^klmm--h	4HI 	~'EFG}}$)}<t||GT`o`Y_``r   c	           	   #      K   |st        j                         }|rd| }|j                  |j                  ||||d|      D ]  }	t	        ||	d         |	d<   |	  yw)a  
        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

        :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objectN)r   Watchstreamr?   r   )
r%   rC   r>   rM   rV   rW   rd   timeoutwatcherevents
             r   r   zDynamicClient.watch   sr     < %++- -dV4N^^LL))-# $ 
E /xxIE(OK
s   AAc                 B   |j                  d      sd|z   }|j                  di       }|j                  dg       }|j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d	      |j                  d
|d	   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  d      |j                  d|d   f       |j                  di       }g }i }	t        d  |j	                         D              }
d!|
vr | j
                  j                  d"d#g      |d$<   |j                  d%      r	|d%   |d&<   n| j
                  j                  d'g      |d&<   d(g}| j
                  j                  ||j                         ||||||j                  d)      |	|d*|j                  d+d,      |j                  d-      .      }|j                  d)      r|j                         S |S )/N/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`   forceheader_paramsc              3   F   K   | ]  \  }}|j                         |f  y wr0   )lower).0keyvalues      r   	<genexpr>z(DynamicClient.request.<locals>.<genexpr>  s"      ^H]*#u#))+u!5H]s   !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   paramsrn   ro   r   form_paramslocal_var_filesnew_header_paramsr   api_responses                r   rO   zDynamicClient.request   s   s#:Djj3zz."5::h+6(+; <=::k".VK-@ AB::-.:!7@W9X YZ::&'3&9I2J KL::&'3&9I2J KL::g*&/ :;::()5!2F;M4N OP::'(4!16:K3L MN::g*&/ :;::,-9!5v>T7U VW::*+7!4f=Q6R ST::)*6!3V<O5P QR::i ,6)+< =>::o&21H IJ::'(4&1B*C DE

?B7 ! ^H[H[H] ^^,,&*kk&F&F""H 'M(# ::n%,2>,BM.),0KK,R,RTYSZ,[M.) '{{++LLN#jj-!'"#)::.F#M#ZZ(:; , 
 ::k"##%%r   c                    t         s
t               t               }t               }	 |	 | j                  d   d   }t        j                  |||       ||fS # t        $ r t        j                         }Y :w xY w# t
        j                  j                  $ rd}|j                  ddj                  |j                  D cg c]  }t        |       nc c}w c}      d|j                         Y d}~||fS d}~wt        $ r |j                  d|z         Y ||fS t
        j                  j                   $ rF}|j                  d|j"                  d	|j$                  d
|j                  d       Y d}~||fS d}~ww xY w)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 .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   strmessager   SchemaNotFoundErrorrB   api_version)r%   
definitionr;   stricterrorswarningsr*   items           r   r   zDynamicClient.validate%  s~    '+--6	@C"ll<8FG  ((WfE    C1@@BGC #((88 	DMMchhnontntWuntfjX[\`XantWuNvxy  yB  yB  C  D  D  ( 	eMMY\ccd  #((<< 	@OOVVQ]]AII? @ @	@sW   A9 A A9 A63A9 5A66A9 9E<%C5;C C55 E<E<69E77E<)NN)NNNNN)NNN)NNNN)NNNNNNNr0   )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   s    9 ! ! ) )3?>[a.` L  L \ 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-   rf   r   r   r   r   <module>r      s       / 6 @ Z Z$"B
	.{ F { Y  $#$
  #6 s"   A A! AA!A43A4