ó
    ×›‘hç<  ã                  ó  • S r SSKJr  SS/rSSKJr  SSKJrJrJ	r	  SSK
JrJr  SSKJr  SS	KJrJr  SS
KJr  SSKJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"  SSK#J$r$J%r%J&r&  S V s/ s H	  n SU  S3PM     sn r'Sr(\' Vs/ s H  oRS                  S5      PM     snr*\(RS                  S5      r+\" \5       " S S5      5       r, " S S5      r- " S S5      r. " S S\R^                  5      r0gs  sn f s  snf )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)ÚÚ
z
ÚFooÚbarzFoo barÚasciic                  ó   • \ rS rSrSrSrg)ÚNullAddressé'   z'
A null implementation of L{IAddress}.
© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r#   ó    ÚbC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/web/test/requesthelper.pyr!   r!   '   s   † ôr*   r!   c                  óä   • \ rS rSr " S S5      r\" \5       " S S\5      5       r\" \	" 5       5      r
SS jrS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)r   é.   c                  óP   • \ rS rSrSrSrSS jrS rS rS r	S	 r
S
 rS rS rSrg)ÚDummyChannel.TCPé/   éP   FNc                ó\   • Uc  [        SSS5      nXl        [        5       U l        / U l        g )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                ó   • U R                   $ ©N)r4   ©r8   s    r+   ÚgetPeerÚDummyChannel.TCP.getPeer:   s   € Ø—:‘:Ðr*   c                ó‚   • [        U[        5      (       d  [        SU< 35      eU R                  R	                  U5        g )Nz)Can only write bytes to a transport, not )Ú
isinstanceÚbytesÚ	TypeErrorr5   Úwrite©r8   Údatas     r+   rE   ÚDummyChannel.TCP.write=   s4   € Ü˜d¤E×*Ñ*ÜÐ"KÈDÉ8Ð TÓUÐUØ�L‰L×Ñ˜tÕ$r*   c                ó8   • U H  nU R                  U5        M     g r=   )rE   )r8   ÚiovecrG   s      r+   ÚwriteSequenceÚDummyChannel.TCP.writeSequenceB   s   € Û�Ø—
‘
˜4Ö ò r*   c                ó0   • [        SSU R                  5      $ )Nr3   z10.0.0.1)r   Úportr>   s    r+   ÚgetHostÚDummyChannel.TCP.getHostF   s   € Ü˜u j°$·)±)Ó<Ð<r*   c                ó<   • U R                   R                  X45        g r=   )r6   Úappend©r8   ÚproducerÚ	streamings      r+   ÚregisterProducerÚ!DummyChannel.TCP.registerProducerI   s   € Ø�N‰N×!Ñ! 8Ð"7Õ8r*   c                ó   • g r=   r#   r>   s    r+   ÚunregisterProducerÚ#DummyChannel.TCP.unregisterProducerL   s   € Ør*   c                ó   • SU l         g )NT)Údisconnectedr>   s    r+   ÚloseConnectionÚDummyChannel.TCP.loseConnectionO   s
   € Ø $ˆDÕr*   )r4   r\   r6   r5   r=   )r$   r%   r&   r'   rN   r\   r:   r?   rE   rK   rO   rV   rY   r]   r)   r#   r*   r+   r3   r/   /   s4   † ØˆØˆô	 ò	ò	%ò
	!ò	=ò	9ò	õ	%r*   r3   c                  ó>   • \ rS rSrS rS rS rS rS rS r	S r
