ó
‚•oTc        
   @   sÌ  d  d l  Z  d  d l Z y d  d l Z Wn e k
 rG d  d l Z n Xd  d l Z y d  d l m Z Wn! e k
 r‹ d  d l m	 Z n Xd  d l
 Z
 d  d l Z d  d l Z d  d l m Z d  d l Z d  d l m Z e ƒ  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 d „  Z e e _ d „  Z e e _ d e _ d d d d d d e d e d „	 Z  d d d d d e d „ Z! d „  Z" d S(   iÿÿÿÿN(   t   sha1(   t   new(   t   warn(   t   httpt   Sessionc           B   s€  e  Z e j Z d" Z d" Z d  Z d Z	 d „  Z
 d „  Z e e
 e d e	 ƒZ d Z d Z e Z d Z e Z d Z d" Z d	 Z d
 Z d Z d" d „ Z d „  Z d „  Z y e j d ƒ Wn  e e f k
 rÛ d „  Z  n
 Xd „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d „  Z& e' d „ Z( d „  Z) d „  Z* d" d „ Z+ d „  Z, d" d „ Z- d „  Z. d „  Z/ d  „  Z0 d! „  Z1 RS(#   s.   A list of callbacks to which to pass new id's.s   The current session ID.c         C   s   |  j  S(   N(   t   _id(   t   self(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   _get_id*   s    c         C   s+   | |  _  x |  j D] } | | ƒ q Wd  S(   N(   R   t   id_observers(   R   t   valuet   o(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   _set_id,   s    	t   doci<   s5   Number of minutes after which to delete session data.sX   
    If True, this session instance has exclusive read/write access
    to session data.s…   
    If True, data has been retrieved from storage. This should happen
    automatically on the first attempt to access session data.s.   Class-level Monitor which calls self.clean_up.i   s5   The poll rate for expired session cleanup in minutes.c         K   s‡   g  |  _  i  |  _ x* | j ƒ  D] \ } } t |  | | ƒ q W| d  k rX |  j ƒ  n+ | |  _ |  j ƒ  sƒ d  |  _ |  j ƒ  n  d  S(   N(   R   t   _datat	   iteritemst   setattrt   Nonet
   regeneratet   idt   _exists(   R   R   t   kwargst   kt   v(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   __init__E   s    				c         C   s•   |  j  d  k	 r |  j ƒ  n  |  j } | r8 |  j ƒ  n  d  |  _  x: |  j  d  k r} |  j ƒ  |  _  |  j ƒ  rD d  |  _  qD qD W| r‘ |  j ƒ  n  d  S(   N(   R   R   t   deletet   lockedt   release_lockt   generate_idR   t   acquire_lock(   R   t   old_session_was_locked(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   V   s    		c         C   s   d  S(   N(    (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   clean_upi   s    i   c         C   s   t  d t j ƒ  ƒ j ƒ  S(   Ns   %s(   t   shat   randomt	   hexdigest(   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   q   s    c         C   s   t  j d ƒ j d ƒ S(   Ni   t   hex(   t   ost   urandomt   encode(   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   u   s    c         C   sg   zI |  j  rH t j d |  j d ƒ } t j j ƒ  | } |  j | ƒ n  Wd  |  j rb |  j ƒ  n  Xd  S(   Nt   secondsi<   (   t   loadedt   datetimet	   timedeltat   timeoutt   nowt   _saveR   R   (   R   t   tt   expiration_time(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   savey   s    		c         C   s»   |  j  ƒ  } | d  k s1 | d t j j ƒ  k  r= i  |  _ n | d |  _ t |  _ |  j } |  j r· | j	 r· t
 j j j t
 j |  j |  j d ƒ } | j ƒ  | | _	 | j ƒ  n  d  S(   Ni   i    i<   (   t   _loadR   R(   R+   R   t   TrueR'   t	   __class__t
   clean_freqt   clean_threadt   cherrypyt   processt   pluginst   Monitort   engineR   t	   subscribet   start(   R   t   datat   clsR-   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   loadˆ   s    %		
	c         C   s   |  j  ƒ  d  S(   N(   t   _delete(   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   Ÿ   s    c         C   s!   |  j  s |  j ƒ  n  |  j | S(   N(   R'   R>   R   (   R   t   key(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   __getitem__£   s    	 c         C   s'   |  j  s |  j ƒ  n  | |  j | <d  S(   N(   R'   R>   R   (   R   R@   R	   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   __setitem__§   s    	 c         C   s$   |  j  s |  j ƒ  n  |  j | =d  S(   N(   R'   R>   R   (   R   R@   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   __delitem__«   s    	 c         C   sI   |  j  s |  j ƒ  n  | t k r2 |  j j | ƒ S|  j j | | ƒ Sd  S(   N(   R'   R>   t   missingR   t   pop(   R   R@   t   default(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRE   ¯   s
    	 c         C   s#   |  j  s |  j ƒ  n  | |  j k S(   N(   R'   R>   R   (   R   R@   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   __contains__º   s    	 c         C   s&   |  j  s |  j ƒ  n  |  j j | ƒ S(   N(   R'   R>   R   t   has_key(   R   R@   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRH   ¾   s    	 c         C   s)   |  j  s |  j ƒ  n  |  j j | | ƒ S(   N(   R'   R>   R   t   get(   R   R@   RF   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRI   Ã   s    	 c         C   s*   |  j  s |  j ƒ  n  |  j j | ƒ d  S(   N(   R'   R>   R   t   update(   R   t   d(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRJ   È   s    	 c         C   s)   |  j  s |  j ƒ  n  |  j j | | ƒ S(   N(   R'   R>   R   t
   setdefault(   R   R@   RF   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRL   Í   s    	 c         C   s'   |  j  s |  j ƒ  n  |  j j ƒ  d  S(   N(   R'   R>   R   t   clear(   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRM   Ò   s    	 c         C   s#   |  j  s |  j ƒ  n  |  j j ƒ  S(   N(   R'   R>   R   t   keys(   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRN   ×   s    	 c         C   s#   |  j  s |  j ƒ  n  |  j j ƒ  S(   N(   R'   R>   R   t   items(   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRO   Ü   s    	 c         C   s#   |  j  s |  j ƒ  n  |  j j ƒ  S(   N(   R'   R>   R   t   values(   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRP   á   s    	 N(2   t   __name__t
   __module__R5   t   _AttributeDocstringst   __metaclass__R   R   R   t   id_observers__doct   id__docR   R   t   propertyR   R*   t   timeout__doct   FalseR   t   locked__docR'   t   loaded__docR4   t   clean_thread__docR3   t   clean_freq__docR   R   R   R#   R$   t   AttributeErrort   NotImplementedErrorR   R/   R>   R   RA   RB   RC   RD   RE   RG   RH   RI   RJ   RL   RM   RN   RO   RP   (    (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR       sT   																		t
   RamSessionc           B   s\   e  Z i  Z i  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(   c         C   sŒ   t  j  j ƒ  } xv |  j j ƒ  D]e \ } \ } } | | k  r y |  j | =Wn t k
 r^ n Xy |  j | =Wq„ t k
 r€ q„ Xq q Wd  S(   N(   R(   R+   t   cacheRO   t   KeyErrort   locks(   R   R+   R   R<   R.   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   í   s    "c         C   s   |  j  |  j k S(   N(   R   Ra   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   û   s    c         C   s   |  j  j |  j ƒ S(   N(   Ra   RI   R   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR0   þ   s    c         C   s   |  j  | f |  j |  j <d  S(   N(   R   Ra   R   (   R   R.   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR,     s    c         C   s   |  j  |  j =d  S(   N(   Ra   R   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR?     s    c         C   s/   t  |  _ |  j j |  j t j ƒ  ƒ j ƒ  d  S(   N(   R1   R   Rc   RL   R   t	   threadingt   RLockt   acquire(   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR     s    	c         C   s!   |  j  |  j j ƒ  t |  _ d  S(   N(   Rc   R   t   releaseRY   R   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR     s    c         C   s   t  |  j ƒ S(   N(   t   lenRa   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   __len__  s    (   RQ   RR   Ra   Rc   R   R   R0   R,   R?   R   R   Ri   (    (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR`   ç   s   							t   FileSessionc           B   s˜   e  Z d  Z d Z e j Z d d „ Z d „  Z	 e
 e	 ƒ Z	 d „  Z d „  Z d d „ Z d „  Z d „  Z d d	 „ Z d d
 „ Z d „  Z d „  Z RS(   s   session-s   .lockc         K   s4   t  j j | d ƒ | d <t j |  d | | d  S(   Nt   storage_pathR   (   R#   t   patht   abspathR   R   (   R   R   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   "  s    c         K   sÓ   t  j j | d ƒ | d <x* | j ƒ  D] \ } } t |  | | ƒ q' Wg  t  j |  j ƒ D]0 } | j |  j ƒ rZ | j	 |  j
 ƒ rZ | ^ qZ } | rÏ d t | ƒ d k } t d t | ƒ | |  j f ƒ n  d  S(   NRk   t    t   si   sŒ   %s session lockfile%s found at startup. If you are only running one process, then you may need to manually delete the lockfiles found at %r.(   Rn   Ro   (   R#   Rl   Rm   R   R   t   listdirRk   t
   startswitht   SESSION_PREFIXt   endswitht   LOCK_SUFFIXRh   R   (   R=   R   R   R   t   fnamet	   lockfilest   plural(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   setup'  s    c         C   sY   t  j j |  j |  j |  j ƒ } t  j j | ƒ j |  j ƒ sU t j	 d d ƒ ‚ n  | S(   Ni  s   Invalid session id in cookie.(
   R#   Rl   t   joinRk   Rr   R   Rm   Rq   R5   t	   HTTPError(   R   t   f(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   _get_file_path?  s    "c         C   s   |  j  ƒ  } t j j | ƒ S(   N(   R|   R#   Rl   t   exists(   R   Rl   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   E  s    c         C   sl   | d  k r |  j ƒ  } n  y2 t | d ƒ } z t j | ƒ SWd  | j ƒ  XWn t t f k
 rg d  SXd  S(   Nt   rb(   R   R|   t   opent   pickleR>   t   closet   IOErrort   EOFError(   R   Rl   R{   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR0   I  s    c         C   sJ   t  |  j ƒ  d ƒ } z# t j |  j | f | |  j ƒ Wd  | j ƒ  Xd  S(   Nt   wb(   R   R|   R€   t   dumpR   t   pickle_protocolR   (   R   R.   R{   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR,   U  s    #c         C   s/   y t  j |  j ƒ  ƒ Wn t k
 r* n Xd  S(   N(   R#   t   unlinkR|   t   OSError(   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR?   \  s    c         C   s˜   | d  k r |  j ƒ  } n  | |  j 7} x` t rŠ y' t j | t j t j Bt j Bƒ } Wn t	 k
 rx t
 j d ƒ q+ Xt j | ƒ Pq+ Wt |  _ d  S(   Ngš™™™™™¹?(   R   R|   Rt   R1   R#   R   t   O_CREATt   O_WRONLYt   O_EXCLRˆ   t   timet   sleepR   R   (   R   Rl   t   lockfd(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   b  s    	'c         C   s<   | d  k r |  j ƒ  } n  t j | |  j ƒ t |  _ d  S(   N(   R   R|   R#   R‡   Rt   RY   R   (   R   Rl   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   q  s    c         C   sØ   t  j  j ƒ  } xÂ t j |  j ƒ D]® } | j |  j ƒ r" | j |  j ƒ r" t j	 j
 |  j | ƒ } |  j | ƒ zJ |  j | ƒ } | d  k	 r» | \ } } | | k  r» t j | ƒ q» n  Wd  |  j | ƒ Xq" q" Wd  S(   N(   R(   R+   R#   Rp   Rk   Rq   Rr   Rs   Rt   Rl   Ry   R   R0   R   R‡   R   (   R   R+   Ru   Rl   t   contentsR<   R.   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   x  s    c         C   sN   t  g  t j |  j ƒ D]1 } | j |  j ƒ r | j |  j ƒ r | ^ q ƒ S(   N(   Rh   R#   Rp   Rk   Rq   Rr   Rs   Rt   (   R   Ru   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRi   Ž  s    N(   RQ   RR   Rr   Rt   R€   t   HIGHEST_PROTOCOLR†   R   R   Rx   t   classmethodR|   R   R0   R,   R?   R   R   R   Ri   (    (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRj     s   							t   PostgresqlSessionc           B   sz   e  Z e j Z d
 d  „ Z d „  Z e e ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d	 „  Z RS(   c         K   s)   t  j |  | |  |  j j ƒ  |  _ d  S(   N(   R   R   t   dbt   cursor(   R   R   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   ¤  s    c         K   s@   x* | j  ƒ  D] \ } } t |  | | ƒ q Wt j ƒ  t _ d  S(   N(   R   R   R   t   get_dbR“   (   R=   R   R   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRx   ¨  s    c         C   s*   |  j  r |  j  j ƒ  n  |  j j ƒ  d  S(   N(   R”   R   R“   t   commit(   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   __del__´  s    	c         C   s2   |  j  j d |  j f ƒ |  j  j ƒ  } t | ƒ S(   Ns5   select data, expiration_time from session where id=%s(   R”   t   executeR   t   fetchallt   bool(   R   t   rows(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   ¹  s    c         C   s[   |  j  j d |  j f ƒ |  j  j ƒ  } | s2 d  S| d \ } } t j | ƒ } | | f S(   Ns5   select data, expiration_time from session where id=%si    (   R”   R˜   R   R™   R   R€   t   loads(   R   R›   t   pickled_dataR.   R<   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR0   À  s    c         C   s;   t  j |  j |  j ƒ } |  j j d | | |  j f ƒ d  S(   Ns@   update session set data = %s, expiration_time = %s where id = %s(   R€   t   dumpsR   R†   R”   R˜   R   (   R   R.   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR,   Ì  s    c         C   s   |  j  j d |  j f ƒ d  S(   Ns   delete from session where id=%s(   R”   R˜   R   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR?   Ò  s    c         C   s&   t  |  _ |  j j d |  j f ƒ d  S(   Ns-   select id from session where id=%s for update(   R1   R   R”   R˜   R   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   Õ  s    	c         C   s   |  j  j ƒ  t |  _ d  S(   N(   R”   R   RY   R   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   Ü  s    c         C   s#   |  j  j d t j j ƒ  f ƒ d  S(   Ns.   delete from session where expiration_time < %s(   R”   R˜   R(   R+   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   ã  s    N(   RQ   RR   R€   R   R†   R   R   Rx   R‘   R—   R   R0   R,   R?   R   R   R   (    (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR’   •  s   		
							t   MemcachedSessionc           B   sw   e  Z e j ƒ  Z i  Z d  g Z d „  Z e e ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z RS(	   s   127.0.0.1:11211c         K   sR   x* | j  ƒ  D] \ } } t |  | | ƒ q Wd d  l } | j |  j ƒ |  _ d  S(   Niÿÿÿÿ(   R   R   t   memcachet   Clientt   serversRa   (   R=   R   R   R   R    (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRx   ô  s    c         C   s?   |  j  j ƒ  z t |  j j |  j ƒ ƒ SWd  |  j  j ƒ  Xd  S(   N(   t   mc_lockRf   Rš   Ra   RI   R   Rg   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR     s    c         C   s9   |  j  j ƒ  z |  j j |  j ƒ SWd  |  j  j ƒ  Xd  S(   N(   R£   Rf   Ra   RI   R   Rg   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR0     s    c         C   s{   t  t j | j ƒ  ƒ ƒ } |  j j ƒ  z> |  j j |  j |  j	 | f | ƒ se t
 d |  j ƒ ‚ n  Wd  |  j j ƒ  Xd  S(   Ns   Session data for id %r not set.(   t   intRŒ   t   mktimet	   timetupleR£   Rf   Ra   t   setR   R   t   AssertionErrorRg   (   R   R.   t   td(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR,     s    $c         C   s   |  j  j |  j ƒ d  S(   N(   Ra   R   R   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR?     s    c         C   s/   t  |  _ |  j j |  j t j ƒ  ƒ j ƒ  d  S(   N(   R1   R   Rc   RL   R   Rd   Re   Rf   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR     s    	c         C   s!   |  j  |  j j ƒ  t |  _ d  S(   N(   Rc   R   Rg   RY   R   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   !  s    c         C   s
   t  ‚ d  S(   N(   R_   (   R   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRi   &  s    (   RQ   RR   Rd   Re   R£   Rc   R¢   Rx   R‘   R   R0   R,   R?   R   R   Ri   (    (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRŸ   é  s   					
			c           C   sœ   t  t j d ƒ s d  St  t j d ƒ r, d  St t j _ t j j rc t j j j	 d t j
 j ƒ n5 t t j j t j ƒ r‹ t j j ƒ  n  t j
 j ƒ  d  S(   Nt   sessiont   _sessionsavedt   on_end_request(   t   hasattrR5   t   servingt   requestR1   R«   t   responset   streamt   hookst   attachRª   R/   t
   isinstancet   bodyt   typest   GeneratorTypet   collapse_body(    (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR/   -  s    c          C   s8   t  t j d d  ƒ }  t  |  d t ƒ r4 |  j ƒ  n  d  S(   NRª   R   (   t   getattrR5   R®   R   RY   R   (   t   sess(    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyR   D  s    iZ   t   ramt
   session_idi<   i   c	            sO  t  j }
 t |
 d ƒ r d  St |
 _ d  } ˆ  |
 j k rM |
 j ˆ  j } n  |  j ƒ  d } t	 ƒ  | } t t  d ƒ s› t | d ƒ r› | j
 |	   q› n  | |	 d <| |	 d <| | |	  t  j _ } ‡  f d †  } | j j | ƒ t t  d ƒ st  j d ƒ t  _ n  | r| } n d  } t d | d	 | d
 ˆ  d | d | d | ƒ d  S(   Nt   _session_init_flagR   Rª   Rx   R*   R3   c            s   |  t  j j ˆ  <d  S(   N(   R5   R°   t   cookie(   R   (   t   name(    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   update_cookie„  s    Rl   t   path_headerR¿   t   domaint   secure(   R5   R¯   R­   R1   R½   R   R¾   R	   t   titlet   globalsRx   R®   Rª   R   t   appendt   _ThreadLocalProxyt   set_response_cookie(   t   storage_typeRl   RÁ   R¿   R*   RÂ   RÃ   R3   t
   persistentR   R¯   R   t   storage_classRº   RÀ   t   cookie_timeout(    (   R¿   s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   initN  s0    		

	c         C   s®   t  j j } t  j j j | | <|  p= t  j j j | ƒ p= d | | d <| rv t	 j
 t j ƒ  | d ƒ | | d <n  | d  k	 r“ | | | d <n  | rª d | | d <n  d  S(   Nt   /Rl   i<   t   expiresRÂ   i   RÃ   (   R5   R°   R¾   R®   Rª   R   R¯   t   headersRI   R   t   HTTPDateRŒ   R   (   Rl   RÁ   R¿   R*   RÂ   RÃ   R¾   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyRÈ   —  s    (c          C   sa   t  j j j d d ƒ }  d
 } t j t j ƒ  | ƒ } t j d | ƒ } | t  j j |  d <d  S(   Ns   tools.sessions.nameR¼   i<   i   im  s   %a, %d-%b-%Y %H:%M:%S GMTRÏ   i  i€Q i€3á(	   R5   R¯   t   configRI   RŒ   t   gmtimet   strftimeR°   R¾   (   R¿   t   one_yeart   expR-   (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   expire¹  s
    (#   R(   R#   t   cPickleR€   t   ImportErrorR    t   hashlibR    R   R   RŒ   Rd   R¶   t   warningsR   R5   t   cherrypy.libR   t   objectRD   R   R`   Rj   R’   RŸ   R/   R1   t   failsafeR   t   priorityR   RY   RÍ   RÈ   R×   (    (    (    s)   /var/www/SABnzbd/cherrypy/lib/sessions.pyt   <module>	   sB   	Ç/TD					G	!