
    vgS                        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Zd dlmZ d dl	m
Z
 d dl	mZ d dl	mZ d dl	mZ d dl	mZ d dl	mZ d d	l	mZ d d
l	mZ d dl	mZ d dlmZ d dlmZ d dlmZ d dlmZ  G d d          Zd Z G d de          Z G d d          Zd Z  G d d          Z! G d de"          Z# G d d          Z$d Z%d Z& G d  d!e          Z'd" Z( G d# d$e
j)                  Z* G d% d&ej+                  Z,d' Z-dS )(    N)	iterparse)	xmlrpclib)StringIO)urlparse)as_bytes)	as_string)encodestring)decodestring)httplib)PY2)
get_header)xmlrpc_handler)	producers)NOT_DONE_YETc                   V    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ZdZdZdZdZdZdZdS )Faults               
               (   2   <   F   P   Z   [   \   N)__name__
__module____qualname__UNKNOWN_METHODINCORRECT_PARAMETERSBAD_ARGUMENTSSIGNATURE_UNSUPPORTEDSHUTDOWN_STATEBAD_NAME
BAD_SIGNALNO_FILENOT_EXECUTABLEFAILEDABNORMAL_TERMINATIONSPAWN_ERRORALREADY_STARTEDNOT_RUNNINGSUCCESSALREADY_ADDEDSTILL_RUNNINGCANT_REREAD     N/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/supervisor/xmlrpc.pyr   r      sk        NMNHJGNFKOKGMMKKKr;   r   c                 ^    t           j        D ]}t          t           |          | k    r|c S  dS )NUNKNOWN)r   __dict__getattr)code	faultnames     r<   getFaultDescriptionrC   .   s>    _  	69%%-- .9r;   c                       e Zd ZddZd ZdS )RPCErrorNc                 f    || _         t          |          | _        || j        d|| _        d S d S )Nz: )rA   rC   text)selfrA   extras      r<   __init__zRPCError.__init__5   s>    	'--	$(IIIuu5DIII r;   c                 &    d| j         d| j        S )Nzcode=z, text=)rA   rG   rH   s    r<   __str__zRPCError.__str__;   s     %)YYY		::r;   N)r%   r&   r'   rJ   rM   r:   r;   r<   rE   rE   4   s7        6 6 6 6; ; ; ; ;r;   rE   c                   P    e Zd ZdZ ej        dej                  Zd Zd Z	d Z
dS )DeferredXMLRPCResponsez A medusa producer that implements a deferred callback; requires
    a subclass of asynchat.async_chat that handles NOT_DONE_YET sentinel zConnection: (.*)c                 b    || _         || _        d| _        t          |j                  | _        d S )NF)callbackrequestfinishedfloatdelay)rH   rS   rR   s      r<   rJ   zDeferredXMLRPCResponse.__init__C   s,     8>**


r;   c                    | j         rdS 	 	 |                                 }|t          u rt          S n6# t          $ r)}t	          j        |j        |j                  }Y d }~nd }~ww xY wt          |          }d| _         | 	                    |          S #  t          j                    }| j        j        j        j                            d|           d| _         | j                            d           Y d S xY w)N TzXML-RPC response callback error  )rT   rR   r   rE   r   FaultrA   rG   xmlrpc_marshalgetresponse	traceback
format_excrS   channelserverloggerlogerror)rH   valueerrbodytbs        r<   morezDeferredXMLRPCResponse.moreI   s   = 	2	$<L(('' ) < < <!#(;;< "%((D DM##D)))	$%''BL '.2212   !DMLs######s,   #1 B 
A$AB A$$-B A C5c                 @   d| j         d<   t          |          | j         d<   | j                             |           t          | j        | j         j                  }d}| j         j        dk    r|dk    rd| j         d<   n*d	}n'| j         j        d
k    r	|dk    rd	}n| j         j        d	}t          j        | j         	                                          }|r
d| j         d<   | j         j
                            d|           t          j        | j         j
                  }| j         j                            t          j        t          j        || j         j                                       d | j         j        _        |r | j         j                                         d S d S )Ntext/xmlContent-TypeContent-Lengthr   z1.0z