S	rg
)ÚDummyChannel.SSLéR   c                ó   • g r=   r#   r>   s    r+   ÚabortConnectionÚ DummyChannel.SSL.abortConnectionT   ó   € àr*   c                ó   • g r=   r#   r>   s    r+   ÚgetTcpKeepAliveÚ DummyChannel.SSL.getTcpKeepAliveX   re   r*   c                ó   • g r=   r#   r>   s    r+   ÚgetTcpNoDelayÚDummyChannel.SSL.getTcpNoDelay\   re   r*   c                ó   • g r=   r#   r>   s    r+   ÚloseWriteConnectionÚ$DummyChannel.SSL.loseWriteConnection`   re   r*   c                ó   • g r=   r#   ©r8   Úenableds     r+   ÚsetTcpKeepAliveÚ DummyChannel.SSL.setTcpKeepAlived   re   r*   c                ó   • g r=   r#   rp   s     r+   ÚsetTcpNoDelayÚDummyChannel.SSL.setTcpNoDelayh   re   r*   c                ó   • g r=   r#   r>   s    r+   ÚgetPeerCertificateÚ#DummyChannel.SSL.getPeerCertificatel   re   r*   r#   N)r$   r%   r&   r'   rc   rg   rj   rm   rr   ru   rx   r)   r#   r*   r+   ÚSSLr`   R   s%   † ò	ò	ò	ò	ò	ò	õ	r*   rz   Nc                ó0   • U R                  U5      U l        g r=   )r3   Ú	transportr7   s     r+   r:   ÚDummyChannel.__init__r   s   € ØŸ™ $›ˆ�r*   c                ó   • g r=   r#   )r8   Úrequests     r+   ÚrequestDoneÚDummyChannel.requestDoneu   ó   € Ør*   c                óN  • [        U[        5      (       a1  UR                  5        VVVs/ s H  u  pVU  H  ouU4PM     M     nnnnUS-   U-   S-   U-   S-   nU/n	U	R                  S U 5       5        U	R	                  S5        U R
                  R                  U	5        g s  snnnf )Nó    ó   
c              3  ó<   #   • U  H  u  pUS -   U-   S-   v •  M     g7f)s   : r…   Nr#   )Ú.0ÚnameÚvalues      r+   Ú	<genexpr>Ú,DummyChannel.writeHeaders.<locals>.<genexpr>   s"   é € ÐXÒPWÁÀ˜d U™l¨UÑ2°WÖ<ÒPWùs   ‚)rB   r   ÚgetAllRawHeadersÚextendrR   r|   rK   )
r8   Ú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   ªB c                ó6   • U R                   R                  5       $ r=   )r|   r?   r>   s    r+   r?   ÚDummyChannel.getPeerƒ   ó   € Ø�~‰~×%Ñ%Ó'Ð'r*   c                ó6   • U R                   R                  5       $ r=   )r|   rO   r>   s    r+   rO   ÚDummyChannel.getHost†   r›   r*   c                ó:   • U R                   R                  X5        g r=   )r|   rV   rS   s      r+   rV   ÚDummyChannel.registerProducer‰   s   € Ø�‰×'Ñ'¨Õ<r*   c                ó8   • U R                   R                  5         g r=   )r|   rY   r>   s    r+   rY   ÚDummyChannel.unregisterProducerŒ   s   € Ø�‰×)Ñ)Õ+r*   c                ó:   • U R                   R                  U5        g r=   )r|   rE   rF   s     r+   rE   ÚDummyChannel.write�   s   € Ø�‰×Ñ˜TÕ"r*   c                ó:   • U R                   R                  U5        g r=   )r|   rK   )r8   rJ   s     r+   rK   ÚDummyChannel.writeSequence’   s   € Ø�‰×$Ñ$ UÕ+r*   c                ó8   • U R                   R                  5         g r=   )r|   r]   r>   s    r+   r]   ÚDummyChannel.loseConnection•   s   € Ø�‰×%Ñ%Õ'r*   c                ó   • g r=   r#   r>   s    r+   Ú
endRequestÚDummyChannel.endRequest˜   r‚   r*   c                óB   • [        U R                  U R                  5      $ r=   )rB   r|   rz   r>   s    r+   ÚisSecureÚDummyChannel.isSecure›   s   € Ü˜$Ÿ.™.¨$¯(©(Ó3Ð3r*   c                ó   • g r=   r#   r>   s    r+   rc   ÚDummyChannel.abortConnectionž   ó   € àr*   c                ó   • g r=   r#   r>   s    r+   rg   ÚDummyChannel.getTcpKeepAlive¢   r°   r*   c                ó   • g r=   r#   r>   s    r+   rj   ÚDummyChannel.getTcpNoDelay¦   r°   r*   c                ó   • g r=   r#   r>   s    r+   rm   Ú DummyChannel.loseWriteConnectionª   r°   r*   c                ó   • g r=   r#   r>   s    r+   rr   ÚDummyChannel.setTcpKeepAlive®   r°   r*   c                ó   • g r=   r#   r>   s    r+   ru   ÚDummyChannel.setTcpNoDelay²   r°   r*   c                ó   • g r=   r#   r>   s    r+   rx   ÚDummyChannel.getPeerCertificate¶   r°   r*   )r|   r=   )r$   r%   r&   r'   r3   r
   r   rz   r   r   Úsiter:   r€   r—   r?   rO   rV   rY   rE   rK   r]   r©   r¬   rc   rg   rj   rm   rr   ru   rx   r)   r#   r*   r+   r   r   .   sš   † ÷!%ñ !%ñF �Óôˆcó ó  ðñ: ‘“
