-í
ç¶<c       sñ  d  Z  d k Z d k 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 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& d; „  Z' d< „  Z( e a) d= „  Z* e a+ d> „  Z, e a- d? „  Z. e a/ d@ „  Z0 e a1 dA „  Z2 e a3 dB dC „ Z4 e a5 dD „  Z6 e a7 dE „  Z8 dF „  Z9 e a: dG „  Z; dH „  Z< dI „  Z= dJ „  Z> dK Z? e? dL Z@ e aA dM „  ZB dL dN „ ZC dO dP „ ZD dQ dR „ ZE dS „  ZF e i d! j o dT „  ZG dU „  ZH n? e i d# j o dV „  ZI dW „  ZG dX „  ZH n eF ZG dY „  ZH dZ „  ZJ d[ „  ZK g  d\ „ ZL d] „  ZM eN d^ j o eM ƒ  n d S(_   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    s   t  |  ƒ Sd  S(   N(   s   unquotes   pathname(   s   pathname(    (    s   /usr/lib/python2.2/urllib.pys   url2pathname5 s    c    s   t  |  ƒ Sd  S(   N(   s   quotes   pathname(   s   pathname(    (    s   /usr/lib/python2.2/urllib.pys   pathname2url7 s    c    sG   t  o t ƒ  a  n | t j o t  i |  ƒ Sn t  i |  | ƒ Sd S(   s.   urlopen(url [, data]) -> open file-like objectN(   s
   _urlopeners   FancyURLopeners   datas   Nones   opens   url(   s   urls   data(    (    s   /usr/lib/python2.2/urllib.pys   urlopenC s      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   /usr/lib/python2.2/urllib.pys   urlretrieveL s     c      s   t  o t  i ƒ  n d  S(   N(   s
   _urlopeners   cleanup(    (    (    s   /usr/lib/python2.2/urllib.pys
   urlcleanupQ s    c      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    s‡   | t j o t ƒ  } n | |  _  | i d ƒ |  _ | i d ƒ |  _ d |  i f g |  _	 g  |  _
 t i |  _ t |  _ t |  _ d  S(   Ns   key_files	   cert_files
   User-agent(   s   proxiess   Nones
   getproxiess   selfs   x509s   gets   key_files	   cert_files   versions
   addheaderss   _URLopener__tempfiless   oss   unlinks   _URLopener__unlinks	   tempcaches   ftpcache(   s   selfs   proxiess   x509(    (    s   /usr/lib/python2.2/urllib.pys   __init__d s     			c    s   |  i ƒ  d  S(   N(   s   selfs   close(   s   self(    (    s   /usr/lib/python2.2/urllib.pys   __del__{ s    c    s   |  i ƒ  d  S(   N(   s   selfs   cleanup(   s   self(    (    s   /usr/lib/python2.2/urllib.pys   close~ s    c    so   |  i oF x8 |  i D]- } y |  i | ƒ Wn t j
 o n 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   /usr/lib/python2.2/urllib.pys   cleanup s    

 	
c    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   /usr/lib/python2.2/urllib.pys	   addheader s     c    sÛ  t  t | ƒ ƒ } |  i o |  i i | ƒ o6 |  i | \ } } t | d ƒ } t
 | | | ƒ Sn t | ƒ \ } }
 | o
 d } n |  i i | ƒ oA |  i | } t | ƒ \ } } t | ƒ \ } } | | f }
 n t } d | }	 | |  _ d |	 j o d i |	 i d ƒ ƒ }	 n t |  |	 ƒ o2 | o |  i | | | ƒ Sn |  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   has_keys   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   fps	   proxyhosts   selectors   hosts   proxys   urltypes   names   urls   filenames   headerss   msg(    (    s   /usr/lib/python2.2/urllib.pys   open• s:     

	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   /usr/lib/python2.2/urllib.pys   open_unknown¸ s     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   /usr/lib/python2.2/urllib.pys   open_unknown_proxy½ s     c    s·  t  t | ƒ ƒ } |  i o |  i i | ƒ o |  i | Sn t | ƒ \ } } | o | p
 | d j oX y< |  i
 | ƒ } | i ƒ  } ~ t t | ƒ d ƒ | f SWn t j
 o	 }	 n Xn |  i | | ƒ } | i ƒ  } | oŸ d k } t | ƒ \ } } t | p d ƒ \ } } t | p d ƒ \ } } t | p d ƒ \ } } t i i | ƒ d } | i | ƒ } |  i i | ƒ n | | f }
 |  i t! j	 o |
 |  i | <n t | d ƒ } d d } d } d } | o8 | i d	 ƒ o t' | d
 ƒ } n | d | | ƒ n | i( | ƒ } | o | d | | ƒ n xM | oE | i* | ƒ | i( | ƒ } | d } | o | | | | ƒ n qHW| i+ ƒ  | i+ ƒ  ~ ~ |
 Sd S(   sq   retrieve(url) returns (filename, None) for a local object
        or (tempfilename, headers) for a remote object.s   filei   Ns    s   wbi   i   iÿÿÿÿs   content-lengths   Content-Lengthi    (,   s   unwraps   toBytess   urls   selfs	   tempcaches   has_keys	   splittypes   types   url1s   filenames   open_local_files   fps   infos   hdrss   url2pathnames	   splithosts   IOErrors   msgs   opens   datas   headerss   tempfiles   garbages   paths
   splitquerys	   splitattrs   oss   splitexts   suffixs   mktemps   _URLopener__tempfiless   appends   results   Nones   tfps   bss   sizes   blocknums
   reporthooks   ints   reads   blocks   writes   close(   s   selfs   urls   filenames
   reporthooks   datas   fps   blocknums   hdrss   garbages   msgs   results   bss   paths   suffixs   tfps   headerss   tempfiles   url1s   sizes   types   block(    (    s   /usr/lib/python2.2/urllib.pys   retrieveÃ sd     		
 


c    sß  d k  } t } t | ƒ t i j 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] } t  | 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   types   urls   typess
   StringTypes	   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   applys
   endheaderss   sends   getreplys   errcodes   errmsgs   headerss   getfiles   fps
   addinfourls
   http_error(   s   selfs   urls   datas   base64s   argss   rests   hosts   errcodes   fps   auths   selectors   headerss   httplibs   urltypes   user_passwds   hs   realhosts   errmsg(    (    s   /usr/lib/python2.2/urllib.pys	   open_httpù sf     	


 	  
  
c 
   s   d | } t |  | ƒ of t |  | ƒ } | t j o | | | | | | ƒ }	 n | | | | | | | ƒ }	 |	 o |	 Sn 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   /usr/lib/python2.2/urllib.pys
   http_error1s     
 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   /usr/lib/python2.2/urllib.pys   http_error_default@s     
