³ò
j1dEc        
   @   sß   d  d k  Z  d  d k Z d  d k Z d  d k Z d  d k Z d  d k Td  d k Te  i Z e  i Z d Z	 d f  d „  ƒ  YZ
 d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 f  d „  ƒ  YZ d „  Z d „  Z d e d „ Z d S(   iÿÿÿÿN(   t   *iXÿ  t   Fieldc           B   s8   e  Z d  „  Z h  d „ Z d „  Z d „  Z d „  Z RS(   c         O   s/   | |  _  | p | o |  i | | Ž  n d  S(   N(   t   namet   __bc_init__(   t   selfR   t   argst   kwargs(    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   __init__3   s    	c         C   sd   | |  _  | |  _ | |  _ | |  _ | |  _ | i d ƒ o | d |  _ n
 d  |  _ | |  _ d  S(   Nt   filename(	   t   filet   typet   type_optionst   dispositiont   disposition_optionst   has_keyR   t   Nonet   headers(   R   R	   t   ctypeR   t   dispt   disp_optionsR   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR   G   s    						c         C   s   d |  i  |  i f S(   s    Return printable representation.s   Field(%s, %s)(   R   t   value(   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   __repr__T   s    c         C   sa   | d j o t  | ‚ n |  i o3 |  i i d ƒ |  i i ƒ  } |  i i d ƒ n d  } | S(   NR   i    (   t   AttributeErrorR	   t   seekt   readR   (   R   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   __getattr__X   s    
c         C   s   |  i  i ƒ  d  S(   N(   R	   t   close(   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   __del__c   s    (   t   __name__t
   __module__R   R   R   R   R   (    (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR   2   s
   			t   StringFieldc           B   sM   e  Z d  Z d Z h  Z d Z h  Z d Z d Z	 d „  Z
 d „  Z d „  Z RS(   s   This class is basically a string with
    added attributes for compatibility with std lib cgi.py. Basically, this
    works the opposite of Field, as it stores its data in a string, but creates
    a file on demand. Field creates a value on demand and stores data in a file.
    s
   text/plainc         C   s   t  i |  | ƒ | |  _ d S(   s>   Create StringField instance. You'll have to set name yourself.N(   t   strR   R   (   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR   u   s    c         C   s6   | d j o t  | ‚ n t i |  i ƒ |  _ |  i S(   NR	   (   R   t	   cStringIOt   StringIOR   R	   (   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR   z   s    c         C   s   d |  i  |  i f S(   s5   Return printable representation (to pass unit tests).s   Field(%s, %s)(   R   R   (   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR   €   s    N(   R   R   t   __doc__R   R   R   R   R   R   R   R   R   R   (    (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR   f   s   		t	   FieldListc           B   s}   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z RS(   c         C   s   d  |  _ t i |  ƒ d  S(   N(   R   t   _FieldList__tablet   listR   (   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR   †   s    	c         C   sv   |  i  d  j o_ h  |  _  xS |  D]G } | i |  i  j o |  i  | i i | ƒ q  | g |  i  | i <q  Wn |  i  S(   N(   R$   R   R   t   append(   R   t   item(    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   tableŠ   s    	 c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   t   __delitem__(   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR)   ”   s    	c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   t   __delslice__(   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR*   ˜   s    	c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   t   __iadd__(   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR+   œ   s    	c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   t   __imul__(   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR,       s    	c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   t   __setitem__(   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR-   ¤   s    	c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   t   __setslice__(   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR.   ¨   s    	c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   R&   (   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR&   ¬   s    	c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   t   extend(   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR/   °   s    	c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   t   insert(   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR0   ´   s    	c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   t   pop(   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR1   ¸   s    	c         G   s   d  |  _ t i |  | Œ S(   N(   R   R$   R%   t   remove(   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR2   ¼   s    	(   R   R   R   R(   R)   R*   R+   R,   R-   R.   R&   R/   R0   R1   R2   (    (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR#   „   s   		
										t   FieldStoragec           B   s­   e  Z d  d  d d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z e Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z RS(   i    c         C   sO  t  ƒ  |  _ | i o? t | i | ƒ } x* | D] } |  i | d | d ƒ q/ Wn | i d j o d  Sn y t | i d ƒ } Wn( t t	 f j
 o t
 i t
 i ‚ n X| i i d ƒ p
 d }	 n | i d }	 |	 i d ƒ oI t | i | ƒ | ƒ } x& | D] } |  i | d | d ƒ qWd  Sn |	 i d ƒ p t
 i t
 i ‚ n y‘ |	 i ƒ  i d ƒ }
 |	 |
 d	 } t | ƒ d
 j o7 | d | d j o
 d j n o | d d !} n t i d t i | ƒ d ƒ } Wn" t	 j
 o t
 i t
 i ‚ n X|  i | | d  ƒ t } x$| pd h  }	 } d  h  } } t
 i ƒ  } | i t ƒ } | i | ƒ } | p | o$ | p | i d ƒ d  j	 } q'n t } x@| d j o2| i t ƒ } x6 | o. | d d j o | | } | i t ƒ } qÍW| i  d d ƒ \ } } | i! | | ƒ | i ƒ  } | d j o t" | ƒ \ } } nD | d j o6 t" | ƒ \ }	 } |	 i# d ƒ d j o
 d }	 qn | } | i | ƒ } | p | o( t$ } | p | i d ƒ d  j	 } Pq®q®W| o q'n | i d ƒ o | d } n d  } | i d ƒ o; | o! t% | ƒ o | | d ƒ } q˜t& i' d ƒ } n. | o t% | ƒ o | ƒ  } n t( i) ƒ  } |  i | | | ƒ | i* d ƒ | i d ƒ o t+ | ƒ } | d | _, n t- | i ƒ  ƒ } | | _. | | _/ |	 | _0 | | _1 | | _2 | | _3 | | _4 |  i i5 | ƒ q'Wd  S(   Ni    i   t   POSTs   content-lengths   content-types!   application/x-www-form-urlencodeds
   multipart/s	   boundary=i	   i   iÿÿÿÿt   "s   --s   (--)??