Ó€Dô(òò	5ò(ò(ò=ò,ò#ò,ò(òò4òòòòòòõr*   c                  ó6  • \ rS rSr% SrSrSrSrS\S'   S\S	'   S\S
'   S\S'   S\S'   S\S'   S r	S r
  S-       S.S jjrS rS rS rS/S jrS rS rS0S jrS rS rS rS/S jrS rS r\" \" S S!S"S#5      S$S%9S& 5       rS' rS( rS) rS1S* jrS+ r S,r!g)2r   é»   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]Úsitepathr5   ÚprepathzDict[bytes, List[bytes]]ÚargszList[Deferred[None]]Ú_finishedDeferredsc                ó|   • SU l         U R                   (       a$  UR                  5         U R                   (       a  M#  gg)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)r8   ÚprodÚss      r+   rV   ÚDummyRequest.registerProducerÜ   s)   € ð ˆŒØ�g�gØ× Ñ Ô"ð �g�g‹gr*   c                ó   • SU l         g )Nr   )rÈ   r>   s    r+   rY   ÚDummyRequest.unregisterProducerë   s	   € Øˆ�r*   c                ó  • / U l         / U l        SU l        Xl        / U l        S U l        U=(       d    [        S S[        5       S9U l        0 U l	        [        5       U l        [        5       U l        S U l        / U l        SU l        SU l        g )Nr   ó   0)r½   ÚuidÚreactors   dummys   HTTP/1.0)rÂ   r5   ÚfinishedÚpostpathrÃ   Úsessionr   r   ÚprotoSessionrÄ   r   ÚrequestHeadersÚresponseHeadersÚresponseCoderÅ   Ú_serverNameÚclientproto)r8   rÔ   rÕ   rÁ   s       r+   r:   ÚDummyRequest.__init__î   s   € ð ˆŒØˆŒØˆŒØ ŒØˆŒØˆŒØ#×T¤w°D¸dÌEËGÑ'TˆÔØˆŒ	Ü%›iˆÔÜ&›yˆÔØ ˆÔØ"$ˆÔØ#ˆÔØ&ˆÕr*   c                óz   • 0 nU R                   R                  5        H  u  p#US   XR                  5       '   M     U$ )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)r8   r‘   r’   r”   s       r+   ÚgetAllHeadersÚDummyRequest.getAllHeaders  s;   € ð ˆØ×'Ñ'×8Ñ8Ö:‰DˆAØ!" 2¡ˆG—G‘G“IÓñ ;àˆr*   c                ó^   • U R                   R                  UR                  5       S/5      S   $ )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.
Nr   )r×   ÚgetRawHeadersrß   )r8   rˆ   s     r+   Ú	getHeaderÚDummyRequest.getHeader  s*   € ð ×"Ñ"×0Ñ0°·±³À¸vÓFÀqÑIÐIr*   c                ó:   • U R                   R                  X5        g)zATODO: make this assert on write() if the header is content-lengthN)rØ   ÚaddRawHeader©r8   rˆ   r‰   s      r+   Ú	setHeaderÚDummyRequest.setHeader   s   € à×Ñ×)Ñ)¨$Õ6r*   c                ó¦   • U R                   (       a  U R                   $ U R                  (       a   S5       eU R                  U l         U R                   $ )Nz8Session cannot be requested after data has been written.)rÕ   r5   rÖ   )r8   ÚsessionInterfaces     r+   Ú
getSessionÚDummyRequest.getSession$  sC   € Ø�<�<Ø—<‘<Ðà——ð	FàEó	FØà×(Ñ(ˆŒØ�|‰|Ðr*   c                ó|   • UR                  U 5      nU[        L a  gU R                  U5        U R                  5         g)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   rE   Úfinish)r8   ÚresourceÚresults      r+   rð   ÚDummyRequest.render-  s2   € ð —‘ Ó&ˆØ”\Ò!ØØ�
‰
�6ÔØ�‰�r*   c                óz   • [        U[        5      (       d  [        S5      eU R                  R	                  U5        g )Nzwrite() only accepts bytes)rB   rC   rD   r5   rR   rF   s     r+   rE   ÚDummyRequest.write@  s-   € Ü˜$¤×&Ñ&ÜÐ8Ó9Ð9Ø�‰×Ñ˜DÕ!r*   c                óP   • [        5       nU R                  R                  U5        U$ )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Å   rR   )r8   rÓ   s     r+   ÚnotifyFinishÚDummyRequest.notifyFinishE  s$   € ô $,£:ˆØ×Ñ×&Ñ& xÔ0Øˆr*   c                ó¢   • U R                   S-   U l         U R                  b.  U R                  nSU l        U H  nUR                  S5        M     gg)ze
Record that the request is finished and callback and L{Deferred}s
waiting for notification of this.
rÇ   N)rÓ   rÅ   Úcallback)r8   Ú	observersÚobss      r+   rñ   ÚDummyRequest.finishO  sN   € ð
 Ÿ™¨Ñ)ˆŒØ×"Ñ"Ñ.Ø×/Ñ/ˆIØ&*ˆDÔ#Û �Ø—‘˜TÖ"ò !ð /r*   c                óz   • U R                   b.  U R                   nSU l         U H  nUR                  U5        M     gg)z;
