ó
ç'ÊUc           @  s—  d  d l  m 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 m Z d  d l m Z m Z d  d l m Z d  d l m Z m Z m Z d  d l m Z e d' k  rè d „  Z n d  d l m Z d e d „ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d e f d „  ƒ  YZ! d e f d „  ƒ  YZ" d e f d „  ƒ  YZ# d e# f d „  ƒ  YZ$ d e f d „  ƒ  YZ% d  d( d! „  ƒ  YZ& e' d" k r“e% ƒ  Z( e e( ƒ Z) e j* d# e) ƒ Z+ e j, e j- j. e j- j/ e0 ƒ d$ ƒ e j- j. e j- j/ e0 ƒ d$ ƒ ƒ Z1 e j2 d% e) e1 ƒ Z3 d& „  Z4 e j5 e4 ƒ e j6 ƒ  n  d S()   iÿÿÿÿ(   t   print_functionN(   t	   urlencode(   t   Popent   PIPE(   t   Sitet   NOT_DONE_YET(   t   Resource(   t   reactort   defert   ssl(   t   twisted_versioni   i    c           s{   ‡  ‡ f d †  } ‡ f d †  ‰  t  j ƒ  ‰ | ˆ _ ˆ j ‡ ‡ ‡ f d †  ƒ ˆ j ˆ  ƒ |  j | ˆ j d  ƒ ‰ ˆ S(   Nc             s   ˆ  d  ƒ ˆ j t ƒ  ƒ d  S(   N(   t   Nonet   errbackt	   Exception(    (   t
   _cancel_cbt   d(    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt   _cancel_method   s    
c           s   ˆ  j  ƒ  r ˆ  j ƒ  n  |  S(   N(   t   activet   cancel(   t   result(   t   cl(    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyR      s    c           s   ˆ ˆ  ˆ Ž  S(   N(    (   t   ignored(   t   argst   funct   kw(    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt   <lambda>   s    (   R   t   DeferredR   t   addCallbackt   addBotht	   callLatert   callbackR   (   t   clockt   delayR   R   R   R   (    (   R   R   R   R   R   R   s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt
   deferLater   s    	(   R!   c         C  s,   | |  j  k r$ | |  j  | d ƒ S| Sd  S(   Ni    (   R   (   t   requestt   namet   defaultt   type(    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt   getarg!   s    t   LeafResourcec           B  s   e  Z e Z d  „  Z RS(   c           s>   ‡  f d †  } t  t | | | | Ž ‰  | j ƒ  j | ƒ ˆ  S(   Nc           s   ˆ  j  d „  ƒ ˆ  j ƒ  d  S(   Nc         S  s   d  S(   N(   R   (   t   _(    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyR   /   s    (   t
   addErrbackR   (   R(   (   R   (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt   _cancelrequest-   s    (   R!   R   t   notifyFinishR)   (   t   selfR"   R    t   ft   aR   R*   (    (   R   s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt   deferRequest,   s    (   t   __name__t
   __module__t   Truet   isLeafR/   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyR'   (   s   t   Followc           B  s   e  Z d  „  Z d „  Z RS(   c   
      C  sû   t  | d d d t ƒ} t  | d d d t ƒ} t  | d d ƒ } t  | d d	 d t ƒ} t  | d
 | d t ƒ} | d k r¬ g  t | ƒ D] } t j d | ƒ ^ q‹ } n t | t | | d	 ƒ d ƒ } t j ƒ  | }	 |  j | |	 |  j | | ƒ t	 S(   Nt   totalid   R%   t   showi   t   ordert   desct
   maxlatencyi    t   nt   randiÿÿÿÿ(
   R&   t   intt   floatt   ranget   randomt   randintt   maxR/   t   renderRequestR   (
   R,   R"   R5   R6   R7   R9   R:   R(   t   nlistt   lag(    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt   render9   s    .c         C  s„   d } | j  j ƒ  } xG | D]? } t | ƒ g | d <t | d t ƒ} | d | | f 7} q W| d 7} | j | ƒ | j ƒ  d  S(   Ns   <html> <head></head> <body>R:   t   doseqs&   <a href='/follow?%s'>follow %d</a><br>s   </body>(   R   t   copyt   strR   R2   t   writet   finish(   R,   R"   RC   t   sR   t   nlt   argstr(    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRB   H   s    
(   R0   R1   RE   RB   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyR4   7   s   	t   Delayc           B  s   e  Z d  „  Z d „  Z RS(   c         C  sf   t  | d d d t ƒ} t  | d d d t ƒ} | rF | j d ƒ n  |  j | | |  j | | ƒ t S(   NR:   i   R%   t   bt    (   R&   R=   R<   RI   R/   t   _delayedRenderR   (   R,   R"   R:   RO   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt
   render_GETV   s    c         C  s   | j  d | ƒ | j ƒ  d  S(   Ns#   Response delayed for %0.3f seconds
(   RI   RJ   (   R,   R"   R:   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRQ   _   s    (   R0   R1   RR   RQ   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRN   T   s   		t   Statusc           B  s   e  Z d  „  Z RS(   c         C  s)   t  | d d d t ƒ} | j | ƒ d S(   NR:   iÈ   R%   RP   (   R&   R<   t   setResponseCode(   R,   R"   R:   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRR   f   s    (   R0   R1   RR   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRS   d   s   t   Rawc           B  s    e  Z d  „  Z e Z d „  Z RS(   c         C  s&   d | _  |  j | d |  j | ƒ t S(   Ni   i    (   t   startedWritingR/   RQ   R   (   R,   R"   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRR   n   s    	c         C  sF   t  | d d ƒ } d | _ | j | ƒ | j j j ƒ  | j ƒ  d  S(   Nt   raws   HTTP 1.1 200 OK
i   (   R&   RV   RI   t   channelt	   transportt   loseConnectionRJ   (   R,   R"   RW   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRQ   t   s
    	(   R0   R1   RR   t   render_POSTRQ   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRU   l   s   	t   Echoc           B  s   e  Z d  „  Z RS(   c         C  s9   i t  | j j ƒ  ƒ d 6| j j ƒ  d 6} t j | ƒ S(   Nt   headerst   body(   t   dictt   requestHeaderst   getAllRawHeaderst   contentt   readt   jsont   dumps(   R,   R"   t   output(    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRR   ~   s    (   R0   R1   RR   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyR\   |   s   t   Partialc           B  s   e  Z d  „  Z d „  Z RS(   c         C  s-   | j  d d ƒ |  j | d |  j | ƒ t S(   Ns   Content-Lengtht   1024i    (   t	   setHeaderR/   RQ   R   (   R,   R"   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRR   ˆ   s    c         C  s   | j  d ƒ | j ƒ  d  S(   Ns   partial content
(   RI   RJ   (   R,   R"   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRQ      s    (   R0   R1   RR   RQ   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRg   †   s   	t   Dropc           B  s   e  Z d  „  Z RS(   c         C  ss   t  | d d d t ƒ} | j d ƒ | j j } z0 | rV t | d ƒ rV | j ƒ  n
 | j ƒ  Wd  | j ƒ  Xd  S(   Nt   aborti    R%   s    this connection will be dropped
t   abortConnection(	   R&   R<   RI   RX   RY   t   hasattrRl   RZ   RJ   (   R,   R"   Rk   t   tr(    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRQ   ”   s    (   R0   R1   RQ   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRj   ’   s   t   Rootc           B  s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C  s  t  j |  ƒ |  j d t ƒ  ƒ |  j d t ƒ  ƒ |  j d t ƒ  ƒ |  j d t ƒ  ƒ |  j d t ƒ  ƒ |  j d t ƒ  ƒ |  j d t	 ƒ  ƒ t
 j rt d k rd d l m } d d l m } d d l m } |  j d | ƒ  ƒ |  j d | | ƒ  | ƒ  g ƒ ƒ n  d  S(   Nt   statust   followR    t   partialt   dropRW   t   echoi   i   i    iÿÿÿÿ(   t   PayloadResource(   t   GzipEncoderFactory(   t   EncodingResourceWrappert   payloadt   xpayload(   i   i   i    (   R   t   __init__t   putChildRS   R4   RN   Rg   Rj   RU   R\   t   sixt   PY2R
   t   twisted.web.test.test_webclientRu   t   twisted.web.serverRv   t   twisted.web.resourceRw   (   R,   Ru   Rv   Rw   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRz   £   s    c         C  s   |  S(   N(    (   R,   R#   R"   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt   getChild´   s    c         C  s   d S(   Ns   Scrapy mock HTTP server
(    (   R,   R"   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRE   ·   s    (   R0   R1   Rz   R   RE   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyRo   ¡   s   		t
   MockServerc           B  s   e  Z d  „  Z d „  Z RS(   c         C  sQ   d d l  m } t t j d d d g d t d | ƒ  ƒ|  _ |  j j j ƒ  |  S(   Niÿÿÿÿ(   t   get_testenvs   -us   -ms   tests.mockservert   stdoutt   env(	   t   scrapy.utils.testRƒ   R   t   syst
   executableR   t   procR„   t   readline(   R,   Rƒ   (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt	   __enter__½   s
    c         C  s+   |  j  j ƒ  |  j  j ƒ  t j d ƒ d  S(   Ngš™™™™™É?(   R‰   t   killt   waitt   timet   sleep(   R,   t   exc_typet	   exc_valuet	   traceback(    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt   __exit__Ä   s    (   R0   R1   R‹   R“   (    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyR‚   »   s   	t   __main__i&#  s   keys/cert.pemi'#  c          C  sB   t  j ƒ  }  t j ƒ  } t d |  j |  j | j | j f ƒ d  S(   Ns5   Mock server running at http://%s:%d and https://%s:%d(   t   httpPortt   getHostt	   httpsPortt   printt   hostt   port(   t   httpHostt	   httpsHost(    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt   print_listeningÔ   s    (   i   i    i    (    (7   t
   __future__R    R‡   RŽ   R?   t   osRd   R|   t   six.moves.urllib.parseR   t
   subprocessR   R   R   R   R   R€   R   t   twisted.internetR   R   R	   t   scrapyR
   R!   t   twisted.internet.taskR   RH   R&   R'   R4   RN   RS   RU   R\   Rg   Rj   Ro   R‚   R0   t   roott   factoryt	   listenTCPR•   t   DefaultOpenSSLContextFactoryt   patht   joint   dirnamet   __file__t   contextFactoryt	   listenSSLR—   R   t   callWhenRunningt   run(    (    (    s4   /home/travis/build/scrapy/scrapy/tests/mockserver.pyt   <module>   sB   <
	$	