ó
ú2ec           @   s  d  Z  d d l m Z m Z m Z m Z d d l m Z d d l Z d d l	 m
 Z
 d a d d g Z d „  Z d	 „  Z d
 „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e d k rd d l Z e j ƒ  n  d S(   s3   
This module implements a class for handling URLs.
iÿÿÿÿ(   t	   parse_qslt   quotet   unquotet	   urlencode(   t   requestN(   t   htmlt   URLt   Imagec         C   s&   |  d  k r d St j t |  ƒ d ƒ S(   Nt    i   (   t   NoneR   t   escapet   str(   t   v(    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt
   html_quote   s    c         C   s    |  d  k r d St t |  ƒ ƒ S(   NR   (   R	   R   R   (   R   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt	   url_quote   s    c         C   sQ  |  d  k r d S|  t k r  d S|  t k r0 d St |  t ƒ rY d d j t t |  ƒ ƒ St |  t ƒ r¨ d d j g  |  D]( \ } } d t | ƒ t | ƒ f ^ qx ƒ St |  t	 ƒ rÁ t
 |  ƒ St |  t ƒ rã t
 |  j d ƒ ƒ St |  t t f ƒ rt
 |  ƒ St |  t ƒ r$t
 |  ƒ j d	 ƒ St |  d
 ƒ r=|  j ƒ  St d |  ƒ ‚ d  S(   Nt   nullt   falset   trues   [%s]s   , s   {%s}s   %s: %ss   UTF-8t   Lt   __js_repr__s<   I don't know how to turn %r into a Javascript representation(   R	   t   Falset   Truet
   isinstancet   listt   joint   mapt   js_reprt   dictR   t   reprt   unicodet   encodet   floatt   intt   longt   lstript   hasattrR   t
   ValueError(   R   t   keyt   value(    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR      s2    	4


t   URLResourcec           B   s  e  Z d  Z i  Z d d d d „ Z e e d d d d „ Z e e ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z e j r« e Z n e Z d „  Z d „  Z e e ƒ Z d „  Z d „  Z e e ƒ Z d „  Z d „  Z d „  Z d „  Z  d „  Z! RS(   sD   
    This is an abstract superclass for different kinds of URLs
    c         C   sk   | p	 d |  _  | p g  |  _ | p' i  |  _ |  j j ƒ  |  _ | pH i  |  _ | rg |  j j | ƒ n  d  S(   Nt   /(   t   urlt   varst   attrst   default_paramst   copyt   paramst   original_paramst   update(   t   selfR)   R*   R+   R.   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   __init__@   s    c   
   
   C   s‚   t  j | d t d | d | d | ƒ} | rf | d  k rK t  j | ƒ } ql t | d t d t ƒ} n d  } |  | d | ƒ}	 |	 S(   Nt   with_query_stringt   with_path_infot   script_namet	   path_infot   keep_blank_valuest   strict_parsingR*   (   R   t   construct_urlR   R	   t   parse_querystringR    R   (
   t   clst   environR3   R4   R5   R6   t   querystringR)   R*   R   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   from_environK   s    	c         O   s"   |  j  | ƒ } | j | ƒ } | S(   N(   t   _add_positionalt	   _add_vars(   R1   t   argst   kwt   res(    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   __call__a   s    c         C   sT   d | k rD | j  d d ƒ \ } } |  j i t | ƒ t | ƒ 6ƒ S|  j | f ƒ S(   Nt   =i   (   t   splitR@   R   R?   (   R1   t   itemt   nameR&   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   __getitem__f   s     c         K   s†   x? | j  ƒ  D]1 } | j d ƒ r | | | | d  <| | =q q W|  j j ƒ  } | j | ƒ |  j |  j d |  j d | d |  j ƒS(   Nt   _iÿÿÿÿR*   R+   R.   (	   t   keyst   endswithR+   R-   R0   t	   __class__R)   R*   R/   (   R1   RB   R%   t	   new_attrs(    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   attrl   s    c         K   sD   |  j  j ƒ  } | j | ƒ |  j |  j d |  j d |  j d | ƒS(   NR*   R+   R.   (   R/   R-   R0   RM   R)   R*   R+   (   R1   RB   t
   new_params(    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   paramw   s
    	c         C   s¡   t  } x] | j ƒ  D]O \ } } t | t ƒ r7 t } n  | j d ƒ r | | | | d  <| | =q q W| r t d  k r‹ d d l m a n  t j	 | ƒ } n  | S(   NRJ   iÿÿÿÿ(   t   variabledecode(
   R   t   itemsR   R   R   RL   RR   R	   t
   formencodet   variable_encode(   R1   R*   t   need_variable_encodeR%   R&   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   coerce_vars~   s    	c         K   sP   |  j  | ƒ } |  j t | j ƒ  ƒ } |  j |  j d | d |  j d |  j ƒS(   NR*   R+   R.   (   RW   R*   R   RS   RM   R)   R+   R/   (   R1   RB   t   new_vars(    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   varŽ   s
    	c         K   s   |  j  | ƒ } g  } x< |  j D]1 \ } } | | k r= q n  | j | | f ƒ q W| j | j ƒ  ƒ |  j |  j d | d |  j d |  j ƒS(   s®   
        Like ``.var(...)``, except overwrites keys, where .var simply
        extends the keys.  Setting a variable to None here will
        effectively delete it.
        R*   R+   R.   (	   RW   R*   t   appendt   extendRS   RM   R)   R+   R/   (   R1   RB   RX   RH   t   values(    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   setvar•   s    	c         K   s.   |  j  |  j d | j ƒ  d |  j d |  j ƒS(   sš   
        Creates a copy of this URL, but with all the variables set/reset
        (like .setvar(), except clears past variables at the same time)
        R*   R+   R.   (   RM   R)   RS   R+   R/   (   R1   RB   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   setvars¦   s    	c      	   G   sƒ   |  } xv | D]n } t  | ƒ j d ƒ } | j } | j d ƒ sM | d 7} n  | j | | d | j d | j d | j ƒ} q W| S(   NR(   R*   R+   R.   (   R   R"   R)   RL   RM   R*   R+   R/   (   R1   t   pathst   ut   patht   new_url(    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   addpath¯   s    		c         C   s(   | |  j  d |  j d |  j d |  j ƒS(   NR*   R+   R.   (   R)   R*   R+   R/   (   R1   t
   OtherClass(    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   becomeÀ   s    	c         C   s¸   |  j  } |  j r´ | d 7} g  } xy |  j D]n \ } } t | t t f ƒ ru g  | D] } | d  k	 rT | ^ qT } n | d  k r‡ q, n  | j | | f ƒ q, W| t | t ƒ 7} n  | S(   Nt   ?(	   R)   R*   R   R   t   tupleR	   RZ   R   R   (   R1   t   sR*   RH   t   valR   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt	   href__getÅ   s    		
(c      	   C   sÑ   d |  j  j |  j p d f } |  j rz | d d j g  |  j j ƒ  D]( \ } } d t | ƒ t | ƒ f ^ qD ƒ 7} n  |  j rÉ | d d j g  |  j j ƒ  D] \ } } d | | f ^ qŸ ƒ 7} n  | d	 S(
   Ns   <%s %ss   ''s
    attrs(%s)t    s   %s="%s"s    params(%s)s   , s   %s=%rt   >(   RM   t   __name__t   hrefR+   R   RS   R   R/   (   R1   t   baset   nR   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   __repr__Õ   s    		C		7c         C   sç   |  j  j d ƒ s% t d |  ƒ ‚ n  |  j ƒ  } d |  j  j d ƒ } d j g  |  j ƒ  D]( \ } } d t | ƒ t | ƒ f ^ qZ ƒ } | r¢ | d | 7} n  | |  j ƒ  7} | d  k rÆ | d Sd | | |  j  j d ƒ f Sd  S(   Nt   tags<   You cannot get the HTML of %r until you set the 'tag' param's   <%sRk   s   %s="%s"s    />s
   %s>%s</%s>(	   R.   t   getR$   t   _get_contentR   t   _html_attrsR   t   _html_extraR	   (   R1   t   contentRr   Rp   R   R+   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt	   html__getâ   s    ;c         C   s   |  j  j ƒ  S(   N(   R+   RS   (   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRu   ö   s    c         C   s   d S(   NR   (    (   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRv   ù   s    c         C   s
   t  ‚ d S(   sw   
        Return the content for a tag (for self.html); return None
        for an empty tag (like ``<img />``)
        N(   t   NotImplementedError(   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRt   ü   s    c         C   s
   t  ‚ d  S(   N(   Ry   (   R1   R*   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR@     s    c         C   s
   t  ‚ d  S(   N(   Ry   (   R1   RA   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR?     s    N("   Rm   t
   __module__t   __doc__R,   R	   R2   R   R>   t   classmethodRD   RI   RO   RQ   RW   RY   R]   R^   Rc   t   sixt   PY3t   __truediv__t   __div__Re   Rj   t   propertyRn   Rq   Rx   R   Ru   Rv   Rt   R@   R?   (    (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR'   8   s>   
																				c           B   s‡   e  Z d  Z i d d 6Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 e
 e	 ƒ Z d	 „  Z e
 e ƒ Z d
 „  Z e
 e ƒ Z RS(   sœ  
    >>> u = URL('http://localhost')
    >>> u
    <URL http://localhost>
    >>> u = u['view']
    >>> str(u)
    'http://localhost/view'
    >>> u['//foo'].param(content='view').html
    '<a href="http://localhost/view/foo">view</a>'
    >>> u.param(confirm='Really?', content='goto').html
    '<a href="http://localhost/view" onclick="return confirm(&#x27;Really?&#x27;)">goto</a>'
    >>> u(title='See "it"', content='goto').html
    '<a href="http://localhost/view?title=See+%22it%22">goto</a>'
    >>> u('another', var='fuggetaboutit', content='goto').html
    '<a href="http://localhost/view/another?var=fuggetaboutit">goto</a>'
    >>> u.attr(content='goto').html
    Traceback (most recent call last):
        ....
    ValueError: You must give a content param to <URL http://localhost/view attrs(content="goto")> generate anchor tags
    >>> str(u['foo=bar%20stuff'])
    'http://localhost/view?foo=bar+stuff'
    t   aRr   c         C   s   |  j  S(   N(   Rn   (   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   __str__$  s    c         C   s0   |  j  j d ƒ s% t d |  ƒ ‚ n  |  j  d S(   NRw   s8   You must give a content param to %r generate anchor tags(   R.   Rs   R$   (   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRt   '  s
    c         C   s|   |  } x< d D]4 } | | k r | j  i | j | ƒ | 6  } q q Wd | k ro | j d | j d ƒ ƒ } n  | j |   S(   Nt   confirmRw   t   target(   R„   Rw   (   RQ   t   popRO   RY   (   R1   R*   R)   RH   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR@   .  s    &c         C   s   |  j  | Œ  S(   N(   Rc   (   R1   RA   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR?   7  s    c         C   sk   t  |  j j ƒ  ƒ } | j d d |  j f ƒ |  j j d ƒ rg | j d d t |  j d ƒ f ƒ n  | S(   Ni    Rn   R„   t   onclicks   return confirm(%s)(	   R   R+   RS   t   insertRn   R.   Rs   RZ   R   (   R1   R+   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRu   :  s    c         C   s   d t  |  j ƒ S(   Ns   location.href=%s; return false(   R   Rn   (   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   onclick_goto__getB  s    c         C   s   |  j  t ƒ S(   N(   Re   t   Button(   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   button__getG  s    c         C   s   |  j  t ƒ S(   N(   Re   t   JSPopup(   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   js_popup__getL  s    (   Rm   Rz   R{   R,   Rƒ   Rt   R@   R?   Ru   R‰   R   t   onclick_gotoR‹   t   buttonR   t   js_popup(    (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR   	  s   									c           B   sH   e  Z d  Z i d d 6Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sÝ   
    >>> i = Image('/images')
    >>> i = i / '/foo.png'
    >>> i.html
    '<img src="/images/foo.png" />'
    >>> str(i['alt=foo'])
    '<img src="/images/foo.png" alt="foo" />'
    >>> i.href
    '/images/foo.png'
    t   imgRr   c         C   s   |  j  S(   N(   R   (   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRƒ   `  s    c         C   s   d  S(   N(   R	   (   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRt   c  s    c         C   s   |  j  |   S(   N(   RO   (   R1   R*   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR@   f  s    c         C   s   |  j  | Œ  S(   N(   Rc   (   R1   RA   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR?   i  s    c         C   s2   t  |  j j ƒ  ƒ } | j d d |  j f ƒ | S(   Ni    t   src(   R   R+   RS   Rˆ   Rn   (   R1   R+   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRu   l  s    (	   Rm   Rz   R{   R,   Rƒ   Rt   R@   R?   Ru   (    (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR   Q  s   				RŠ   c           B   sH   e  Z d  Z i d d 6Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sù   
    >>> u = URL('/')
    >>> u = u / 'delete'
    >>> b = u.button['confirm=Sure?'](id=5, content='del')
    >>> str(b)
    '<button onclick="if (confirm(&#x27;Sure?&#x27;)) {location.href=&#x27;/delete?id=5&#x27;}; return false">del</button>'
    R   Rr   c         C   s   |  j  S(   N(   R   (   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRƒ   }  s    c         C   s>   |  j  j d ƒ r |  j  d S|  j j d ƒ r: |  j d Sd  S(   NRw   R&   (   R.   Rs   R+   R	   (   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRt   €  s
    c         C   sg   |  } d | k r0 | j  d | j d ƒ ƒ } n  d | k rZ | j  d | j d ƒ ƒ } n  | j |   S(   NR„   Rw   (   RQ   R†   RY   (   R1   R*   R   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR@   ˆ  s    c         C   s   |  j  | Œ  S(   N(   Rc   (   R1   RA   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR?     s    c         C   s~   t  |  j j ƒ  ƒ } d t |  j ƒ } |  j j d ƒ rZ d t |  j d ƒ | f } n  | d 7} | j d d | f ƒ | S(   Ns   location.href=%sR„   s   if (confirm(%s)) {%s}s   ; return falsei    R‡   (   R   R+   RS   R   Rn   R.   Rs   Rˆ   (   R1   R+   R‡   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRu   “  s    
(	   Rm   Rz   R{   R,   Rƒ   Rt   R@   R?   Ru   (    (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRŠ   q  s   				RŒ   c           B   sO   e  Z d  Z i d d 6d d 6Z d „  Z d „  Z d „  Z d „  Z d	 „  Z RS(
   sá   
    >>> u = URL('/')
    >>> u = u / 'view'
    >>> j = u.js_popup(content='view')
    >>> j.html
    '<a href="/view" onclick="window.open(&#x27;/view&#x27;, &#x27;_blank&#x27;); return false" target="_blank">view</a>'
    R‚   Rr   t   _blankR…   c         C   sR   |  } x< d D]4 } | | k r | j  i | j | ƒ | 6  } q q W| j |   S(   Nt   widtht   heightt   strippedRw   (   R”   R•   R–   Rw   (   RQ   R†   RY   (   R1   R*   R   RY   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR@   ©  s
    &c         C   s2  |  j  } g  } | j d ƒ r; d | d <| d <| d <n  xk d j ƒ  D]] } | | k r` qH n  | | } | d k rŽ | r… d	 } qŽ d } n  | j d
 | | f ƒ qH Wx> d D]6 } | j | ƒ sË q° n  | j d
 | | | f ƒ q° W|  j | d g } | r| j d j | ƒ ƒ n  d j t t | ƒ ƒ S(   NR–   t   0t   locationt   statust   toolbarsX   channelmode directories fullscreen location menubar resizable scrollbars status titlebart   yest   not   1s   %s=%ss   height left top widthR…   t   ,s   , (   R›   Rœ   R   R—   (   R.   Rs   RF   RZ   Rn   R   R   R   (   R1   t   pt   featuresRQ   R   RA   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   _window_args°  s*    	
		c         C   su   t  |  j j ƒ  ƒ } d |  j ƒ  } | j d d |  j d f ƒ | j d d | f ƒ | j d d |  j f ƒ | S(   Ns   window.open(%s); return falsei    R…   R‡   Rn   (   R   R+   RS   R¡   Rˆ   R.   Rn   (   R1   R+   R‡   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRu   È  s    c         C   s0   |  j  j d ƒ s% t d |  ƒ ‚ n  |  j  d S(   NRw   s8   You must give a content param to %r generate anchor tags(   R.   Rs   R$   (   R1   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRt   Ñ  s
    c         C   s   |  j  | Œ  S(   N(   Rc   (   R1   RA   (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyR?   Ø  s    (	   Rm   Rz   R{   R,   R@   R¡   Ru   Rt   R?   (    (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyRŒ     s   					t   __main__(   R{   t   six.moves.urllib.parseR    R   R   R   t   pasteR   R}   t
   paste.utilR   R	   RR   t   __all__R   R   R   t   objectR'   R   R   RŠ   RŒ   Rm   t   doctestt   testmod(    (    (    s3   /usr/local/lib/python2.7/dist-packages/paste/url.pyt   <module>   s"   "			ÑH ,>