
 X[
                 @   s   d  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 m Z m	 Z	 Gd d   d e  Z
 Gd d   d e  Z Gd	 d
   d
 e e j  Z d S)z?Basic http server for tests to simulate PyPI or custom indexes
    N)BaseHTTPRequestHandler)urllib2URLError
HTTPServerSimpleHTTPRequestHandlerc               @   sX   e  Z d  Z d Z d e d d  Z d d   Z d d	   Z d
 d   Z d d   Z	 d S)IndexServeraY  Basic single-threaded http server simulating a package index

    You can use this server in unittest like this::
        s = IndexServer()
        s.start()
        index_url = s.base_url() + 'mytestindex'
        # do some test requests to the index
        # The index files should be located in setuptools/tests/indexes
        s.stop()
     r   c             C   s    t  j |  | |  d |  _ d  S)NT)r   __init___run)selfserver_addressRequestHandlerClass r   I/home/ubuntu/projects/ifolica/build/setuptools/setuptools/tests/server.pyr	      s    zIndexServer.__init__c             C   s   x |  j  r |  j   q Wd  S)N)r
   handle_request)r   r   r   r   serve   s    zIndexServer.servec             C   s)   t  j d |  j  |  _ |  j j   d  S)Ntarget)	threadingThreadr   threadstart)r   r   r   r   r      s    zIndexServer.startc             C   s   t  j d  d |  _ d t |   } y6 t j d	 k rN t j | d d n t j |  Wn t k
 rp Yn X|  j	 j
   |  j j   d S)
zStop the serverg?Fz!http://127.0.0.1:%(server_port)s/      timeout   N)r   r   )timesleepr
   varssysversion_infor   urlopenr   r   joinsocketclose)r   urlr   r   r   stop"   s    	zIndexServer.stopc             C   s   |  j  } d | S)Nz-http://127.0.0.1:%s/setuptools/tests/indexes/)Zserver_port)r   portr   r   r   base_url8   s    	zIndexServer.base_urlN)r   r   )
__name__
__module____qualname____doc__r   r	   r   r   r%   r'   r   r   r   r   r   
   s   
r   c               @   s   e  Z d  Z d d   Z d S)RequestRecorderc             C   s<   t  |  j  j d g   } | j |   |  j d d  d  S)Nrequests   OK)r   server
setdefaultappendZsend_response)r   r-   r   r   r   do_GET=   s    zRequestRecorder.do_GETN)r(   r)   r*   r3   r   r   r   r   r,   <   s   r,   c               @   sL   e  Z d  Z d Z d e d d  Z d d   Z d d	   Z e e  Z d
 S)
MockServerzD
    A simple HTTP Server that records the requests made to it.
    r   r   c             C   s=   t  j |  | |  t j j |   |  j d  g  |  _ d  S)NT)r   r	   r   r   	setDaemonr-   )r   r   r   r   r   r   r	   F   s    zMockServer.__init__c             C   s   |  j    d  S)N)serve_forever)r   r   r   r   runM   s    zMockServer.runc             C   s   d t  |   S)Nz!http://localhost:%(server_port)s/)r   )r   r   r   r   r$   P   s    zMockServer.urlN)r   r   )	r(   r)   r*   r+   r,   r	   r7   r$   propertyr   r   r   r   r4   B   s   r4   )r+   r   r   r   Zsetuptools.compatr   r   r   r   r   r   r,   r   r4   r   r   r   r   <module>   s   "2