+
    üÐjç<  ã                  ó  € R t ^ RIHt RR.t^ RIHt ^ RIHtHtH	t	 ^ RI
HtHt ^ RIHt ^ RIHtHt ^ R	IHt ^ R
IHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIH t  ^ RI!H"t" ^ RI#H$t$H%t%H&t& R U u. uF	  p RV  R2NK  	  up t'Rt(]' Uu. uF  qPS                  R4      NK  	  upt*](PS                  R4      t+]! ]4       ! R R4      4       t, ! R R4      t- ! R R4      t. ! R R]P^                  4      t0R# u up i u upi )z2
Helpers related to HTTP requests, used by tests.
)ÚannotationsÚDummyChannelÚDummyRequest)ÚBytesIO)ÚDictÚListÚOptional)ÚimplementerÚverify)ÚVersion)ÚIPv4AddressÚIPv6Address)ÚDeferred)ÚIAddressÚISSLTransport)ÚClock)Ú
deprecated)Úunittest)ÚFOUND)ÚHeaders)ÚResource)ÚNOT_DONE_YETÚSessionÚSiteÚFooÚbarzFoo barÚasciic                  ó   € ] tR t^'tRtRtR# )ÚNullAddressz'
A null implementation of L{IAddress}.
© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú@/usr/lib/python3/dist-packages/twisted/web/test/requesthelper.pyr   r   '   s   † õr&   r   c                  óæ   € ] tR t^.t ! R R4      t]! ]4       ! R R]4      4       t]! ]	! 4       4      t
RR ltR tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tRtR# )r   c                  óR   € ] tR t^/t^PtRtRR ltR tR tR t	R t
R tR	 tR
 tRtR# )ÚDummyChannel.TCPFNc                	ó`   € Vf   \        RRR4      pWn        \        4       V n        . V n        R # )NÚTCPz192.168.1.1i80  )r   Ú_peerr   ÚwrittenÚ	producers©ÚselfÚpeers   &&r'   Ú__init__ÚDummyChannel.TCP.__init__3   s*   € ØŠ|Ü" 5¨-¸Ó?�ØŒJÜ"›9ˆDŒLØˆDŽNr&   c                	ó   € V P                   # ©N)r-   ©r1   s   &r'   ÚgetPeerÚDummyChannel.TCP.getPeer:   s   € Ø—:‘:Ðr&   c                	ó†   € \        V\        4      '       g   \        R V: 24      hV P                  P	                  V4       R# )z)Can only write bytes to a transport, not N)Ú
isinstanceÚbytesÚ	TypeErrorr.   Úwrite©r1   Údatas   &&r'   r>   ÚDummyChannel.TCP.write=   s4   € Ü˜d¤E×*Ò*ÜÐ"KÈDÉ8Ð TÓUÐUØ�L‰L×Ñ˜tÖ$r&   c                	ó:   € V F  pV P                  V4       K  	  R # r6   )r>   )r1   Úiovecr@   s   && r'   ÚwriteSequenceÚDummyChannel.TCP.writeSequenceB   s   € Û�Ø—
‘
˜4Ö ó r&   c                	ó0   € \        R RV P                  4      # )r,   z10.0.0.1)r   Úportr7   s   &r'   ÚgetHostÚDummyChannel.TCP.getHostF   s   € Ü˜u j°$·)±)Ó<Ð<r&   c                	ó>   € V P                   P                  W34       R # r6   )r/   Úappend©r1   ÚproducerÚ	streamings   &&&r'   ÚregisterProducerÚ!DummyChannel.TCP.registerProducerI   s   € Ø�N‰N×!Ñ! 8Ð"7Ö8r&   c                	ó   € R # r6   r   r7   s   &r'   ÚunregisterProducerÚ#DummyChannel.TCP.unregisterProducerL   s   € Ùr&   c                	ó   € R V n         R# )TN)Údisconnectedr7   s   &r'   ÚloseConnectionÚDummyChannel.TCP.loseConnectionO   s
   € Ø $ˆDÖr&   )r-   rU   r/   r.   r6   )r    r!   r"   r#   rG   rU   r3   r8   r>   rD   rH   rO   rR   rV   r%   r   r&   r'   r,   r*   /   s4   † ØˆØˆô	 ò	ò	%ò
	!ò	=ò	9ò	ö	%r&   r,   c                  ó@   € ] tR t^RtR tR tR tR tR tR t	R t
