-í
ç¶<c       s“  d  Z  d d d g 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 d Z d Z	 h  a
 d „  Z d d d „ Z d „  Z d d d „ Z d „  Z 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.
s   urlparses
   urlunparses   urljoins   ftps   https   gophers   nntps   waiss   files   httpss   shttps   prosperos   rtsps   rtspus    s   telnets   snewss   hdls   mailtos   newss   sipsA   abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-.i   c      s
   h  a  d S(   s   Clear the parse cache.N(   s   _parse_cache(    (    (    s   /usr/lib/python2.2/urlparse.pys   clear_cache( s      i   c    sw   t  |  | | ƒ } | \ } } }  } } | t j o
 d |  j o t	 |  ƒ \ }  } n d } | | |  | | | f 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    N(   s   urlsplits   urls   schemes   allow_fragmentss   tuples   netlocs   querys   fragments   uses_paramss   _splitparamss   params(   s   urls   schemes   allow_fragmentss   tuples   fragments   netlocs   paramss   query(    (    s   /usr/lib/python2.2/urlparse.pys   urlparse. s     c    sp   d |  j o: |  i d |  i d ƒ ƒ } | d j  o |  d f Sn n |  i d ƒ } |  |  |  | d f Sd  S(   Ns   /s   ;i    s    i   (   s   urls   finds   rfinds   i(   s   urls   i(    (    s   /usr/lib/python2.2/urlparse.pys   _splitparams< s    c    sý  |  | | f }	 t i |	 t ƒ } | o | Sn t t ƒ t	 j o t
 ƒ  n d } }
 } |  i d ƒ } | d j oy|  |  d j o|  |  i ƒ  } |  | d }  |  d  d j oj |  i d d ƒ } | d j  o0 |  i d	 ƒ } | d j  o t |  ƒ } n n |  d | !} |  | }  n | o
 d	 |  j o |  i d	 d ƒ \ }  } n d
 |  j o |  i d
 d ƒ \ }  }
 n | | |  |
 | f } | t |	 <| Sn xH |  |  D] } | t j o Pn q­W|  |  i ƒ  |  | d f \ } }  n | t j oe |  d  d j oP |  i d d ƒ } | d j  o t |  ƒ } n |  d | !|  | f \ } }  n n | o | t j o
 d	 |  j o |  i d	 d ƒ \ }  } n | t j o
 d
 |  j o |  i d
 d ƒ \ }  }
 n | | |  |
 | f } | t |	 <| Sd S(   s  Parse a URL into 5 components:
    <scheme>://<netloc>/<path>?<query>#<fragment>
    Return a 5-tuple: (scheme, netloc, path, 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   ?N(   s   urls   schemes   allow_fragmentss   keys   _parse_caches   gets   Nones   cacheds   lens   MAX_CACHE_SIZEs   clear_caches   netlocs   querys   fragments   finds   is   lowers   splits   tuples   cs   scheme_charss   uses_netlocs   uses_fragments
   uses_query(   s   urls   schemes   allow_fragmentss   is   cacheds   cs   netlocs   fragments   tuples   keys   query(    (    s   /usr/lib/python2.2/urlparse.pys   urlsplitE s\     
 	(%!
c    sP   |  \ } } } } } } | o d | | f } n t | | | | | f ƒ 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).s   %s;%sN(   s   schemes   netlocs   urls   paramss   querys   fragments
   urlunsplit(   s   .0s   schemes   netlocs   urls   paramss   querys   fragment(    (    s   /usr/lib/python2.2/urlparse.pys
   urlunparsey s    c    sÌ   |  \ } } } } } | p | t j o | d  d j o? | o | d  d j o d | } n d | p d | } n | o | d | } n | o | d | } n | o | d | } n | Sd  S(	   Ni   s   //i   s   /s    s   :s   ?s   #(   s   schemes   netlocs   urls   querys   fragments   uses_netloc(   s   .0s   schemes   netlocs   urls   querys   fragment(    (    s   /usr/lib/python2.2/urlparse.pys
   urlunsplit‚ s   % c    s­  |  o | Sn | o |  Sn t |  d | ƒ \ } }
 } } } } t | | | ƒ \ }	 } } } } } |	 | j p
 |	 t j o | Sn |	 t j o1 | o  t |	 | | | | | f ƒ Sn |
 } n | d  d j o  t |	 | | | | | f ƒ Sn | oD | o | } | o
 | } n n t |	 | | | | | f ƒ Sn | i d ƒ d  | i d ƒ } | d d j o d | d <n x d | j o | i d ƒ q‡Wx… d o} d } t | ƒ d } x` | | j  oQ | | d j o | | d d d f j o | | d | d 5Pn | d } qÉWPq©W| d d g j o d | d <n6 t | ƒ d j o | d d j o d g | d )n t |	 | d i | ƒ | | | f ƒ Sd	 S(
   sa   Join a base URL and a possibly relative URL to form an absolute
    interpretation of the latter.s    i   s   /iÿÿÿÿ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   uses_netlocs
   urlunparses   splits   segmentss   removes   is   lens   ns   join(   s   bases   urls   allow_fragmentss   bparamss   fragments   netlocs   bschemes   querys   bpaths   schemes   bnetlocs   is   segmentss   ns   paramss   bquerys   paths	   bfragment(    (    s   /usr/lib/python2.2/urlparse.pys   urljoinŽ sV     $$ 
      ,$c    se   d |  j oJ t |  ƒ \ } } } } } } t | | | | | d f ƒ } | | f Sn |  d 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   #s    N(
   s   urls   urlparses   ss   ns   ps   as   qs   frags
   urlunparses   defrag(   s   urls   qs   ps   ss   defrags   frags   as   n(    (    s   /usr/lib/python2.2/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 o7 | i d }
 |
 d j o | i }  n t |
 ƒ }  n d  k } | i t ƒ }  xí d oå |  i	 ƒ  }	 |	 o Pn |	 i ƒ  } | o qo n | d } t | ƒ } d | | f GHt | | ƒ } | o
 | } n d | } d | | f GHt | ƒ d j o | d d	 j o* | | d
 j o d G| d
 Gd GHn n qo 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   splits   wordss   urls   urlparses   partss   urljoins   abss   wrappeds   len(   s   fps   abss   StringIOs   urls   partss   syss   bases   wordss   wrappeds   lines   fn(    (    s   /usr/lib/python2.2/urlparse.pys   testô s8    		  


$s   __main__N(   s   __doc__s   __all__s   uses_relatives   uses_netlocs   non_hierarchicals   uses_paramss
   uses_querys   uses_fragments   scheme_charss   MAX_CACHE_SIZEs   _parse_caches   clear_caches   urlparses   _splitparamss   urlsplits
   urlunparses
   urlunsplits   urljoins	   urldefrags
   test_inputs   tests   __name__(   s   urljoins
   urlunsplits   uses_paramss	   urldefrags   urlsplits   __all__s   clear_caches   non_hierarchicals   MAX_CACHE_SIZEs   urlparses
   test_inputs
   uses_querys   _splitparamss   tests   uses_netlocs   uses_relatives   scheme_charss
   urlunparses   uses_fragment(    (    s   /usr/lib/python2.2/urlparse.pys   ? s,   *0$!-			4			4	#	