Ë
    ojV  ã                   ón   — d Z ddlZddlmZ ddlmZmZmZ  G d„ dej                  «      Z	 G d„ d«      Z
y)	z¸
SOAP support for twisted.web.

Requires SOAPpy 0.10.1 or later.

Maintainer: Itamar Shtull-Trauring

Future plans:
SOAPContext support of some kind.
Pluggable method lookup policies.
é    N)Údefer)ÚclientÚresourceÚserverc                   ó>   — e Zd ZdZdZdZd„ Zd„ Zd„ Zd„ Z	d„ Z
dd	„Zy
)ÚSOAPPublisherz»Publish SOAP methods.

    By default, publish methods beginning with 'soap_'. If the method
    has an attribute 'useKeywords', it well get the arguments passed
    as keyword args.
    é   zUTF-8c                 ó"   — t        | d|z  d«      S )z»Lookup published SOAP function.

        Override in subclasses. Default behaviour - publish methods
        starting with soap_.

        @return: callable or None if not found.
        zsoap_%sN)Úgetattr)ÚselfÚfunctionNames     ú2/usr/lib/python3/dist-packages/twisted/web/soap.pyÚlookupFunctionzSOAPPublisher.lookupFunction(   s   € ô �t˜Y¨Ñ5°tÓ<Ð<ó    c                 óÀ  — |j                   j                  «       }t        j                  |ddd«      \  }}}}|j                  |j
                  |j                  }	}}t        |«      r |«       }t        |	«      r |	«       }	| j                  |«      }
|
s"| j                  ||«       t        j                  S t        |
d«      r?i }|	j                  «       D ]  \  }}||t        |«      <   Œ t        j                   |
fi |¤Ž}nt        j                   |
g|¢­Ž }|j#                  | j$                  ||«       |j'                  | j(                  ||«       t        j                  S )zHandle a SOAP command.r	   ÚuseKeywords)ÚcontentÚreadÚSOAPpyÚparseSOAPRPCÚ_nameÚ_aslistÚ_asdictÚcallabler   Ú_methodNotFoundr   ÚNOT_DONE_YETÚhasattrÚitemsÚstrr   ÚmaybeDeferredÚaddCallbackÚ
_gotResultÚ
addErrbackÚ	_gotError)r   ÚrequestÚdataÚpÚheaderÚbodyÚattrsÚ
methodNameÚargsÚkwargsÚfunctionÚkeywordsÚkÚvÚds                  r   ÚrenderzSOAPPublisher.render2   s.  € à�‰×#Ñ#Ó%ˆä!'×!4Ñ!4°T¸1¸aÀÓ!CÑˆˆ6�4˜à#$§7¡7¨A¯I©I°q·y±y˜&�Dˆ
ô �DŒ>Ù“6ˆDÜ�FÔÙ“XˆFà×&Ñ& zÓ2ˆáØ× Ñ  ¨*Ô5Ü×&Ñ&Ð&ä�x Ô/Ø�Ø"ŸL™L›Nò )‘D�A�qØ'(�HœS ›VÒ$ð)ä×'Ñ'¨Ñ=°HÑ=‘ä×'Ñ'¨Ð8°4Ò8�à	�‰�d—o‘o w°
Ô;Ø	�‰�T—^‘^ W¨jÔ9Ü×"Ñ"Ð"r   c                 óÒ   — t        j                  t        j                  dt         j                  j                  z  d|z  «      | j
                  ¬«      }| j                  ||d¬«       y )Nz	%s:ClientzMethod %s not found©Úencodingéô  ©Ústatus)r   Ú	buildSOAPÚ	faultTypeÚNSÚENV_Tr6   Ú_sendResponse)r   r%   r+   Úresponses       r   r   zSOAPPublisher._methodNotFoundR   sX   € Ü×#Ñ#Ü×ÑØœfŸi™iŸo™oÑ-Ð/DÀzÑ/Qóð —]‘]ô	