RtR	# )
ÚDummyChannel.SSLc                	ó   € R # r6   r   r7   s   &r'   ÚabortConnectionÚ DummyChannel.SSL.abortConnectionT   ó   € ár&   c                	ó   € R # r6   r   r7   s   &r'   ÚgetTcpKeepAliveÚ DummyChannel.SSL.getTcpKeepAliveX   r]   r&   c                	ó   € R # r6   r   r7   s   &r'   ÚgetTcpNoDelayÚDummyChannel.SSL.getTcpNoDelay\   r]   r&   c                	ó   € R # r6   r   r7   s   &r'   ÚloseWriteConnectionÚ$DummyChannel.SSL.loseWriteConnection`   r]   r&   c                	ó   € R # r6   r   ©r1   Úenableds   &&r'   ÚsetTcpKeepAliveÚ DummyChannel.SSL.setTcpKeepAlived   r]   r&   c                	ó   € R # r6   r   rh   s   &&r'   ÚsetTcpNoDelayÚDummyChannel.SSL.setTcpNoDelayh   r]   r&   c                	ó   € R # r6   r   r7   s   &r'   ÚgetPeerCertificateÚ#DummyChannel.SSL.getPeerCertificatel   r]   r&   r   N)r    r!   r"   r#   r[   r_   rb   re   rj   rm   rp   r%   r   r&   r'   ÚSSLrY   R   s%   † ò	ò	ò	ò	ò	ò	ö	r&   rr   Nc                	ó2   € V P                  V4      V n        R # r6   )r,   Ú	transportr0   s   &&r'   r3   ÚDummyChannel.__init__r   s   € ØŸ™ $›ˆŽr&   c                	ó   € R # r6   r   )r1   Úrequests   &&r'   ÚrequestDoneÚDummyChannel.requestDoneu   ó   € Ùr&   c                	óv  € \        V\        4      '       d0   VP                  4        UUUu. uF  w  rVV F  quV3NK  	  K  	  ppppVR ,           V,           R ,           V,           R,           pV.p	V	P                  R V 4       4       V	P	                  R4       V P
                  P                  V	4       R# u upppi )ó    ó   
c              3  óT   "  € T F  w  rVR ,           V,           R,           x € K   	  R# 5i)s   : r}   Nr   )Ú.0ÚnameÚvalues   &  r'   Ú	<genexpr>Ú,DummyChannel.writeHeaders.<locals>.<genexpr>   s%   é € ÐXÑPWÁÀ˜d U�l¨UÕ2°W×<Ò<ÓPWùs   ‚&(N)r;   r   ÚgetAllRawHeadersÚextendrK   rt   rD   )
r1   ÚversionÚcodeÚreasonÚheadersÚkÚvaluesÚvÚresponse_lineÚheaderSequences
   &&&&&     r'   ÚwriteHeadersÚDummyChannel.writeHeadersx   s¡   € Ü�gœw×'Ò'à*1×*BÑ*BÔ*DõÙ*D™;˜AËfÈ�A“Éf‘Ñ*Dð ò ð   $�¨Õ-°Õ4°vÕ=ÀÕGˆØ'˜ˆØ×ÑÑXÑPWÓXÔXØ×Ñ˜gÔ&Ø�‰×$Ñ$ ^Ö4ùôs   «B4c                	ó6   € V P                   P                  4       # r6   )rt   r8   r7   s   &r'   r8   ÚDummyChannel.getPeerƒ   ó   € Ø�~‰~×%Ñ%Ó'Ð'r&   c                	ó6   € V P                   P                  4       # r6   )rt   rH   r7   s   &r'   rH   ÚDummyChannel.getHost†   r“   r&   c                	ó<   € V P                   P                  W4       R # r6   )rt   rO   rL   s   &&&r'   rO   ÚDummyChannel.registerProducer‰   s   € Ø�‰×'Ñ'¨Ö<r&   c                	ó:   € V P                   P                  4        R # r6   )rt   rR   r7   s   &r'   rR   ÚDummyChannel.unregisterProducerŒ   s   € Ø�‰×)Ñ)Ö+r&   c                	ó<   € V P                   P                  V4       R # r6   )rt   r>   r?   s   &&r'   r>   ÚDummyChannel.write�   s   € Ø�‰×Ñ˜TÖ"r&   c                	ó<   € V P                   P                  V4       R # r6   )rt   rD   )r1   rC   s   &&r'   rD   ÚDummyChannel.writeSequence’   s   € Ø�‰×$Ñ$ UÖ+r&   c                	ó:   € V P                   P                  4        R # r6   )rt   rV   r7   s   &r'   rV   ÚDummyChannel.loseConnection•   s   € Ø�‰×%Ñ%Ö'r&   c                	ó   € R # r6   r   r7   s   &r'   Ú
