;ò
óŒü?c           @   s  d  Z  d k Z d k Z d k Z d k Z d k Z d d d d d d d d	 d
 d d d d d d d d d d d d d d d d d d d d g Z d Z d  Z e i	 d! j o d" k
 l Z l Z na e i	 d# j o d" k l Z l Z n: e i	 d$ j o d" k l Z l Z n d% „  Z d& „  Z e a e e d' „ Z e e e d( „ Z d) „  Z h  Z d f  d* „  ƒ  YZ d e f d+ „  ƒ  YZ e a d, „  Z e a d- „  Z e a d. „  Z e a d/ „  Z d0 f  d1 „  ƒ  YZ d2 f  d3 „  ƒ  YZ  d4 e  f d5 „  ƒ  YZ! d6 e  f d7 „  ƒ  YZ" d8 e  f d9 „  ƒ  YZ# d: „  Z$ y e% Wn e& j
 o d; „  Z' n Xd< „  Z' d= „  Z( d> „  Z) e a* d? „  Z+ e a, d@ „  Z- e a. dA „  Z/ e a0 dB „  Z1 e a2 dC „  Z3 e a4 dD dE „ Z5 e a6 dF „  Z7 e a8 dG „  Z9 dH „  Z: e a; dI „  Z< dJ „  Z= dK „  Z> dL „  Z? dM Z@ e@ dN ZA e aB dO „  ZC dN dP „ ZD dQ dR „ ZE dS dT „ ZF dU „  ZG e i	 d! j o dV „  ZH dW „  ZI n? e i	 d# j o dX „  ZJ dY „  ZH dZ „  ZI n eG ZH d[ „  ZI d\ „  ZK d] „  ZL g  d^ „ ZM d_ „  ZN eO d` j o eN ƒ  n d S(a   s»  Open an arbitrary URL.

See the following document for more info on URLs:
"Names and Addresses, URIs, URLs, URNs, URCs", at
http://www.w3.org/pub/WWW/Addressing/Overview.html

See also the HTTP spec (from which the error codes are derived):
"HTTP - Hypertext Transfer Protocol", at
http://www.w3.org/pub/WWW/Protocols/

Related standards and specs:
- RFC1808: the "relative URL" spec. (authoritative status)
- RFC1738 - the "URL standard". (authoritative status)
- RFC1630 - the "URI spec". (informational status)