Errback and L{Deferreds} waiting for finish notification.
N)rÅ   Úerrback)r8   r�   rü   rý   s       r+   ÚprocessingFailedÚDummyRequest.processingFailed[  s>   € ð ×"Ñ"Ñ.Ø×/Ñ/ˆIØ&*ˆDÔ#Û �Ø—‘˜FÖ#ò !ð /r*   c                ó$   • U/U R                   U'   g r=   )rÄ   rè   s      r+   ÚaddArgÚDummyRequest.addArge  s   € Ø ˜'ˆ�	‰	�$Šr*   c                óœ   • U R                   (       a/   SR                  SR                  U R                   5      5      5       eXl        X l        g)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)r5   ÚformatÚjoinrÙ   ÚresponseMessage)r8   r�   Úmessages      r+   ÚsetResponseCodeÚDummyRequest.setResponseCodeh  sD   € ð ——ð	
àK×RÑRØ�K‰K˜Ÿ™Ó%ó
ó	
Øð !ÔØ&Õr*   c                ó„   • U R                   (       a/   SR                  SR                  U R                   5      5      5       eg )Nz<Last-Modified cannot be set after data has been written: {}.r  ©r5   r  r	  )r8   Úwhens     r+   ÚsetLastModifiedÚDummyRequest.setLastModifiedu  s6   € à——ð	
àL×SÑSØ�K‰K˜Ÿ™Ó%ó
ó	
Ø�r*   c                ó„   • U R                   (       a/   SR                  SR                  U R                   5      5      5       eg )Nz3ETag cannot be set after data has been written: {}.r  r  )r8   Útags     r+   ÚsetETagÚDummyRequest.setETag|  s6   € à——ð	
àC×JÑJØ�K‰K˜Ÿ™Ó%ó
ó	
Ø�r*   ÚTwistedé   é   r   ÚgetClientAddress)Úreplacementc                óz   • [        U R                  [        [        45      (       a  U R                  R                  $ g)zd
Return the IPv4 address of the client which made this request, if there
is one, otherwise L{None}.
N)rB   rÁ   r   r   Úhostr>   s    r+   ÚgetClientIPÚDummyRequest.getClientIPƒ  s-   € ô �d—k‘k¤K´Ð#=×>Ñ>Ø—;‘;×#Ñ#Ð#Ør*   c                óH   • U R                   c
  [        5       $ U R                   $ )zu
Return the L{IAddress} of the client that made this request.

@return: an address.
@rtype: an L{IAddress} provider.
)rÁ   r!   r>   s    r+   r  ÚDummyRequest.getClientAddress�  s    € ð �;‰;ÑÜ“=Ð Ø�{‰{Ðr*   c                ó   • U R                   $ )zc
Get a dummy hostname associated to the HTTP request.

@rtype: C{bytes}
@returns: a dummy hostname
)rÚ   r>   s    r+   ÚgetRequestHostnameÚDummyRequest.getRequestHostname˜  s   € ð ×ÑÐr*   c                ó   • [        SSS5      $ )zZ
Get a dummy transport's host.

@rtype: C{IPv4Address}
@returns: a dummy transport's host
r3   ú	127.0.0.1r1   )r   r>   s    r+   rO   ÚDummyRequest.getHost¡  s   € ô ˜5 +¨rÓ2Ð2r*   c                ó˜   • X0l         U R                  5       (       a  SnOSnX$:X  a  UnOSX4-  nU R                  R                  SU5        g)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»  r1   s   %b:%ds   hostN)Ú	_forceSSLr¬   r×   rç   )r8   r  rN   ÚsslÚdefaultÚ
hostHeaders         r+   ÚsetHostÚDummyRequest.setHostª  sJ   € ð ŒØ�=‰=�?‰?Ø‰GàˆGØ‹?Ø‰Jà! T LÑ0ˆJØ×Ñ×(Ñ(¨°*Õ=r*   c                óR   • U R                  [        5        U R                  SU5        g)z]
Utility function that does a redirect.

The request should have finish() called after this.
s   locationN)r  r   ré   )r8   Ú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Â   r5   )NN)rÔ   zlist[bytes]rÕ   zOptional[Session]rÁ   rÀ   ÚreturnÚNoner=   )r3  zDeferred[None])r   )"r$   r%   r&   r'   r(   ÚuriÚmethodrÁ   Ú__annotations__rV   rY   r:   rà   rä   ré   rí   rð   rE   rø   rñ   r  r  r  r  r  r   r   r  r  r#  rO   r-  r1  r)   r#   r*   r+   r   r   »   sü   ‡ ñð. €CØ€FØ!%€FÐÓ%ØÓØÓØÓØ
"Ó"Ø,Ó,ò#òð &*Ø%)ð	'àð'ð #ð'ð #ð	'ð
 