endRequestÚDummyChannel.endRequest˜   rz   r&   c                	óB   € \        V P                  V P                  4      # r6   )r;   rt   rr   r7   s   &r'   ÚisSecureÚDummyChannel.isSecure›   s   € Ü˜$Ÿ.™.¨$¯(©(Ó3Ð3r&   c                	ó   € R # r6   r   r7   s   &r'   r[   ÚDummyChannel.abortConnectionž   ó   € ár&   c                	ó   € R # r6   r   r7   s   &r'   r_   ÚDummyChannel.getTcpKeepAlive¢   r¨   r&   c                	ó   € R # r6   r   r7   s   &r'   rb   ÚDummyChannel.getTcpNoDelay¦   r¨   r&   c                	ó   € R # r6   r   r7   s   &r'   re   Ú DummyChannel.loseWriteConnectionª   r¨   r&   c                	ó   € R # r6   r   r7   s   &r'   rj   ÚDummyChannel.setTcpKeepAlive®   r¨   r&   c                	ó   € R # r6   r   r7   s   &r'   rm   ÚDummyChannel.setTcpNoDelay²   r¨   r&   c                	ó   € R # r6   r   r7   s   &r'   rp   ÚDummyChannel.getPeerCertificate¶   r¨   r&   )rt   r6   )r    r!   r"   r#   r,   r	   r   rr   r   r   Úsiter3   rx   r�   r8   rH   rO   rR   r>   rD   rV   r¡   r¤   r[   r_   rb   re   rj   rm   rp   r%   r   r&   r'   r   r   .   sš   † ÷!%ñ !%ñF �Óôˆcó ó  ðñ: ‘“
Ó€Dô(òò	5ò(ò(ò=ò,ò#ò,ò(òò4òòòòòòör&   c                  ó0  € ] tR t^»t$ RtRtRtRtR]R&   R]R&   R]R	&   R]R
&   R]R&   R]R&   R t	R t
R+R R lltR tR tR tR,R ltR tR tR R ltR tR tR tR,R ltR tR  t]! ]! R!^^^ 4      R"R#7      R$ 4       tR% tR& tR' tR-R( ltR) t R*t!R# ).r   aÙ  
Represents a dummy or fake request. See L{twisted.web.server.Request}.

@ivar _finishedDeferreds: L{None} or a C{list} of L{Deferreds} which will
    be called back with L{None} when C{finish} is called or which will be
    errbacked if C{processingFailed} is called.

@type requestheaders: C{Headers}
@ivar requestheaders: A Headers instance that stores values for all request
    headers.

@type responseHeaders: C{Headers}
@ivar responseHeaders: A Headers instance that stores values for all
    response headers.

@type responseCode: C{int}
@ivar responseCode: The response code which was passed to
    C{setResponseCode}.

@type written: C{list} of C{bytes}
@ivar written: The bytes which have been written to the request.
s   http://dummy/s   GETNúOptional[IAddress]ÚclientzList[bytes]Úsitepathr.   ÚprepathzDict[bytes, List[bytes]]ÚargszList[Deferred[None]]Ú_finishedDeferredsc                ó\   € ^V n         V P                   '       d   VP                  4        K$  R# )zË
Call an L{IPullProducer}'s C{resumeProducing} method in a
loop until it unregisters itself.

@param prod: The producer.
@type prod: L{IPullProducer}