keep-alivez
Keep-Alive
Connectionr   z1.1close)rS   lenpushr   
CONNECTIONheaderversionr   simple_producerbuild_reply_headeroutgoinginsertcomposite_producerr_   push_with_producerglobbing_producerhooked_producerrb   current_requestclose_when_done)rH   rf   
connectionclose_itoutgoing_headeroutgoing_producers         r<   r\   z"DeferredXMLRPCResponse.getresponseb   s   '1^$),T%&$1DEE
<5((\))-9\**\!U**W$$\!)H#3L++--/ /  	1)0DL& 	$$Q888%89NOO 	//+!1 1 $ 0" " 		 		 		 04, 	3L 0022222	3 	3r;   N)r%   r&   r'   __doc__recompile
IGNORECASErq   rJ   rh   r\   r:   r;   r<   rP   rP   >   sc        M M/??J+ + +$ $ $2,3 ,3 ,3 ,3 ,3r;   rP   c                     t          | t          j                   }|r/t          | t                    s| f} t          j        | |          }nt          j        |           }|S )N)methodresponse)
isinstancer   rZ   tupledumps)rd   ismethodresponserf   s      r<   r[   r[      sc    %eY_=== &%'' 	HEu5EFFFu%%Kr;   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )SystemNamespaceRPCInterfacec                 L    i | _         |D ]\  }}|| j         |<   | | j         d<   d S )Nsystem)
namespaces)rH   r   nameinsts       r<   rJ   z$SystemNamespaceRPCInterface.__init__   s=    $ 	) 	)JD$$(DOD!!$(!!!r;   c                     i }| j         D ]p}| j         |         }|j        j        D ]T}t          ||          }t	          |          r3|                    d          s|d|}t          |j                  ||<   Uq|S )N_.)r   	__class__r?   r@   callable
startswithstrr   )rH   methodsns_name	namespacemethod_namefuncsigs          r<   _listMethodsz(SystemNamespaceRPCInterface._listMethods   s     		9 		9G0I(2; 9 9 y+66D>> 9&11#66 9)0++>'*4<'8'89 r;   c                     |                                  }t          |                                          }|                                 |S )z Return an array listing the available method names

        @return array result  An array of method names available (strings).
        )r   listkeyssort)rH   r   r   s      r<   listMethodsz'SystemNamespaceRPCInterface.listMethods   s<    
 ##%%GLLNN##		r;   c                     |                                  }|                                D ]}||k    r
||         c S t          t          j                  )z Return a string showing the method's documentation

        @param string name   The name of the method.
        @return string result The documentation for the method name.
        )r   r   rE   r   r+   )rH   r   r   
