
oTc           @   sd  d  d l  m Z d  d l m Z d  d l m Z d  d l	 m
 Z d  d l m Z d e f d     YZ d e f d	     YZ d
 e f d     YZ d e f d     YZ d   Z d e f d     YZ d e f d     YZ d Z d   Z i d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6d d! 6Z d"   Z d% d#  Z d% d$  Z d% S(&   i(   t   escape(   t   exc_info(   t   format_exception(   t   urljoin(   t   httpt   CherryPyExceptionc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR   
   s   t   TimeoutErrorc           B   s   e  Z RS(    (   R   R   (    (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR      s   t   InternalRedirectc           B   s   e  Z d    Z RS(   c         C   s}   d d  l  } | j } d |  _ d | k rH | j d d  \ } |  _ n  t | j |  } | |  _ t j |  | |  j  d  S(   Nit    t   ?i   (	   t   cherrypyt   requestt   query_stringt   splitt   _urljoint	   path_infot   pathR   t   __init__(   t   selfR   R   R   (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR      s    			(   R   R   R   (    (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR	      s   t   HTTPRedirectc           B   s&   e  Z d d   Z d   Z d   Z RS(   c         C   s   d d  l  } | j } t | t  r0 | g } n  g  } x0 | D]( } t | j   |  } | j |  q= W| |  _ | d  k r | j	 d k r d } q d } n3 t
 |  } | d k  s | d k r t d   n  | |  _ t j |  | |  d  S(	   Nii   i/  i.  i,  i  s#   status must be between 300 and 399.(   i   i   (   R   R   t
   isinstancet
   basestringR   t   urlt   appendt   urlst   Nonet   protocolt   intt
   ValueErrort   statusR   R   (   R   R   R   R   R   t   abs_urlsR   (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR   8   s$    					c      
   C   sr  d d  l  } | j } |  j | _ } | d k r d | j d <|  j d	 | j d
 <i d d 6d d 6d d 6d d 6d d 6| } d j g  |  j D] } | | | f ^ q  | _ | j j d d   n | d k rx* d D]" } | | j k r | j | =q q Wd  | _ | j j d d   nO | d k r^|  j d	 | j d
 <d  | _ | j j d d   n t	 d |   d  S(   Nii,  i-  i.  i/  i3  s	   text/htmls   Content-Typei    t   Locations2   This resource can be found at <a href='%s'>%s</a>.s;   This resource has permanently moved to <a href='%s'>%s</a>.s9   This resource resides temporarily at <a href='%s'>%s</a>.s;   This resource has moved temporarily to <a href='%s'>%s</a>.s   <br />
s   Content-Lengthi0  t   Allows   Content-Encodings   Content-Languages   Content-Locations   Content-MD5s   Content-Ranget   Expiress   Last-Modifiedi1  s   The %s status code is unknown.(   i,  i-  i.  i/  i3  (
   R"   s   Content-Encodings   Content-Languages   Content-Lengths   Content-Locations   Content-MD5s   Content-Ranges   Content-TypeR#   s   Last-Modified(
   R   t   responseR   t   headersR   t   joint   bodyt   popR   R   (   R   R   R$   R   t   msgt   ut   key(    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyt   set_responseZ   s8    	
2  
		c         C   s
   |   d  S(   N(    (   R   (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyt   __call__   s    N(   R   R   R   R   R,   R-   (    (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR   /   s   	"	9c         C   s   d d  l  } | j } | j } xK d d d d d d d d	 d
 d d d g D] } | j |  rI | | =qI qI W|  d k r | j d  r | d =q n  d  S(   Nis   Accept-Rangest   Aget   ETagR!   s   Retry-Aftert   Varys   Content-Encodings   Content-LengthR#   s   Content-Locations   Content-MD5s   Last-Modifiedi  s   Content-Range(   R   R$   R%   t   has_key(   R   R   R$   t   respheadersR+   (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyt   clean_headers   s    		t	   HTTPErrorc           B   s2   e  Z d  d d  Z d   Z d   Z d   Z RS(   i  c         C   s   | |  _  y" t j |  \ |  _ |  _ } Wn, t k
 rY } t j d | j d   n X|  j d k  sx |  j d k r t d   n  | p | |  _	 t
 j |  | |  d  S(   Ni  i    i  iW  s#   status must be between 400 and 599.(   R   t   _httpt   valid_statust   codet   reasonR   R   R4   t   argst   _messageR   R   (   R   R   t   messaget
   defaultmsgt   x(    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR      s    	"c         C   s   d d  l  } | j } t |  j  |  j | _ d  } | j j rL t   } n  d | j	 d <|  j
 |  j d | d |  j } | | _ t |  | j	 d <t |  j  d  S(   Nis	   text/htmls   Content-Typet	   tracebackR;   s   Content-Length(   R   R$   R3   R7   R   R   R   t   show_tracebackst
   format_excR%   t   get_error_pageR:   R'   t   lent   _be_ie_unfriendly(   R   R   R$   t   tbt   content(    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR,      s    		c         O   s   t  | |   S(   N(   RA   (   R   R9   t   kwargs(    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyRA      s    c         C   s
   |   d  S(   N(    (   R   (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR-      s    N(   R   R   R   R   R,   RA   R-   (    (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR4      s   		t   NotFoundc           B   s   e  Z d d   Z RS(   c         C   sX   | d  k r1 d d  l } | j j | j j } n  | f |  _ t j |  d d |  d  S(   Nii  s   The path %r was not found.(   R   R   R   t   script_nameR   R9   R4   R   (   R   R   R   (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR      s
    N(   R   R   R   R   (    (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyRG      s   s  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
    <title>%(status)s</title>
    <style type="text/css">
    #powered_by {
        margin-top: 20px;
        border-top: 2px solid black;
        font-style: italic;
    }

    #traceback {
        color: red;
    }
    </style>
</head>
    <body>
        <h2>%(status)s</h2>
        <p>%(message)s</p>
        <pre id="traceback">%(traceback)s</pre>
    <div id="powered_by">
    <span>Powered by <a href="http://www.cherrypy.org">CherryPy %(version)s</a></span>
    </div>
    </body>
</html>
c         K   s  d d  l  } y t j |   \ } } } Wn, t k
 rV } | j d | j d   n X| j d  d  k r d | | f | d <n  | j d  d  k r | | d <n  | j d  d  k r d | d <n  | j d	  d  k r | j | d	 <n  xG | j	   D]9 \ } } | d  k rd | | <q t
 | |  | | <q W| j j }	 |	 j |  p]|	 j d
  }
 |
 ry1 t |
  r|
 |   St |
 d  j   | SWqt t     d } | d } | r| d 7} n  | d | 7} | | d <qXn  t | S(   Nii  i    R   s   %s %sR;   R>   R
   t   versiont   defaultt   rbs   <br />s3   In addition, the custom error page failed:
<br />%s(   R   R5   R6   R   R4   R9   t   getR   t   __version__t	   iteritemst   _escapeR   t
   error_paget   callablet   filet   readt   _format_exceptiont	   _exc_infot   _HTTPErrorTemplate(   R   RF   R   R7   R8   R;   R=   t   kt   vt   pagesRP   t   et   m(    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyRA     s@    

i   i  i   i  i  i  i  i  i  i  i  i  i  c         C   s   d d  l  } | j } t j |  d  } | r | d 7} | j   } t |  } | rv | | k  rv | d | | } n  | | _ t |  | j d <n  d  S(   Nii    i   t    s   Content-Length(   R   R$   t   _ie_friendly_error_sizesRL   t   collapse_bodyRB   R'   R%   (   R   R   R$   t   sRE   t   l(    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyRC   M  s    	
	c         C   sJ   |  d  k r t   }  n  |  d k r( d Sd d  l } d j | j |     S(   NR
   i(   NNN(   R   RU   R>   R&   R   (   t   excR>   (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyR@   e  s    c         C   sK   d } |  d  k	 r# | d |  7} n  d d d t t |   f g | g f S(   Ns"   Unrecoverable error in the server.s   
s   500 Internal Server Errors   Content-Types
   text/plains   Content-Length(   s   Content-Types
   text/plain(   R   t   strRB   (   t	   extrabodyR'   (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyt
   bare_errorn  s    N(   t   cgiR    RO   t   sysR   RU   R>   R   RT   t   urlparseR   R   t   cherrypy.libR   R5   t	   ExceptionR   R   R	   R   R3   R4   RG   RV   RA   R]   RC   R   R@   Rd   (    (    (    s%   /var/www/SABnzbd/cherrypy/_cperror.pyt   <module>   s(   i	:&	2		