õ'ò*ò Jò7ôòò&"ô
ò
#ò$ò"ô'ò
ò
ñ ‘˜	 2 q¨!Ó,Ð:LÑMñó Nðò	ò ò3ô>õ,)r*   c                  ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚDummyRequestTestsiÊ  z
Tests for L{DummyRequest}.
c                ó8  • [        / 5      nUR                  5         U R                  U R                  /S9nU R	                  S[        U5      5        Uu  nU R	                  UR                  S5      [        5        U R	                  UR                  S5      S5        g)zX
L{DummyRequest.getClientIP} is deprecated in favor of
L{DummyRequest.getClientAddress}
)ÚoffendingFunctionsrÇ   Ú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)r8   r   ÚwarningsÚwarnings       r+   r>  Ú,DummyRequestTests.test_getClientIPDeprecatedÏ  s‘   € ô ˜rÓ"ˆØ×ÑÔà×%Ñ%Ø $× ?Ñ ?Ð@ð &ð 
ˆð 	×Ñ˜œC ›MÔ*Ø‰	ˆØ×Ñ˜Ÿ™ ZÓ0Ô2DÔEØ×ÑØ�K‰K˜	Ó"ð6õ	
r*   c                ó€   • [        / 5      n[        SSS5      nX!l        U R                  SUR	                  5       5        g)zi
L{DummyRequest.getClientIP} supports IPv6 addresses, just like
L{twisted.web.http.Request.getClientIP}.
r3   z::1é90  N)r   r   rÁ   r?  r  )r8   r   rÁ   s      r+   Útest_getClientIPSupportsIPv6Ú.DummyRequestTests.test_getClientIPSupportsIPv6è  s:   € ô
 ˜rÓ"ˆÜ˜U E¨5Ó1ˆØŒà×Ñ˜ × 3Ñ 3Ó 5Õ6r*   c                óp   • [        / 5      nUR                  5       n[        R                  " [        U5        g)z]
L{DummyRequest.getClientAddress} returns an L{IAddress}
provider no C{client} has been set.
N)r   r  r   ÚverifyObjectr   )r8   r   Únulls      r+   Ú"test_getClientAddressWithoutClientÚ4DummyRequestTests.test_getClientAddressWithoutClientó  s,   € ô
 ˜rÓ"ˆØ×'Ñ'Ó)ˆÜ×ÒœH dÕ+r*   c                ó‚   • [        / 5      n[        SSS5      nX!l        UR                  5       nU R	                  X25        g)z9
L{DummyRequest.getClientAddress} returns the C{client}.
r3   r&  rG  N)r   r   rÁ   r  ÚassertIs)r8   r   rÁ   Úaddresss       r+   Útest_getClientAddressÚ'DummyRequestTests.test_getClientAddressü  s;   € ô ˜rÓ"ˆÜ˜U K°Ó7ˆØŒØ×*Ñ*Ó,ˆØ�‰�gÕ&r*   r#   N)
r$   r%   r&   r'   r(   r>  rH  rM  rR  r)   r#   r*   r+   r9  r9  Ê  s   † ñò
ò2	7ò,õ'r*   r9  N)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   ÚSynchronousTestCaser9  )ÚlwÚ	components   00r+   Ú<module>rl     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C9ÂC>