@param s: Whether or not the producer is streaming.
N)ÚgoÚresumeProducing)r1   ÚprodÚss   &&&r'   rO   ÚDummyRequest.registerProducerÜ   s%   € ð ˆŒØ�g�gˆgØ× Ñ Ö"ñ r&   c                	ó   € ^ V n         R# )é    N)r¾   r7   s   &r'   rR   ÚDummyRequest.unregisterProducerë   s	   € ØˆŽr&   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	é   Úpostpathzlist[bytes]ÚsessionzOptional[Session]r¸   r·   ÚreturnÚNoner   )Úformats   "r'   Ú__annotate__ÚDummyRequest.__annotate__î   s2   € ÷ 'ñ 'àð'ð #ð'ð #ð	'ð
 
ñ'r&   c                	ó$  € . V n         . V n        ^ V n        Wn        . V n        RV n        T;'       g    \        RR\        4       R7      V n        / V n	        \        4       V n        \        4       V n        RV n        . V n        RV n        RV n        R# )rÄ   Nó   0)rµ   ÚuidÚreactors   dummys   HTTP/1.0)r¹   r.   ÚfinishedrÈ   rº   rÉ   r   r   ÚprotoSessionr»   r   ÚrequestHeadersÚresponseHeadersÚresponseCoder¼   Ú_serverNameÚclientproto)r1   rÈ   rÉ   r¸   s   &&&&r'   r3   ÚDummyRequest.__init__î   s‚   € ð ˆŒØˆŒØˆŒØ ŒØˆŒØˆŒØ#×TÐT¤w°D¸dÌEËGÔ'TˆÔØˆŒ	Ü%›iˆÔÜ&›yˆÔØ ˆÔØ"$ˆÔØ#ˆÔØ&ˆÖr&   c                ó‚   € / pV P                   P                  4        F  w  r#VR,          WP                  4       &   K   	  V# )a0  
Return dictionary mapping the names of all received headers to the last
value received for each.

Since this method does not return all header information,
C{self.requestHeaders.getAllRawHeaders()} may be preferred.

NOTE: This function is a direct copy of
C{twisted.web.http.Request.getAllRawHeaders}.
éÿÿÿÿ)rÕ   r„   Úlower)r1   r‰   rŠ   rŒ   s   &   r'   ÚgetAllHeadersÚDummyRequest.getAllHeaders  s;   € ð ˆØ×'Ñ'×8Ñ8Ö:‰DˆAØ!" 2¥ˆG—G‘G“IÓñ ;àˆr&   c                óf   € V P                   P                  VP                  4       R.4      ^ ,          # )a  
Retrieve the value of a request header.

@type name: C{bytes}
@param name: The name of the request header for which to retrieve the
    value.  Header names are compared case-insensitively.

