
N9c    $   s    d  Z  E X d k Z Y d k Z Z d k Z [ d k Z \ d k Z ] d k Z ^ d k Z _ d k Z ` d k	 Z	 a d k
 Z
 b d k Z c d k Z d d k Z e d k Z f d k Z g d k Z i y j d k l Z Wn& k e j
 o l d k l Z n Xn y o d k Z Wn p e j
 o r e Z n Xu d k l Z l Z l Z l Z l Z l Z l Z l Z l Z l  Z  l! Z! z d k l" Z" } d k l# Z# l$ Z$ l% Z% l& Z&  d k l Z l Z  d Z'  e Z(  e d  Z)  d	   Z*  d
 e+ f d     YZ,  d e, e f d     YZ-  d e, f d     YZ.  d f  d     YZ/  d f  d     YZ0 ad   Z1 ld   Z2 d   Z3 d f  d     YZ4 d e4 f d     YZ5 d e4 f d     YZ6 d e4 f d     YZ7 d f  d      YZ8 d! e4 f d"     YZ9 d# f  d$     YZ: Cd% e4 f d&     YZ; qd' e4 f d(     YZ< d)   Z= d* e4 f d+     YZ> d, e4 f d-     YZ? d.   Z@ d/   ZA ;d0 e4 f d1     YZB \d2 e4 f d3     YZC d4 eC f d5     YZD d6 e4 f d7     YZE d8 f  d9     YZF eG d: j oe iH   d; j o d< Z# n- e iH   d= j o d> Z# n
 e Z# d? d@ dA dB dC dD dE dF dG dH dI f dJ dK dL dM dN g ZI e# e j	 o}  eI dO e# dP e# dQ e# dR e# g ZI e;   ZJ eJ iK dS e# dT 	dU  
e<   ZL eL iK dV e# dT dU  n eD   ZM eM iN dW  dX   ZO e8 dY eO dZ  ZP e9 eP  ZQ e* e3 eL eJ eM eE eQ   x eI d[ r ZR eS eR  e iT j o eR \ ZR ZU n
 !e ZU "eR GH#y $e) eR eU  ZV WnJ %e+ j
 o ZW &d\ GeW GHnV 'e iX j
 o ZW (d] GeW GHn0 X*eV iY   ZZ +eV i[   ,d^ e\ eZ  GH-H.e i] d_  qWn d S(`   s	  An extensible library for opening URLs using a variety of protocols

The simplest way to use this module is to call the urlopen function,
which accepts a string containing a URL or a Request object (described 
below).  It opens the URL and returns the results as file-like
object; the returned object has some extra methods described below.

The OpenerDirectory manages a collection of Handler objects that do
all the actual work.  Each Handler implements a particular protocol or 
option.  The OpenerDirector is a composite object that invokes the
Handlers needed to open the requested URL.  For example, the
HTTPHandler performs HTTP GET and POST requests and deals with
non-error returns.  The HTTPRedirectHandler automatically deals with
HTTP 301 & 302 redirect errors, and the HTTPDigestAuthHandler deals
with digest authentication.

urlopen(url, data=None) -- basic usage is that same as original
urllib.  pass the url and optionally data to post to an HTTP URL, and
get a file-like object back.  One difference is that you can also pass 
a Request instance instead of URL.  Raises a URLError (subclass of
IOError); for HTTP errors, raises an HTTPError, which can also be
treated as a valid response.

build_opener -- function that creates a new OpenerDirector instance.
will install the default handlers.  accepts one or more Handlers as
arguments, either instances or Handler classes that it will
instantiate.  if one of the argument is a subclass of the default
handler, the argument will be installed instead of the default.

install_opener -- installs a new opener as the default opener.

objects of interest:
OpenerDirector --

Request -- an object that encapsulates the state of a request.  the
state can be a simple as the URL.  it can also include extra HTTP
headers, e.g. a User-Agent.

BaseHandler --

exceptions:
URLError-- a subclass of IOError, individual protocols have their own
specific subclass

HTTPError-- also a valid HTTP response, so you can treat an HTTP error 
as an exceptional event or valid response

internals:
BaseHandler and parent
_call_chain conventions

Example usage:

import urllib2

# set up authentication info
authinfo = urllib2.HTTPBasicAuthHandler()
authinfo.add_password('realm', 'host', 'username', 'password')

# build a new opener that adds authentication and caching FTP handlers 
opener = urllib2.build_opener(authinfo, urllib2.CacheFTPHandler)

# install it
urllib2.install_opener(opener)

f = urllib2.urlopen('http://www.python.org/')


