o
    j                     @   s   d 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 ddlmZ G dd deZG dd deZG dd deZ G dd de	Z!dS )z"The Twisted Http Client transport.    )__version__)six)RemoteService)RemoteProcedureBase)
ClientBase)
implements)reactor)Deferred)Protocol)error)Agent)ResponseDone)IBodyProducer)UNKNOWN_LENGTH)Headersc                   @   sF   e Zd Zejree dZdd Zdd Z	dd Z
dd	 Zd
d ZdS )	_ProducerNc                 C   sV   d| _ zt| tdd |D | _t|| _W n ty$   t| _Y nw t | _	dS )z#:param body: an iterable of stringsFc                 S   s   g | ]}t |qS  )len).0fragmentr   r   ]/var/www/html/LicenciasMiG/venv/lib/python3.10/site-packages/spyne/client/twisted/__init__.py
<listcomp>9   s    z&_Producer.__init__.<locals>.<listcomp>N)
_Producer__pausedr   sumlengthiterbody	TypeErrorr   r	   	_deferred)selfr   r   r   r   __init__1   s   
z_Producer.__init__c                 C   s   || _ |   | jS N)consumerresumeProducingr   )r   r"   r   r   r   startProducingA   s   z_Producer.startProducingc                 C   s:   d| _ | jD ]}| j| | j r d S q| jd  d S )NF)r   r   r"   writer   callback)r   chunkr   r   r   r#   H   s   
z_Producer.resumeProducingc                 C   
   d| _ d S NTr   r   r   r   r   pauseProducingQ      
z_Producer.pauseProducingc                 C   r(   r)   r*   r+   r   r   r   stopProducingT   r-   z_Producer.stopProducing)__name__
__module____qualname__r   PY2r   r   r   r    r$   r#   r,   r.   r   r   r   r   r   +   s    	r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	_Protocolc                 C   s   || _ t | _d S r!   )ctxr	   deferred)r   r4   r   r   r   r    Y   s   z_Protocol.__init__c                 C   s   | j j| d S r!   )r4   	in_stringappend)r   bytesr   r   r   dataReceived]   s   z_Protocol.dataReceivedc                 C   s*   | tr| jd  d S | j| d S r!   )checkr   r5   r&   errback)r   reasonr   r   r   connectionLost`   s   
z_Protocol.connectionLostN)r/   r0   r1   r    r9   r=   r   r   r   r   r3   X   s    r3   c                   @   s   e Zd Zdd ZdS )_RemoteProcedurec              	      s   j \_j|| j g j_tt}|djt	ddt
  gitjj}fdd  fdd}||S )Ns   POSTs
   User-Agents   Spyne Twisted Http Client %sc                    s>      j  jjd ur jj|jdkrt|j jjS )Ni  )get_in_objectr4   in_errorcodewerrorError	in_object)_responser+   r   r   _process_response}   s   
z4_RemoteProcedure.__call__.<locals>._process_responsec                    s"   t j}| | |j | S r!   )r3   r4   deliverBodyr5   addCallback)rF   prG   r   r   r   _cb_request   s   

z._RemoteProcedure.__call__.<locals>._cb_request)contextsr4   get_out_objectget_out_stringr6   r   r   requesturlr   VERSIONencoder   
out_stringrI   )r   argskwargsagentdrL   r   rK   r   __call__h   s   


z_RemoteProcedure.__call__N)r/   r0   r1   rY   r   r   r   r   r>   g   s    r>   c                       s   e Zd Z fddZ  ZS )TwistedHttpClientc                    s$   t t| || tt||| _d S r!   )superrZ   r    r   r>   service)r   rQ   app	__class__r   r   r       s   zTwistedHttpClient.__init__)r/   r0   r1   r    __classcell__r   r   r^   r   rZ      s    rZ   N)"__doc__spyner   rR   
spyne.utilr   spyne.clientr   r   r   zope.interfacer   twisted.internetr   twisted.internet.deferr	   twisted.internet.protocolr
   twisted.webr   rB   twisted.web.clientr   r   twisted.web.iwebr   r   twisted.web.http_headersr   objectr   r3   r>   rZ   r   r   r   r   <module>   s(   -)