³ò
µ[PEc           @   sk  d  d k  Z  d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k	 l
 Z
 d  d k Z d  d k Z d  d k Z h  a e i ƒ  Z d „  Z d „  Z d „  Z d d d „  ƒ  YZ d d d	 „  ƒ  YZ d d
 „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d d d „  ƒ  YZ e ƒ  Z d e f d „  ƒ  YZ e ƒ  Z  d S(   iÿÿÿÿN(   t   escapec         C   sM   t  i i |  ƒ \ } } t i i d ƒ o | d 7} n | d 7} | | f S(   Nt   wins   \t   /(   t   ost   patht   splitt   syst   platformt
   startswith(   t   filenamet   dirt   fname(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt
   path_split%   s
    
c         C   s[   |  i  |  i |  i |  i |  i |  i |  i |  i |  i |  i	 |  i
 |  i f } t i | ƒ S(   N(   t   co_argcountt
   co_nlocalst   co_stacksizet   co_flagst   co_codet	   co_constst   co_namest   co_varnamest   co_filenamet   co_namet   co_firstlinenot	   co_lnotabt   marshalt   dumps(   t   ct   ctuple(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt   code2str/   s    c         C   s   t  i t i |  ƒ Œ  S(   N(   t   newt   codeR   t   loads(   t   s(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt   str2code7   s    t   PSPInterfacec           B   s/   e  Z d  „  Z d „  Z d „  Z d d „ Z RS(   c         C   s(   | |  _  | |  _ d  |  _ | |  _ d  S(   N(   t   reqR	   t   Nonet
   error_paget   form(   t   selfR$   R	   R'   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt   __init__=   s    			c         C   sn   | o7 | d d j o& t  |  i |  i i ƒ  | ƒ |  _ n- t |  i ƒ d } t  |  i | | ƒ |  _ d  S(   Ni    R   (   t   PSPR$   t   document_rootR&   R   R	   (   R(   t   pageR
   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt   set_error_pageC   s    &c         C   sz   |  i  pT t |  i d ƒ p. t i |  i d d ƒ|  _  |  i  |  i _  q^ |  i i  |  _  n t i | |  i  d |  i ƒS(   NR'   t   keep_blank_valuesi   R$   (   R'   t   hasattrR$   t   utilt   FieldStoraget   apply_fs_data(   R(   t   object(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt
   apply_dataL   s    
i    c         C   s   t  i |  i | | ƒ d  S(   N(   R0   t   redirectR$   (   R(   t   locationt	   permanent(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyR5   Z   s    (   t   __name__t
   __module__R)   R-   R4   R5   (    (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyR#   ;   s   				R*   c           B   sk   e  Z d	 Z d	 Z d	 d	 h  d  „ Z d „  Z d „  Z d „  Z d „  Z	 h  d d „ Z
 d „  Z d „  Z RS(
   c   	      C   s  | o | o t  d ‚ n | | |  _ |  _ | o | o | i } n | | |  _ |  _ | oV t i i | ƒ p5 t i i | i ƒ d } t i i	 | | ƒ |  _ n |  i
 ƒ  n^ t i | ƒ } | o | |  _ n; t i | ƒ } t | d d ƒ } t i | | ƒ | |  _ d  S(   Ns&   Must specify either filename or stringi    t   __psp__t   exec(   t
   ValueErrorR$   t   varsR	   t   stringR   R   t   isabsR   t   joint   load_from_filet
   mem_scachet   getR   t   _pspt   parsestringt   compilet   store(	   R(   R$   R	   R>   R=   t   baset   cachedt   sourceR   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyR)   c   s$    c         C   s±   |  i  i ƒ  } | i d ƒ o | d |  _ n" | i d ƒ o | d |  _ n |  i o1 t |  i  i |  i | | ƒ } | o | SqŒ n t i | | ƒ } | o | Sn d  S(   Ns&   mod_python.psp.cache_database_filenamet   PSPDbmCache(   R$   t   get_optionst   has_keyt   dbmcachet   dbm_cache_gett   servert
   mem_fcacheRC   (   R(   R	   t   mtimet   optsRI   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt	   cache_getƒ   s    
c         C   sD   |  i  o# t |  i i |  i  | | | ƒ n t i | | | ƒ d  S(   N(   RN   t   dbm_cache_storeR$   RP   RQ   RG   (   R(   R	   RR   R   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt   cache_store—   s    
c         C   s~   t  i i | ƒ \ } } | | d  d } t  i i | ƒ o= t  i i | ƒ } | | j o t t | ƒ i ƒ  ƒ Sqz n d  S(   NiÿÿÿÿR   (   R   R   t   splitextt   isfilet   getmtimeR"   t   opent   read(   R(   R	   RR   t   namet   extt   cnamet   cmtime(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt	   cfile_getŸ   s    c         C   sÔ   |  i  } t i i | ƒ p t i t i ‚ n t i i | ƒ } |  i | | ƒ } | p |  i	 | | ƒ } n | p= t
 |  i  ƒ \ } } t i | | ƒ } t | | d ƒ } n |  i | | | ƒ | |  _ d  S(   NR;   (   R	   R   R   RX   t   apachet   SERVER_RETURNt   HTTP_NOT_FOUNDRY   RT   R`   R   RD   t   parseRF   RV   R   (   R(   R	   RR   R   R
   R   RJ   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyRA   «   s    	i    c      	   B   s%  |  i  |  i } } d  } d | i j o. e | d ƒ p e i | ƒ | _ } qW n d  } d | i j o? e | d ƒ p" e i | d d ƒ} | | _	 q¬ | i	 } n e
 | |  i | ƒ } z;e ƒ  i ƒ  } | i h  | d <| d <| d <ƒ e | d ƒ o | i h  | i d <ƒ n | i h  d  d <ƒ | i |  i ƒ | i | ƒ yB | | U| o | i ƒ  n e | d ƒ o | i i ƒ  n Wn[ e i ƒ  \ }	 }
 } | i o) | i i h  |	 |
 | f d <| ƒ qû|	 |
 | ‚ n XWd  | d  j	 o | i ƒ  | ` n Xd  S(   Nt   sessionR'   R.   i   R$   t   pspt	   exception(   R   R$   R%   R   R/   t   SessionRe   R0   R1   R'   R#   R	   t   globalst   copyt   updateR=   t   flusht   saveR   t   exc_infoR&   t   runt   unlock(   R(   R=   Rl   R   R$   Re   R'   Rf   t   global_scopet   ett   evt   etb(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyRo   Æ   sD    (
)
c         C   s   d |  i  _ |  i ƒ  d S(   Ns	   text/htmlt    (   R$   t   content_typeRo   (   R(   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt   __str__
  s    
c         C   sÜ  |  i  |  i } } t | ƒ \ } } t | ƒ i ƒ  i ƒ  } t i | | ƒ i ƒ  } g  } | D] } | | i ƒ  q` ~ } g  }	 | D] } |	 | i ƒ  q‡ ~	 } | i	 d ƒ x, d d d | f D] } | i	 d | ƒ qÄ W| i	 d ƒ d }
 xÖ | D]Î } | i	 d ƒ t
 | ƒ i d	 d ƒ i d
 d ƒ } t | ƒ |
 j  o
 d } n- t
 | |
 d ƒ i d	 d ƒ i d
 d ƒ } x4 d |
 d | d | f D] } | i	 d | ƒ q•W| i	 d ƒ |
 d 7}
 qù W| i	 d ƒ d S(   ss   
        Display a niceliy HTML-formatted side-by-side of
        what PSP generated next to orinial code.
        s   <table>
<tr>Ru   s   &nbsp;PSP-produced Python Code:s	   &nbsp;%s:s   <td><tt>%s</tt></td>s   </tr>
i   s   <tr>s   	t    i   s   &nbsp;s	   %d.&nbsp;s   <font color=blue>%s</font>s!   &nbsp;<font color=green>%s</font>s	   </table>
Ns       s       (   R$   R	   R   RZ   R[   t
   splitlinesRD   Rd   t   rstript   writeR    t   replacet   len(   R(   R$   R	   R
   R   RJ   t   pycodet   _[1]R!   t   _[2]t   nt   linet   leftt   right(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt   display_code  s8    ''	  $
,
 N(   R8   R9   R%   R   RN   R)   RT   RV   R`   RA   Ro   Rw   R…   (    (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyR*   ^   s    				D	c         C   s,   | o t  i |  | ƒ Sn t  i |  ƒ Sd  S(   N(   RD   Rd   (   R	   R
   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyRd   ;  s    c         C   s   t  i |  ƒ S(   N(   RD   RE   (   t   str(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyRE   A  s    c         C   s   d |  _  |  i ƒ  } t | i d d ƒ ƒ } } | o8 |  i d d j o$ t |  |  i d  ƒ } | i ƒ  n t |  ƒ } | i ƒ  t i	 S(   Ns	   text/htmlt   PythonDebugi    iÿÿÿÿt   _(
   Rv   t
   get_configt   intRC   R	   R*   R…   Ro   Ra   t   OK(   R$   t   configt   debugt   p(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt   handlerE  s    	
c         C   sX   t  i |  ƒ o t  |  Sn t i |  ƒ } | o t | ƒ } | t  |  <| Sn t Sd  S(   N(   t	   dbm_typesRM   t   whichdbt
   __import__t   anydbm(   t   dbmfilet   modulet   dbm_type(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyt   dbm_cache_typeU  s    
c         C   s‚   t  | ƒ } t i |  d  d ƒ z0 | i | d ƒ } d | t | ƒ f | | <Wd  y | i ƒ  Wn n Xt i |  d  d ƒ Xd  S(   Ni    R   s   %d %s(   R—   t   _apachet   _global_lockR%   RZ   R   t   closet   _global_unlock(   t   srvR”   R	   RR   t   valR–   t   dbm(    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyRU   e  s      c   	      C   sÉ   t  | ƒ } t i |  d  d ƒ zw | i | d ƒ } yG | | } | i d d ƒ \ } } t | ƒ | j o t | ƒ Sn Wn t j
 o d  Sn XWd  y | i	 ƒ  Wn n Xt i
 |  d  d ƒ Xd  S(   Ni    R   Rx   i   (   R—   R˜   R™   R%   RZ   R   t   longR"   t   KeyErrorRš   R›   (	   Rœ   R”   R	   RR   R–   Rž   t   entryt   tR   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyRO   ‚  s     
  t	   HitsCachec           B   s/   e  Z d  d „ Z d „  Z d „  Z d „  Z RS(   i   c         C   s   h  |  _  | |  _ d  S(   N(   t   cachet   size(   R(   R¥   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyR)   —  s    	c         C   s>   d | f |  i  | <t |  i  ƒ |  i j o |  i ƒ  n d  S(   Ni   (   R¤   R}   R¥   t   clean(   R(   t   keyR   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyRG   ›  s    c         C   sM   |  i  i | ƒ o2 |  i  | \ } } | d | f |  i  | <| Sn d  Sd  S(   Ni   (   R¤   RM   R%   (   R(   R§   t   hitsR   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyRC      s
    c         C   s‹   g  } |  i  i ƒ  D] } | | d | d f q ~ } | i ƒ  xB | t |  i  ƒ t |  i d ƒ  D] } | \ } } |  i  | =qg Wd  S(   Ni   i    g      è?(   R¤   t   itemst   sortR}   RŠ   R¥   (   R(   R   R   t   byhitst   itemR   R§   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyR¦   ¨  s    8
% (   R8   R9   R)   RG   RC   R¦   (    (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyR£   •  s   		t	   FileCachec           B   s   e  Z d  „  Z d „  Z RS(   c         C   sA   d | | f |  i  | <t |  i  ƒ |  i j o |  i ƒ  n d  S(   Ni   (   R¤   R}   R¥   R¦   (   R(   R	   RR   R   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyRG   ¶  s    c         C   su   yW |  i  | \ } } } | | j o |  i  | =d  Sn | d | | f |  i  | <| SWn t j
 o d  Sn Xd  S(   Ni   (   R¤   R%   R    (   R(   R	   RR   R¨   t   c_mtimeR   (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyRC   »  s    
(   R8   R9   RG   RC   (    (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pyR­   ´  s   	(    (    (    (!   Ra   Rh   R0   RD   R˜   R   R   R   R   t   cgiR    R“   R‘   t   tempfileR   t
   gettempdirt   tempdirR   R   R"   R#   R*   R%   Rd   RE   R   R—   RU   RO   R£   RB   R­   RQ   (    (    (    s2   /usr/lib/python2.5/site-packages/mod_python/psp.pys   <module>   s2   0	
		#Ý						