ó
µ[PEc           @   sk  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 Z d  d l Z d  d l Z d  d l	 m
 Z
 d  d l Z d  d l Z d  d l Z i  a e j ƒ  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   sK   t  j j |  ƒ \ } } t j j d ƒ r7 | 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.7/dist-packages/mod_python/psp.pyt
   path_split%   s
    
c         C   s[   |  j  |  j |  j |  j |  j |  j |  j |  j |  j |  j	 |  j
 |  j f } t j | ƒ 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.7/dist-packages/mod_python/psp.pyt   code2str/   s    c         C   s   t  j t j |  ƒ Œ  S(   N(   t   newt   codeR   t   loads(   t   s(    (    s2   /usr/lib/python2.7/dist-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.7/dist-packages/mod_python/psp.pyt   __init__=   s    			c         C   sk   | r; | d d k r; t  |  j |  j j ƒ  | ƒ |  _ n, t |  j ƒ d } t  |  j | | ƒ |  _ d  S(   Ni    R   (   t   PSPR$   t   document_rootR&   R   R	   (   R(   t   pageR
   (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyt   set_error_pageC   s    %c         C   sv   |  j  sZ t |  j d ƒ sH t j |  j d d ƒ|  _  |  j  |  j _  qZ |  j j  |  _  n  t j | |  j  d |  j ƒS(   NR'   t   keep_blank_valuesi   R$   (   R'   t   hasattrR$   t   utilt   FieldStoraget   apply_fs_data(   R(   t   object(    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyt
   apply_dataL   s    	i    c         C   s   t  j |  j | | ƒ d  S(   N(   R0   t   redirectR$   (   R(   t   locationt	   permanent(    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyR5   Z   s    (   t   __name__t
   __module__R)   R-   R4   R5   (    (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyR#   ;   s   				R*   c           B   sk   e  Z d	 Z d	 Z d	 d	 i  d  „ Z d „  Z d „  Z d „  Z d „  Z	 i  d d „ Z
 d „  Z d „  Z RS(
   c   	      C   s  | r | r t  d ‚ n  | | |  _ |  _ | rE | rE | j } n  | | |  _ |  _ | r± t j j | ƒ s¤ t j j | j ƒ d } t j j	 | | ƒ |  _ n  |  j
 ƒ  n[ t j | ƒ } | rÒ | |  _ n: t j | ƒ } t | d d ƒ } t j | | ƒ | |  _ 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.7/dist-packages/mod_python/psp.pyR)   c   s$    c         C   s¡   |  j  j ƒ  } | j d ƒ r. | d |  _ n | j d ƒ rM | d |  _ n  |  j r t |  j  j |  j | | ƒ } | r | Sn  t j | | ƒ } | r | Sd  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.7/dist-packages/mod_python/psp.pyt	   cache_getƒ   s    	c         C   sB   |  j  r+ t |  j j |  j  | | | ƒ n t j | | | ƒ d  S(   N(   RN   t   dbm_cache_storeR$   RP   RQ   RG   (   R(   R	   RR   R   (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyt   cache_store—   s    	c         C   sw   t  j j | ƒ \ } } | | d  d } t  j j | ƒ rs t  j j | ƒ } | | k rs t t | ƒ j ƒ  ƒ Sn  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.7/dist-packages/mod_python/psp.pyt	   cfile_getŸ   s    c         C   sÎ   |  j  } t j j | ƒ s- t j t j ‚ n  t j j | ƒ } |  j | | ƒ } | sl |  j	 | | ƒ } n  | s® t
 |  j  ƒ \ } } t j | | ƒ } t | | d ƒ } n  |  j | | | ƒ | |  _ 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.7/dist-packages/mod_python/psp.pyRA   «   s    	i    c         B   s  |  j  |  j } } d  } d | j k rS e | d ƒ sS e j | ƒ | _ } qS n  d  } d | j k r¤ e | d ƒ s˜ e j | d d ƒ} | | _	 q¤ | j	 } n  e
 | |  j | ƒ } z'e ƒ  j ƒ  } | j i | d 6| d 6| d 6ƒ e | d ƒ r| j i | j d 6ƒ n | j i d  d 6ƒ | j |  j ƒ | j | ƒ y> | | U| re| j ƒ  n  e | d ƒ r„| j j ƒ  n  WnW e j ƒ  \ }	 }
 } | j rÏ| j j i |	 |
 | f d 6| ƒ qß|	 |
 | ‚ n XWd  | d  k	 r| j ƒ  | ` 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.7/dist-packages/mod_python/psp.pyRo   Æ   sD    "	&
c         C   s   d |  j  _ |  j ƒ  d S(   Ns	   text/htmlt    (   R$   t   content_typeRo   (   R(   (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyt   __str__
  s    
c         C   sÊ  |  j  |  j } } t | ƒ \ } } t | ƒ j ƒ  j ƒ  } t j | | ƒ j ƒ  } g  | D] } | j ƒ  ^ q\ } g  | D] } | j ƒ  ^ q{ } | j	 d ƒ x, d d d | f D] } | j	 d | ƒ q´ W| j	 d ƒ d } xÔ | D]Ì }	 | j	 d ƒ t
 |	 ƒ j d	 d ƒ j d
 d ƒ }
 t | ƒ | k  r;d } n, t
 | | d ƒ j d	 d ƒ j d
 d ƒ } x4 d | d |
 d | f D] } | j	 d | ƒ qƒW| j	 d ƒ | d 7} qé W| j	 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   pycodeR!   t   nt   linet   leftt   right(    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyt   display_code  s2    	$	,
N(   R8   R9   R%   R   RN   R)   RT   RV   R`   RA   Ro   Rw   Rƒ   (    (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyR*   ^   s    				D	c         C   s'   | r t  j |  | ƒ St  j |  ƒ Sd  S(   N(   RD   Rd   (   R	   R
   (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyRd   ;  s    c         C   s   t  j |  ƒ S(   N(   RD   RE   (   t   str(    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyRE   A  s    c         C   sŠ   d |  _  |  j ƒ  } t | j d d ƒ ƒ } } | rm |  j d d k rm t |  |  j d  ƒ } | j ƒ  n t |  ƒ } | j ƒ  t j	 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.7/dist-packages/mod_python/psp.pyt   handlerE  s    	
c         C   sN   t  j |  ƒ r t  |  St j |  ƒ } | rF t | ƒ } | t  |  <| St Sd  S(   N(   t	   dbm_typesRM   t   whichdbt
   __import__t   anydbm(   t   dbmfilet   modulet   dbm_type(    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyt   dbm_cache_typeU  s    
c         C   s‚   t  | ƒ } t j |  d  d ƒ z0 | j | d ƒ } d | t | ƒ f | | <Wd  y | j ƒ  Wn n Xt j |  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.7/dist-packages/mod_python/psp.pyRU   e  s      c   	      C   s¿   t  | ƒ } t j |  d  d ƒ zm | j | d ƒ } yB | | } | j d d ƒ \ } } t | ƒ | k ru t | ƒ SWn t k
 rŠ d  SXWd  y | j	 ƒ  Wn n Xt j
 |  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.7/dist-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   i  |  _  | |  _ d  S(   N(   t   cachet   size(   R(   R£   (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyR)   —  s    	c         C   s<   d | f |  j  | <t |  j  ƒ |  j k r8 |  j ƒ  n  d  S(   Ni   (   R¢   R}   R£   t   clean(   R(   t   keyR›   (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyRG   ›  s    c         C   sH   |  j  j | ƒ r@ |  j  | \ } } | d | f |  j  | <| Sd  Sd  S(   Ni   (   R¢   RM   R%   (   R(   R¥   t   hitsR›   (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyRC      s
    c         C   sƒ   g  |  j  j ƒ  D] } | d | d f ^ q } | j ƒ  xB | t |  j  ƒ t |  j d ƒ  D] } | \ } } |  j  | =q_ Wd  S(   Ni   i    g      è?(   R¢   t   itemst   sortR}   Rˆ   R£   (   R(   R   t   byhitst   itemR›   R¥   (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyR¤   ¨  s
    0
+(   R8   R9   R)   RG   RC   R¤   (    (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyR¡   •  s   		t	   FileCachec           B   s   e  Z d  „  Z d „  Z RS(   c         C   s?   d | | f |  j  | <t |  j  ƒ |  j k r; |  j ƒ  n  d  S(   Ni   (   R¢   R}   R£   R¤   (   R(   R	   RR   R   (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyRG   ¶  s    c         C   sk   yR |  j  | \ } } } | | k r3 |  j  | =d  S| d | | f |  j  | <| SWn t k
 rf d  SXd  S(   Ni   (   R¢   R%   Rž   (   R(   R	   RR   R¦   t   c_mtimeR   (    (    s2   /usr/lib/python2.7/dist-packages/mod_python/psp.pyRC   »  s    
(   R8   R9   RG   RC   (    (    (    s2   /usr/lib/python2.7/dist-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.7/dist-packages/mod_python/psp.pyt   <module>   s2   0	
		#Ý						