ó
‚•oTc           @   sæ   d  d l  Z  e  j ƒ  d e  j d <d e  j d <d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 m
 Z
 m Z m Z d d d d „ Z d d „ Z d	 „  Z d
 d
 d d
 d „ Z d d
 d d „ Z d S(   iÿÿÿÿNs   image/x-dwgs   .dwgs   image/x-icons   .ico(   t   cptoolst   httpt   file_generator_limitedc            s)  t  j } t j j |  ƒ s. t d |  ƒ ‚ n  y t j |  ƒ } Wn t k
 r` t  j ƒ  ‚ n Xt j	 | j
 ƒ r‚ t  j ƒ  ‚ n  t j | j ƒ | j d <t j ƒ  ˆ d  k rý d } |  j d ƒ } | d k rå |  | j ƒ  } n  t j j | d ƒ ‰ n  ˆ | j d <| d  k	 rW| d  k r7t j j |  ƒ } n  d | | f } | | j d	 <n  | j ‰ t |  d
 ƒ ‰  t  j j d k rd | j d <t j t  j j j d ƒ ˆ ƒ ‰ ˆ g  k rçd ˆ | j d <d }	 t  j d |	 ƒ ‚ n  ˆ rt ˆ ƒ d k r„ˆ d \ }
 } | ˆ k r$ˆ } n  | |
 } d | _ d |
 | d ˆ f | j d <| | j d <ˆ  j  |
 ƒ t! ˆ  | ƒ | _" n~ d | _ d d  l# } | j$ ƒ  ‰ d ˆ } | | j d <| j j% d ƒ rÛ| j d =n  ‡  ‡ ‡ ‡ ‡ f d †  } | ƒ  | _" | j" Sn  ˆ | j d <ˆ  | _" | j" S(   Ns   '%s' is not an absolute path.s   Last-Modifiedt    t   .iÿÿÿÿs
   text/plains   Content-Types   %s; filename="%s"s   Content-Dispositiont   rbi   t   bytess   Accept-Rangest   Ranges
   bytes */%ss   Content-Ranges:   Invalid Range (first-byte-pos greater than Content-Length)i   i    s   206 Partial Contents   bytes %s-%s/%ss   Content-Lengths!   multipart/byteranges; boundary=%sc          3   s   d Vxq ˆ D]i \ }  } d ˆ Vd ˆ Vd |  | d ˆ f Vˆ  j  |  ƒ x  t ˆ  | |  ƒ D] } | Vqa Wd Vq Wd ˆ d Vd Vd  S(   Ns   
s   --s   
Content-type: %ss#   
Content-range: bytes %s-%s/%s

i   (   t   seekR   (   t   startt   stopt   chunk(   t   bodyfilet   boundaryt   c_lent   content_typet   r(    s'   /var/www/SABnzbd/cherrypy/lib/static.pyt   file_rangesk   s    				(   i   i   (&   t   cherrypyt   responset   ost   patht   isabst
   ValueErrort   statt   OSErrort   NotFoundt   S_ISDIRt   st_modeR   t   HTTPDatet   st_mtimet   headersR    t   validate_sincet   Nonet   rfindt   lowert	   mimetypest	   types_mapt   gett   basenamet   st_sizet   opent   requestt   protocolt
   get_rangest	   HTTPErrort   lent   statusR   R   t   bodyt	   mimetoolst   choose_boundaryt   has_key(   R   R   t   dispositiont   nameR   t   stt   extt   it   cdt   messageR	   R
   t   r_lenR1   t   ctR   (    (   R   R   R   R   R   s'   /var/www/SABnzbd/cherrypy/lib/static.pyt
   serve_file   sr    	
	!	
		

	c         C   s   t  |  d d | ƒ S(   Ns   application/x-downloadt
   attachment(   R=   (   R   R5   (    (    s'   /var/www/SABnzbd/cherrypy/lib/static.pyt   serve_download„   s    c         C   sq   yU d  } | r@ t j j |  ƒ \ } } | j | d d  ƒ } n  t |  d | ƒt SWn t j k
 rl t	 SXd  S(   Ni   R   (
   R!   R   R   t   splitextR&   R=   t   TrueR   R   t   False(   t   filenamet   content_typesR   R   R7   (    (    s'   /var/www/SABnzbd/cherrypy/lib/static.pyt   _attemptŠ   s    R   c   
      C   s€  | r# t  j | t j j ƒ r# t St j j | ƒ } t j j	 | ƒ sz | sb d } t
 | ƒ ‚ n  t j j | | ƒ } n  |  d k r d }  n  |  j d ƒ }  t j j t |  ƒ d } t j | j d ƒ ƒ } t j j | | ƒ } t j j | ƒ j t j j | ƒ ƒ st j d ƒ ‚ n  t | | ƒ }	 |	 s|| r|t t j j | | ƒ | ƒ }	 |	 ry| d d k t j _ qyq|n  |	 S(   Ns.   Static dir requires an absolute dir (or root).t   globalt   /s   \/i   i“  iÿÿÿÿ(   t   ret   searchR   R*   t	   path_infoRB   R   R   t
   expanduserR   R   t   joint   rstripR.   t   urllibt   unquotet   lstript   normpatht
   startswithR-   RE   t   is_index(
   t   sectiont   dirt   roott   matchRD   t   indext   msgt   branchRC   t   handled(    (    s'   /var/www/SABnzbd/cherrypy/lib/static.pyt	   staticdir™   s.    	'c         C   sy   | r# t  j | t j j ƒ r# t St j j |  ƒ sl | sT d |  } t	 | ƒ ‚ n  t j j
 | |  ƒ }  n  t |  | ƒ S(   Ns5   Static tool requires an absolute filename (got '%s').(   RH   RI   R   R*   RJ   RB   R   R   R   R   RL   RE   (   RC   RV   RW   RD   RY   (    (    s'   /var/www/SABnzbd/cherrypy/lib/static.pyt
   staticfileÐ   s    
(   R$   t   initR%   R   RH   R   t   timeRN   R   t   cherrypy.libR    R   R   R!   R=   R?   RE   R\   R]   (    (    (    s'   /var/www/SABnzbd/cherrypy/lib/static.pyt   <module>   s   
t	7