ˆð 	×Ñ˜7 H°SÐÕ9r   c                 ó°   — t        |t        j                  «      sd|i}t        j                  d|z  |i| j                  ¬«      }| j                  ||«       y )NÚResultz
%sResponse)Úkwr6   )Ú
isinstancer   ÚvoidTyper:   r6   r>   )r   Úresultr%   r+   r?   s        r   r"   zSOAPPublisher._gotResult[   sO   € Ü˜&¤&§/¡/Ô2Ø Ð'ˆFÜ×#Ñ#Ø˜zÑ)¨6Ð2¸T¿]¹]ô
ˆð 	×Ñ˜7 HÕ-r   c                 ó(  — |j                   }t        |t        j                  «      r|}n4t        j                  dt        j                  j
                  z  d|z  «      }t        j                  || j                  ¬«      }| j                  ||d¬«       y )Nz	%s:ServerzMethod %s failed.r5   r7   r8   )	ÚvaluerC   r   r;   r<   r=   r:   r6   r>   )r   Úfailurer%   r+   ÚeÚfaultr?   s          r   r$   zSOAPPublisher._gotErrorc   su   € Ø�M‰MˆÜ�aœ×)Ñ)Ô*Ø‰Eä×$Ñ$ØœfŸi™iŸo™oÑ-Ð/BÀZÑ/OóˆEô ×#Ñ# E°D·M±MÔBˆØ×Ñ˜7 H°SÐÕ9r   c                 ó  — |j                  |«       | j                  �d| j                  z  }nd}|j                  d|«       |j                  dt        t	        |«      «      «       |j                  |«       |j                  «        y )Nztext/xml; charset="%s"útext/xmlzContent-typezContent-length)ÚsetResponseCoder6   Ú	setHeaderr   ÚlenÚwriteÚfinish)r   r%   r?   r9   ÚmimeTypes        r   r>   zSOAPPublisher._sendResponsen   sm   € Ø×Ñ Ô'à�=‰=Ð$Ø/°$·-±-Ñ?‰Hà!ˆHØ×Ñ˜.¨(Ô3Ø×ÑÐ*¬C´°H³Ó,>Ô?Ø�‰�hÔØ�‰Õr   N)éÈ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚisLeafr6   r   r3   r   r"   r$   r>   © r   r   r   r      s4   „ ñð €Fð €Hò=ò#ò@:ò.ò	:ô
r   r   c                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)ÚProxya  A Proxy for making remote SOAP calls.

    Pass the URL of the remote SOAP server to the constructor.

    Use proxy.callRemote('foobar', 1, 2) to call remote method
    'foobar' with args 1 and 2, proxy.callRemote('foobar', x=1)
    will call foobar with named argument 'x'.
    Nc                 ó.   — || _         || _        || _        y )N)ÚurlÚ	namespacer(   )r   r]   r^   r(   s       r   Ú__init__zProxy.__init__†   s   € ØˆŒØ"ˆŒØˆ�r   c                 ó†   — t        j                  |«      }t        |d«      r|j                  S t	        |«      dk(  r|d   S |S )NrA   r	   r   )r   r   r   rA   rO   )r   rE   s     r   Ú_cbGotResultzProxy._cbGotResult‹   sC   € Ü×$Ñ$ VÓ,ˆÜ�6˜8Ô$Ø—=‘=Ð Ü�‹[˜AÒð ˜!‘9ÐàˆMr   c                 óÜ   — t        j                  |||| j                  | j                  ¬«      }t	        j
                  | j                  |dd|dœ¬«      j                  | j                  «      S )N)r,   rB   Úmethodr(   r^   ÚPOSTrL   )zcontent-typeÚ
SOAPAction)Úpostdatarc   Úheaders)	r   r:   r(   r^   r   ÚgetPager]   r!   ra   )r   rc   r,   r-   Úpayloads        r   Ú
callRemotezProxy.callRemote™   sc   € Ü×"Ñ"ØØØØ—;‘;Ø—n‘nô
ˆô �~‰~Ø�H‰HØØØ%/¸vÑFô	
÷
 ‰+�d×'Ñ'Ó
(ð	)r   )NN)rT   rU   rV   rW   r_   ra   rj   rY   r   r   r[   r[   {   s   „ ñóò
ó)r   r[   )rW   r   Útwisted.internetr   Útwisted.webr   r   r   ÚResourcer   r[   rY   r   r   ú<module>rn      s9   ðñ
ó å "÷ 1Ñ 0ô]�H×%Ñ%ô ]÷@+)ò +)r   