@rtype: C{bytes} or L{None}
@return: The value of the specified request header.
N)rÕ   ÚgetRawHeadersrÝ   )r1   r€   s   &&r'   Ú	getHeaderÚDummyRequest.getHeader  s*   € ð ×"Ñ"×0Ñ0°·±³À¸vÓFÀqÕIÐIr&   c                ó<   € V P                   P                  W4       R# )zATODO: make this assert on write() if the header is content-lengthN)rÖ   ÚaddRawHeader©r1   r€   r�   s   &&&r'   Ú	setHeaderÚDummyRequest.setHeader   s   € à×Ñ×)Ñ)¨$Ö6r&   c                	óª   € V P                   '       d   V P                   # V P                  '       d   Q R 4       hV P                  V n         V P                   # )z8Session cannot be requested after data has been written.)rÉ   r.   rÔ   )r1   ÚsessionInterfaces   &&r'   Ú
getSessionÚDummyRequest.getSession$  sG   € Ø�<�<ˆ<Ø—<‘<Ðà——�ð	FàEó	FØà×(Ñ(ˆŒØ�|‰|Ðr&   c                ó‚   € VP                  V 4      pV\        J d   R# V P                  V4       V P                  4        R# )aP  
Render the given resource as a response to this request.

This implementation only handles a few of the most common behaviors of
resources.  It can handle a render method that returns a string or
C{NOT_DONE_YET}.  It doesn't know anything about the semantics of
request methods (eg HEAD) nor how to set any particular headers.
Basically, it's largely broken, but sufficient for some tests at least.
It should B{not} be expanded to do all the same stuff L{Request} does.
Instead, L{DummyRequest} should be phased out and L{Request} (or some
other real code factored in a different way) used.
N)Úrenderr   r>   Úfinish)r1   ÚresourceÚresults   && r'   rî   ÚDummyRequest.render-  s2   € ð —‘ Ó&ˆØ”\Ó!ÙØ�
‰
�6ÔØ�‰Žr&   c                	ó~   € \        V\        4      '       g   \        R 4      hV P                  P	                  V4       R# )zwrite() only accepts bytesN)r;   r<   r=   r.   rK   r?   s   &&r'   r>   ÚDummyRequest.write@  s-   € Ü˜$¤×&Ò&ÜÐ8Ó9Ð9Ø�‰×Ñ˜DÖ!r&   c               ó   € V ^8„  d   QhRR/# )rÇ   rÊ   zDeferred[None]r   )rÌ   s   "r'   rÍ   rÎ   E  s   € ÷ ñ ˜nñ r&   c                óP   € \        4       pV P                  P                  V4       V# )z™
Return a L{Deferred} which is called back with L{None} when the request
is finished.  This will probably only work if you haven't called
C{finish} yet.
)r   r¼   rK   )r1   rÓ   s   & r'   ÚnotifyFinishÚDummyRequest.notifyFinishE  s$   € ô $,£:ˆØ×Ñ×&Ñ& xÔ0Øˆr&   c                ó°   € V P                   ^,           V n         V P                  e0   V P                  pRV n        V F  pVP                  R4       K  	  R# R# )ze
Record that the request is finished and callback and L{Deferred}s
waiting for notification of this.
N)rÓ   r¼   Úcallback)r1   Ú	observersÚobss   &  r'   rï   ÚDummyRequest.finishO  sN   € ð
 Ÿ™¨Õ)ˆŒØ×"Ñ"Ò.Ø×/Ñ/ˆIØ&*ˆDÔ#Û �Ø—‘˜TÖ"ó !ñ /r&   c                ó€   € V P                   e0   V P                   pRV n         V F  pVP                  V4       K  	  R# R# )z;
Errback and L{Deferreds} waiting for finish notification.
N)r¼   Úerrback)r1   rˆ   rû   rü   s   &&  r'   ÚprocessingFailedÚDummyRequest.processingFailed[  s>   € ð ×"Ñ"Ò.Ø×/Ñ/ˆIØ&*ˆDÔ#Û �Ø—‘˜FÖ#ó !ñ /r&   c                	ó&   € V.V P                   V&   R # r6   )r»   ræ   s   &&&r'   ÚaddArgÚDummyRequest.addArge  s   € Ø ˜'ˆ�	‰	�$‹r&   c                ó    € V P                   '       d0   Q RP                  RP                  V P                   4      4      4       hWn        W n        R# )zc
Set the HTTP status response code, but takes care that this is called
before any data is written.
z;Response code cannot be set after data hasbeen written: {}.ú@@@@N)r.   rÌ   Újoinr×   ÚresponseMessage)r1   r‡   Úmessages   &&&r'   ÚsetResponseCodeÚDummyRequest.setResponseCodeh  sF   € ð ——�ð	
àK×RÑRØ�K‰K˜Ÿ™Ó%ó
ó	
Øð !ÔØ&Ör&   c                	óˆ   € V P                   '       d0   Q R P                  RP                  V P                   4      4      4       hR# )z<Last-Modified cannot be set after data has been written: {}.r  N©r.   rÌ   r  )r1   Úwhens   &&r'   ÚsetLastModifiedÚDummyRequest.setLastModifiedu  s8   € à——�ð	
àL×SÑSØ�K‰K˜Ÿ™Ó%ó
ó	
Ø‘r&   c                	óˆ   € V P                   '       d0   Q R P                  RP                  V P                   4      4      4       hR# )z3ETag cannot be set after data has been written: {}.r  Nr  )r1   Útags   &&r'   ÚsetETagÚDummyRequest.setETag|  s8   € à——�ð	
àC×JÑJØ�K‰K˜Ÿ™Ó%ó
ó	
Ø‘r&   ÚTwistedÚgetClientAddress)Úreplacementc                ó~   € \        V P                  \        \        34      '       d   V P                  P                  # R# )zd
Return the IPv4 address of the client which made this request, if there
is one, otherwise L{None}.
N)r;   r¸   r   r   Úhostr7   s   &r'   ÚgetClientIPÚDummyRequest.getClientIPƒ  s-   € ô �d—k‘k¤K´Ð#=×>Ò>Ø—;‘;×#Ñ#Ð#Ùr&   c                óJ   € V P                   f   \        4       # V P                   # )zu
Return the L{IAddress} of the client that made this request.

