ó
]c           @   sÏ  d  Z  d d l Z d d l Z e j d d k Z e ri d d l j Z d d l m Z d d l	 m
 Z
 nT d d l Z d d l m Z y d d l m Z
 Wn! e k
 r¼ d d l m Z
 n Xy& d d l Z d d l m Z m Z Wn e k
 rö n Xe j e e ƒ d	 d d
 „  ƒ  YZ e d k rËe e j ƒ d k  rDd Z n e j d Z e ƒ  Z e j e ƒ e j ƒ  GHd d d GHd d l Z e j e j ƒ  ƒ e j e j ƒ GHe j ƒ  d GHe j ƒ  n  d S(   s.   A high-level interface to the pycurl extensioniÿÿÿÿNi    i   (   t   urljoin(   t   BytesIO(   t   StringIO(   t   SIGPIPEt   SIG_IGNt   Curlc           B   s¤   e  Z d  Z d d d „ Z d „  Z d „  Z d „  Z d „  Z d d „ Z	 d d d „ Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s)   High-level interface to pycurl functions.t    c            s  t  j ƒ  ˆ  _ ˆ  j | ƒ d ˆ  _ | p. g  ˆ  _ d  ˆ  _ t ƒ  ˆ  _	 d ˆ  _
 ˆ  j t  j d ƒ ˆ  j t  j d ƒ ˆ  j t  j d ƒ ˆ  j t  j d ƒ ˆ  j t  j d ƒ ˆ  j d ƒ ˆ  j t  j d ƒ ˆ  j t  j ˆ  j	 j ƒ ‡  f d †  } ˆ  j t  j | ƒ d  S(	   Ni    R   i   i   i   s	   /dev/nulli   c            s   ˆ  j  |  j d ƒ 7_  d  S(   Nt   ascii(   t   hdrt   decode(   t   x(   t   self(    s,   lib/python2.7/site-packages/curl/__init__.pyt   header_callback=   s    (   t   pycurlR   t   handlet   set_urlt	   verbosityt   fakeheaderst   Nonet   payloadR   t
   payload_ioR   t
   set_optiont   SSL_VERIFYHOSTt   FOLLOWLOCATIONt	   MAXREDIRSt   NOSIGNALt
   COOKIEFILEt   set_timeoutt   NETRCt   WRITEFUNCTIONt   writet   HEADERFUNCTION(   R   t   base_urlR   R   (    (   R   s,   lib/python2.7/site-packages/curl/__init__.pyt   __init__%   s"    			c         C   s   |  j  t j | ƒ d S(   s&   Set timeout for a retrieving an objectN(   R   R   t   TIMEOUT(   R   t   timeout(    (    s,   lib/python2.7/site-packages/curl/__init__.pyR   A   s    c         C   s#   | |  _  |  j t j |  j  ƒ d S(   s!   Set the base URL to be retrieved.N(   R    R   R   t   URL(   R   t   url(    (    s,   lib/python2.7/site-packages/curl/__init__.pyR   E   s    	c         G   s   |  j  j | Œ  d S(   s   Set an option on the retrieval.N(   R   t   setopt(   R   t   args(    (    s,   lib/python2.7/site-packages/curl/__init__.pyR   J   s    c         C   s   |  j  t j | ƒ d S(   s'   Set verbosity to 1 to see transactions.N(   R   R   t   VERBOSE(   R   t   level(    (    s,   lib/python2.7/site-packages/curl/__init__.pyt   set_verbosityN   s    c         C   sŸ   |  j  r" |  j t j |  j  ƒ n  | rJ |  j t j t |  j | ƒ ƒ n  d |  _ |  j	 j
 d ƒ |  j	 j ƒ  d |  _ |  j j ƒ  |  j	 j ƒ  |  _ |  j S(   s   Perform the pending request.i    R   N(   R   R   R   t
   HTTPHEADERR$   R    R    R   R   R   t   seekt   truncateR   R   t   performt   getvalue(   R   t   relative_url(    (    s,   lib/python2.7/site-packages/curl/__init__.pyt	   __requestR   s    	"		c         C   s@   | r  | d t  j | ƒ 7} n  |  j t j d ƒ |  j | ƒ S(   s=   Ship a GET request for a specified URL, capture the response.t   ?i   (   t   urllib_parset	   urlencodeR   R   t   HTTPGETt   _Curl__request(   R   R%   t   params(    (    s,   lib/python2.7/site-packages/curl/__init__.pyt   get`   s    c         C   s<   |  j  t j d ƒ |  j  t j t j | ƒ ƒ |  j | ƒ S(   s=   Ship a POST request to a specified CGI, capture the response.i   (   R   R   t   POSTt
   POSTFIELDSR3   R4   R6   (   R   t   cgiR7   (    (    s,   lib/python2.7/site-packages/curl/__init__.pyt   postg   s    c         C   s   |  j  S(   s'   Return the body from the last response.(   R   (   R   (    (    s,   lib/python2.7/site-packages/curl/__init__.pyt   bodym   s    c         C   s   |  j  S(   s)   Return the header from the last response.(   R   (   R   (    (    s,   lib/python2.7/site-packages/curl/__init__.pyt   headerq   s    c         G   s   |  j  j | Œ  S(   s    Get information about retrieval.(   R   t   getinfo(   R   R'   (    (    s,   lib/python2.7/site-packages/curl/__init__.pyt   get_infou   s    c         C   s*  i  } |  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j	 ƒ | d <|  j  j t j
 ƒ | d <|  j  j t j ƒ | d	 <|  j  j t j ƒ | d
 <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j	 ƒ | d <|  j  j t j
 ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j ƒ | d <|  j  j t j  ƒ | d <| S(   s7   Return a dictionary with all info on the last response.s   effective-urls	   http-codes
   total-times   namelookup-times   connect-times   pretransfer-times   redirect-times   redirect-counts   size-uploads   size-downloads   speed-uploads   header-sizes   request-sizes   content-length-downloads   content-length-uploads   content-types   response-codes   speed-downloads   ssl-verifyresultt   filetimes   starttransfer-times   http-connectcodes   httpauth-avails   proxyauth-avails   os-errnos   num-connectss   ssl-enginest
   cookielistt
   lastsockets   ftp-entry-path(!   R   R?   R   t   EFFECTIVE_URLt	   HTTP_CODEt
   TOTAL_TIMEt   NAMELOOKUP_TIMEt   CONNECT_TIMEt   PRETRANSFER_TIMEt   REDIRECT_TIMEt   REDIRECT_COUNTt   SIZE_UPLOADt   SIZE_DOWNLOADt   SPEED_UPLOADt   HEADER_SIZEt   REQUEST_SIZEt   CONTENT_LENGTH_DOWNLOADt   CONTENT_LENGTH_UPLOADt   CONTENT_TYPEt   RESPONSE_CODEt   SPEED_DOWNLOADt   SSL_VERIFYRESULTt   INFO_FILETIMEt   STARTTRANSFER_TIMEt   HTTP_CONNECTCODEt   HTTPAUTH_AVAILt   PROXYAUTH_AVAILt   OS_ERRNOt   NUM_CONNECTSt   SSL_ENGINESt   INFO_COOKIELISTt
   LASTSOCKETt   FTP_ENTRY_PATH(   R   t   m(    (    s,   lib/python2.7/site-packages/curl/__init__.pyt   infoy   sD    c         C   s   |  j  j | ƒ d k S(   s3   Did a given check string occur in the last payload?i    (   R   t   find(   R   t   check(    (    s,   lib/python2.7/site-packages/curl/__init__.pyt   answeredž   s    c         C   s8   |  j  r |  j  j ƒ  n  d |  _  d |  _ d |  _ d S(   s#   Close a session, freeing resources.R   N(   R   t   closeR   R   R   (   R   (    (    s,   lib/python2.7/site-packages/curl/__init__.pyRg   ¢   s
    			c         C   s   |  j  ƒ  d  S(   N(   Rg   (   R   (    (    s,   lib/python2.7/site-packages/curl/__init__.pyt   __del__ª   s    N(   t   __name__t
   __module__t   __doc__R   R!   R   R   R   R*   R6   R8   R<   R=   R>   R@   Rc   Rf   Rg   Rh   (    (    (    s,   lib/python2.7/site-packages/curl/__init__.pyR   #   s    									%		t   __main__i   s   https://curl.haxx.sei   t   =iJ   s   
s   os-errno(    (    Rk   t   sysR   t   version_infot   py3t   urllib.parset   parseR3   R    t   ioR   t   urllibt   urlparset	   cStringIOR   t   ImportErrort   signalR   R   R   Ri   t   lent   argvR%   t   cR8   R=   t   pprintRc   R@   R\   Rg   (    (    (    s,   lib/python2.7/site-packages/curl/__init__.pyt   <module>   s@   ‹		