‡Æ
Nö9c       sÕ    d  Z    d k Z 	 d k l Z l Z l Z  d d d d d d d	 d
 d d d d g Z  d d d d d d d d	 d
 d d d d d g Z  d d d d d d d d g Z  d d d d d	 d
 d d d d g
 Z  d d d	 d
 d d d d d g	 Z	  d d d d d d d d	 d
 d d d d g Z
 " e i e i d Z $ d Z % h  Z ' d „  Z - d d d „ Z q d „  Z ƒ d d „ Z ± d „  Z ½ d Z à d „  Z þ e d j o ÿ e ƒ  n d S(    s   Parse (absolute and relative) URLs.

See RFC 1808: "Relative Uniform Resource Locators", by R. Fielding,
UC Irvine, June 1995.
N(   s   joins   splits   rfinds   ftps   https   gophers   nntps   waiss   files   httpss   shttps   prosperos   rtsps   rtspus    s   telnets   snewss   hdls   mailtos   newss   sips   +-.i   c      s   ' ( ) * h  a  d S(   s   Clear the parse cache.N(   s   _parse_cache(    s%   /mit/python/lib/python2.0/urlparse.pys   clear_cache' s   c    sš  - 2 3 |  | | f } 4 t i | t ƒ } 5 | o 6 | Sn 7 t t ƒ t	 j o 8 t
 ƒ  n 9 t i } : d } } } }	 }
 ; | |  d ƒ } < | d j o= |  |  d j o¤> t i |  |  ƒ } ? |  | d }  @ |  d  d j oY A | |  d d ƒ } B | d j  o C t |  ƒ } n D |  d | !} E |  | }  n F | oK G t i |  d	 ƒ } H | d j o" I |  | d }
 J |  |  }  n n K | |  d
 ƒ } L | d j o" M |  | d }	 N |  |  }  n O | |  d ƒ } P | d j o" Q |  | d } R |  |  }  n S | | |  | |	 |
 f } T | t | <U | Sn V xY |  |  d V r } W | t j o X Pn quWZ t i |  |  ƒ |  | d f \ } }  n [ | t j ot \ |  d  d j o\ ] | |  d d ƒ } ^ | d j  o _ t |  ƒ } n ` |  d | !|  | f \ } }  n n a | o
 | t j oN b t i |  d	 ƒ } c | d j o% d |  |  |  | d f \ }  }
 n n e | t j oK f | |  d
 ƒ } g | d j o% h |  |  |  | d f \ }  }	 n n i | t j oK j | |  d ƒ } k | d j o% l |  |  |  | d f \ }  } n n m | | |  | |	 |
 f } n | t | <o | Sd S(   s  Parse a URL into 6 components:
	<scheme>://<netloc>/<path>;<params>?<query>#<fragment>
	Return a 6-tuple: (scheme, netloc, path, params, query, fragment).
	Note that we don't break the components up in smaller bits
	(e.g. netloc is a single string) and we don't expand % escapes.s    s   :i    s   httpi   i   s   //s   /s   #s   ?s   ;N(   s   urls   schemes   allow_fragmentss   keys   _parse_caches   gets   Nones   cacheds   lens   MAX_CACHE_SIZEs   clear_caches   strings   finds   netlocs   paths   paramss   querys   fragments   is   lowers   rfinds   tuples   cs   scheme_charss   uses_netlocs   uses_fragments
   uses_querys   uses_params(   s   urls   schemes   allow_fragmentss   keys   cacheds   finds   netlocs   paths   paramss   querys   fragments   is   tuples   cs%   /mit/python/lib/python2.0/urlparse.pys   urlparse- s|   

 	.()))i   c    s  q |  \ } } } } } } u v | p | t j o | d  d j oA w | d  d j o w d | } n x d | p d | } n y | o z | d | } n { | o | | d | } n } | o ~ | d | } n  | o € | d	 | } n  | Sd
 S(   sñ   Put a parsed URL back together again.  This may result in a
	slightly different, but equivalent URL, if the URL that was parsed
	originally had redundant delimiters, e.g. a ? with an empty query
	(the draft states that these are equivalent).i   s   //i   s   /s    s   :s   ;s   ?s   #N(   s   netlocs   schemes   uses_netlocs   urls   paramss   querys   fragment(   s   .0s   schemes   netlocs   urls   paramss   querys   fragments%   /mit/python/lib/python2.0/urlparse.pys
   urlunparseq s   ( 



c    s&  ƒ … † |  o ‡ | Sn ˆ t |  d | ƒ \ } } } } } } Š t | | | ƒ \ }	 }
 } } } } Œ |	 | j p
 |	 t j o#  t |	 |
 | | | | f ƒ Sn  |	 t j o:  |
 o# ‘ t |	 |
 | | | | f ƒ Sn “ | }
 n ” | d  d j o# • t |	 |
 | | | | f ƒ Sn — | o* ˜ t |	 |
 | | | p | | f ƒ Sn š t | d ƒ d  t | d ƒ } œ | d d j o  d | d <n ž x% ž d | j o Ÿ | i d ƒ q±W  x—   d oŒ ¡ d } ¢ t | ƒ d } £ xf £ | | j  oQ ¤ | | d j o | | d o ¥ | | d | d 5¦ Pn § | d } qW© PqÜWª t | ƒ d j o | d d j o | d d j o « d | d <n> ¬ t | ƒ d j o | d d j o ­ d g | d )n ® t |	 |
 t | d ƒ | | | f ƒ Sd S(	   s^   Join a base URL and a possibly relative URL to form an absolute
	interpretation of the latter.s    i   s   /s   .s   ..i   i    N(   s   bases   urls   urlparses   allow_fragmentss   bschemes   bnetlocs   bpaths   bparamss   bquerys	   bfragments   schemes   netlocs   paths   paramss   querys   fragments   uses_relatives
   urlunparses   uses_netlocs   splits   segmentss   removes   is   lens   ns   join(   s   bases   urls   allow_fragmentss   bschemes   bnetlocs   bpaths   bparamss   bquerys	   bfragments   schemes   netlocs   paths   paramss   querys   fragments   segmentss   is   ns%   /mit/python/lib/python2.0/urlparse.pys   urljoinƒ sJ   ''#
##*$  
	 #	8(c    sY   ± · ¸ t  |  ƒ \ } } } } } } ¹ t | | | | | d f ƒ } º | | f Sd S(   s³   Removes any existing fragment from URL.

	Returns a tuple of the defragmented URL and the fragment.  If
	the URL contained no fragments, the second element is the
	empty string.
	s    N(
   s   urlparses   urls   ss   ns   ps   as   qs   frags
   urlunparses   defrag(   s   urls   ss   ns   ps   as   qs   frags   defrags%   /mit/python/lib/python2.0/urlparse.pys	   urldefrag± s   !!s™  
      http://a/b/c/d

      g:h        = <URL:g:h>
      http:g     = <URL:http://a/b/c/g>
      http:      = <URL:http://a/b/c/d>
      g          = <URL:http://a/b/c/g>
      ./g        = <URL:http://a/b/c/g>
      g/         = <URL:http://a/b/c/g/>
      /g         = <URL:http://a/g>
      //g        = <URL:http://g>
      ?y         = <URL:http://a/b/c/d?y>
      g?y        = <URL:http://a/b/c/g?y>
      g?y/./x    = <URL:http://a/b/c/g?y/./x>
      .          = <URL:http://a/b/c/>
      ./         = <URL:http://a/b/c/>
      ..         = <URL:http://a/b/>
      ../        = <URL:http://a/b/>
      ../g       = <URL:http://a/b/g>
      ../..      = <URL:http://a/>
      ../../g    = <URL:http://a/g>
      ../../../g = <URL:http://a/../g>
      ./../g     = <URL:http://a/b/g>
      ./g/.      = <URL:http://a/b/c/g/>
      /./g       = <URL:http://a/./g>
      g/./h      = <URL:http://a/b/c/g/h>
      g/../h     = <URL:http://a/b/c/h>
      http:g     = <URL:http://a/b/c/g>
      http:      = <URL:http://a/b/c/d>
      http:?y         = <URL:http://a/b/c/d?y>
      http:g?y        = <URL:http://a/b/c/g?y>
      http:g?y/./x    = <URL:http://a/b/c/g?y/./x>
c     sº  à á d  k  }  â d } ã |  i d oC ä |  i d } å | d j o æ |  i } n è t | ƒ } n ê d  k } ë | i t ƒ } ì x&ì d oí | i	 ƒ  } î | o î Pn ï t i | ƒ } ð | o
 ñ q n ò | d } ó t | ƒ } ô d | | f GHõ t | | ƒ }	 ö | o ÷ |	 } n ø d |	 }
 ù d | |
 f GHú t | ƒ d j o | d d	 j o0 û |
 | d
 j o ü d G| d
 Gd GHn n q Wd  S(   Ns    i   s   -i    s
   %-10s : %ss   <URL:%s>s
   %-10s = %si   s   =i   s   EXPECTEDs
   !!!!!!!!!!(   s   syss   bases   argvs   fns   stdins   fps   opens   StringIOs
   test_inputs   readlines   lines   strings   splits   wordss   urls   urlparses   partss   urljoins   abss   wrappeds   len(   s   syss   bases   fns   fps   StringIOs   lines   wordss   urls   partss   abss   wrappeds%   /mit/python/lib/python2.0/urlparse.pys   testà s8   	 
 
's   __main__(   s   __doc__s   strings   joins   splits   rfinds   uses_relatives   uses_netlocs   non_hierarchicals   uses_paramss
   uses_querys   uses_fragments   letterss   digitss   scheme_charss   MAX_CACHE_SIZEs   _parse_caches   clear_caches   urlparses
   urlunparses   urljoins	   urldefrags
   test_inputs   tests   __name__(    s%   /mit/python/lib/python2.0/urlparse.pys   ? s(   -3!'$0		D.	#