@return: an address.
@rtype: an L{IAddress} provider.
)r¸   r   r7   s   &r'   r  ÚDummyRequest.getClientAddress�  s    € ð �;‰;ÒÜ“=Ð Ø�{‰{Ðr&   c                ó   € V P                   # )zc
Get a dummy hostname associated to the HTTP request.

@rtype: C{bytes}
@returns: a dummy hostname
)rØ   r7   s   &r'   ÚgetRequestHostnameÚDummyRequest.getRequestHostname˜  s   € ð ×ÑÐr&   c                ó   € \        RR^P4      # )zZ
Get a dummy transport's host.

@rtype: C{IPv4Address}
@returns: a dummy transport's host
r,   ú	127.0.0.1)r   r7   s   &r'   rH   ÚDummyRequest.getHost¡  s   € ô ˜5 +¨rÓ2Ð2r&   c                ó¦   € W0n         V P                  4       '       d   RpM^PpW$8X  d   TpM
RW3,          pV P                  P                  RV4       R# )a'  
Change the host and port the request thinks it's using.

@type host: C{bytes}
@param host: The value to which to change the host header.

@type ssl: C{bool}
@param ssl: A flag which, if C{True}, indicates that the request is
    considered secure (if C{True}, L{isSecure} will return C{True}).
i»  s   %b:%ds   hostN)Ú	_forceSSLr¤   rÕ   rå   )r1   r  rG   ÚsslÚdefaultÚ
hostHeaders   &&&&  r'   ÚsetHostÚDummyRequest.setHostª  sJ   € ð ŒØ�=‰=�?Š?Ø‰GàˆGØŒ?Ø‰Jà! T LÕ0ˆJØ×Ñ×(Ñ(¨°*Ö=r&   c                óT   € V P                  \        4       V P                  RV4       R# )z]
Utility function that does a redirect.

The request should have finish() called after this.
s   locationN)r
  r   rç   )r1   Úurls   &&r'   ÚredirectÚDummyRequest.redirectÀ  s    € ð 	×ÑœUÔ#Ø�‰�{ CÖ(r&   )r¼   r%  rØ   r»   rÙ   rÓ   r¾   rÈ   rº   rÔ   rÕ   r×   rÖ   r  rÉ   r¹   r.   )NNr6   )rÄ   )"r    r!   r"   r#   r$   ÚuriÚmethodr¸   Ú__annotations__rO   rR   r3   rÞ   râ   rç   rë   rî   r>   r÷   rï   r   r  r
  r  r  r   r   r  r  r  rH   r)  r-  r%   r   r&   r'   r   r   »   sÎ   ‡ ñð. €CØ€FØ!%€FÐÓ%ØÓØÓØÓØ