methodnames       r<   
methodHelpz&SystemNamespaceRPCInterface.methodHelp   s^     ##%%!,,.. 	+ 	+JT!!z**** "v3444r;   c                 l   |                                  }|D ]}||k    r}d}g }t          ||                   }|D ]>}|d         dk    r	|d         }|d         dk    r|                    |d                    ?|t          t          j                  |g|z   c S t          t          j                  )ab   Return an array describing the method signature in the
        form [rtype, ptype, ptype...] where rtype is the return data type
        of the method, and ptypes are the parameter data types that the
        method accepts in method argument order.

        @param string name  The name of the method.
        @return array result  The result.
        Nr   returnr   param)r   gettagsappendrE   r   r+   )rH   r   r   methodrtypeptypesparsedthings           r<   methodSignaturez+SystemNamespaceRPCInterface.methodSignature   s     ##%% 	( 	(F~~ 11# 0 0EQx8++ %aqW,,eAh///="6#?@@@w''''  v3444r;   c                 n     |dd         }g }g }|||f fd	}d|_          |            }|t          u r|S |S )a  Process an array of calls, and return an array of
        results. Calls should be structs of the form {'methodName':
        string, 'params': array}. Each result will either be a
        single-item array containing the result value, or a struct of
        the form {'faultCode': int, 'faultString': string}. This is
        useful when you need to make lots of small calls without lots
        of round trips.

        @param array calls  An array of call requests
        @return array result  An array of results
        Nc                    |r	  |d                     }n`# t           $ r}|j        |j        d}Y d }~nBd }~w t          j                    }|d         d|d         }t
          j        d|z   d}Y nxY w|t          ur*|                    d           |	                    |           |sQ| rN|                     d          }|
                    dd           }|
                    dg           }		 |t          t
          j        d          |d	k    rt          t
          j        d
          t          j                  }
t          |
||	          }n`# t           $ r}|j        |j        d}Y d }~nBd }~w t          j                    }|d         d|d         }t
          j        d|z   d}Y nxY wt          |t           j                  r|	                    |           n|	                    |           |s| N|s| rt          S |S )Nr   )	faultCodefaultString:r   zFAILED: 