N(   s   StringIO(   s   unwraps   unquotes	   splittypes	   splithosts
   addinfourls	   splitports   splitgophertypes
   splitquerys	   splitattrs
   ftpwrappers	   noheaders(   s
   getproxies(   s	   localhosts   thishosts   url2pathnames   pathname2url(   s   splitgophertypes
   splitquerys   2.0a1c    s=      t  t j o  t   a  n  t  i |  |  Sd  S(   N(   s   _openers   Nones   build_openers   opens   urls   data(   s   urls   datas$   /mit/python/lib/python2.0/urllib2.pys   urlopen s   c    s      |  a d  S(   N(   s   openers   _opener(   s   openers$   /mit/python/lib/python2.0/urllib2.pys   install_opener s   s   URLErrorc      s     d   Z   d   Z RS(   Nc    s     | |  _  d  S(   N(   s   reasons   self(   s   selfs   reasons$   /mit/python/lib/python2.0/urllib2.pys   __init__ s   c    s     d |  i Sd  S(   Ns   <urlopen error %s>(   s   selfs   reason(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   __str__ s   (   s   __init__s   __str__(    s$   /mit/python/lib/python2.0/urllib2.pys   URLError s   s	   HTTPErrorc      s>    d  Z    e i Z  d   Z  d   Z  d   Z RS(   sB   Raised when HTTP error occurs, but also acts like non-error returnc    sY     |  i | | |   | |  _  | |  _  | |  _  | |  _  | |  _ d  S(   N(   s   selfs   _HTTPError__super_inits   fps   hdrss   urls   codes   msgs   filename(   s   selfs   urls   codes   msgs   hdrss   fps$   /mit/python/lib/python2.0/urllib2.pys   __init__ s   c    s     d |  i |  i f Sd  S(   Ns   HTTP Error %s: %s(   s   selfs   codes   msg(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   __str__ s   c    s(     |  i o  |  i i   n d  S(   N(   s   selfs   fps   close(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   __del__ s   (   s   __doc__s
   addinfourls   __init__s   _HTTPError__super_inits   __str__s   __del__(    s$   /mit/python/lib/python2.0/urllib2.pys	   HTTPError s
   		s   GopherErrorc      s     RS(   N(    (    s$   /mit/python/lib/python2.0/urllib2.pys   GopherError s   s   Requestc      s     e  h  d  Z  d   Z  d   Z  d   Z  d   Z  d   Z  d   Z  d   Z  d	   Z	  d
   Z
  d   Z RS(   Nc    sh     t  |  |  _  t |  _  t |  _  t |  _  | |  _  h  |  _	  |  i	 i
 |  d  S(   N(   s   unwraps   urls   selfs   _Request__originals   Nones   types   hosts   ports   datas   headerss   update(   s   selfs   urls   datas   headerss$   /mit/python/lib/python2.0/urllib2.pys   __init__ s   c    sz     | d  d j oS  | d }  t t d |  o+  t |  d |     t |  |  Sn n  t |  d  S(   Ni   s   _Request__r_s   get_(   s   attrs   names   hasattrs   Requests   getattrs   selfs   AttributeError(   s   selfs   attrs   names$   /mit/python/lib/python2.0/urllib2.pys   __getattr__ s   c    s     | |  _  d  S(   N(   s   datas   self(   s   selfs   datas$   /mit/python/lib/python2.0/urllib2.pys   add_data s   c    s     |  i t j	 Sd  S(   N(   s   selfs   datas   None(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   has_data s   c    s     |  i Sd  S(   N(   s   selfs   data(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   get_data s   c    s     |  i Sd  S(   N(   s   selfs   _Request__original(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   get_full_url s   c    sm     |  i t j oI  t |  i  \ |  _ |  _  t o |  i t j	 p t |  i  n  |  i Sd  S(   N(   s   selfs   types   Nones	   splittypes   _Request__originals   _Request__r_types	   __debug__s   AssertionError(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   get_type s   +c    sl     |  i t j oH  t |  i  \ |  _ |  _  |  i o  t |  i  |  _ n n  |  i Sd  S(   N(   s   selfs   hosts   Nones	   splithosts   _Request__r_types   _Request__r_hosts   unquote(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   get_host s
   c    s     |  i Sd  S(   N(   s   selfs   _Request__r_host(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   get_selector s   c    sp     | |  _  t |  i  \ |  _ |  _  t |  i  \ |  _ }  t	 |  i  |  _  |  i
 |  _ d  S(   N(   s   proxys   selfs   _Request__proxys	   splittypes   types   _Request__r_types	   splithosts   hosts   XXXs   unquotes   _Request__originals   _Request__r_host(   s   selfs   proxys   XXXs$   /mit/python/lib/python2.0/urllib2.pys	   set_proxy s
   c    s     | |  i | <d  S(   N(   s   vals   selfs   headerss   key(   s   selfs   keys   vals$   /mit/python/lib/python2.0/urllib2.pys
   add_header s   (   s   Nones   __init__s   __getattr__s   add_datas   has_datas   get_datas   get_full_urls   get_types   get_hosts   get_selectors	   set_proxys
   add_header(    s$   /mit/python/lib/python2.0/urllib2.pys   Request s   s   OpenerDirectorc      s\     d   Z  d   Z !d   Z $d   Z )d   Z 4e d  Z Ld   Z RS(   Nc    sM     d t  }  d | f g |  _  g  |  _  h  |  _  h  |  _ d  S(   Ns   Python-urllib/%ss
   User-agent(   s   __version__s   server_versions   selfs
   addheaderss   handlerss   handle_opens   handle_error(   s   selfs   server_versions$   /mit/python/lib/python2.0/urllib2.pys   __init__ s
   c 
   s  d } xt |  d r} | d d j oe | d  } |  i i |  o |  i | i |  n 	| g |  i | <
d } q n t	 i
 | d  } t	 i
 | | d d  | d } | d j o | | d | !d j o | |  } | | d } y t	 i |  } Wn t j
 o
 n X|  i i | h   }	 |	 i |  o |	 | i |  n | g |	 | <|	 |  i | <d } q n q W| o' |  i i |  | i |   n d  S(   Ni    i   s   _openi   s   _s   error(   s   addeds   get_methodss   handlers   meths   protocols   selfs   handle_opens   has_keys   appends   strings   finds   is   js   protos   kinds   atois
   ValueErrors   handle_errors   gets   dicts   handlerss
   add_parent(
   s   selfs   handlers   addeds   meths   protocols   is   js   protos   kinds   dicts$   /mit/python/lib/python2.0/urllib2.pys   add_handlers:   	 		
%)	
c    s   !"|  i   d  S(   N(   s   selfs   close(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   __del__!s   c    s<   $%x# |  i d %r } &| i   q W'g  |  _ d  S(   Ni    (   s   selfs   handlerss   handlers   close(   s   selfs   handlers$   /mit/python/lib/python2.0/urllib2.pys   close$s    	c 	   sq   ),| i | f   } -xO | d -rB } .t | |  } 0| |   } 1| t
 j	 o 2| Sn q$ Wd  S(   Ni    (   s   chains   gets   kinds   handlerss   handlers   getattrs	   meth_names   funcs   argss   results   None(	   s   selfs   chains   kinds	   meth_names   argss   handlerss   handlers   funcs   results$   /mit/python/lib/python2.0/urllib2.pys   _call_chain)s    	c    s"  46t  |  t i j o 7t | |  } n. 9| } :| t j	 o ;| i |  n <t	 o t
 | t  p t  >|  i |  i d ?d |  } @| o A| Sn C| i   } D|  i |  i | | d E|  } F| o G| Sn I|  i |  i d Jd |  Sd  S(   Ns   defaults   default_opens   _opens   unknowns   unknown_open(   s   types   fullurls   typess
   StringTypes   Requests   datas   reqs   Nones   add_datas	   __debug__s
   isinstances   AssertionErrors   selfs   _call_chains   handle_opens   results   get_types   type_(   s   selfs   fullurls   datas   reqs   results   type_s$   /mit/python/lib/python2.0/urllib2.pys   open4s"   	!

c    s   LM| d j o@ O|  i | } P| d } Qd | } Rd } S| } n# U|  i } V| d } Wd } X| | | f | } Y|  i |   } Z| o [| Sn ]| o* ^| d d f | } _|  i |   Sn d  S(	   Ns   httpi   s   http_error_%di   s   _errori    s   defaults   http_error_default(
   s   protos   selfs   handle_errors   dicts   argss	   meth_names   http_errs	   orig_argss   _call_chains   result(   s   selfs   protos   argss   dicts	   meth_names   http_errs	   orig_argss   results$   /mit/python/lib/python2.0/urllib2.pys   errorLs    		

(   s   __init__s   add_handlers   __del__s   closes   _call_chains   Nones   opens   error(    s$   /mit/python/lib/python2.0/urllib2.pys   OpenerDirector s    c    st   adt  |   t i t i t i t i f j o gd Sn ht  |   t i j o it |  d  Sn jd Sd  S(   Ni   s   __call__i    (	   s   types   objs   typess   BuiltinFunctionTypes   BuiltinMethodTypes
   LambdaTypes
   MethodTypes   InstanceTypes   hasattr(   s   objs$   /mit/python/lib/python2.0/urllib2.pys   is_callableas
   .c    s  lmh  } ng  } o| i |  i  px p| o q| d } r| d =s| t | i  } txU t |  d trB } ut
 | |  } vt |  t i j o wd | | <n qw Wq. WxxC t |   d xr0 } yt t
 |  |   o zd | | <n q W{| i   Sd  S(   Ni    i   (   s   methodss   classess   appends   insts	   __class__s   klasss   lists	   __bases__s   dirs   names   getattrs   attrs   types   typess   UnboundMethodTypes   is_callables   keys(   s   insts   methodss   classess   klasss   names   attrs$   /mit/python/lib/python2.0/urllib2.pys   get_methodsls$   		 

 	 	c     s  t    } t t t t t t t g } g  } x | d r } x |  d r } t |  t i j o+ t | |  o | i |  n nE t |  t i j o+ t | |  o | i |  n n qZ WqE Wx# | d r } | i |  q Wx& | d r } | i |    q(WxL |  d r? } t |  t i j o |   } n | i |  qTW| Sd S(   sn  Create an opener object from a list of handlers.

    The opener will use several default handlers, including support
    for HTTP and FTP.  If there is a ProxyHandler, it must be at the
    front of the list of handlers.  (Yuck.)

    If any of the handlers passed as arguments are subclasses of the
    default handlers, the default handlers will not be used.
    i    N(   s   OpenerDirectors   openers   ProxyHandlers   UnknownHandlers   HTTPHandlers   HTTPDefaultErrorHandlers   HTTPRedirectHandlers
   FTPHandlers   FileHandlers   default_classess   skips   klasss   handlerss   checks   types   typess	   ClassTypes
   issubclasss   appends   InstanceTypes
   isinstances   removes   add_handlers   h(   s   handlerss   openers   default_classess   skips   klasss   checks   hs$   /mit/python/lib/python2.0/urllib2.pys   build_openers4   		 	 	  	 	 	s   BaseHandlerc      s   d   Z  d   Z RS(   Nc    s   | |  _  d  S(   N(   s   parents   self(   s   selfs   parents$   /mit/python/lib/python2.0/urllib2.pys
   add_parents   c    s   t  |  _ d  S(   N(   s   Nones   selfs   parent(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   closes   (   s
   add_parents   close(    s$   /mit/python/lib/python2.0/urllib2.pys   BaseHandlers   s   HTTPDefaultErrorHandlerc      s   d   Z  RS(   Nc    s(   t  | i   | | | |   d  S(   N(   s	   HTTPErrors   reqs   get_full_urls   codes   msgs   hdrss   fp(   s   selfs   reqs   fps   codes   msgs   hdrss$   /mit/python/lib/python2.0/urllib2.pys   http_error_defaults   (   s   http_error_default(    s$   /mit/python/lib/python2.0/urllib2.pys   HTTPDefaultErrorHandlers   s   HTTPRedirectHandlerc      s#   d   Z  e  Z d Z RS(   Nc 	   sC  | i d  o | d } n, | i d  o | d } n d  S| i   } | i   t i | i
   |  } t | | i    } h  | _ t | d  o\ | i i |  o, t | i
   | |  i | |   n | i i | i  n | | i | <|  i i |  Sd  S(   Ns   locations   uris   error_302_dict(   s   headerss   has_keys   newurls   fps   reads   nils   closes   urlparses   urljoins   reqs   get_full_urls   Requests   get_datas   news   error_302_dicts   hasattrs	   HTTPErrors   codes   selfs   inf_msgs   msgs   updates   parents   open(	   s   selfs   reqs   fps   codes   msgs   headerss   newurls   nils   news$   /mit/python/lib/python2.0/urllib2.pys   http_error_302s"   sn   The HTTP server returned a redirect error that wouldlead to an infinite loop.
The last 302 error message was:
(   s   http_error_302s   http_error_301s   inf_msg(    s$   /mit/python/lib/python2.0/urllib2.pys   HTTPRedirectHandlers   	s   ProxyHandlerc      s    e  d  Z d   Z RS(   Nc  	  s   | t j o t   } n t o t | d  p
 t d  | |  _  xH | i   d r5 \ } } t
 |  d | | | |  i d   qe Wd  S(   Ns   has_keys   proxies must be a mappingi    s   %s_openc    s   | |  | |  S(   N(   s   meths   rs   proxys   type(   s   rs   proxys   types   meths$   /mit/python/lib/python2.0/urllib2.pys   <lambda>s    (   s   proxiess   Nones
   getproxiess	   __debug__s   hasattrs   AssertionErrors   selfs   itemss   types   urls   setattrs
   proxy_open(   s   selfs   proxiess   types   urls$   /mit/python/lib/python2.0/urllib2.pys   __init__s   $ c    sT   | i   } | i |  | | j o t Sn |  i i	 |  Sd  S(   N(
   s   reqs   get_types	   orig_types	   set_proxys   proxys   types   Nones   selfs   parents   open(   s   selfs   reqs   proxys   types	   orig_types$   /mit/python/lib/python2.0/urllib2.pys
   proxy_opens
   (   s   Nones   __init__s
   proxy_open(    s$   /mit/python/lib/python2.0/urllib2.pys   ProxyHandlers   
s   CustomProxyc      s/   e  e  d  Z d   Z d   Z RS(   Nc    s+   | |  _  | |  _ | |  _ d  S(   N(   s   protos   selfs   funcs
   proxy_addrs   addr(   s   selfs   protos   funcs
   proxy_addrs$   /mit/python/lib/python2.0/urllib2.pys   __init__s   c    s/   |  i o |  i |  o d Sn d  S(   Ni   (   s   selfs   funcs   req(   s   selfs   reqs$   /mit/python/lib/python2.0/urllib2.pys   handles   c    s   |  i Sd  S(   N(   s   selfs   addr(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys	   get_proxys   (   s   Nones   __init__s   handles	   get_proxy(    s$   /mit/python/lib/python2.0/urllib2.pys   CustomProxys   s   CustomProxyHandlerc      s5   d   Z   d   Z d   Z d   Z RS(   Nc    s   h  |  _ d  S(   N(   s   selfs   proxies(   s   selfs   proxiess$   /mit/python/lib/python2.0/urllib2.pys   __init__s   c    s    | i   } y |  i | } Wn t j
 o t Sn XxS | d rF } | i |  o- | i	 | i
    	|  i i |  Sn qU W
t Sd  S(   Ni    (   s   reqs   get_types   protos   selfs   proxiess   KeyErrors   Nones   ps   handles	   set_proxys	   get_proxys   parents   open(   s   selfs   reqs   protos   proxiess   ps$   /mit/python/lib/python2.0/urllib2.pys
   proxy_open s    	c    s!   | |  i i |  Sd  S(   N(   s   ps   selfs   parents   opens   req(   s   selfs   ps   reqs$   /mit/python/lib/python2.0/urllib2.pys   do_proxys   c    sT   |  i i | i  o |  i | i i |  n | g |  i | i <d  S(   N(   s   selfs   proxiess   has_keys   cpos   protos   append(   s   selfs   cpos$   /mit/python/lib/python2.0/urllib2.pys	   add_proxys   (   s   __init__s
   proxy_opens   do_proxys	   add_proxy(    s$   /mit/python/lib/python2.0/urllib2.pys   CustomProxyHandlers   s   HTTPPasswordMgrc      sA   d   Z  d   Z #d   Z ,d   Z 4d   Z RS(   Nc    s   h  |  _ d  S(   N(   s   selfs   passwd(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   __init__s   c    s   t  |  t i j o | g } n t t |  i |   } |  i i	 |  o  h  |  i | <n !| | f |  i | | <d  S(   N(   s   types   uris   typess
   StringTypes   tuples   maps   selfs
   reduce_uris   passwds   has_keys   realms   user(   s   selfs   realms   uris   users   passwds$   /mit/python/lib/python2.0/urllib2.pys   add_passwords   c    s   #$|  i i | h   } %|  i |  } &xY | i   d &rF \ } } 'x4 | d 'r' } (|  i | |  o )| Sn qZ Wq? W*t t f Sd  S(   Ni    (   s   selfs   passwds   gets   realms   domainss
   reduce_uris   authuris   itemss   uriss   authinfos   uris	   is_suburis   None(   s   selfs   realms   authuris   domainss   uriss   authinfos   uris$   /mit/python/lib/python2.0/urllib2.pys   find_user_password#s     	c    s[   ,-.t  i  |  } /| d o  0| d | d p d f Sn 2| d d f Sd S(   s9   Accept netloc or URI and extract only the netloc and pathi   i   s   /N(   s   urlparses   uris   parts(   s   selfs   uris   partss$   /mit/python/lib/python2.0/urllib2.pys
   reduce_uri,s
    c    s   489| | j o :d Sn ;| d | d j o <d Sn =t i i | d | d f  } >t |  t | d  j o ?d Sn @d Sd S(   sc   Check if test is below base in a URI tree

        Both args must be URIs in reduced form.
        i   i    N(   s   bases   tests   oss   paths   commonprefixs   commons   len(   s   selfs   bases   tests   commons$   /mit/python/lib/python2.0/urllib2.pys	   is_suburi4s   # (   s   __init__s   add_passwords   find_user_passwords
   reduce_uris	   is_suburi(    s$   /mit/python/lib/python2.0/urllib2.pys   HTTPPasswordMgrs
   		s   HTTPBasicAuthHandlerc      s;   CDe  i d  Z Jd   Z Sd   Z ]d   Z RS(   Ns!   [ 	]*([^ 	]+)[ 	]+realm="([^"]*)"c    s4   JKt    |  _ L|  i i |  _ Mt |  _ d  S(   N(   s   HTTPPasswordMgrs   selfs   passwds   add_passwords   Nones$   _HTTPBasicAuthHandler__current_realm(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   __init__Js   c 
   s   SU| i d t  } V| ol Wt i i |  } X| oI Y| i   \ } }	 Zt i |  d j o [|  i | |	  Sn n n d  S(   Ns   www-authenticates   basic(   s   headerss   gets   Nones   authreqs   HTTPBasicAuthHandlers   rxs   matchs   mos   groupss   schemes   realms   strings   lowers   selfs   retry_http_basic_auths   req(
   s   selfs   reqs   fps   codes   msgs   headerss   authreqs   mos   schemes   realms$   /mit/python/lib/python2.0/urllib2.pys   http_error_401Ss   

c 	   s   ]^|  i t j o _| |  _ n a| |  _ bt Sd| i   } e|  i i | |  \ } } f| oq gd | | f } ht i t i |   } i| i d d |  j|  i i |  } kt |  _ l| Sn nt |  _ ot Sd  S(   Ns   %s:%ss   Authorizations   Basic %s(   s   selfs$   _HTTPBasicAuthHandler__current_realms   Nones   realms   reqs   get_hosts   hosts   passwds   find_user_passwords   users   pws   raws   strings   strips   base64s   encodestrings   auths
   add_headers   parents   opens   resp(	   s   selfs   reqs   realms   hosts   users   pws   raws   auths   resps$   /mit/python/lib/python2.0/urllib2.pys   retry_http_basic_auth]s   
(   s   res   compiles   rxs   __init__s   http_error_401s   retry_http_basic_auth(    s$   /mit/python/lib/python2.0/urllib2.pys   HTTPBasicAuthHandlerCs   	
s   HTTPDigestAuthHandlerc      sV   qd  Z  vxd   Z }d   Z d   Z d   Z d   Z d   Z RS(   s   An authentication protocol defined by RFC 2069

    Digest authentication improves on basic authentication because it
    does not transmit passwords in the clear.
    c    s4   xyt    |  _ z|  i i |  _ {t |  _ d  S(   N(   s   HTTPPasswordMgrs   selfs   passwds   add_passwords   Nones%   _HTTPDigestAuthHandler__current_realm(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   __init__xs   c    sg   }| i d t  } | oA t i |  d } | d j o |  i | |  Sn n d  S(   Ns   www-authenticatei    s   Digest(
   s   headerss   gets   Nones   authreqs   strings   splits   kinds   selfs   retry_http_digest_auths   req(   s   selfs   reqs   fps   codes   msgs   headerss   authreqs   kinds$   /mit/python/lib/python2.0/urllib2.pys   http_error_401}s
   
c    s   t  i | d d  \ } } t t |   } |  i	 | |  } | oC | i d d |  |  i i |  } t |  _ | Sn d  S(   Ns    i   s   Authorizations	   Digest %s(   s   strings   splits   auths   tokens	   challenges   parse_keqv_lists   parse_http_lists   chals   selfs   get_authorizations   reqs
   add_headers   parents   opens   resps   Nones%   _HTTPDigestAuthHandler__current_realm(   s   selfs   reqs   auths   tokens	   challenges   chals   resps$   /mit/python/lib/python2.0/urllib2.pys   retry_http_digest_auths   
c    sL  yH | d } | d } | i d d  } | i d t  } Wn t j
 o t Sn X|  i	 t j o | |  _	 n | |  _	 t S|  i
 |  \ } } | t j o t Sn |  i i | | i    \ }	 }
 |	 t j o t Sn | i   o |  i | i   |  } n
 t } d |	 | |
 f } d | i   o d p d	 | i   f } | | |  d | | |  f  } d
 |	 | | | i   | f } | o | d | } n | o | d | } n | d j o | d | } n | Sd  S(   Ns   realms   nonces	   algorithms   MD5s   opaques   %s:%s:%ss   %s:%ss   POSTs   GETs>   username="%s", realm="%s", nonce="%s", uri="%s", response="%s"s   , opaque="%s"s   , digest="%s"s   , algorithm="%s"(   s   chals   realms   nonces   gets	   algorithms   Nones   opaques   KeyErrors   selfs%   _HTTPDigestAuthHandler__current_realms   get_algorithm_implss   Hs   KDs   passwds   find_user_passwords   reqs   get_full_urls   users   pws   has_datas   get_entity_digests   get_datas   entdigs   A1s   get_selectors   A2s   respdigs   base(   s   selfs   reqs   chals   realms   nonces	   algorithms   opaques   Hs   KDs   users   pws   entdigs   A1s   A2s   respdigs   bases$   /mit/python/lib/python2.0/urllib2.pys   get_authorizations@   	-("

c    si   | d j o t d  } n$ | d j o t d  } n | d  } | | f Sd  S(   Ns   MD5c    s   | t i |   i    S(   N(   s   es   md5s   news   xs   digest(   s   xs   es$   /mit/python/lib/python2.0/urllib2.pys   <lambda>s    s   SHAc    s   | t i |   i    S(   N(   s   es   shas   news   xs   digest(   s   xs   es$   /mit/python/lib/python2.0/urllib2.pys   <lambda>s    c    s   | d |  | f  S(   Ns   %s:%s(   s   Hs   ss   d(   s   ss   ds   Hs$   /mit/python/lib/python2.0/urllib2.pys   <lambda>s    (   s	   algorithms   encode_digests   Hs   KD(   s   selfs	   algorithms   Hs   KDs$   /mit/python/lib/python2.0/urllib2.pys   get_algorithm_implss   c    s   t  Sd  S(   N(   s   None(   s   selfs   datas   chals$   /mit/python/lib/python2.0/urllib2.pys   get_entity_digests   (   s   __doc__s   __init__s   http_error_401s   retry_http_digest_auths   get_authorizations   get_algorithm_implss   get_entity_digest(    s$   /mit/python/lib/python2.0/urllib2.pys   HTTPDigestAuthHandlerqs   	
2
c    s   g  } xs |  d rf } t |  d ?d @} | i t |  d  t |  d @} | i t |  d  q Wt i | d  Sd  S(   Ni    i   i   i   s    (	   s   hexreps   digests   cs   ords   ns   appends   hexs   strings   join(   s   digests   hexreps   cs   ns$   /mit/python/lib/python2.0/urllib2.pys   encode_digests   	 	s   HTTPHandlerc      s   d   Z  RS(   Nc    s*  | i   } | o t d   n y t i |  } | i   o_ | i   } | i
 d | i    | i d d  | i d d t |   n | i
 d | i    Wn* t i j
 o } t |   n X| i d |  x) |  i i d	 r } | i |   q#Wx5 | i i   d	 r \ } } | i | |  qUW| i   | i   o | i | d
  n | i   \ }	 }
 } | i   } |	 d j o t! | | | i"    Sn# |  i i d | | |	 |
 |  Sd  S(   Ns   no host givens   POSTs   Content-types!   application/x-www-form-urlencodeds   Content-lengths   %ds   GETs   Hosti    s   
i   s   http(#   s   reqs   get_hosts   hosts   URLErrors   httplibs   HTTPs   hs   has_datas   get_datas   datas
   putrequests   get_selectors	   putheaders   lens   sockets   errors   errs   selfs   parents
   addheaderss   argss   headerss   itemss   ks   vs
   endheaderss   sends   getreplys   codes   msgs   hdrss   getfiles   fps
   addinfourls   get_full_url(   s   selfs   reqs   hosts   hs   datas   errs   argss   ks   vs   codes   msgs   hdrss   fps$   /mit/python/lib/python2.0/urllib2.pys	   http_opens:   
! 	 (   s	   http_open(    s$   /mit/python/lib/python2.0/urllib2.pys   HTTPHandlers   s   UnknownHandlerc      s   d   Z  RS(   Nc    s)    | i   } t d |   d  S(   Ns   unknown url type: %s(   s   reqs   get_types   types   URLError(   s   selfs   reqs   types$   /mit/python/lib/python2.0/urllib2.pys   unknown_opens   (   s   unknown_open(    s$   /mit/python/lib/python2.0/urllib2.pys   UnknownHandlers   c    s   h  } xy |  d rl } t i | d d  \ } } | d d j o | d d j o 	| d d !} n 
| | | <q W| Sd S(   s>   Parse list of key=value strings where keys are not duplicated.i    s   =i   s   "N(   s   parseds   ls   elts   strings   splits   ks   v(   s   ls   parseds   elts   ks   vs$   /mit/python/lib/python2.0/urllib2.pys   parse_keqv_lists   	 	&c 	   s   g  } t |   } d } d } d } x| | j  o|  | } t i	 | d  } t i	 | d  } | d j o  | i |  |  !Pn "| d j oP #| o $t d  n3 &| i |  | | | ! '| | d } (q? n )| oc *| | j  oB +| i |  | | | ! ,| | d } -| } .d } n 0| | } nd 2| | j  o9 3| i |  | | | ! 4| | d } 5| } n 7d } 8| | d } q? W9t t i |  Sd S(   s   Parse lists as described by RFC 2068 Section 2.

    In particular, parse comman-separated lists where the elements of
    the list may include quoted-strings.  A quoted-string could
    contain a comma.
    i    s   ,s   "i   s   unbalanced quotesN(   s   lists   lens   ss   ends   is   inquotes   starts   curs   strings   finds   cs   qs   appends
   ValueErrors   maps   strip(	   s   ss   lists   ends   is   inquotes   starts   curs   cs   qs$   /mit/python/lib/python2.0/urllib2.pys   parse_http_listsD   				 


		s   FileHandlerc      s2   ;=d   Z  Fe Z Gd   Z Nd   Z RS(   Nc    sq   =>| i   } ?| d  d j o | d d !d j o# @d | _ A|  i i |  Sn C|  i |  Sd  S(   Ni   s   //i   s   /s   ftp(   s   reqs   get_selectors   urls   types   selfs   parents   opens   open_local_file(   s   selfs   reqs   urls$   /mit/python/lib/python2.0/urllib2.pys	   file_open=s
   (c    sR   GHt  i t j o. It i d  t i t i    f t  _ n Kt  i Sd  S(   Ns	   localhost(   s   FileHandlers   namess   Nones   sockets   gethostbynames   gethostname(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys	   get_namesGs   .c    s   NOt  i | i    d } Pt i t d | p d   } R| i	   } S| i   } T| o Ut |  \ } } n V| p! | o t i |  |  i   j o- Xt t t |  d  Y| d |  Sn Zt d   d  S(   Ni    s   Content-Type: %s
s
   text/plains   rbs   file:s   file not on local host(   s	   mimetypess
   guess_types   reqs   get_selectors   mtypes	   mimetoolss   Messages   StringIOs   headerss   get_hosts   hosts   files	   splitports   ports   sockets   gethostbynames   selfs	   get_namess
   addinfourls   opens   url2pathnames   URLError(   s   selfs   reqs   mtypes   headerss   hosts   files   ports$   /mit/python/lib/python2.0/urllib2.pys   open_local_fileNs   #
/(   s	   file_opens   Nones   namess	   get_namess   open_local_file(    s$   /mit/python/lib/python2.0/urllib2.pys   FileHandler;s   		s
   FTPHandlerc      s   \]d   Z  d   Z RS(   Nc  	  s  ]^| i   } _| o `t d d f  n by ct i |  } Wn* dt i j
 o } et |   n Xft	 |  \ } } g| t j o ht i } n it | i    \ } } jt |  } kt i | d  } l| d  | d f \ } } m| o	 | d o n| d } n od }	 }
 py;q|  i |	 |
 | | |  } r| o d p d } sxv | d sri } tt |  \ } } ut i |  d	 j o | d
 d d d d d f j o wt i  |  } n qWx| i! | |  \ } } y| t j	 o
 | d j o) zt$ d |  } {t& i' |  } n }t)   } ~t* | | | i+    SWn: t i, j
 o( } t d | f t- i.   d  n Xd  S(   Ns	   ftp errors   no host givens   /i   i    s    s   Is   Ds   types   as   As   is   ds   Content-Length: %d
i   (/   s   reqs   get_hosts   hosts   IOErrors   sockets   gethostbynames   errors   msgs   URLErrors	   splitports   ports   Nones   ftplibs   FTP_PORTs	   splitattrs   get_selectors   paths   attrss   unquotes   strings   splitfieldss   dirss   files   users   passwds   selfs   connect_ftps   fws   types   attrs   values   lowers   uppers   retrfiles   fps   retrlens   StringIOs   sfs	   mimetoolss   Messages   headerss	   noheaderss
   addinfourls   get_full_urls
   all_errorss   syss   exc_info(   s   selfs   reqs   hosts   msgs   ports   paths   attrss   dirss   files   users   passwds   fws   types   attrs   values   fps   retrlens   sfs   headerss$   /mit/python/lib/python2.0/urllib2.pys   ftp_open]sB    	8c    s)   t  | | | | |  } | Sd  S(   N(   s
   ftpwrappers   users   passwds   hosts   ports   dirss   fw(   s   selfs   users   passwds   hosts   ports   dirss   fws$   /mit/python/lib/python2.0/urllib2.pys   connect_ftps   (   s   ftp_opens   connect_ftp(    s$   /mit/python/lib/python2.0/urllib2.pys
   FTPHandler\s   %s   CacheFTPHandlerc      sA   d   Z  d   Z d   Z d   Z d   Z RS(   Nc    sC   h  |  _ h  |  _ d |  _ d |  _ d |  _ d  S(   Ni    i<   i   (   s   selfs   caches   timeouts   soonests   delays	   max_conns(   s   selfs$   /mit/python/lib/python2.0/urllib2.pys   __init__s
   c    s   | |  _ d  S(   N(   s   ts   selfs   delay(   s   selfs   ts$   /mit/python/lib/python2.0/urllib2.pys
   setTimeouts   c    s   | |  _ d  S(   N(   s   ms   selfs	   max_conns(   s   selfs   ms$   /mit/python/lib/python2.0/urllib2.pys   setMaxConnss   c    s   | | | | f } |  i i |  o! t i   |  i	 |  i
 | <n@ t | | | | |  |  i | <t i   |  i	 |  i
 | <|  i   |  i | Sd  S(   N(   s   users   passwds   hosts   ports   keys   selfs   caches   has_keys   times   delays   timeouts
   ftpwrappers   dirss   check_cache(   s   selfs   users   passwds   hosts   ports   dirss   keys$   /mit/python/lib/python2.0/urllib2.pys   connect_ftps   !"c    sJ  t  i    } |  i | j on xd |  i i   d rN \ } } | | j  o2 |  i | i	   |  i | =|  i | =n q: Wn t
 |  i i    |  _ t |  i  |  i j o| xW |  i i   d rA \ } } | |  i j o" |  i | =|  i | =Pn q Wt
 |  i i    |  _ n d  S(   Ni    (   s   times   ts   selfs   soonests   timeouts   itemss   ks   vs   caches   closes   mins   valuess   lens	   max_conns(   s   selfs   ts   ks   vs$   /mit/python/lib/python2.0/urllib2.pys   check_caches"     (   s   __init__s
   setTimeouts   setMaxConnss   connect_ftps   check_cache(    s$   /mit/python/lib/python2.0/urllib2.pys   CacheFTPHandlers
   
s   GopherHandlerc      s   d   Z  RS(   Nc    s   | i   } | o t d   n t |  } | i   } t |  \ } } t	 |  \ } } t |  } | o+ t |  } t i | | |  } n t i | |  } t | t   | i    Sd  S(   Ns   no host given(   s   reqs   get_hosts   hosts   GopherErrors   unquotes   get_selectors   selectors   splitgophertypes   types
   splitquerys   querys	   gopherlibs
   send_querys   fps   send_selectors
   addinfourls	   noheaderss   get_full_url(   s   selfs   reqs   hosts   selectors   types   querys   fps$   /mit/python/lib/python2.0/urllib2.pys   gopher_opens   
(   s   gopher_open(    s$   /mit/python/lib/python2.0/urllib2.pys   GopherHandlers   s   OpenerFactoryc      sn   e  e e e e e g Z e g Z g  Z	 g  Z
 d   Z d   Z d   Z d   Z RS(   Nc    s   |  i | g |  _ d  S(   N(   s   selfs   proxy_handlerss   ph(   s   selfs   phs$   /mit/python/lib/python2.0/urllib2.pys   add_proxy_handlers   c    s   |  i | g |  _ d  S(   N(   s   selfs   handlerss   h(   s   selfs   hs$   /mit/python/lib/python2.0/urllib2.pys   add_handlers   c    s
   d  S(   N(    (   s   selfs   hs$   /mit/python/lib/python2.0/urllib2.pys   replace_handlers   c    sh   t    } xO |  i d r? } t |  t i j o |   } n | i |  q Wd  S(   Ni    (	   s   OpenerDirectorys   openers   selfs   proxy_handlerss   phs   types   typess	   ClassTypes   add_handler(   s   selfs   openers   phs$   /mit/python/lib/python2.0/urllib2.pys   build_openers    	(   s   UnknownHandlers   HTTPHandlers   HTTPDefaultErrorHandlers   HTTPRedirectHandlers
   FTPHandlers   FileHandlers   default_handlerss   ProxyHandlers   proxy_handlerss   handlerss   replacement_handlerss   add_proxy_handlers   add_handlers   replace_handlers   build_opener(    s$   /mit/python/lib/python2.0/urllib2.pys   OpenerFactorys   		s   __main__s	   bitdiddles   bitdiddle.cnri.reston.va.uss   bitdiddle.concentric.nets	   localhosts3   gopher://gopher.lib.ncsu.edu/11/library/stacks/Alexs"   gopher://gopher.vt.edu:10010/10/33s   file:/etc/passwds   file://nonsensename/etc/passwds'   ftp://www.python.org/pub/tmp/httplib.pys&   ftp://www.python.org/pub/tmp/imageop.cs!   ftp://www.python.org/pub/tmp/blats   http://www.espn.com/s)   http://www.python.org/Spanish/Inquistion/s.   http://grail.cnri.reston.va.us/cgi-bin/faqw.pys:   query=pythonistas&querytype=simple&casefold=yes&req=searchs   http://www.python.org/s!   ftp://prep.ai.mit.edu/welcome.msgs'   ftp://www.python.org/pub/tmp/figure.prns&   ftp://www.python.org/pub/tmp/interp.pls2   http://checkproxy.cnri.reston.va.us/test/test.htmls   file://%s/etc/passwds   http://%s/simple/s   http://%s/digest/s   http://%s/not/found.hs   basic_test_realms   jhyltons   passwords   digest_test_realmi   c    s>   |  i   } | GH| d d j o d Sn d  S(   Ni   s   .cnri.reston.va.usi   (   s   reqs   get_hosts   host(   s   reqs   hosts$   /mit/python/lib/python2.0/urllib2.pys   at_cnris   s   https   proxy.cnri.reston.va.usi    s   IOError:s   socket.error:s   read %d bytesf0.1(^   s   __doc__s   strings   sockets   UserDicts   httplibs   res   base64s   typess   urlparses   oss   md5s	   mimetypess	   mimetoolss   ftplibs   syss   times	   gopherlibs	   cStringIOs   StringIOs   ImportErrors   shas   Nones   urllibs   unwraps   unquotes	   splittypes	   splithosts
   addinfourls	   splitports   splitgophertypes
   splitquerys	   splitattrs
   ftpwrappers	   noheaderss
   getproxiess	   localhosts   thishosts   url2pathnames   pathname2urls   __version__s   _openers   urlopens   install_openers   IOErrors   URLErrors	   HTTPErrors   GopherErrors   Requests   OpenerDirectors   is_callables   get_methodss   build_openers   BaseHandlers   HTTPDefaultErrorHandlers   HTTPRedirectHandlers   ProxyHandlers   CustomProxys   CustomProxyHandlers   HTTPPasswordMgrs   HTTPBasicAuthHandlers   HTTPDigestAuthHandlers   encode_digests   HTTPHandlers   UnknownHandlers   parse_keqv_lists   parse_http_lists   FileHandlers
   FTPHandlers   CacheFTPHandlers   GopherHandlers   OpenerFactorys   __name__s   gethostnames   urlss   bauths   add_passwords   dauths   cfhs
   setTimeouts   at_cnris   ps   phs   urls   types	   TupleTypes   reqs   fs   errs   errors   reads   bufs   closes   lens   sleep(    s$   /mit/python/lib/python2.0/urllib2.pys   ?E s   L"			Ci$$-.^
%
.!+.	<)
 		