"Ó"Ø,Ó,ò#ò÷'ò*ò Jò7ôòò&"õ
ò
#ò$ò"ô'ò
ò
ñ ‘˜	 2 q¨!Ó,Ð:LÔMñó Nðò	ò ò3ô>ö,)r&   c                  ó2   € ] tR tRtRtR tR tR tR tRt	R# )	ÚDummyRequestTestsiÊ  z
Tests for L{DummyRequest}.
c                ó@  € \        . 4      pVP                  4        V P                  V P                  .R7      pV P	                  ^\        V4      4       Vw  pV P	                  VP                  R4      \        4       V P	                  VP                  R4      R4       R# )zX
L{DummyRequest.getClientIP} is deprecated in favor of
L{DummyRequest.getClientAddress}
)ÚoffendingFunctionsÚcategoryr	  z}twisted.web.test.requesthelper.DummyRequest.getClientIP was deprecated in Twisted 18.4.0; please use getClientAddress insteadN)r   r  ÚflushWarningsÚtest_getClientIPDeprecatedÚassertEqualÚlenÚgetÚDeprecationWarning)r1   rw   ÚwarningsÚwarnings   &   r'   r8  Ú,DummyRequestTests.test_getClientIPDeprecatedÏ  s‘   € ô ˜rÓ"ˆØ×ÑÔà×%Ñ%Ø $× ?Ñ ?Ð@ð &ó 
ˆð 	×Ñ˜œC ›MÔ*Ø‰	ˆØ×Ñ˜Ÿ™ ZÓ0Ô2DÔEØ×ÑØ�K‰K˜	Ó"ð6ö	
r&   c                ó‚   € \        . 4      p\        RRR4      pW!n        V P                  RVP	                  4       4       R# )zi
L{DummyRequest.getClientIP} supports IPv6 addresses, just like
L{twisted.web.http.Request.getClientIP}.
r,   z::1é90  N)r   r   r¸   r9  r  )r1   rw   r¸   s   &  r'   Útest_getClientIPSupportsIPv6Ú.DummyRequestTests.test_getClientIPSupportsIPv6è  s:   € ô
 ˜rÓ"ˆÜ˜U E¨5Ó1ˆØŒà×Ñ˜ × 3Ñ 3Ó 5Ö6r&   c                ór   € \        . 4      pVP                  4       p\        P                  ! \        V4       R# )z]
L{DummyRequest.getClientAddress} returns an L{IAddress}
provider no C{client} has been set.
N)r   r  r
   ÚverifyObjectr   )r1   rw   Únulls   &  r'   Ú"test_getClientAddressWithoutClientÚ4DummyRequestTests.test_getClientAddressWithoutClientó  s,   € ô
 ˜rÓ"ˆØ×'Ñ'Ó)ˆÜ×ÒœH dÖ+r&   c                ó„   € \        . 4      p\        RRR4      pW!n        VP                  4       pV P	                  W24       R# )z9
L{DummyRequest.getClientAddress} returns the C{client}.
r,   r"  rA  N)r   r   r¸   r  ÚassertIs)r1   rw   r¸   Úaddresss   &   r'   Útest_getClientAddressÚ'DummyRequestTests.test_getClientAddressü  s;   € ô ˜rÓ"ˆÜ˜U K°Ó7ˆØŒØ×*Ñ*Ó,ˆØ�‰�gÖ&r&   r   N)
r    r!   r"   r#   r$   r8  rB  rG  rL  r%   r   r&   r'   r3  r3  Ê  s   † ñò
ò2	7ò,ö'r&   r3  N)ÚÚ
z
)1r$   Ú
__future__r   Ú__all__Úior   Útypingr   r   r   Úzope.interfacer	   r
   Úincrementalr   Útwisted.internet.addressr   r   Útwisted.internet.deferr   Útwisted.internet.interfacesr   r   Útwisted.internet.taskr   Útwisted.python.deprecater   Útwisted.trialr   Útwisted.web._responsesr   Útwisted.web.http_headersr   Útwisted.web.resourcer   Útwisted.web.serverr   r   r   ÚtextLinearWhitespaceComponentsÚsanitizedTextÚencodeÚbytesLinearWhitespaceComponentsÚsanitizedBytesr   r   r   ÚSynchronousTestCaser3  )ÚlwÚ	components   00r'   Ú<module>rh     sù   ðñõ #à˜>Ð
*€å ß 'Ñ 'ç .å ç =Ý +ß ?Ý 'Ý /Ý "Ý (Ý ,Ý )ß :Ñ :á:NÓ!OÑ:N°B C¨ t¨3£-Ñ:NÑ!OÐ à€á/Mó#Ù/M )×Ñ�WÖÑ/Mñ#Ð ð ×%Ñ% gÓ.€ñ ˆXÓ÷ð ó ð÷Jñ J÷ZL)ñ L)ô^:'˜×4Ñ4ö :'ùòY "Pùò#s   Á3C8ÂC=