
oTc           @   s   d  d l  Z  d e f d     YZ d   Z y d  d l Z Wn e k
 rW d   Z n Xd e f d     YZ d e f d	     YZ d
 e f d     YZ d e f d     YZ	 e   d  Z
 e   e d  Z d S(   iNt   PageHandlerc           B   s   e  Z d    Z d   Z RS(   c         O   s   | |  _  | |  _ | |  _ d  S(   N(   t   callablet   argst   kwargs(   t   selfR   R   R   (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   __init__   s    		c         C   s   y |  j  |  j |  j   SWn^ t k
 rz } y t |  j  |  j |  j  Wn( t j k
 rg } |  n |  n X  n Xd  S(   N(   R   R   R   t	   TypeErrort   test_callable_spect   cherrypyt	   HTTPError(   R   t   xt   error(    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   __call__   s    	
(   t   __name__t
   __module__R   R   (    (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyR       s   	c         C   s  t  t j d t  } y t j |   \ } } } } WnS t k
 r t |  t  r t	 |  d  r t j |  j
  \ } } } } q   n X| r | d d k r | d } n  t g  | D] } | d f ^ q  }	 d }
 d } t   } xP t |  D]B \ } } y |	 | | c d 7<Wq t k
 r5|
 d 7}
 q Xq WxS | j   D]E } y |	 | c d 7<WqGt k
 r| d 7} | j |  qGXqGWxK t | pg   D]7 \ } } |	 | | d k r|	 | | c d 7<qqWg  } g  } xR |	 j   D]D \ } } | d k r| j |  q| d k r| j |  qqW| rd  } | rgd d j |  } n  t j d d	 |  n  | r|
 d k rt j d   n  t j j pi  } t | j    } t | j    | } | rB| j t |   rd } n d
 } d  } | r*d d j |  } n  t j | d	 |  n  | r| d k rt |  j |  } | rd  } | rd d j |  } n  t j d d	 |  n  t |  j |  } | rd  } | rd d j |  } n  t j d
 d	 |  qn  d  S(   Nt   show_mismatched_paramsR   i    R   i   s   Missing parameters: %st   ,i  t   messagei  s"   Multiple values for parameters: %ss&   Unexpected query string parameters: %ss   , s   Unexpected body parameters: %s(   t   getattrR   t   requestt   Falset   inspectt
   getargspecR   t
   isinstancet   objectt   hasattrR   t   dictt   sett	   enumeratet
   IndexErrort   keyst   KeyErrort   addt	   iteritemst   appendt   Nonet   joinR	   t   body_paramst   intersection(   R   t   callable_argst   callable_kwargsR   R   t   varargst   varkwt   defaultst   argt	   arg_usaget   vararg_usaget   varkw_usaget   extra_kwargst   it   valuet   keyt   valt   missing_argst   multiple_argst   usageR   R%   t	   qs_paramsR   t   extra_qs_paramst   extra_body_params(    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyR   $   s    !%	
	c         C   s   d  S(   N(   R#   (   R   R   R   (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   <lambda>   s    t   LateParamPageHandlerc           B   s/   e  Z d    Z d   Z e e e d d Z RS(   c         C   s2   t  j j j   } |  j r. | j |  j  n  | S(   N(   R   R   t   paramst   copyt   _kwargst   update(   R   R   (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   _get_kwargs   s    	c         C   s   | |  _  d  S(   N(   R?   (   R   R   (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   _set_kwargs   s    t   docs<   page handler kwargs (with cherrypy.request.params copied in)(   R   R   RA   RB   t   propertyR   (    (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyR<      s   			t
   Dispatcherc           B   s;   e  Z e j Z d  Z d Z d d  Z d   Z	 d   Z
 RS(   t   _cp_dispatchs   
    The name of the dispatch method that nodes may optionally implement
    to provide their own dynamic dispatch algorithm.
    c         C   s   | r | |  _  n  d  S(   N(   t   dispatch_method_name(   R   RG   (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyR      s    c         C   sq   t  j } |  j |  \ } } | r^ g  | D] } | j d d  ^ q+ } t | |  | _ n t  j   | _ d  S(   Ns   %2Ft   /(   R   R   t   find_handlert   replaceR<   t   handlert   NotFound(   R   t	   path_infoR   t   funct   vpathR
   (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyR      s    	%c            s]  t  j } | j } | j } |  j } d } i  } t | d  rR | j | j  n  d | j k rx | j | j d  n  d | | | g g   | } g  | j	 d  j
 d  D] }	 |	 r |	 ^ q d g }
 |
 } x0| r| d } | j d d  } i  } t | | d   } | d  k rgt | | d   } | rgt |  rgt | d	 t  rg| d
 |  } qgn  | j d  } | } | d  k	 rt | d  r| j | j  qn  d j | | f  } | | j k r| j | j |  n    j | | | | g  q W  f d   } t    d } x t | d d  D]}   | \ } } } } | d  k req7n  t | d  r| j } t | d	 t  rt | d i   }   j | d d | | | g  |   | _ | j d  | _ | |
 | d !f Sn  t | d	 t  r7|   | _ | | k r)t | _ n	 t | _ | |
 | d !f Sq7W|   | _ d  g  f S(   Nt    t
   _cp_configRH   t   roott   indexi    t   .t   _t   exposedRO   c             sV   t  j j   }  x@   D]8 \ } } } } |  j |  d | k r | |  d <q q W|  S(   Ns   tools.staticdir.dirs   tools.staticdir.section(   R   t   configR>   R@   (   t   baset   namet   objt   conft   curpath(   t   object_trail(    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   set_conf%  s    i   it   default(   R   R   t   appRR   RG   R   R@   RQ   RW   t   stript   splitRJ   R   R#   R   R   t   popR$   R"   t   lent   xrangeR_   t   insertt   endswitht   is_indext   True(   R   t   pathR   R`   RR   t   dispatch_nameR\   t   nodeconft   nodeR
   t   namest	   iternamesRY   t   objnamet   subnodet   dispatchR^   t   num_candidatesR1   t	   candidatet
   defhandlerR[   (    (   R]   s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyRI      sn    				8	
	 	N(   R   R   R   t   _AttributeDocstringst   __metaclass__RG   t   dispatch_method_name__docR#   R   R   RI   (    (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyRE      s   		t   MethodDispatcherc           B   s   e  Z d    Z RS(   c   
      C   sP  t  j } |  j |  \ } } | r=g  t |  D] } | j   r1 | ^ q1 } d | k rw d | k rw | j d  n  | j   d j |  t  j j	 d <| j
 j   } t | | d   } | d  k r | d k r t | d d   } n  | r(g  | D] }	 |	 j d d  ^ q } t | |  | _ qLt  j d  | _ n t  j   | _ d  S(   Nt   GETt   HEADs   , t   Allows   %2FRH   i  (   R   R   RI   t   dirt   isupperR"   t   sortR$   t   responset   headerst   methodt   upperR   R#   RJ   R<   RK   R	   RL   (
   R   RM   R   t   resourceRO   t   mt   availt   methRN   R
   (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyR   f  s"    	+
%(   R   R   R   (    (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyRy   [  s   t   RoutesDispatcherc           B   s8   e  Z e d   Z d   Z d   Z d   Z d   Z RS(   c         C   sC   d d  l  } | |  _ i  |  _ | j   |  _ |  j j |  j _ d  S(   Ni(   t   routest   full_resultt   controllerst   Mappert   mapperR   t   controller_scan(   R   R   R   (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyR     s
    		c         K   s-   | |  j  | <|  j j | | d | | d  S(   Nt
   controller(   R   R   t   connect(   R   RY   t   routeR   R   (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyR     s    c         C   s   t  j |   d  S(   N(   R   t   HTTPRedirect(   R   t   url(    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   redirect  s    c         C   s@   |  j  |  } | r* t |  t j _ n t j   t j _ d  S(   N(   RI   R<   R   R   RK   RL   (   R   RM   RN   (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyR     s    c            s  d d  l  } t j } | j   } |  j | _ t t j d  rQ t j j | _ n  | j j	 d d   | _ | j | _ |  j | _ |  j j |  } | | _ i  } | r | j   } n  |  j s | j d d   | j d d   n  | j j |  t j j   | _   d     f d   } | j } | j }	 t |	 d  rR| |	 j  n  d	 | j k ru| | j d	  n  g  | j d	  D] }
 |
 r|
 ^ q} | r| j   } n d  } xF | D]> } d	 j  | f    | j k r| | j   qqWd  } | r| j	 d d   } |  j j	 |  } | rYt | d  rY| | j  qYn  | j	 d d   } | d  k	 rt | | d   } t | d  r| | j  qqn  | rd	 j  | f    | j k r| | j   qn  | S(
   Nit   wsgi_environt   HostR   t   actionRP   c            s0   d |  k r  p d |  d <n    j  |   d  S(   Ns   tools.staticdir.dirRH   s   tools.staticdir.section(   R@   (   Rl   (   RX   R\   (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   merge  s    RQ   RH   (   R   R   R   t   request_configR   R   R   t   environR   t   getR#   t   hostt   schemet   protocolR   t   matcht   mapper_dictR>   R   Rc   R=   R@   RW   R`   RR   RQ   Rb   R$   R   R   (   R   RM   R   R   RW   t   resultR=   R   R`   RR   R
   t   atomst   lastt   atomRK   R   R   (    (   RX   R\   s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyRI     sh    					((   R   R   R   R   R   R   R   RI   (    (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyR     s
   			c            s&   d d l  m     f d   } | S(   Ni(   t   xmlrpcc            s    j  |   }    |   S(   N(   t   patched_path(   RM   (   t   next_dispatcherR   (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   xmlrpc_dispatch  s    (   t   cherrypy.libR   (   R   R   (    (   R   R   s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   XMLRPCDispatcher  s    c            s,   d d l  m       f d   } | S(   Ni(   t   httpc            s   t  j j j } | d d  }  r6 | d |  } n    j | d  } | rc  j | |   }  n   |   } t  j j j d  } | r | t |  } | t  j j d <n  | S(   NR   RP   s   X-Forwarded-Hosts   tools.staticdir.section(   R   R   R   R   t   urljoinRW   Rd   (   RM   t   headert   domaint   prefixR   t   section(   t   domainsR   R   t   use_x_forwarded_host(    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   vhost_dispatch  s    (   R   R   (   R   R   R   R   (    (   R   R   R   R   s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   VirtualHost  s    #(   R   R   R    R   R   t   ImportErrorR<   RE   Ry   R   R   Ri   R   (    (    (    s(   /var/www/SABnzbd/cherrypy/_cpdispatch.pyt   <module>   s   	'n