methodNameparamszNo methodNamezsystem.multicallz$Recursive system.multicall forbidden)rE   rA   rG   sysexc_infor   r1   r   popr   getr)   AttrDictr   traverser   typesFunctionType)remaining_calls	callbacksresultsrd   excinfoerrmsgcallr   r   rootrH   s              r<   multiz4SystemNamespaceRPCInterface.multicall.<locals>.multi   s   
  *	A(IaLNNEE 6 6 6*-(,/H6 6EEEEEEA<>>D(,Qa9F*0-,6,?A AEEE,,MM!$$$NN5))) ! *o *&**1--xxd33(B//A|&v'B+- - -111&v'BBD D D $DO44D$T488EE 6 6 6*-(,/H6 6EEEEEEA<>>D(,Qa9F*0-,6,?A AEEE eU%788 *$$U++++NN5)))7 ! *o *<  O ##s+    
A34=A31A!E 
F0E11=F0g?)rV   r   )rH   callsr   r   r   r   rd   s   `      r<   	multicallz%SystemNamespaceRPCInterface.multicall   sq      (	 #2%!7	 7	 7	 7	 7	 7	p  L  LLr;   N)	r%   r&   r'   rJ   r   r   r   r   r   r:   r;   r<   r   r      ss        ) ) )    
5 
5 
55 5 52Q Q Q Q Qr;   r   c                       e Zd Zd ZdS )r   c                 ,    |                      |          S rN   )r   )rH   r   s     r<   __getattr__zAttrDict.__getattr__3  s    xx~~r;   N)r%   r&   r'   r   r:   r;   r<   r   r   1  s#            r;   r   c                       e Zd Zd ZdS )RootRPCInterfacec                 8    |D ]\  }}t          | ||           d S rN   )setattr)rH   subinterfacesr   rpcinterfaces       r<   rJ   zRootRPCInterface.__init__7  s5    "/ 	. 	.D,D$----	. 	.r;   N)r%   r&   r'   rJ   r:   r;   r<   r   r   6  s#        . . . . .r;   r   c                     t          |           }|t          j        k     rt          j        }n|t          j        k    rt          j        }|S rN   )intr   MININTMAXINT)rd   is     r<   
capped_intr   ;  s@    E

A9	
Y		Hr;   c                 T    t          j         t          j        | d          d d          S )Nz%Y%m%dT%H:%M:%Sr   )datetimetimestrptimerG   s    r<   make_datetimer   C  s+    	t.	/	/	3 r;   c                   f    e Zd ZdZdZd d d d d d d	 d
 d d d dZd Zd Zd Zd Z	d Z
dS )supervisor_xmlrpc_handlerz/RPC2zSupervisor XML-RPC Handlerc                 *    t          | j                  S rN   r   rG   xs    r<   <lambda>z"supervisor_xmlrpc_handler.<lambda>M  s    QV r;   c                 *    t          | j                  S rN   r   r   s    r<   r   z"supervisor_xmlrpc_handler.<lambda>N  s    AF r;   c                     | j         dk    S )N1r   r   s    r<   r   z"supervisor_xmlrpc_handler.<lambda>O  s    QVs] r;   c                     | j         pdS NrX   r   r   s    r<   r   z"supervisor_xmlrpc_handler.<lambda>P  s    AFLb r;   c                 *    t          | j                  S rN   )rU   rG   r   s    r<   r   z"supervisor_xmlrpc_handler.<lambda>Q  s    E!&MM r;   c                 *    t          | j                  S rN   )r   rG   r   s    r<   r   z"supervisor_xmlrpc_handler.<lambda>R  s    mAF&;&; r;   c                     | d         j         S Nr   r   r   s    r<   r   z"supervisor_xmlrpc_handler.<lambda>S      1Q49 r;   c                     d | D             S )Nc                     g | ]	}|j         
S r:   r   .0vs     r<   
<listcomp>z6supervisor_xmlrpc_handler.<lambda>.<locals>.<listcomp>T  s    ---a16---r;   r:   r   s    r<   r   z"supervisor_xmlrpc_handler.<lambda>T  s    --1--- r;   c                 4    t          d | D                       S )Nc                 4    g | ]\  }}|j         pd |j         fS )rX   r   )r   kr   s      r<   r   z6supervisor_xmlrpc_handler.<lambda>.<locals>.<listcomp>U  s)    !G!G!GTQ16<R"8!G!G!Gr;   )dictr   s    r<   r   z"supervisor_xmlrpc_handler.<lambda>U  s    D!G!GQ!G!G!GHH r;   c                 b    t          t          t          | j        pd                              S r   )r   r
   r   rG   r   s    r<   r   z"supervisor_xmlrpc_handler.<lambda>V  s$    Il8AFLb3I3I&J&JKK r;   c                     | d         j         S r   r   r   s    r<   r   z"supervisor_xmlrpc_handler.<lambda>W  r   r;   )r   i4booleanstringdoublezdateTime.iso8601arraydatastructbase64r   c                 <    t          |          | _        || _        d S rN   )r   r   supervisord)rH   r	  r   s      r<   rJ   z"supervisor_xmlrpc_handler.__init__Z  s     ,];;&r;   c                    d x}}t          t          |                    D ]\  }}| j                            |j                  }|r' ||          }|                                 ||_        M|j        dk    rD	 |d         j        }n# t          $ r |j        pd}Y nw xY w|                                 ||_        |j        dk    r|j        }|j        dk    rt          d |D                       }||fS )Nrd   r   rX   r   r   c                     g | ]	}|j         
S r:   r   r   s     r<   r   z3supervisor_xmlrpc_handler.loads.<locals>.<listcomp>p  s    5551555r;   )	r   r   unmarshallersr   tagclearrG   
IndexErrorr   )rH   r  r   r   actionelem
unmarshalls          r<   loadszsupervisor_xmlrpc_handler.loads^  s   %htnn55 	7 	7LFD+//99J 7!z$''

 		W$$+7<DD! + + +9?DDD+

 		\))X%%5555566v~s   :BBBc                 @    |j                             | j                  S rN   )urir   path)rH   rS   s     r<   matchzsupervisor_xmlrpc_handler.matchs  s    {%%di000r;   c                    | j         j        j        }	 	 t          r|                    dd          }|                     |          \  }}n6#  |                    d|d           |                    d           Y d S xY w|s0|                    d|d           |                    d           d S |d}	 |                    d|z             |                     ||          }|                    d	|z             n[# t          $ rN}t          j        |j        |j                  }|                    d
||j        |j        fz             Y d }~nd }~ww xY wt          |t          j                  r'|j        j        } |t'          ||                     d S t)          t+          |                    }	d|d<   t-          |	          |d<   |                    |	           |                                 d S #  t3          j                    }
|                    d|d|
           |                    d           Y d S xY w)NasciixmlcharrefreplacezXML-RPC request data z is invalid: unmarshallablei  z is invalid: no method namer:   zXML-RPC method called: %s()z)XML-RPC method %s() returned successfullyz+XML-RPC method %s() returned fault: [%d] %srj   rk   rl   z#Handling XML-RPC request with data z! raised an unexpected exception: rY   )r	  optionsra   r   encoder  rc   tracer   rE   r   rZ   rA   rG   r   r   r   r_   ry   rP   r   r[   ro   rp   doner]   r^   critical)rH   r  rS   ra   r   r   rd   re   pushproducerrf   rg   s              r<   continue_requestz*supervisor_xmlrpc_handler.continue_requestv  s   !)0B	
  E;;w0CDDD!%D!1!1TT   c"""  TT   c""" ~
):VCDDD		&&11H#$ % % % % ) ) )!#(;;JHchN( ( ) ) ) ) ) ) ) )) %!344   'A3GUCCDDDDD  u 5 566*4',/II()T"""	%''BOOO#'44-  
 MM#s^   5A
 	G8 
0A=:G8 =3G8 2G8 7AC> =G8 >
EAEG8 EAG8 AG8 8AI c                 .    t          | j        ||          S rN   )r   r   )rH   r   r   s      r<   r   zsupervisor_xmlrpc_handler.call  s    )66:::r;   N)r%   r&   r'   r  IDENTr  rJ   r  r  r!  r   r:   r;   r<   r   r   H  s        D(E %$##**(());;$$--HHKK$$
 
M' ' '  *1 1 1E E EN; ; ; ; ;r;   r   c                 $   |                     d          }t          |          dk    rt          t          j                  |\  }}|                    d          rt          t          j                  t          | |d           }|t          t          j                  t          ||d           }t          |t          j	                  st          t          j                  	  || S # t          $ r t          t          j                  w xY w)Nr   r   r   )splitro   rE   r   r(   r   r@   r   r   
MethodType	TypeErrorr)   )obr   r   dotted_partsr   r   r   s          r<   r   r     s   <<$$L
<Av,---$Iv  .v,---2y$//Lv,---<..DdE,-- .v,---4tV} 4 4 4v23334s   &C+ +$Dc                   ,    e Zd ZdZdZddZd ZddZdS )	SupervisorTransportz
    Provides a Transport for xmlrpclib that uses
    httplib.HTTPConnection in order to support persistent
    connections.  Also support basic auth and UNIX domain socket
    servers.
    Nc                 v   t           j                            |            || _        || _        d| _        || _        |                    d          r5t          j        |          }|j	        |j
        }}|d}||fd}|| _        d S |                    d          r|fd}|| _        d S t          d|z            )NFzhttp://r!   c                 ,    t          j        | |          S rN   )r   HTTPConnection)hostports     r<   get_connectionz4SupervisorTransport.__init__.<locals>.get_connection  s    -dD999r;   zunix://c                 B    t          d          }| dd          |_        |S )N	localhost   )UnixStreamHTTPConnection
socketfile)	serverurlconns     r<   r1  z4SupervisorTransport.__init__.<locals>.get_connection  s%     0<<"+ABB-r;   z!Unknown protocol for serverurl %s)r   	TransportrJ   usernamepasswordverboser7  r   r   hostnamer0  _get_connection
ValueError)rH   r:  r;  r7  r   r/  r0  r1  s           r<   rJ   zSupervisorTransport.__init__  s    $$T***  "	** 	N&y11F&+$D|$(t : : : :#1D   !!),, 		N)2     $2D   @9LMMMr;   c                 X    | j         r"| j                                          d | _         d S d S rN   )r~   rn   rL   s    r<   rn   zSupervisorTransport.close  s5    ? 	#O!!###"DOOO	# 	#r;   r   c                    t          |          }| j        s|                                 | _        | j        ddd| _        | j        z| j        s| j        d| j        }t          t          t          |                              }|	                    dd          }|	                    dd          }d|z  | j        d<   t          t          |                    | j        d<   | j                            d	||| j                   | j                                        }|j        d
k    rD| j                                         d | _        t!          j        ||z   |j        |j        d          |                                }t          |          }|                    dd          }|                                 \  }	}
|	                    |           |	                                 |
                                S )Nrj   )z
User-Agentrk   Acceptr   
rX   zBasic %sAuthorizationrl   POST   r  r  )r   r~   r>  
user_agentheadersr:  r;  r   r	   replacer   ro   rS   r\   statusrn   r   ProtocolErrorreasonreadr  	getparserfeed)rH   r/  handlerrequest_bodyr<  	unencodedencodedrr  pus              r<   rS   zSupervisorTransport.request   s   -- 	E"2244DO#!+$ DL }(T]-F'+}}}dmmD	#L)1D1D$E$EFF!//$33!//&"550:W0D_-),S->->)?)?%&t|LLLO''))8s??O!!###"DO)$.*+(*+(*,/ / / vvxx {{7$788~~1	t				wwyyr;   )NNN)r   )r%   r&   r'   r   r~   rJ   rn   rS   r:   r;   r<   r+  r+    s`          JN N N N2# # #
' ' ' ' ' 'r;   r+  c                       e Zd Zd ZdS )r5  c                     t          j         t           j        t           j                  | _        | j                            | j                   d S rN   )socketAF_UNIXSOCK_STREAMsockconnectr6  rL   s    r<   r]  z UnixStreamHTTPConnection.connect*  s8    M&.&2DEE		$/*****r;   N)r%   r&   r'   r]  r:   r;   r<   r5  r5  )  s#        + + + + +r;   r5  c           
      "   g }d}d}d}dx}}g }|                      d          D ]<}|                                }|                    d          r|                    ||||d                    |          f           |                     dd          }	t          |	          dk    rd}d}g }nt          |	          dk    r|	d         }d}g }ndt          |	          dk    r|	d         }|	d         }g }n>t          |	          d	k    r+|	d         }|	d         }|	d                                         g}|	d         dd         }|}n|r|                    |           |dz  }>|                    ||||d                    |          f           |S )
z6 Parse documentation strings into JavaDoc-like tokens Nr   rC  @r   r   rX   r   r   )r%  stripr   r   joinro   lstrip)
commenttagsr  datatyper   
tag_linenolinenotag_textlinepartss
             r<   r   r   /  s    D
CHDJHd##  zz||??3 	&KKS(D$))H:M:MNOOOJJtQ''E5zzQUq 8Uq 8QxUq 8Qx!!HOO--.(122,CJJ &%%%!KKS(D$))H2E2EFGGGKr;   ).r   r   rY  r   r   r]   r   xml.etree.ElementTreer   supervisor.compatr   r   r   r   r   r	   r
   r   r   supervisor.medusa.http_serverr    supervisor.medusa.xmlrpc_handlerr   supervisor.medusar   supervisor.httpr   r   rC   	ExceptionrE   rP   r[   r   r   r   r   r   r   r   r   r9  r+  r.  r5  r   r:   r;   r<   <module>rr     sC    				  



       + + + + + + ' ' ' ' ' ' & & & & & & & & & & & & & & & & & & ' ' ' ' ' ' * * * * * * * * * * * * % % % % % % ! ! ! ! ! ! 4 4 4 4 4 4 ; ; ; ; ; ; ' ' ' ' ' ' ( ( ( ( ( (       (  ; ; ; ; ;y ; ; ;P3 P3 P3 P3 P3 P3 P3 P3d  U U U U U U U Un    t   
. . . . . . . .
    
v; v; v; v; v; v; v; v;p4 4 42N N N N N)- N N N`+ + + + +w5 + + +) ) ) ) )r;   