ó
ç'ÊUc           @   sB  d  Z  d d l 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 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 e f d „  ƒ  YZ d S(   s0   
Some spiders used for testing and benchmarking
iÿÿÿÿN(   t	   urlencode(   t   Spider(   t   Request(   t   Item(   t   LinkExtractort
   MetaSpiderc           B   s    e  Z d  Z d „  Z d „  Z RS(   t   metac         O   s&   t  t |  ƒ j | | Ž  i  |  _ d  S(   N(   t   superR   t   __init__R   (   t   selft   argst   kwargs(    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR      s    c         C   s   | |  j  d <d  S(   Nt   close_reason(   R   (   R	   t   reason(    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyt   closed   s    (   t   __name__t
   __module__t   nameR   R   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR      s   	t   FollowAllSpiderc           B   s5   e  Z d  Z e ƒ  Z d d d d d „ Z d „  Z RS(   t   followi
   i   t   randg        c   	      O   ss   t  t |  ƒ j | | Ž  g  |  _ g  |  _ i | d 6| d 6| d 6| d 6} d t | d d ƒ} | g |  _ d  S(   Nt   totalt   showt   ordert
   maxlatencys   http://localhost:8998/follow?%st   doseqi   (   R   R   R   t   urls_visitedt   timesR    t
   start_urls(	   R	   R   R   R   R   R
   R   t   qargst   url(    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR      s    		"c         c   sa   |  j  j | j ƒ |  j j t j ƒ  ƒ x1 |  j j | ƒ D] } t | j d |  j ƒVq< Wd  S(   Nt   callback(	   R   t   appendR   R   t   timet   link_extractort   extract_linksR   t   parse(   R	   t   responset   link(    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR$   '   s    (   R   R   R   R   R"   R   R$   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR      s   	t   DelaySpiderc           B   s8   e  Z d  Z d d d „ Z d „  Z d „  Z d „  Z RS(   t   delayi   i    c         O   sF   t  t |  ƒ j | | Ž  | |  _ | |  _ d |  _ |  _ |  _ d  S(   Ni    (   R   R'   R   t   nt   bt   t1t   t2t   t2_err(   R	   R)   R*   R
   R   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR   2   s    		c         c   sF   t  j  ƒ  |  _ d |  j |  j f } t | d |  j d |  j ƒVd  S(   Ns%   http://localhost:8998/delay?n=%s&b=%sR   t   errback(   R!   R+   R)   R*   R   R$   R.   (   R	   R   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyt   start_requests8   s    c         C   s   t  j  ƒ  |  _ d  S(   N(   R!   R,   (   R	   R%   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR$   =   s    c         C   s   t  j  ƒ  |  _ d  S(   N(   R!   R-   (   R	   t   failure(    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR.   @   s    (   R   R   R   R   R/   R$   R.   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR'   .   s
   		t   SimpleSpiderc           B   s#   e  Z d  Z d d „ Z d „  Z RS(   t   simples   http://localhost:8998c         O   s)   t  t |  ƒ j | | Ž  | g |  _ d  S(   N(   R   R1   R   R   (   R	   R   R
   R   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR   H   s    c         C   s   |  j  j d | j ƒ d  S(   Ns   Got response %d(   t   loggert   infot   status(   R	   R%   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR$   L   s    (   R   R   R   R   R$   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR1   D   s   t
   ItemSpiderc           B   s   e  Z d  Z d „  Z RS(   t   itemc         c   s9   x2 t  t |  ƒ j | ƒ D] } | Vt ƒ  Vi  Vq Wd  S(   N(   R   R6   R$   R   (   R	   R%   t   request(    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR$   T   s    (   R   R   R   R$   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR6   P   s   t   DefaultErrorc           B   s   e  Z RS(    (   R   R   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR9   [   s   t   ErrorSpiderc           B   s&   e  Z d  Z e Z d „  Z d „  Z RS(   t   errorc         C   s   |  j  d ƒ ‚ d  S(   Ns   Expected exception(   t   exception_cls(   R	   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyt   raise_exceptiond   s    c         c   s6   x/ t  t |  ƒ j | ƒ D] } | V|  j ƒ  q Wd  S(   N(   R   R:   R$   R=   (   R	   R%   R8   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR$   g   s    (   R   R   R   R9   R<   R=   R$   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR:   _   s   	t   BrokenStartRequestsSpiderc           B   s/   e  Z e Z e Z d  „  Z d „  Z d „  Z RS(   c         O   s&   t  t |  ƒ j | | Ž  g  |  _ d  S(   N(   R   R>   R   t	   seedsseen(   R	   t   at   kw(    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR   r   s    c         c   sš   |  j  r d d n  xj t d ƒ D]\ } i d d 6| d 6} d t | d d ƒ} t | d	 i | d 6ƒV|  j r! d
 d q! q! W|  j s– t d ƒ ‚ d  S(   Ni   i    id   i
   R   t   seeds   http://localhost:8998/follow?%sR   R   i   s8   All start requests consumed before any download happened(   t   fail_before_yieldt   xrangeR    R   t   fail_yieldingR?   t   AssertionError(   R	   t   sR   R   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR/   v   s    		c         c   sH   |  j  j | j j d ƒ ƒ x% t t |  ƒ j | ƒ D] } | Vq5 Wd  S(   NRB   (   R?   R    R   t   getR   R>   R$   (   R	   R%   t   req(    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR$   „   s    (   R   R   t   FalseRC   RE   R   R/   R$   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR>   m   s
   		t   SingleRequestSpiderc           B   s5   e  Z d Z d Z d Z d  „  Z d „  Z d „  Z RS(   c         c   sY   t  |  j t ƒ r5 |  j j d |  j d |  j ƒ Vn  t |  j d |  j d |  j ƒVd  S(   NR   R.   (   t
   isinstanceRB   R   t   replaceR$   t   on_error(   R	   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR/      s    #c         C   sV   |  j  j d g  ƒ j | ƒ t |  j ƒ r8 |  j | ƒ Sd | j  k rR | j  d Sd  S(   Nt	   responsest   next(   R   t
   setdefaultR    t   callablet   callback_func(   R	   R%   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR$   –   s
    c         C   s-   | |  j  d <t |  j ƒ r) |  j | ƒ Sd  S(   NR0   (   R   RR   t   errback_func(   R	   R0   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyRN      s    N(	   R   R   t   NoneRB   RS   RT   R/   R$   RN   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyRK   Š   s   		t   DuplicateStartRequestsSpiderc           B   sG   e  Z e Z d  Z d Z d Z d „  Z d „  Z d d „ Z	 d „  Z
 RS(   t   duplicatestartrequestsi   i   c         c   sV   xO t  d |  j ƒ D]; } x2 t  d |  j ƒ D] } d | } |  j | ƒ Vq, Wq Wd  S(   Ni    s0   http://localhost:8998/echo?headers=1&body=test%d(   t   ranget   distinct_urlst   dupe_factort   make_requests_from_url(   R	   t   it   jR   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR/   ©   s    
c         C   s   t  | d |  j ƒS(   Nt   dont_filter(   R   R^   (   R	   R   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR[   ¯   s    s   http://localhost:8998c         O   s&   t  t |  ƒ j | | Ž  d |  _ d  S(   Ni    (   R   RV   R   t   visited(   R	   R   R
   R   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR   ²   s    c         C   s   |  j  d 7_  d  S(   Ni   (   R_   (   R	   R%   (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyR$   ¶   s    (   R   R   t   TrueR^   R   RY   RZ   R/   R[   R   R$   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyRV   £   s   		(   t   __doc__R!   t   six.moves.urllib.parseR    t   scrapy.spidersR   t   scrapy.httpR   t   scrapy.itemR   t   scrapy.linkextractorsR   R   R   R'   R1   R6   t	   ExceptionR9   R:   R>   RK   RV   (    (    (    s1   /home/travis/build/scrapy/scrapy/tests/spiders.pyt   <module>   s    