The object returned by URLopener().open(file) will differ per
protocol.  All you know is that is has methods read(), readline(),
readlines(), fileno(), close() and info().  The read*(), fileno()
and close() methods work like those of open files.
The info() method returns a mimetools.Message object which can be
used to query various info about the object, if available.
(mimetools.Message objects are queried with the getheader() method.)
Ns   urlopens	   URLopeners   FancyURLopeners   urlretrieves
   urlcleanups   quotes
   quote_pluss   unquotes   unquote_pluss	   urlencodes   url2pathnames   pathname2urls   splittags	   localhosts   thishosts	   ftperrorss   basejoins   unwraps	   splittypes	   splithosts	   splitusers   splitpasswds	   splitports
   splitnports
   splitquerys	   splitattrs
   splitvalues   splitgophertypes
   getproxiess   1.15i
   s   mac(   s   url2pathnames   pathname2urls   nts   riscosc         C   s   t  |  ƒ Sd  S(   N(   s   unquotes   pathname(   s   pathname(    (    s#   /mit/python/lib/python2.3/urllib.pys   url2pathname3   s    c         C   s   t  |  ƒ Sd  S(   N(   s   quotes   pathname(   s   pathname(    (    s#   /mit/python/lib/python2.3/urllib.pys   pathname2url5   s    c         C   ss   | t j	 o t d | ƒ } n" t o t ƒ  } | a n t } | t j o | i |  ƒ Sn | i |  | ƒ Sd S(   s.   urlopen(url [, data]) -> open file-like objects   proxiesN(   s   proxiess   Nones   FancyURLopeners   openers
   _urlopeners   datas   opens   url(   s   urls   datas   proxiess   opener(    (    s#   /mit/python/lib/python2.3/urllib.pys   urlopenA   s      	
c         C   s/   t  o t ƒ  a  n t  i |  | | | ƒ Sd  S(   N(   s
   _urlopeners   FancyURLopeners   retrieves   urls   filenames
   reporthooks   data(   s   urls   filenames
   reporthooks   data(    (    s#   /mit/python/lib/python2.3/urllib.pys   urlretrieveO   s     c           C   s   t  o t  i ƒ  n d  S(   N(   s
   _urlopeners   cleanup(    (    (    s#   /mit/python/lib/python2.3/urllib.pys
   urlcleanupT   s    c           B   sõ   t  Z d  Z e Z d e Z e d „ Z d „  Z d „  Z	 d „  Z
 d „  Z e d „ Z e d „ Z e d	 „ Z e e e d
 „ Z e d „ Z e d „ Z d „  Z e e d ƒ o e d „ Z n d „  Z d „  Z d „  Z d „  Z e d „ Z RS(   s,  Class to open URLs.
    This is a class rather than just a subroutine because we may need
    more than one set of global protocol-specific options.
    Note -- this is a base class for those who don't want the
    automatic handling of errors type 302 (relocated) and 401
    (authorization needed).s   Python-urllib/%sc         K   s¡   | t j o t ƒ  } n t | d ƒ p
 t d ‚ | |  _  | i d ƒ |  _ | i d ƒ |  _	 d |  i
 f g |  _ g  |  _ t i |  _ t |  _ t |  _ d  S(   Ns   has_keys   proxies must be a mappings   key_files	   cert_files
   User-agent(   s   proxiess   Nones
   getproxiess   hasattrs   AssertionErrors   selfs   x509s   gets   key_files	   cert_files   versions
   addheaderss   _URLopener__tempfiless   oss   unlinks   _URLopener__unlinks	   tempcaches   ftpcache(   s   selfs   proxiess   x509(    (    s#   /mit/python/lib/python2.3/urllib.pys   __init__g   s    			c         C   s   |  i ƒ  d  S(   N(   s   selfs   close(   s   self(    (    s#   /mit/python/lib/python2.3/urllib.pys   __del__~   s    c         C   s   |  i ƒ  d  S(   N(   s   selfs   cleanup(   s   self(    (    s#   /mit/python/lib/python2.3/urllib.pys   close   s    c         C   so   |  i oF x8 |  i D]- } y |  i | ƒ Wq t j
 o q Xq W|  i 2n |  i o |  i i ƒ  n d  S(   N(   s   selfs   _URLopener__tempfiless   files   _URLopener__unlinks   OSErrors	   tempcaches   clear(   s   selfs   file(    (    s#   /mit/python/lib/python2.3/urllib.pys   cleanup„   s    

 	
c         G   s   |  i i | ƒ d S(   sd   Add a header to be used by the HTTP interface only
        e.g. u.addheader('Accept', 'sound/basic')N(   s   selfs
   addheaderss   appends   args(   s   selfs   args(    (    s#   /mit/python/lib/python2.3/urllib.pys	   addheader’   s     c         C   sÕ  t  t | ƒ ƒ } |  i o | |  i j o6 |  i | \ } } t | d ƒ } t	 | | | ƒ Sn t
 | ƒ \ } } | o
 d } n | |  i j oA |  i | }
 t
 |
 ƒ \ } } t | ƒ \ }	 } |	 | f } n t }
 d | } | |  _ d | j o d i | i d ƒ ƒ } n t |  | ƒ o2 |
 o |  i |
 | | ƒ Sq\|  i | | ƒ Sn y> | t j o t |  | ƒ | ƒ Sn t |  | ƒ | | ƒ SWn4 t i j
 o% } t  d | f t! i" ƒ  d ‚ n Xd S(	   s6   Use URLopener().open(file) instead of open(file, 'r').s   rbs   files   open_s   -s   _s   socket errori   N(#   s   unwraps   toBytess   fullurls   selfs	   tempcaches   filenames   headerss   opens   fps
   addinfourls	   splittypes   urltypes   urls   proxiess   proxys	   proxyhosts	   splithosts   hosts   selectors   Nones   names   types   joins   splits   hasattrs   open_unknown_proxys   datas   open_unknowns   getattrs   sockets   errors   msgs   IOErrors   syss   exc_info(   s   selfs   fullurls   datas	   proxyhosts   urltypes   filenames   msgs   fps   selectors   hosts   proxys   names   urls   headers(    (    s#   /mit/python/lib/python2.3/urllib.pys   open˜   s:     

	c         C   s(   t  | ƒ \ } } t d d | f ‚ d S(   s/   Overridable interface to open unknown URL type.s	   url errors   unknown url typeN(   s	   splittypes   fullurls   types   urls   IOError(   s   selfs   fullurls   datas   urls   type(    (    s#   /mit/python/lib/python2.3/urllib.pys   open_unknown»   s     c         C   s,   t  | ƒ \ } } t d d | | f ‚ d S(   s/   Overridable interface to open unknown URL type.s	   url errors   invalid proxy for %sN(   s	   splittypes   fullurls   types   urls   IOErrors   proxy(   s   selfs   proxys   fullurls   datas   urls   type(    (    s#   /mit/python/lib/python2.3/urllib.pys   open_unknown_proxyÀ   s     c         C   sÍ  t  t | ƒ ƒ } |  i o | |  i j o |  i | Sn t | ƒ \ } } | t	 j o | p
 | d j oX y< |  i
 | ƒ } | i ƒ  } ~ t t | ƒ d ƒ | f SWqÇ t j
 o	 } qÇ Xn |  i | | ƒ } | i ƒ  } | o t | d ƒ } n´ d k }
 t | ƒ \ } } t | p d ƒ \ } } t | p d ƒ \ } } t | p d ƒ \ } } t i i | ƒ d } |
 i | ƒ \ } } |  i  i! | ƒ t i" | d ƒ } | | f } |  i t	 j	 o | |  i | <n d d } d }	 d } | o5 d	 | j o t( | d
 ƒ }	 n | d | |	 ƒ n | i) | ƒ } | o | d | |	 ƒ n xM | oE | i+ | ƒ | i) | ƒ } | d } | o | | | |	 ƒ q^q^W| i, ƒ  | i, ƒ  ~ ~ | Sd S(   st   retrieve(url) returns (filename, headers) for a local object
        or (tempfilename, headers) for a remote object.s   filei   s   wbNs    i   i   iÿÿÿÿs   content-lengths   Content-Lengthi    (-   s   unwraps   toBytess   urls   selfs	   tempcaches	   splittypes   types   url1s   filenames   Nones   open_local_files   fps   infos   hdrss   url2pathnames	   splithosts   IOErrors   msgs   opens   datas   headerss   tfps   tempfiles   garbages   paths
   splitquerys	   splitattrs   oss   splitexts   suffixs   mkstemps   fds   _URLopener__tempfiless   appends   fdopens   results   bss   sizes   blocknums
   reporthooks   ints   reads   blocks   writes   close(   s   selfs   urls   filenames
   reporthooks   datas   suffixs   garbages   results   blocknums   sizes   tempfiles   url1s   msgs   types   fps   hdrss   fds   bss   paths   tfps   headerss   block(    (    s#   /mit/python/lib/python2.3/urllib.pys   retrieveÆ   sf     "		
 


c         C   sÖ  d k  } t } t | t ƒ oE t | ƒ \ } } | o" t	 | ƒ \ } } t
 | ƒ } n | } n¬ | \ } } t | ƒ \ } } | } t } | i ƒ  d j o
 t } ne t | ƒ \ } } | o t	 | ƒ \ } } n | o d | | | f } n t | ƒ o
 | } n | o t d d f ‚ n | o" d k } | i | ƒ i ƒ  }
 n t }
 | i | ƒ } | t j	 o> | i d | ƒ | i d d ƒ | i d	 d
 t | ƒ ƒ n | i d | ƒ |
 o | i d d |
 ƒ n | o | i d | ƒ n x |  i D] }	 | i |	 Œ  qW| i ƒ  | t j	 o | i  | ƒ n | i! ƒ  \ } } } | i% ƒ  } | d j o t' | | d | ƒ SnG | t j o |  i( | | | | | ƒ Sn |  i( | | | | | | ƒ Sd S(   s   Use HTTP protocol.Ns   https	   %s://%s%ss
   http errors   no host givens   POSTs   Content-types!   application/x-www-form-urlencodeds   Content-lengths   %ds   GETs   Authorizations   Basic %ss   HostiÈ   s   http:()   s   httplibs   Nones   user_passwds
   isinstances   urls   strs	   splithosts   hosts   selectors	   splitusers   unquotes   realhosts	   splittypes   urltypes   rests   lowers   proxy_bypasss   IOErrors   base64s   encodestrings   strips   auths   HTTPs   hs   datas
   putrequests	   putheaders   lens   selfs
   addheaderss   argss
   endheaderss   sends   getreplys   errcodes   errmsgs   headerss   getfiles   fps
   addinfourls
   http_error(   s   selfs   urls   datas   rests   errcodes   urltypes   headerss   base64s   fps   argss   auths   selectors   hosts   httplibs   hs   realhosts   user_passwds   errmsg(    (    s#   /mit/python/lib/python2.3/urllib.pys	   open_httpþ   sf     	


 	  
  
c   
      C   s   d | } t |  | ƒ of t |  | ƒ } | t j o | | | | | | ƒ }	 n | | | | | | | ƒ }	 |	 o |	 Sq€ n |  i | | | | | ƒ Sd S(   s›   Handle http errors.
        Derived class can override this, or provide specific handlers
        named http_error_DDD where DDD is the 3-digit error code.s   http_error_%dN(   s   errcodes   names   hasattrs   selfs   getattrs   methods   datas   Nones   urls   fps   errmsgs   headerss   results   http_error_default(
   s   selfs   urls   fps   errcodes   errmsgs   headerss   datas   names   methods   result(    (    s#   /mit/python/lib/python2.3/urllib.pys
   http_error6  s     
 c         C   s/   | i ƒ  } | i ƒ  t d | | | f ‚ d S(   s>   Default error handler: close the connection and raise IOError.s
   http errorN(   s   fps   reads   voids   closes   IOErrors   errcodes   errmsgs   headers(   s   selfs   urls   fps   errcodes   errmsgs   headerss   void(    (    s#   /mit/python/lib/python2.3/urllib.pys   http_error_defaultE  s     
s   sslc         C   sÑ  d k  } t } t | t ƒ oE t | ƒ \ } }
 | o" t	 | ƒ \ } } t
 | ƒ } n | } n• | \ } }
 t |
 ƒ \ } } | } t } | i ƒ  d j o
 t } nN t | ƒ \ } } | o t	 | ƒ \ } } n | o d | | | f }
 n | o t d d f ‚ n | o" d k } | i | ƒ i ƒ  } n t } | i | d d |  i d |  i ƒ} | t j	 o> | i d	 |
 ƒ | i d
 d ƒ | i d d t | ƒ ƒ n | i d |
 ƒ | o | i d | ƒ n | o | i d | ƒ n x |  i D] }	 | i |	 Œ  qW| i  ƒ  | t j	 o | i! | ƒ n | i" ƒ  \ } } } | i& ƒ  } | d j o t( | | d | ƒ SnG | t j o |  i) | | | | | ƒ Sn |  i) | | | | | | ƒ Sd S(   s   Use HTTPS protocol.Ns   httpss	   %s://%s%ss   https errors   no host giveni    s   key_files	   cert_files   POSTs   Content-types!   application/x-www-form-urlencodeds   Content-lengths   %ds   GETs   Authorization: Basic %ss   HostiÈ   s   https:(*   s   httplibs   Nones   user_passwds
   isinstances   urls   strs	   splithosts   hosts   selectors	   splitusers   unquotes   realhosts	   splittypes   urltypes   rests   lowers   IOErrors   base64s   encodestrings   strips   auths   HTTPSs   selfs   key_files	   cert_files   hs   datas
   putrequests	   putheaders   lens
   addheaderss   argss
   endheaderss   sends   getreplys   errcodes   errmsgs   headerss   getfiles   fps
   addinfourls
   http_error(   s   selfs   urls   datas   rests   errcodes   urltypes   headerss   base64s   fps   argss   selectors   hosts   auths   httplibs   hs   realhosts   user_passwds   errmsg(    (    s#   /mit/python/lib/python2.3/urllib.pys
   open_httpsL  sj     	

 			  
  
c         C   sË   d k  } t | ƒ \ } } | o t d d f ‚ n t | ƒ } t | ƒ \ } } t	 | ƒ \ } } t | ƒ } | o% t | ƒ } | i | | | ƒ } n | i | | ƒ } t | t ƒ  d | ƒ Sd S(   s   Use Gopher protocol.Ns   gopher errors   no host givens   gopher:(   s	   gopherlibs	   splithosts   urls   hosts   selectors   IOErrors   unquotes   splitgophertypes   types
   splitquerys   querys
   send_querys   fps   send_selectors
   addinfourls	   noheaders(   s   selfs   urls	   gopherlibs   hosts   fps   querys   selectors   type(    (    s#   /mit/python/lib/python2.3/urllib.pys   open_gopher…  s     	 c         C   sa   | d  d j o+ | d d !d j o | d d !i ƒ  d j o |  i | ƒ Sn |  i | ƒ Sd S(   s/   Use local file or FTP depending on form of URL.i   s   //i   s   /i   s
   localhost/N(   s   urls   lowers   selfs   open_ftps   open_local_file(   s   selfs   url(    (    s#   /mit/python/lib/python2.3/urllib.pys	   open_file•  s     ?c         C   s½  d k  }	 d k } d k }
 d k } t | ƒ \ } } t | ƒ } y t
 i | ƒ } Wn0 t j
 o$ } t | i | i | i ƒ ‚ n X| i } |
 i | i ƒ } |	 i | ƒ d } | i | i d | p d | | f ƒ ƒ } | oB | } | d  d j o d | } n t t | d ƒ | | ƒ Sn t | ƒ \ } } | o t! i" | ƒ t# ƒ  t$ ƒ  f j oB | } | d  d j o d | } n t t | d ƒ | | ƒ Sn t d	 d
 f ‚ d S(   s   Use local file.Ni    s6   Content-Type: %s
Content-Length: %d
Last-modified: %s
s
   text/plaini   s   /s   file://s   rbs   local file errors   not on local host(%   s	   mimetypess	   mimetoolss   rfc822s   StringIOs	   splithosts   urls   hosts   files   url2pathnames	   localnames   oss   stats   statss   OSErrors   es   IOErrors   errnos   strerrors   filenames   st_sizes   sizes
   formatdates   st_mtimes   modifieds
   guess_types   mtypes   Messages   headerss   urlfiles
   addinfourls   opens	   splitports   ports   sockets   gethostbynames	   localhosts   thishost(   s   selfs   urls	   mimetoolss   mtypes   files	   localnames   ports   sizes   statss	   mimetypess   rfc822s   urlfiles   hosts   es   StringIOs   modifieds   headers(    (    s#   /mit/python/lib/python2.3/urllib.pys   open_local_fileœ  s4     $ 	,*c         C   s¡  d k  } d k } d k } t | ƒ \ } } | o t d d f ‚ n t | ƒ \ } } t
 | ƒ \ } } | o t | ƒ \ } } n t } t | ƒ } t | p d ƒ } t | p d ƒ } t i | ƒ } | o d k }
 |
 i } n t | ƒ } t | ƒ \ } } t | ƒ } | i d ƒ }	 |	 d  |	 d f \ }	 } |	 o	 |	 d o |	 d }	 n |	 o	 |	 d o d |	 d <n | | | d i |	 ƒ f } t |  i ƒ t j oP xM |  i i  ƒ  D]8 } | | j o% |  i | } |  i | =| i# ƒ  qÄqÄWn yb| |  i j o# t$ | | | | |	 ƒ |  i | <n | o
 d	 } n d
 } xb | D]Z } t' | ƒ \ } } | i) ƒ  d j o | d d d d
 d d	 f j o | i* ƒ  } qZqZW|  i | i+ | | ƒ \ } } | i. d | ƒ d } d } | o | d | 7} n | t j	 o
 | d j o | d | 7} n | i1 | i | ƒ ƒ } t2 | | d | ƒ SWn4 t3 ƒ  j
 o% } t d | f t5 i6 ƒ  d ‚ n Xd S(   s   Use FTP protocol.Ns	   ftp errors   no host givens    s   /iÿÿÿÿi    i   s   Ds   Is   types   as   As   is   ds   ftp:s   Content-Type: %s
s   Content-Length: %d
i   (7   s	   mimetypess	   mimetoolss   StringIOs	   splithosts   urls   hosts   paths   IOErrors	   splitports   ports	   splitusers   users   splitpasswds   passwds   Nones   unquotes   sockets   gethostbynames   ftplibs   FTP_PORTs   ints	   splitattrs   attrss   splits   dirss   files   joins   keys   lens   selfs   ftpcaches   MAXFTPCACHEs   keyss   ks   vs   closes
   ftpwrappers   types   attrs
   splitvalues   values   lowers   uppers   retrfiles   fps   retrlens
   guess_types   mtypes   headerss   Messages
   addinfourls	   ftperrorss   msgs   syss   exc_info(   s   selfs   urls	   mimetoolss   mtypes   fps   attrss   files   ports   types   dirss   ftplibs	   mimetypess   passwds   msgs   hosts   users   keys   paths   retrlens   attrs   StringIOs   ks   values   headerss   v(    (    s#   /mit/python/lib/python2.3/urllib.pys   open_ftp»  sp       	   
# 
 2c         C   sª  d k  } d k } y | i d d ƒ \ } } Wn" t j
 o t d d f ‚ n X| o
 d } n | i d ƒ } | d j o d	 | | j o | | d }	 | |  } n d
 }	 g  } | i d t i d t i t i ƒ  ƒ ƒ ƒ | i d | ƒ |	 d j o d k } | i | ƒ } n t | ƒ } | i d t | ƒ ƒ | i d
 ƒ | i | ƒ d i | ƒ } | i  | ƒ } | i | d ƒ }
 t | _ t | |
 | ƒ Sd S(   s   Use "data" URL.Ns   ,i   s
   data errors   bad data URLs   text/plain;charset=US-ASCIIs   ;i    s   =s    s   Date: %ss   %a, %d %b %Y %T GMTs   Content-type: %ss   base64s   Content-length: %ds   
(   s   StringIOs	   mimetoolss   urls   splits   types   datas
   ValueErrors   IOErrors   rfinds   semis   encodings   msgs   appends   times   strftimes   gmtimes   base64s   decodestrings   unquotes   lens   joins   fs   Messages   headerss   Nones   filenos
   addinfourl(   s   selfs   urls   datas	   mimetoolss   base64s   fs   semis   StringIOs   types   encodings   headerss   msg(    (    s#   /mit/python/lib/python2.3/urllib.pys	   open_dataó  s:     
		(   s   __name__s
   __module__s   __doc__s   Nones   _URLopener__tempfiless   __version__s   versions   __init__s   __del__s   closes   cleanups	   addheaders   opens   open_unknowns   open_unknown_proxys   retrieves	   open_https
   http_errors   http_error_defaults   hasattrs   sockets
   open_httpss   open_gophers	   open_files   open_local_files   open_ftps	   open_data(    (    (    s#   /mit/python/lib/python2.3/urllib.pys	   URLopenerZ   s,    
				#88	9				8c           B   s’   t  Z d  Z d „  Z d „  Z e d „ Z d „  Z e d „ Z e d „ Z	 e d „ Z
 e d „ Z e d	 „ Z e d
 „ Z d d „ Z d „  Z RS(   s?   Derived class with handlers for errors we can handle (perhaps).c         O   s2   t  i |  | | Ž h  |  _ d |  _ d |  _ d  S(   Ni    i
   (   s	   URLopeners   __init__s   selfs   argss   kwargss
   auth_caches   triess   maxtries(   s   selfs   argss   kwargs(    (    s#   /mit/python/lib/python2.3/urllib.pys   __init__  s    		c         C   s   t  | | d | ƒ Sd S(   s3   Default error handling -- don't raise an exception.s   http:N(   s
   addinfourls   fps   headerss   url(   s   selfs   urls   fps   errcodes   errmsgs   headers(    (    s#   /mit/python/lib/python2.3/urllib.pys   http_error_default%  s     c   	      C   s¤   |  i d 7_ |  i o |  i |  i j oI t |  d ƒ o |  i } n
 |  i } d |  _ | | | d d | ƒ Sn |  i
 | | | | | | ƒ } d |  _ | Sd S(   s%   Error 302 -- relocated (temporarily).i   s   http_error_500i    iô  s)   Internal Server Error: Redirect RecursionN(   s   selfs   triess   maxtriess   hasattrs   http_error_500s   meths   http_error_defaults   urls   fps   headerss   redirect_internals   errcodes   errmsgs   datas   result(	   s   selfs   urls   fps   errcodes   errmsgs   headerss   datas   meths   result(    (    s#   /mit/python/lib/python2.3/urllib.pys   http_error_302)  s     				c   	      C   s{   d | j o | d } n  d | j o | d } n d  S| i ƒ  } | i ƒ  t |  i d | | ƒ } |  i
 | ƒ Sd  S(   Ns   locations   uris   :(   s   headerss   newurls   fps   reads   voids   closes   basejoins   selfs   types   urls   open(	   s   selfs   urls   fps   errcodes   errmsgs   headerss   datas   newurls   void(    (    s#   /mit/python/lib/python2.3/urllib.pys   redirect_internal9  s    
c         C   s    |  i | | | | | | ƒ Sd S(   s*   Error 301 -- also relocated (permanently).N(   s   selfs   http_error_302s   urls   fps   errcodes   errmsgs   headerss   data(   s   selfs   urls   fps   errcodes   errmsgs   headerss   data(    (    s#   /mit/python/lib/python2.3/urllib.pys   http_error_301F  s     c         C   s    |  i | | | | | | ƒ Sd S(   s;   Error 303 -- also relocated (essentially identical to 302).N(   s   selfs   http_error_302s   urls   fps   errcodes   errmsgs   headerss   data(   s   selfs   urls   fps   errcodes   errmsgs   headerss   data(    (    s#   /mit/python/lib/python2.3/urllib.pys   http_error_303J  s     c         C   sJ   | t j o  |  i | | | | | | ƒ Sn |  i	 | | | | | ƒ Sd S(   s1   Error 307 -- relocated, but turn POST into error.N(
   s   datas   Nones   selfs   http_error_302s   urls   fps   errcodes   errmsgs   headerss   http_error_default(   s   selfs   urls   fps   errcodes   errmsgs   headerss   data(    (    s#   /mit/python/lib/python2.3/urllib.pys   http_error_307N  s      c         C   s  d | j o  t i |  | | | | | ƒ n | d }
 d k	 }	 |	 i
 d |
 ƒ } | o  t i |  | | | | | ƒ n | i ƒ  \ } } | i ƒ  d j o  t i |  | | | | | ƒ n d |  i d } | t j o t |  | ƒ | | ƒ Sn t |  | ƒ | | | ƒ Sd S(   s½   Error 401 -- authentication required.
        See this URL for a description of the basic authentication scheme:
        http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-v10-spec-00.txts   www-authenticateNs!   [ 	]*([^ 	]+)[ 	]+realm="([^"]*)"s   basics   retry_s   _basic_auth(   s   headerss	   URLopeners   http_error_defaults   selfs   urls   fps   errcodes   errmsgs   stuffs   res   matchs   groupss   schemes   realms   lowers   types   names   datas   Nones   getattr(   s   selfs   urls   fps   errcodes   errmsgs   headerss   datas   realms   names   res   stuffs   matchs   scheme(    (    s#   /mit/python/lib/python2.3/urllib.pys   http_error_401U  s$     
	c   
      C   sÏ   t  | ƒ \ } } | i d ƒ d } | | } |  i | | | ƒ \ }	 } |	 p | o t Sn t |	 d d ƒd t | d d ƒd | } d | | } | t j o |  i | ƒ Sn |  i | | ƒ Sd  S(   Ns   @i   s   safes    s   :s   http://(   s	   splithosts   urls   hosts   selectors   finds   is   selfs   get_user_passwds   realms   users   passwds   Nones   quotes   newurls   datas   open(
   s   selfs   urls   realms   datas   newurls   selectors   is   hosts   passwds   user(    (    s#   /mit/python/lib/python2.3/urllib.pys   retry_http_basic_authl  s    
 .c   
      C   s±   t  | ƒ \ } } | i d ƒ d } | | } |  i | | | ƒ \ }	 } |	 p | o t Sn t |	 d d ƒd t | d d ƒd | } d | | } |  i | | ƒ Sd  S(   Ns   @i   s   safes    s   :s   //(   s	   splithosts   urls   hosts   selectors   finds   is   selfs   get_user_passwds   realms   users   passwds   Nones   quotes   newurls
   open_httpss   data(
   s   selfs   urls   realms   datas   newurls   selectors   is   hosts   passwds   user(    (    s#   /mit/python/lib/python2.3/urllib.pys   retry_https_basic_authy  s    
 .i    c         C   s“   | d | i ƒ  } | |  i j o$ | o |  i | =qH |  i | Sn |  i | | ƒ \ } } | p | o | | f |  i | <n | | f Sd  S(   Ns   @(
   s   realms   hosts   lowers   keys   selfs
   auth_caches   clear_caches   prompt_user_passwds   users   passwd(   s   selfs   hosts   realms   clear_caches   passwds   users   key(    (    s#   /mit/python/lib/python2.3/urllib.pys   get_user_passwdƒ  s     c         C   sn   d k  } y@ t d | | f ƒ } | i  d | | | f ƒ } | | f SWn t j
 o Ht t f Sn Xd S(   s#   Override this in a GUI environment!Ns   Enter username for %s at %s: s#   Enter password for %s in %s at %s: (   s   getpasss	   raw_inputs   realms   hosts   users   passwds   KeyboardInterrupts   None(   s   selfs   hosts   realms   passwds   getpasss   user(    (    s#   /mit/python/lib/python2.3/urllib.pys   prompt_user_passwdŽ  s     	(   s   __name__s
   __module__s   __doc__s   __init__s   http_error_defaults   Nones   http_error_302s   redirect_internals   http_error_301s   http_error_303s   http_error_307s   http_error_401s   retry_http_basic_auths   retry_https_basic_auths   get_user_passwds   prompt_user_passwd(    (    (    s#   /mit/python/lib/python2.3/urllib.pys   FancyURLopener  s    			
c           C   s(   t  t j o t i d ƒ a  n t  Sd S(   s8   Return the IP address of the magic hostname 'localhost'.s	   localhostN(   s
   _localhosts   Nones   sockets   gethostbyname(    (    (    s#   /mit/python/lib/python2.3/urllib.pys	   localhostŸ  s
      c           C   s.   t  t j o t i t i ƒ  ƒ a  n t  Sd S(   s*   Return the IP address of the current host.N(   s	   _thishosts   Nones   sockets   gethostbynames   gethostname(    (    (    s#   /mit/python/lib/python2.3/urllib.pys   thishost§  s
      c          C   s+   t  t j o d k }  |  i a  n t  Sd S(   s1   Return the set of errors raised by the FTP class.N(   s
   _ftperrorss   Nones   ftplibs
   all_errors(   s   ftplib(    (    s#   /mit/python/lib/python2.3/urllib.pys	   ftperrors¯  s      	c          C   sP   t  t j o; d k }  d k } |  i | i ƒ  d ƒ a  t  i i ƒ  n t  Sd S(   s)   Return an empty mimetools.Message object.Ni    (   s
   _noheaderss   Nones	   mimetoolss   StringIOs   Messages   fps   close(   s	   mimetoolss   StringIO(    (    s#   /mit/python/lib/python2.3/urllib.pys	   noheaders¸  s      		s
   ftpwrapperc           B   s;   t  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s;   Class used by open_ftp() for cache of open FTP connections.c         C   s;   | |  _  | |  _ | |  _ | |  _ | |  _ |  i ƒ  d  S(   N(   s   users   selfs   passwds   hosts   ports   dirss   init(   s   selfs   users   passwds   hosts   ports   dirs(    (    s#   /mit/python/lib/python2.3/urllib.pys   __init__È  s    					c         C   s{   d  k  } d |  _ | i ƒ  |  _ |  i i |  i |  i ƒ |  i i |  i	 |  i
 ƒ x! |  i D] } |  i i | ƒ q] Wd  S(   Ni    (   s   ftplibs   selfs   busys   FTPs   ftps   connects   hosts   ports   logins   users   passwds   dirss   dirs   cwd(   s   selfs   ftplibs   dir(    (    s#   /mit/python/lib/python2.3/urllib.pys   initÐ  s    		
 c         C   sð  d  k  } |  i ƒ  | d d f j o d } d } n d | } d } y |  i i | ƒ Wn0 | i j
 o! |  i	 ƒ  |  i i | ƒ n Xt
 } | o | oÑ y |  i i | ƒ Wn4 | i j
 o% } t d | f t i ƒ  d ‚ n X|  i i | ƒ y  d	 | } |  i i | ƒ } Wqs| i j
 o@ } t | ƒ d
  d j o  t d | f t i ƒ  d ‚ qoqsXn | oA |  i i d ƒ | o d | } n d } |  i i | ƒ } n d |  _ t | d i d ƒ |  i ƒ | d f Sd  S(   Ns   ds   Ds   TYPE Ai   s   TYPE i    s	   ftp errori   s   RETR i   s   550s   LIST s   LISTs   rb(   s   ftplibs   selfs   endtransfers   types   cmds   isdirs   ftps   voidcmds
   all_errorss   inits   Nones   conns   files   nlsts
   error_perms   reasons   IOErrors   syss   exc_infos   ntransfercmds   strs   busys   addclosehooks   makefile(   s   selfs   files   types   isdirs   ftplibs   cmds   reasons   conn(    (    s#   /mit/python/lib/python2.3/urllib.pys   retrfileÙ  s@    	
 
!
) 	c         C   sJ   |  i o d  Sn d |  _ y |  i i ƒ  Wn t ƒ  j
 o n Xd  S(   Ni    (   s   selfs   busys   ftps   voidresps	   ftperrors(   s   self(    (    s#   /mit/python/lib/python2.3/urllib.pys   endtransferþ  s    	c         C   s8   |  i ƒ  y |  i i ƒ  Wn t ƒ  j
 o n Xd  S(   N(   s   selfs   endtransfers   ftps   closes	   ftperrors(   s   self(    (    s#   /mit/python/lib/python2.3/urllib.pys   close  s
    
(   s   __name__s
   __module__s   __doc__s   __init__s   inits   retrfiles   endtransfers   close(    (    (    s#   /mit/python/lib/python2.3/urllib.pys
   ftpwrapperÅ  s    				%		s   addbasec           B   s)   t  Z d  Z d „  Z d „  Z d „  Z RS(   s(   Base class for addinfo and addclosehook.c         C   sÃ   | |  _  |  i  i |  _ |  i  i |  _ t |  i  d ƒ o |  i  i |  _ n t |  i  d ƒ o |  i  i |  _ n t |  i  d ƒ o9 |  i  i |  _ t |  i  d ƒ o |  i  i |  _ q¿ n d  S(   Ns	   readliness   filenos   __iter__s   next(	   s   fps   selfs   reads   readlines   hasattrs	   readliness   filenos   __iter__s   next(   s   selfs   fp(    (    s#   /mit/python/lib/python2.3/urllib.pys   __init__  s    	  c         C   s&   d |  i i t |  ƒ |  i f Sd  S(   Ns   <%s at %s whose fp = %s>(   s   selfs	   __class__s   __name__s   ids   fp(   s   self(    (    s#   /mit/python/lib/python2.3/urllib.pys   __repr__  s    c         C   sL   t  |  _ t  |  _ t  |  _ t  |  _ |  i o |  i i ƒ  n t  |  _ d  S(   N(   s   Nones   selfs   reads   readlines	   readliness   filenos   fps   close(   s   self(    (    s#   /mit/python/lib/python2.3/urllib.pys   close   s    				
 (   s   __name__s
   __module__s   __doc__s   __init__s   __repr__s   close(    (    (    s#   /mit/python/lib/python2.3/urllib.pys   addbase  s    		s   addclosehookc           B   s    t  Z d  Z d „  Z d „  Z RS(   s*   Class to add a close hook to an open file.c         G   s&   t  i |  | ƒ | |  _ | |  _ d  S(   N(   s   addbases   __init__s   selfs   fps	   closehooks   hookargs(   s   selfs   fps	   closehooks   hookargs(    (    s#   /mit/python/lib/python2.3/urllib.pys   __init__+  s    	c         C   sA   t  i |  ƒ |  i o& |  i |  i Œ  t |  _ t |  _ n d  S(   N(   s   addbases   closes   selfs	   closehooks   hookargss   None(   s   self(    (    s#   /mit/python/lib/python2.3/urllib.pys   close0  s
    
	(   s   __name__s
   __module__s   __doc__s   __init__s   close(    (    (    s#   /mit/python/lib/python2.3/urllib.pys   addclosehook(  s    	s   addinfoc           B   s    t  Z d  Z d „  Z d „  Z RS(   s.   class to add an info() method to an open file.c         C   s   t  i |  | ƒ | |  _ d  S(   N(   s   addbases   __init__s   selfs   fps   headers(   s   selfs   fps   headers(    (    s#   /mit/python/lib/python2.3/urllib.pys   __init__:  s    c         C   s   |  i Sd  S(   N(   s   selfs   headers(   s   self(    (    s#   /mit/python/lib/python2.3/urllib.pys   info>  s    (   s   __name__s
   __module__s   __doc__s   __init__s   info(    (    (    s#   /mit/python/lib/python2.3/urllib.pys   addinfo7  s    	s
   addinfourlc           B   s)   t  Z d  Z d „  Z d „  Z d „  Z RS(   s9   class to add info() and geturl() methods to an open file.c         C   s&   t  i |  | ƒ | |  _ | |  _ d  S(   N(   s   addbases   __init__s   selfs   fps   headerss   url(   s   selfs   fps   headerss   url(    (    s#   /mit/python/lib/python2.3/urllib.pys   __init__D  s    	c         C   s   |  i Sd  S(   N(   s   selfs   headers(   s   self(    (    s#   /mit/python/lib/python2.3/urllib.pys   infoI  s    c         C   s   |  i Sd  S(   N(   s   selfs   url(   s   self(    (    s#   /mit/python/lib/python2.3/urllib.pys   geturlL  s    (   s   __name__s
   __module__s   __doc__s   __init__s   infos   geturl(    (    (    s#   /mit/python/lib/python2.3/urllib.pys
   addinfourlA  s    		c   	      C   s/  t  | ƒ \ } } | o | Sn t | ƒ \ } } t  |  ƒ \ } } | o# | o | d | | Sqo | Sn t | ƒ \ } } t | ƒ \ } } t
 | ƒ \ } } | d  d j oô | d  d d f j o t | ƒ } n | i d ƒ } | d j  o | o
 d } q"d } n | | d  } xw | o | d  d	 j o^ | d } | d
  i d ƒ } | d j o | | d  } q%| d j o d } Pq%d } q%W| | } n | o | o | d d j o d | } n | o | o | d | | Sn3 | o | d | Sn | o d | | Sn | Sd S(   s;   Utility to combine a URL with a base URL to form a new URL.s   ://i   s   /s   #s   ?i    s    i   s   ../iÿÿÿÿs   :s   //N(   s	   splittypes   urls   types   paths	   splithosts   hosts   bases   basepaths   splittags   basetags
   splitquerys	   basequerys   lens   is   rfind(	   s   bases   urls	   basequerys   is   basepaths   hosts   basetags   paths   type(    (    s#   /mit/python/lib/python2.3/urllib.pys   basejoinP  sT      

 
   c         C   s   d Sd  S(   Ni    (    (   s   x(    (    s#   /mit/python/lib/python2.3/urllib.pys   _is_unicode  s    c         C   s   t  |  t ƒ Sd  S(   N(   s
   isinstances   xs   unicode(   s   x(    (    s#   /mit/python/lib/python2.3/urllib.pys   _is_unicode   s    c         C   s\   t  |  ƒ oG y |  i d ƒ }  WqT t j
 o! t d t |  ƒ d ƒ ‚ qT Xn |  Sd S(   s   toBytes(u"URL") --> 'URL'.s   ASCIIs   URL s    contains non-ASCII charactersN(   s   _is_unicodes   urls   encodes   UnicodeErrors   repr(   s   url(    (    s#   /mit/python/lib/python2.3/urllib.pys   toBytes£  s     #c         C   sr   |  i ƒ  }  |  d  d j o |  d d j o |  d d !i ƒ  }  n |  d  d j o |  d i ƒ  }  n |  Sd S(   s8   unwrap('<URL:type://host/path>') --> 'type://host/path'.i   s   <iÿÿÿÿs   >i   s   URL:N(   s   urls   strip(   s   url(    (    s#   /mit/python/lib/python2.3/urllib.pys   unwrap¯  s     " c         C   s~   t  t j o d k } | i d ƒ a  n t  i |  ƒ } | o1 | i d ƒ } | i ƒ  |  t	 | ƒ d f Sn t |  f Sd S(   s:   splittype('type:opaquestring') --> 'type', 'opaquestring'.Ns
   ^([^/:]+):i   (
   s	   _typeprogs   Nones   res   compiles   matchs   urls   groups   schemes   lowers   len(   s   urls   res   schemes   match(    (    s#   /mit/python/lib/python2.3/urllib.pys	   splittype¸  s      	"c         C   sa   t  t j o d k } | i d ƒ a  n t  i |  ƒ } | o | i d d ƒ Sn t |  f Sd S(   s;   splithost('//host[:port]/path') --> 'host[:port]', '/path'.Ns   ^//([^/]*)(.*)$i   i   (   s	   _hostprogs   Nones   res   compiles   matchs   urls   group(   s   urls   matchs   re(    (    s#   /mit/python/lib/python2.3/urllib.pys	   splithostÆ  s      	 c         C   sj   t  t j o d k } | i d ƒ a  n t  i |  ƒ } | o t t | i d d ƒ ƒ Sn t |  f Sd S(   sJ   splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.Ns   ^(.*)@(.*)$i   i   (	   s	   _userprogs   Nones   res   compiles   matchs   hosts   maps   unquotes   group(   s   hosts   res   match(    (    s#   /mit/python/lib/python2.3/urllib.pys	   splituserÒ  s      	 c         C   sa   t  t j o d k } | i d ƒ a  n t  i |  ƒ } | o | i d d ƒ Sn |  t f Sd S(   s/   splitpasswd('user:passwd') -> 'user', 'passwd'.Ns   ^([^:]*):(.*)$i   i   (   s   _passwdprogs   Nones   res   compiles   matchs   users   group(   s   users   res   match(    (    s#   /mit/python/lib/python2.3/urllib.pys   splitpasswdÞ  s      	 c         C   sa   t  t j o d k } | i d ƒ a  n t  i |  ƒ } | o | i d d ƒ Sn |  t f Sd S(   s*   splitport('host:port') --> 'host', 'port'.Ns   ^(.*):([0-9]+)$i   i   (   s	   _portprogs   Nones   res   compiles   matchs   hosts   group(   s   hosts   res   match(    (    s#   /mit/python/lib/python2.3/urllib.pys	   splitportë  s      	 iÿÿÿÿc         C   s´   t  t j o d k } | i d ƒ a  n t  i |  ƒ } | og | i d d ƒ \ }  } y% | o t d ‚ n t	 | ƒ } Wn t j
 o t } n X|  | f Sn |  | f Sd S(   sÛ   Split host and port, returning numeric port.
    Return given default port if no ':' found; defaults to -1.
    Return numerical port if a valid number are found after ':'.
    Return None if ':' but not a valid number.Ns   ^(.*):(.*)$i   i   s	   no digits(   s
   _nportprogs   Nones   res   compiles   matchs   hosts   groups   ports
   ValueErrors   ints   nports   defport(   s   hosts   defports   nports   res   ports   match(    (    s#   /mit/python/lib/python2.3/urllib.pys
   splitnport÷  s       	 c         C   sa   t  t j o d k } | i d ƒ a  n t  i |  ƒ } | o | i d d ƒ Sn |  t f Sd S(   s/   splitquery('/path?query') --> '/path', 'query'.Ns   ^(.*)\?([^?]*)$i   i   (   s
   _queryprogs   Nones   res   compiles   matchs   urls   group(   s   urls   res   match(    (    s#   /mit/python/lib/python2.3/urllib.pys
   splitquery  s      	 c         C   sa   t  t j o d k } | i d ƒ a  n t  i |  ƒ } | o | i d d ƒ Sn |  t f Sd S(   s)   splittag('/path#tag') --> '/path', 'tag'.Ns   ^(.*)#([^#]*)$i   i   (   s   _tagprogs   Nones   res   compiles   matchs   urls   group(   s   urls   res   match(    (    s#   /mit/python/lib/python2.3/urllib.pys   splittag  s      	 c         C   s%   |  i d ƒ } | d | d f Sd S(   sk   splitattr('/path;attr1=value1;attr2=value2;...') ->
        '/path', ['attr1=value1', 'attr2=value2', ...].s   ;i    i   N(   s   urls   splits   words(   s   urls   words(    (    s#   /mit/python/lib/python2.3/urllib.pys	   splitattr$  s     c         C   sa   t  t j o d k } | i d ƒ a  n t  i |  ƒ } | o | i d d ƒ Sn |  t f Sd S(   s-   splitvalue('attr=value') --> 'attr', 'value'.Ns   ^([^=]*)=(.*)$i   i   (   s
   _valueprogs   Nones   res   compiles   matchs   attrs   group(   s   attrs   res   match(    (    s#   /mit/python/lib/python2.3/urllib.pys
   splitvalue+  s      	 c         C   sC   |  d  d j o |  d d !o |  d |  d f Sn t |  f Sd S(   s2   splitgophertype('/Xselector') --> 'X', 'selector'.i   s   /i   N(   s   selectors   None(   s   selector(    (    s#   /mit/python/lib/python2.3/urllib.pys   splitgophertype6  s     c         C   sÇ   t  } t } |  i d ƒ } | d g } | i } | d =x{ | D]s } | d d !oQ y) | | | | d  d ƒ ƒ | d ƒ Wq² t j
 o | d | ƒ q² Xq? | d | ƒ q? Wd i | ƒ Sd S(   s"   unquote('abc%20def') -> 'abc def'.s   %i    i   i   i   s    N(   s   chrs   mychrs   ints   myatois   ss   splits   lists   ress   appends   myappends   items
   ValueErrors   join(   s   ss   myappends   ress   lists   myatois   items   mychr(    (    s#   /mit/python/lib/python2.3/urllib.pys   unquote<  s      	 )c         C   s7   d |  j o d i |  i d ƒ ƒ }  n t |  ƒ Sd S(   s%   unquote('%7e/abc+def') -> '~/abc def's   +s    N(   s   ss   joins   splits   unquote(   s   s(    (    s#   /mit/python/lib/python2.3/urllib.pys   unquote_plusO  s     sA   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-s   /c         C   sœ   t  t j o% h  a  x t D] } | t  | <q Wn t |  ƒ } xJ t t | ƒ ƒ D]6 } | | } | t  j o d t
 | ƒ | | <qQ qQ Wd i | ƒ Sd  S(   Ns   %%%02Xs    (   s
   _fast_safes   Nones   _fast_safe_tests   cs   lists   ss   ress   ranges   lens   is   ords   join(   s   ss   is   ress   c(    (    s#   /mit/python/lib/python2.3/urllib.pys   _fast_quote]  s       
c         C   sŽ   t  | } t | j o t |  ƒ Sn t |  ƒ } xI t t | ƒ ƒ D]5 } | | } | | j o d t | ƒ | | <qD qD Wd i | ƒ Sd S(   s  quote('abc def') -> 'abc%20def'

    Each part of a URL, e.g. the path info, the query, etc., has a
    different set of reserved characters that must be quoted.

    RFC 2396 Uniform Resource Identifiers (URI): Generic Syntax lists
    the following reserved characters.

    reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
                  "$" | ","

    Each of these characters is reserved in some component of a URL,
    but not necessarily in all of them.

    By default, the quote function is intended for quoting the path
    section of a URL.  Thus, it will not encode '/'.  This character
    is reserved, but in typical usage the quote function is being
    called on a path where the existing slash characters are used as
    reserved characters.
    s   %%%02Xs    N(   s   always_safes   safes   _fast_safe_tests   _fast_quotes   ss   lists   ress   ranges   lens   is   cs   ords   join(   s   ss   safes   cs   is   res(    (    s#   /mit/python/lib/python2.3/urllib.pys   quotej  s     
 
s    c         C   sr   d |  j oT |  i d ƒ } x1 t t | ƒ ƒ D] } t | | | ƒ | | <q/ Wd i | ƒ Sn t |  | ƒ Sd S(   s9   Quote the query fragment of a URL; replacing ' ' with '+'s    s   +N(	   s   ss   splits   ls   ranges   lens   is   quotes   safes   join(   s   ss   safes   is   l(    (    s#   /mit/python/lib/python2.3/urllib.pys
   quote_plus‰  s      i    c   
      C   s  t  |  d ƒ o |  i ƒ  }  nh y0 t |  ƒ o t |  d t ƒ o
 t ‚ n Wn4 t j
 o( t i ƒ  \ } } }	 t d |	 ‚ n Xg  } | oT xl|  D]E \ } } t t | ƒ ƒ } t t | ƒ ƒ } | i | d | ƒ qœ Wnx|  D]\ } } t t | ƒ ƒ } t | t ƒ o% t | ƒ } | i | d | ƒ qð t | ƒ o1 t | i d d ƒ ƒ } | i | d | ƒ qð y t | ƒ } Wn: t j
 o. t t | ƒ ƒ } | i | d | ƒ qð Xx/ | D]' } | i | d t t | ƒ ƒ ƒ qÕWqð Wd i | ƒ Sd S(	   sv  Encode a sequence of two-element tuples or dictionary into a URL query string.

    If any values in the query arg are sequences and doseq is true, each
    sequence element is converted to a separate parameter.

    If the query arg is a sequence of two-element tuples, the order of the
    parameters in the output will match the order of parameters in the
    input.
    s   itemsi    s1   not a valid non-string sequence or mapping objects   =s   ASCIIs   replaces   &N(   s   hasattrs   querys   itemss   lens
   isinstances   tuples	   TypeErrors   syss   exc_infos   tys   vas   tbs   ls   doseqs   ks   vs
   quote_pluss   strs   appends   _is_unicodes   encodes   xs   elts   join(
   s   querys   doseqs   vas   xs   ks   tys   ls   elts   vs   tb(    (    s#   /mit/python/lib/python2.3/urllib.pys	   urlencode“  sD    	 "   )c          C   sd   h  }  xS t i i ƒ  D]B \ } } | i ƒ  } | o | d d j o | |  | d  <q q W|  Sd S(   s  Return a dictionary of scheme -> proxy server URL mappings.

    Scan the environment for variables named <scheme>_proxy;
    this seems to be the standard convention.  If you need a
    different way, you can pass a proxies dictionary to the
    [Fancy]URLopener constructor.

    iúÿÿÿs   _proxyN(   s   proxiess   oss   environs   itemss   names   values   lower(   s   proxiess   names   value(    (    s#   /mit/python/lib/python2.3/urllib.pys   getproxies_environmentÓ  s      c          C   s³   y d k  }  Wn t j
 o h  Sn Xy |  i ƒ  } Wn |  i j
 o h  Sn Xh  } d | j o | d o9 y | d } Wn |  i j
 o q« Xd | | d <n | Sd S(   sÜ   Return a dictionary of scheme -> proxy server URL mappings.

        By convention the mac uses Internet Config to store
        proxies.  An HTTP proxy, for instance, is stored under
        the HttpProxy key.

        Ns   UseHTTPProxys   HTTPProxyHosts	   http://%ss   http(   s   ics   ImportErrors   ICs   configs   errors   proxiess   value(   s   ics   proxiess   configs   value(    (    s#   /mit/python/lib/python2.3/urllib.pys
   getproxiesä  s"     		c         C   s   d Sd  S(   Ni    (    (   s   x(    (    s#   /mit/python/lib/python2.3/urllib.pys   proxy_bypass  s    c    	      C   sm  h  } y d k } Wn t j
 o | Sn Xy| i | i d ƒ } | i | d ƒ d } | oÙ t | i | d ƒ d ƒ } d | j oq x© | i
 d ƒ D]Y } | i
 d d ƒ \ }  } d k } | i d	 | ƒ o d
 |  | f } n | | |  <q› Wq;| d  d j o | | d <q;d | | d <d | | d <n | i ƒ  Wn t t t f j
 o n X| Sd S(   sx   Return a dictionary of scheme -> proxy server URL mappings.

        Win32 uses the registry to store proxies.

        Ns;   Software\Microsoft\Windows\CurrentVersion\Internet Settingss   ProxyEnablei    s   ProxyServers   =s   ;i   s   ^([^/:]+)://s   %s://%si   s   http:s   https	   http://%ss   ftp://%ss   ftp(   s   proxiess   _winregs   ImportErrors   OpenKeys   HKEY_CURRENT_USERs   internetSettingss   QueryValueExs   proxyEnables   strs   proxyServers   splits   ps   protocols   addresss   res   matchs   Closes   WindowsErrors
   ValueErrors	   TypeError(	   s   protocols   res   internetSettingss   ps   proxyServers   _winregs   addresss   proxiess   proxyEnable(    (    s#   /mit/python/lib/python2.3/urllib.pys   getproxies_registry  s<     			 	c           C   s   t  ƒ  p t ƒ  Sd S(   s¥   Return a dictionary of scheme -> proxy server URL mappings.

        Returns settings gathered from the environment, if specified,
        or the registry.

        N(   s   getproxies_environments   getproxies_registry(    (    (    s#   /mit/python/lib/python2.3/urllib.pys
   getproxies3  s     c   
      C   s  y d  k  } d  k } Wn t j
 o d Sn XyK | i | i d ƒ } | i | d ƒ d }	 t | i | d ƒ d ƒ } Wn t
 j
 o d Sn X|	 p | o d Sn |  g }  y5 t i |  d ƒ } | |  j o |  i | ƒ n Wn t i j
 o n X| i d ƒ } d } xi | t | ƒ j  oU | | d j o6 d d t i ƒ  t i t i ƒ  ƒ g | | | d	 +n | d	 7} qWxv | D]n } | i d
 d ƒ } | i d d ƒ } | i d d
 ƒ } x/ |  D]' } | i | | | i ƒ o d	 SqÏqÏWqŒWd Sd  S(   Ni    s;   Software\Microsoft\Windows\CurrentVersion\Internet Settingss   ProxyEnables   ProxyOverrides   ;s   <local>s	   localhosts	   127.0.0.1i   s   .s   \.s   *s   .*s   ?(   s   _winregs   res   ImportErrors   OpenKeys   HKEY_CURRENT_USERs   internetSettingss   QueryValueExs   proxyEnables   strs   proxyOverrides   WindowsErrors   hosts   sockets   gethostbynames   addrs   appends   errors   splits   is   lens   gethostnames   tests   replaces   vals   matchs   I(
   s   hosts   addrs   vals   is   proxyOverrides   internetSettingss   res   _winregs   tests   proxyEnable(    (    s#   /mit/python/lib/python2.3/urllib.pys   proxy_bypass<  sP    						 6  c         C   s   d Sd  S(   Ni    (    (   s   host(    (    s#   /mit/python/lib/python2.3/urllib.pys   proxy_bypasst  s    c          C   s©   d } x$ t d ƒ D] } | t | ƒ } q W| d } t i ƒ  } t | ƒ }  t |  ƒ } t i ƒ  } | | j o	 d GHn | GH|  GH| GHt | | d ƒ Gd GHd  S(   Ns    i   i   s   Wrong!i   s   sec(   s   ss   ranges   is   chrs   times   t0s   quotes   qss   unquotes   uqss   t1s   round(   s   qss   is   t0s   t1s   ss   uqs(    (    s#   /mit/python/lib/python2.3/urllib.pys   test1x  s      
	c         C   s   d |  | | f GHd  S(   Ns0   Block number: %d, Block size: %d, Total size: %d(   s   blocknums	   blocksizes	   totalsize(   s   blocknums	   blocksizes	   totalsize(    (    s#   /mit/python/lib/python2.3/urllib.pys
   reporthookˆ  s    c         C   sH  |  o: d d d d d g }  t t d ƒ o |  i d ƒ qB n z÷ xç |  D]ß } d d	 G| Gd d	 GHt | t t ƒ \ } } | GH| o6 d
 GHx% | i
 ƒ  D] } | d G| | GHq Wd
 GHn t | d ƒ } | i ƒ  } ~ d | j o( t i d d ƒ } | i | d ƒ } n | GHt t f \ } } qL Wd d GHWd  t ƒ  Xd  S(   Ns   /etc/passwds   file:/etc/passwds   file://localhost/etc/passwds&   ftp://ftp.python.org/pub/python/READMEs    http://www.python.org/index.htmls
   open_httpss!   https://synergy.as.cmu.edu/~geek/s   -i
   s   ======s   :s   rbs   s    i(   (   s   argss   hasattrs	   URLopeners   appends   urls   urlretrieves   Nones
   reporthooks   fns   hs   keyss   ks   opens   fps   reads   datas   strings	   maketranss   tables	   translates
   urlcleanup(   s   argss   fps   urls   hs   ks   datas   tables   fn(    (    s#   /mit/python/lib/python2.3/urllib.pys   testŽ  s6       	 c    	      C   s  d  k  } d  k } y# | i  | i d d ƒ \ } } Wn& | i j
 o } | GHd GHd  Sn Xd } xR | D]J \ } }  | d j o | d } n | d j o d GHd Gd	 GHd  Sqk qk W| o& | d j o t
 ƒ  n t | ƒ n3 | o	 d GHn x | D] } t | ƒ i ƒ  Gqþ Wd  S(
   Ni   s   ths   Use -h for helpi    s   -ts   -hs&   Usage: python urllib.py [-t] [url ...]s   -t runs self-test;s'   otherwise, contents of urls are printed(   s   getopts   syss   argvs   optss   argss   errors   msgs   ts   os   as   test1s   tests   urls   urlopens   read(	   s   as   urls   argss   os   syss   ts   msgs   getopts   opts(    (    s#   /mit/python/lib/python2.3/urllib.pys   main¯  s4    #	 	 s   __main__(P   s   __doc__s   strings   sockets   oss   times   syss   __all__s   __version__s   MAXFTPCACHEs   names   macurl2paths   url2pathnames   pathname2urls
   nturl2paths
   rourl2paths   Nones
   _urlopeners   urlopens   urlretrieves
   urlcleanups   ftpcaches	   URLopeners   FancyURLopeners
   _localhosts	   localhosts	   _thishosts   thishosts
   _ftperrorss	   ftperrorss
   _noheaderss	   noheaderss
   ftpwrappers   addbases   addclosehooks   addinfos
   addinfourls   basejoins   unicodes	   NameErrors   _is_unicodes   toBytess   unwraps	   _typeprogs	   splittypes	   _hostprogs	   splithosts	   _userprogs	   splitusers   _passwdprogs   splitpasswds	   _portprogs	   splitports
   _nportprogs
   splitnports
   _queryprogs
   splitquerys   _tagprogs   splittags	   splitattrs
   _valueprogs
   splitvalues   splitgophertypes   unquotes   unquote_pluss   always_safes   _fast_safe_tests
   _fast_safes   _fast_quotes   quotes
   quote_pluss	   urlencodes   getproxies_environments
   getproxiess   proxy_bypasss   getproxies_registrys   test1s
   reporthooks   tests   mains   __name__(8   s
   splitnports
   getproxiess	   URLopeners	   urlencodes   basejoins   addbases	   splithosts   ftpcaches   addinfos
   addinfourls	   splitports   __all__s
   splitvalues	   splitusers   splitgophertypes   thishosts   unwraps	   noheaderss   splittags   toBytess	   splitattrs   __version__s	   localhosts   splitpasswds   _is_unicodes	   splittypes   strings   addclosehooks   FancyURLopeners   urlopens   quotes   times   _fast_safe_tests   syss
   quote_pluss   tests   urlretrieves
   ftpwrappers   url2pathnames   mains   sockets
   splitquerys   getproxies_environments   getproxies_registrys   proxy_bypasss   always_safes
   reporthooks   unquotes   pathname2urls   test1s
   urlcleanups   MAXFTPCACHEs	   ftperrorss   _fast_quotes   oss   unquote_plus(    (    s#   /mit/python/lib/python2.3/urllib.pys   ?   s´   					]			ÿ Ã‚				I
	J															
	
@			-		6			!	