s
   text/plains   s   
t    s   	t   :s   content-dispositiont   /s   application/octet-streamR   R   s   w+b(   s   s   
(   R6   s   	(6   R#   R%   R   t	   parse_qslt	   add_fieldt   methodt   intt
   headers_int   KeyErrort
   ValueErrort   apachet   SERVER_RETURNt   HTTP_LENGTH_REQUIREDR   t
   startswithR   t   HTTP_NOT_IMPLEMENTEDt   lowert   rindext   lent   ret   compilet   escapet   HTTP_BAD_REQUESTt   read_to_boundaryR   t   Falset
   make_tablet   readlinet   readBlockSizet   matcht   groupt   splitt   addt   parse_headert   findt   Truet   callablet   tempfilet   TemporaryFileR    R!   R   R   R   R   R   R	   R
   R   R   R   R   R&   (   R   t   reqt   keep_blank_valuest   strict_parsingt   file_callbackt   field_callbackt   pairst   pairt   clenR   t   it   boundaryt   end_of_streamR   R   R   R   t   lineRQ   t   skip_this_partt   nextlinet   ht   vR   R	   t   field(    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR   Ã   s¸    
  
 9$   

							c         C   s)   t  | ƒ } | | _ |  i i | ƒ d S(   s    Insert a field as key/value pairN(   R   R   R%   R&   (   R   t   keyR   R'   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR:   X  s    	c         C   sw   |  i  i ƒ  } | i | ƒ o/ | | } x" | D] } |  i  i | ƒ q0 Wn t | ƒ } | | _ |  i  i | ƒ d  S(   N(   R%   R(   R   R2   R   R   R&   (   R   Rl   R   R(   t   itemsR'   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR-   ^  s    
 	c         C   sÅ  d  } x¸t o°| i t ƒ } | p3 | d  j	 o | d  j	 o | i | ƒ n t Sn | i | ƒ } | o | i d ƒ d  j	 Sn | d d j oJ | d  j	 o3 | d  j	 o | i | ƒ n | i | d  ƒ n d } q	 | d d j od t | ƒ t j p t ‚ | d  j	 o3 | d  j	 o | i | ƒ n | i | d  ƒ n d } q	 | d j o | d j o
 d } q	 | d  j	 o/ | d  j	 o | i | ƒ n | i | ƒ n d  } q	 Wd  S(   Ni   iþÿÿÿs   
iÿÿÿÿs   s   
(	   R   RW   RO   RP   t   writeRQ   RR   RG   t   AssertionError(   R   R[   Rd   R	   t   previous_delimiterRf   RQ   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyRL   h  s>      
 

 c         C   s:   |  i  i ƒ  | } t | ƒ d j o | d Sn | Sd S(   s   Dictionary style indexing.i   i    N(   R%   R(   RG   (   R   Rl   t   found(    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   __getitem__™  s    c         C   s5   y |  i  | ƒ SWn t t f j
 o | Sn Xd  S(   N(   Rr   t	   TypeErrorR>   (   R   Rl   t   default(    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   get¡  s    c         C   s   |  i  i ƒ  i ƒ  S(   s   Dictionary style keys() method.(   R%   R(   t   keys(   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyRv   §  s    c         C   s   t  |  i ƒ  ƒ S(   N(   t   iterRv   (   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   __iter__«  s    c         C   s   t  |  i i ƒ  ƒ S(   N(   t   reprR%   R(   (   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR   ®  s    c         C   s   | |  i  i ƒ  j S(   s"   Dictionary style has_key() method.(   R%   R(   (   R   Rl   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR   ±  s    c         C   s   t  |  i i ƒ  ƒ S(   s    Dictionary style len(x) support.(   RG   R%   R(   (   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   __len__·  s    c         C   s7   y |  i  i ƒ  | d SWn t j
 o | Sn Xd S(   s!    return the first value received i    N(   R%   R(   R>   (   R   Rl   Rt   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   getfirst»  s    c         C   s3   y |  i  i ƒ  | SWn t j
 o g  Sn Xd S(   s"    return a list of received values N(   R%   R(   R>   (   R   Rl   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   getlistÂ  s    c         C   s+   g  } |  i  D] } | | i | f q ~ S(   su   Dictionary-style items(), except that items are returned in the same
        order as they were supplied in the form.(   R%   R   (   R   t   _[1]R'   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyRm   É  s    c         C   s>   |  i  i ƒ  } | | } x | D] } |  i  i | ƒ q  Wd  S(   N(   R%   R(   R2   (   R   Rl   R(   t   valuesR   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR)   Î  s
    
 c         C   s   t  ƒ  |  _ d  S(   N(   R#   R%   (   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   clearÔ  s    N(   R   R   R   R   R:   R-   RL   Rr   Ru   Rv   Rx   R   R   t   __contains__Rz   R{   R|   Rm   R)   R   (    (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR3   Á   s"   •		
	1										c         C   sñ   t  d „  |  i d ƒ ƒ } | d i ƒ  } | d =h  } x¬ | D]¤ } | i d ƒ } | d j o‚ | |  i ƒ  i ƒ  } | | d i ƒ  } t | ƒ d j o7 | d | d j o
 d j n o | d d !} n | | | <q? q? W| | f S(	   sf   Parse a Content-type like header.

    Return the main content-type and a dictionary of options.

    c         S   s
   |  i  ƒ  S(    (   t   strip(   t   a(    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   <lambda>ß  s    t   ;i    t   =i   i   iÿÿÿÿR5   (   t   mapRS   RE   RV   R   RG   (   Rf   t   plistRl   t   pdictt   pRc   R   R   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyRU   Ø  s     9c   	   	   K   s8  d } g  } t |  d ƒ o  |  i } | i d | i !} nù t |  d ƒ o# |  i i } | i d | i !} nÆ t |  ƒ t t f j o& |  i	 i i } | i d | i !} n‡ t |  ƒ t
 j o d } g  } nd t |  d ƒ oS t |  i ƒ t j o& |  i i i } | i d | i !} q4t |  i | |  Sn xJ | i D]? } | i o
 | } n
 | i } | i | i g  ƒ i | ƒ q>WxR | D]J } t | | ƒ t j o- t | | ƒ d j o | | d | | <qˆqˆW| d j o
 h  } nB | i d @p3 x0 | i ƒ  D] } | | j o | | =qqWn |  |   S(   s­   
    Apply FieldStorage data to an object - the object must be
    callable. Examine the args, and match then with fs data,
    then call the object, return the result.
    t	   func_codei    t   im_funci   t   __call__i   N(   R   t   hasattrRŠ   t   co_varnamest   co_argcountR‹   R
   t   TypeTypet	   ClassTypeR   t   BuiltinFunctionTypeRŒ   t
   MethodTypet   apply_fs_dataR%   R   R   t
   setdefaultR   R&   t   ListTypeRG   t   co_flagsRv   (	   t   objectt   fsR   t   fct   expectedRk   t   valt   argR   (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyR”   í  sL    	

 

	  
 i    c         C   s‰   |  i  o t d ‚ n | |  i d <| o t i |  _ n t i |  _ | d j o |  i d | ƒ n |  i | ƒ t i	 t i
 ‚ d S(   s7   
    A convenience function to provide redirection
    s5   Cannot redirect after headers have already been sent.t   Locations4   <p>The document has moved <a href="%s">here</a></p>
N(   t   sent_bodyctt   IOErrort   err_headers_outR@   t   HTTP_MOVED_PERMANENTLYt   statust   HTTP_MOVED_TEMPORARILYR   Rn   RA   t   DONE(   R[   t   locationt	   permanentt   text(    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pyt   redirect,  s    
	(   t   _apacheR@   R    RY   RH   t   typest
   exceptionst   parse_qsR9   RP   R   R   R   R%   R#   R3   RU   R”   R   R©   (    (    (    s3   /usr/lib/python2.5/site-packages/mod_python/util.pys   <module>   s"   

		4=ÿ 		?