s   sslc    sÚ  d k  }
 t } t | ƒ t i j 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] } t! | 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   types   urls   typess
   StringTypes	   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   applys
   endheaderss   sends   getreplys   errcodes   errmsgs   headerss   getfiles   fps
   addinfourls
   http_error(   s   selfs   urls   datas   argss   rests   hosts   errcodes   fps   selectors   headerss   httplibs   urltypes   user_passwds   hs   base64s   realhosts   auths   errmsg(    (    s   /usr/lib/python2.2/urllib.pys
   open_httpsGsj     	

 			  
  
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   selectors   hosts   fps   querys   type(    (    s   /usr/lib/python2.2/urllib.pys   open_gopher€s     	 c    sG   | d  d j o | d d !d j o |  i | ƒ Sn |  i | ƒ Sd S(   s/   Use local file or FTP depending on form of URL.i   s   //i   s   /N(   s   urls   selfs   open_ftps   open_local_file(   s   selfs   url(    (    s   /usr/lib/python2.2/urllib.pys	   open_files     %c    sŽ  d k  } d k } d k } d k } t | ƒ \ } } t | ƒ }	 t
 i |	 ƒ } | t i } | i | t 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   ST_SIZEs   sizes
   formatdates   ST_MTIMEs   modifieds
   guess_types   mtypes   Messages   headerss   urlfiles
   addinfourls   opens	   splitports   ports   sockets   gethostbynames	   localhosts   thishosts   IOError(   s   selfs   urls	   mimetoolss	   mimetypess   rfc822s   urlfiles   mtypes   hosts   files	   localnames   ports   sizes   statss   StringIOs   modifieds   headers(    (    s   /usr/lib/python2.2/urllib.pys   open_local_file—s.     $,*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 xI |  i i  ƒ  D]8 } | | j o% |  i | } |  i | =| i# ƒ  n qÄWn ye|  i i$ | ƒ 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+ ƒ  } n q]W|  i | i, | | ƒ \ } } | i/ d | ƒ d } d } | o | d | 7} n | t j	 o
 | d j o | d | 7} n | i2 | i | ƒ ƒ } t3 | | d | ƒ SWn4 t4 ƒ  j
 o% } t d | f t6 i7 ƒ  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   (8   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   has_keys
   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   ftplibs	   mimetypess   keys   mtypes   fps   hosts   passwds   users   files   paths   dirss   ports   attrs   StringIOs   msgs   values   retrlens   headerss   vs   types   ks   attrs(    (    s   /usr/lib/python2.2/urllib.pys   open_ftp³sp       	   
# 
 2c    s³  d k  } 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 |
 i d |
 i |
 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   times   urls   splits   types   datas
   ValueErrors   IOErrors   rfinds   semis   encodings   msgs   appends   strftimes   gmtimes   base64s   decodestrings   unquotes   lens   joins   fs   Messages   headerss   Nones   filenos
   addinfourl(   s   selfs   urls   datas	   mimetoolss   base64s   fs   semis   encodings   StringIOs   headerss   times   msgs   type(    (    s   /usr/lib/python2.2/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   /usr/lib/python2.2/urllib.pys	   URLopenerW s,    
				#68	9				8c      sz   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 d	 d
 „ Z d „  Z RS(   s?   Derived class with handlers for errors we can handle (perhaps).c    s6   t  t i |  f | ƒ h  |  _ d |  _ d |  _ d  S(   Ni    i
   (   s   applys	   URLopeners   __init__s   selfs   argss
   auth_caches   triess   maxtries(   s   selfs   args(    (    s   /usr/lib/python2.2/urllib.pys   __init__s    		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   /usr/lib/python2.2/urllib.pys   http_error_defaults     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   /usr/lib/python2.2/urllib.pys   http_error_302!s     				c 	   s¢   | i d ƒ o | d } n# | i d ƒ o | d } n d  S| i ƒ  } | i ƒ  t |  i	 d | | ƒ } | t j o |  i | ƒ Sn |  i | | ƒ Sd  S(   Ns   locations   uris   :(   s   headerss   has_keys   newurls   fps   reads   voids   closes   basejoins   selfs   types   urls   datas   Nones   open(	   s   selfs   urls   fps   errcodes   errmsgs   headerss   datas   newurls   void(    (    s   /usr/lib/python2.2/urllib.pys   redirect_internal1s    
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   /usr/lib/python2.2/urllib.pys   http_error_301As     c    s  | i d ƒ 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   has_keys	   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   schemes   match(    (    s   /usr/lib/python2.2/urllib.pys   http_error_401Es$     
	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   is   hosts   passwds   users   selector(    (    s   /usr/lib/python2.2/urllib.pys   retry_http_basic_auth\s    
 .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   is   hosts   passwds   users   selector(    (    s   /usr/lib/python2.2/urllib.pys   retry_https_basic_authis    
 .i    c    s–   | d | i ƒ  } |  i i | ƒ o$ | o |  i | =n |  i | Sn |  i | | ƒ \ } } | p | o | | f |  i | <n | | f Sd  S(   Ns   @(   s   realms   hosts   lowers   keys   selfs
   auth_caches   has_keys   clear_caches   prompt_user_passwds   users   passwd(   s   selfs   hosts   realms   clear_caches   users   keys   passwd(    (    s   /usr/lib/python2.2/urllib.pys   get_user_passwdss     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   getpasss   users   passwd(    (    s   /usr/lib/python2.2/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_401s   retry_http_basic_auths   retry_https_basic_auths   get_user_passwds   prompt_user_passwd(    (    (    s   /usr/lib/python2.2/urllib.pys   FancyURLopeners    			
c      s#   t  o t i d ƒ a  n t  Sd S(   s8   Return the IP address of the magic hostname 'localhost'.s	   localhostN(   s
   _localhosts   sockets   gethostbyname(    (    (    s   /usr/lib/python2.2/urllib.pys	   localhosts
      c      s)   t  o t i t i ƒ  ƒ a  n t  Sd S(   s*   Return the IP address of the current host.N(   s	   _thishosts   sockets   gethostbynames   gethostname(    (    (    s   /usr/lib/python2.2/urllib.pys   thishost—s
      c     s&   t  o d k }  |  i a  n t  Sd S(   s1   Return the set of errors raised by the FTP class.N(   s
   _ftperrorss   ftplibs
   all_errors(   s   ftplib(    (    s   /usr/lib/python2.2/urllib.pys	   ftperrorsŸs      	c     sK   t  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	   mimetoolss   StringIOs   Messages   fps   close(   s	   mimetoolss   StringIO(    (    s   /usr/lib/python2.2/urllib.pys	   noheaders¨s      		s
   ftpwrapperc      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    s;   | |  _  | |  _ | |  _ | |  _ | |  _ |  i ƒ  d  S(   N(   s   users   selfs   passwds   hosts   ports   dirss   init(   s   selfs   users   passwds   hosts   ports   dirs(    (    s   /usr/lib/python2.2/urllib.pys   __init__¸s    					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   /usr/lib/python2.2/urllib.pys   initÀs    		
 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 | ƒ } WnO | i j
 o@ } t | ƒ d
  d j o  t d | f t i ƒ  d ‚ n n 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   /usr/lib/python2.2/urllib.pys   retrfileÉs@    	
 
!
) 	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   /usr/lib/python2.2/urllib.pys   endtransferîs    	c    s8   |  i ƒ  y |  i i ƒ  Wn t ƒ  j
 o n Xd  S(   N(   s   selfs   endtransfers   ftps   closes	   ftperrors(   s   self(    (    s   /usr/lib/python2.2/urllib.pys   close÷s
    
(   s   __name__s
   __module__s   __doc__s   __init__s   inits   retrfiles   endtransfers   close(    (    (    s   /usr/lib/python2.2/urllib.pys
   ftpwrapperµs    				%		s   addbasec      s)   t  Z d  Z d „  Z d „  Z d „  Z RS(   s(   Base class for addinfo and addclosehook.c    sw   | |  _  |  i  i |  _ |  i  i |  _ t |  i  d ƒ o |  i  i |  _ n t |  i  d ƒ o |  i  i |  _ n d  S(   Ns	   readliness   fileno(   s   fps   selfs   reads   readlines   hasattrs	   readliness   fileno(   s   selfs   fp(    (    s   /usr/lib/python2.2/urllib.pys   __init__s    	  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   /usr/lib/python2.2/urllib.pys   __repr__s    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   /usr/lib/python2.2/urllib.pys   closes    				
 (   s   __name__s
   __module__s   __doc__s   __init__s   __repr__s   close(    (    (    s   /usr/lib/python2.2/urllib.pys   addbaseþs    		s   addclosehookc      s    t  Z d  Z d „  Z d „  Z RS(   s*   Class to add a close hook to an open file.c    s&   t  i |  | ƒ | |  _ | |  _ d  S(   N(   s   addbases   __init__s   selfs   fps	   closehooks   hookargs(   s   selfs   fps	   closehooks   hookargs(    (    s   /usr/lib/python2.2/urllib.pys   __init__s    	c    sD   t  i |  ƒ |  i o) t |  i |  i ƒ t |  _ t |  _ n d  S(   N(   s   addbases   closes   selfs	   closehooks   applys   hookargss   None(   s   self(    (    s   /usr/lib/python2.2/urllib.pys   closes
    
	(   s   __name__s
   __module__s   __doc__s   __init__s   close(    (    (    s   /usr/lib/python2.2/urllib.pys   addclosehooks    	s   addinfoc      s    t  Z d  Z d „  Z d „  Z RS(   s.   class to add an info() method to an open file.c    s   t  i |  | ƒ | |  _ d  S(   N(   s   addbases   __init__s   selfs   fps   headers(   s   selfs   fps   headers(    (    s   /usr/lib/python2.2/urllib.pys   __init__&s    c    s   |  i Sd  S(   N(   s   selfs   headers(   s   self(    (    s   /usr/lib/python2.2/urllib.pys   info*s    (   s   __name__s
   __module__s   __doc__s   __init__s   info(    (    (    s   /usr/lib/python2.2/urllib.pys   addinfo#s    	s
   addinfourlc      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    s&   t  i |  | ƒ | |  _ | |  _ d  S(   N(   s   addbases   __init__s   selfs   fps   headerss   url(   s   selfs   fps   headerss   url(    (    s   /usr/lib/python2.2/urllib.pys   __init__0s    	c    s   |  i Sd  S(   N(   s   selfs   headers(   s   self(    (    s   /usr/lib/python2.2/urllib.pys   info5s    c    s   |  i Sd  S(   N(   s   selfs   url(   s   self(    (    s   /usr/lib/python2.2/urllib.pys   geturl8s    (   s   __name__s
   __module__s   __doc__s   __init__s   infos   geturl(    (    (    s   /usr/lib/python2.2/urllib.pys
   addinfourl-s    		c 	   s/  t  | ƒ \ } } | o | Sn t | ƒ \ } } t  |  ƒ \ } } | o# | o | d | | Sn | Sn t | ƒ \ } } t | ƒ \ } } t
 | ƒ \ } } | d  d j oô | d  d d f j o t | ƒ } n | i d ƒ } | d j  o | o
 d } n d } n | | d  } xw | o | d  d	 j o^ | d } | d
  i d ƒ } | d j o | | d  } n | d j o d } Pn 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   is   basepaths	   basequerys   hosts   basetags   paths   type(    (    s   /usr/lib/python2.2/urllib.pys   basejoin<sT      

 
   c    se   t  |  ƒ t i j oG y |  i d ƒ }  Wn- t j
 o! t d t |  ƒ d ƒ ‚ n Xn |  Sd S(   s   toBytes(u"URL") --> 'URL'.s   ASCIIs   URL s    contains non-ASCII charactersN(   s   types   urls   typess   UnicodeTypes   encodes   UnicodeErrors   repr(   s   url(    (    s   /usr/lib/python2.2/urllib.pys   toBytes†s     #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   /usr/lib/python2.2/urllib.pys   unwrap’s     " 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   /usr/lib/python2.2/urllib.pys	   splittype›s      	"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   /usr/lib/python2.2/urllib.pys	   splithost©s      	 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   /usr/lib/python2.2/urllib.pys	   splituserµs      	 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   /usr/lib/python2.2/urllib.pys   splitpasswdÁs      	 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   /usr/lib/python2.2/urllib.pys	   splitportÎs      	 iÿÿÿÿ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   res   nports   matchs   port(    (    s   /usr/lib/python2.2/urllib.pys
   splitnportÚs       	 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   /usr/lib/python2.2/urllib.pys
   splitqueryðs      	 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   /usr/lib/python2.2/urllib.pys   splittagüs      	 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   /usr/lib/python2.2/urllib.pys	   splitattrs     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   /usr/lib/python2.2/urllib.pys
   splitvalues      	 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   /usr/lib/python2.2/urllib.pys   splitgophertypes     c    sÇ   t  } t } |  i d ƒ } | d g } | i } | d =x{ | D]s } | d d !oQ y) | | | | d  d ƒ ƒ | d ƒ Wn! t j
 o | d | ƒ n Xn | 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   items   ress   myappends   lists   mychrs   myatoi(    (    s   /usr/lib/python2.2/urllib.pys   unquotes      	 )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   /usr/lib/python2.2/urllib.pys   unquote_plus2s     sA   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-s   /c    sŸ   t  t j o% h  a  x t D] } | t  | <q Wn t |  ƒ } xM t t | ƒ ƒ D]9 } | | } t  i
 | ƒ o d t | ƒ | | <n qQ Wd i | ƒ Sd  S(   Ns   %%%02Xs    (   s
   _fast_safes   Nones   _fast_safe_tests   cs   lists   ss   ress   ranges   lens   is   has_keys   ords   join(   s   ss   is   ress   c(    (    s   /usr/lib/python2.2/urllib.pys   _fast_quote@s       
c    sŽ   t  | } t | j o t |  ƒ Sn t |  ƒ } xI t t | ƒ ƒ D]5 } | | } | | j o d t | ƒ | | <n 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   /usr/lib/python2.2/urllib.pys   quoteMs     
 
s    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   /usr/lib/python2.2/urllib.pys
   quote_plusls      i    c 
   s5  t  |  d ƒ o |  i ƒ  }  ny yA t |  ƒ } t |  ƒ o t |  d ƒ t i j o
 t ‚ n Wn4 t j
 o( t	 i
 ƒ  \ } } } t d | ‚ n Xg  } | oT xM |  D]E \ } } t t | ƒ ƒ } t t | ƒ ƒ } | i | d | ƒ q­ Wn+x'|  D]\ } } t t | ƒ ƒ } t | ƒ t i j o% t | ƒ } | i | d | ƒ nÇ t | ƒ t i j o1 t | i d d ƒ ƒ } | i | d | ƒ n€ y t | ƒ } Wn: t j
 o. t t | ƒ ƒ } | i | d | ƒ n4 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   xs   types   typess	   TupleTypes	   TypeErrors   syss   exc_infos   tys   vas   tbs   ls   doseqs   ks   vs
   quote_pluss   strs   appends
   StringTypes   UnicodeTypes   encodes   elts   join(
   s   querys   doseqs   vas   tys   tbs   ks   vs   ls   xs   elt(    (    s   /usr/lib/python2.2/urllib.pys	   urlencodevsF    	 '   )c     sd   h  }  xS t i i ƒ  D]B \ } } | i ƒ  } | o | d d j o | |  | d  <n 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   /usr/lib/python2.2/urllib.pys   getproxies_environment·s      c     s¶   y d k  }  Wn t j
 o h  Sn Xy |  i ƒ  } Wn |  i j
 o h  Sn Xh  } | i d ƒ o | d o9 y | d } Wn |  i j
 o n 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   has_keys   value(   s   ics   proxiess   configs   value(    (    s   /usr/lib/python2.2/urllib.pys
   getproxiesÈs"     		c    s   d Sd  S(   Ni    (    (   s   x(    (    s   /usr/lib/python2.2/urllib.pys   proxy_bypassæs    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 xj | i
 d ƒ D]Y } | i
 d d ƒ \ }  } d k } | i d	 | ƒ o d
 |  | f } n | | |  <q› Wn< | d  d j o | | d <n 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   /usr/lib/python2.2/urllib.pys   getproxies_registryês<     			 	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   /usr/lib/python2.2/urllib.pys
   getproxiess     c    s  y d  k  } 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 |
 i |  d ƒ } | |  j o |  i | ƒ n Wn |
 i j
 o n X| i d ƒ } d } xi | t | ƒ j  oU | | d j o6 d d |
 i ƒ  |
 i |
 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	 Sn 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   sockets   ImportErrors   OpenKeys   HKEY_CURRENT_USERs   internetSettingss   QueryValueExs   proxyEnables   strs   proxyOverrides   WindowsErrors   hosts   gethostbynames   addrs   appends   errors   splits   is   lens   gethostnames   tests   replaces   vals   matchs   I(   s   hosts   addrs   vals   is   proxyOverrides   internetSettingss   res   _winregs   tests   proxyEnables   socket(    (    s   /usr/lib/python2.2/urllib.pys   proxy_bypass sR    							 6  c    s   d Sd  S(   Ni    (    (   s   host(    (    s   /usr/lib/python2.2/urllib.pys   proxy_bypassYs    c     s²   d  k  } d } x$ t d ƒ D] } | t | ƒ } q W| d } | i  ƒ  } t | ƒ }  t |  ƒ } | i  ƒ  } | | j o	 d GHn | GH|  GH| GHt | | d ƒ Gd GHd  S(   Ns    i   i   s   Wrong!i   s   sec(   s   times   ss   ranges   is   chrs   t0s   quotes   qss   unquotes   uqss   t1s   round(   s   qss   is   t0s   t1s   ss   times   uqs(    (    s   /usr/lib/python2.2/urllib.pys   test1]s     	  
	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   /usr/lib/python2.2/urllib.pys
   reporthookns    c    sH  |  o: d d d d d g }  t t d ƒ o |  i d ƒ n 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   fns   table(    (    s   /usr/lib/python2.2/urllib.pys   testts6       	 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  Sn 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   msgs   ts   getopts   opts(    (    s   /usr/lib/python2.2/urllib.pys   main•s4    #	 	 s   __main__(O   s   __doc__s   strings   sockets   oss   stats   times   syss   typess   __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   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__(9   s
   splitnports   unquotes
   getproxiess	   URLopeners	   urlencodes   basejoins	   splithosts   ftpcaches   addinfos
   addinfourls	   splitports   __all__s
   splitvalues	   splitusers   splitgophertypes   thishosts   unwraps	   noheaderss   splittags   toBytess	   splitattrs   __version__s	   localhosts   splitpasswds	   splittypes   stats   strings   addclosehooks   urlopens   quotes
   urlcleanups   _fast_safe_tests   addbases   syss
   quote_pluss   tests   urlretrieves
   ftpwrappers   typess   url2pathnames   FancyURLopeners   mains   sockets
   splitquerys   getproxies_environments   getproxies_registrys   proxy_bypasss   always_safes
   reporthooks   pathname2urls   test1s   times   MAXFTPCACHEs	   ftperrorss   _fast_quotes   oss   unquote_plus(    (    s   /usr/lib/python2.2/urllib.pys   ? s®   							]				ÿ ¾z				I
	J														
	
A			-		7			!	