eaiovnaovbqoebvqoeavibavo B YI~d@sdZddlmZmZmZddlmZddlZddlZddl Z ddl m Z ddl mZddlmZddlZddlZddlZdd d d d d dddddddddgZdadaddZddZddZddZeadadejddd fd!d Zd7d"d Zd8d#d Z d9d&d Z!d'd(Z"d)dZ#Gd*ddZ$Gd+d d Z%ejfd,dZ&d:d-dZ'ejfd.dZ(d/dZ)d0dZ*d1dZ+d2dZ,d;d3dZ-d4d5Z.e/d6kre&dS)sz#parse_multipart..)r=formatrZset_typeKeyErrorr )r@rEr+rNr0rKrDrMr")rRr#rs   ccsx|dddkr|dd}|d}x<|dkrd|dd||dd|drd|d|d}q*W|dkrvt|}|d|}|V||d}qWdS)Nr3;r"z\"rG)findcountlenstrip)sendfr"r"r# _parseparams  *  r_cCstd|}|}i}x|D]}|d}|dkr|d|}||dd}t|dkr|d|dkrdkrnn |dd}|dd d d}|||<qW||fS) NrV=rr3rGrWz\\\z\")r___next__rXr[lowerrZrJ)linepartskeyrEpinamevaluer"r"r#rs   ,  c@s<eZdZdZdZdZdZiZdZiZ iZ ddZ ddZ dS)r NcCs||_||_dS)N)rjrk)selfrjrkr"r"r#__init__szMiniFieldStorage.__init__cCsd|j|jfS)NzMiniFieldStorage(%r, %r))rjrk)rlr"r"r#__repr__ szMiniFieldStorage.__repr__) __name__ __module__ __qualname__filenamelisttypefile type_options dispositiondisposition_optionsrMrmrnr"r"r"r#r sc @seZdZdddejdddddddf ddZd d Zd d Zd dZddZ ddZ ddZ ddZ d:ddZ d;ddZddZddZdd Zd!d"Zd#d$Zd%d&ZdZd'd(Zd)d*Zd+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9ZdS)encodelocalegetpreferredencodingrr7rr TypeErrorrMr5r8r@rr6r+rNbytesrtro outerboundary bytes_readlimitrrwrxrjrr _binary_filerv innerboundaryr9r;r:lengthrsrudoneread_urlencoded read_multi read_single)rlr@rMrrArBrCrr+rNr}r0methodrFZcdisprErDZclenr"r"r#rmPs/                           zFieldStorage.__init__cCs(y|jWntk r"YnXdS)N)rur(AttributeError)rlr"r"r#__del__szFieldStorage.__del__cCs|S)Nr")rlr"r"r# __enter__szFieldStorage.__enter__cGs|jdS)N)rur()rlr'r"r"r#__exit__szFieldStorage.__exit__cCsd|j|j|jfS)NzFieldStorage(%r, %r, %r))rjrrrk)rlr"r"r#rnszFieldStorage.__repr__cCs t|S)N)iterkeys)rlr"r"r#__iter__szFieldStorage.__iter__cCsT|dkrt||jr:|jd|j}|jdn|jdk rL|j}nd}|S)Nrkr)rruseekr<rs)rlrjrkr"r"r# __getattr__ s   zFieldStorage.__getattr__cCsb|jdkrtdg}x"|jD]}|j|kr||qW|sFt|t|dkrZ|dS|SdS)Nz not indexabler3r)rsrrjappendrUrZ)rlrgfounditemr"r"r# __getitem__s    zFieldStorage.__getitem__cCs8||kr0||}t|tr(dd|DS|jSn|SdS)NcSsg|] }|jqSr")rk)rPxr"r"r# )sz)FieldStorage.getvalue..)r7rsrk)rlrgdefaultrkr"r"r#getvalue$s  zFieldStorage.getvaluecCs4||kr,||}t|tr$|djS|jSn|SdS)Nr)r7rsrk)rlrgrrkr"r"r#getfirst/s   zFieldStorage.getfirstcCs:||kr2||}t|tr(dd|DS|jgSngSdS)NcSsg|] }|jqSr")rk)rPrr"r"r#r?sz(FieldStorage.getlist..)r7rsrk)rlrgrkr"r"r#rO:s   zFieldStorage.getlistcCs*|jdkrtdttdd|jDS)Nz not indexablecss|] }|jVqdS)N)rj)rPrr"r"r# Isz$FieldStorage.keys..)rsrset)rlr"r"r#rEs zFieldStorage.keyscs*|jdkrtdtfdd|jDS)Nz not indexablec3s|]}|jkVqdS)N)rj)rPr)rgr"r#rOsz,FieldStorage.__contains__..)rsrany)rlrgr")rgr# __contains__Ks zFieldStorage.__contains__cCs t|S)N)rZr)rlr"r"r#__len__QszFieldStorage.__len__cCs|jdkrtdt|jS)NzCannot be converted to bool.)rsrbool)rlr"r"r#__bool__Us zFieldStorage.__bool__c Cs|j|j}t|ts0td|jt|jf||j |j }|j rT|d|j 7}t j j||j|j|j |j |j|jd}dd|D|_|dS)Nz%s should return bytes, got %sr*)r+rNr}r0cSsg|]\}}t||qSr")r )rPrgrkr"r"r#rgsz0FieldStorage.read_urlencoded..)r@r<rr7rr;rtror=r+rNrr?r r rBrCr}r0rs skip_lines)rlrFqueryr"r"r#rZs  zFieldStorage.read_urlencodedc CsT|j}t|std|fg|_|jrftjj|j|j|j |j |j |j |j d}|jdd|D|jpp|j}|j}t|tstd|jt|jf|jt|7_x6|d|jkr|r|j}|jt|7_qW|j }|dk r|t|j8}x>t} d} x$|j} | | 7} | sPqW| sBP|jt| 7_| | |j |j | } d| kr| d=|jdkrdn |j|j} ||j| ||||| |j |j ||j }|dk r|d 8}|jr|t|j8}|d krtd |j|j7_|j||j s@|j|j!kr.z%s should return bytes, got %ss--ryzcontent-lengthr3rzMax number of fields exceeded)#rvalid_boundaryr;rsrr?r r rBrCr+rNr}r0extendFieldStorageClass __class__r@r{r7rrtrorrZr[rZfeedr=r(rrrrr)rlrArBrCZibrklassZ first_liner}parserZhdr_textdatarMrpartr"r"r#rlsl             (zFieldStorage.read_multicCs4|jdkr||n||jddS)Nr)r read_binaryr read_linesrur)rlr"r"r#rs   zFieldStorage.read_singlei cCs||_|j}|dkrxx|dkr|jt||j}t|tsXt d|jt |j f|j t |7_ |svd|_P|j||t |}qWdS)Nrz%s should return bytes, got %sra) make_filerurr@r<minbufsizer7rr;rtrorrZrr&)rlZtodorr"r"r#rs    zFieldStorage.read_binarycCs@|jrt|_|_nt|_|_|jr4|n|dS)N)rrru_FieldStorage__filerrread_lines_to_outerboundaryread_lines_to_eof)rlr"r"r#rs  zFieldStorage.read_linescCsv|jdk rF|jt|dkrF||_|j}|j|d|_|jrZ|j|n|j||j |j dS)Ni) rtellrZrrurr&rr=r+rN)rlrerr"r"r#Z__writes    zFieldStorage.__writecCs>x8|jd}|jt|7_|s,d|_P||qWdS)Nira)r@r{rrZr_FieldStorage__write)rlrer"r"r#rs zFieldStorage.read_lines_to_eofc CsHd|j}|d}d}d}d}x"|jdk rHd|jkrB|krHnnP|jd}|jt|7_|t|7}|s~d|_P|dkr||}d}|dr|r|}||krP||krd|_P|}| d rd }|dd }d}nL| d rd }|dd}d}n*| dr*d}|dd}d }nd}d }| ||q"WdS) Ns--ryTrira r3s  F) rrr@r{rrZr startswithrstripendswithr) rl next_boundary last_boundaryZdelimlast_line_lfendZ_readre strippedlineZodelimr"r"r#rsP $        z(FieldStorage.read_lines_to_outerboundarycCs|jr |jrdSd|j}|d}d}xh|jd}|jt|7_|sRd|_P|dr|r|}||krrP||krd|_P|d}q(WdS)Ns--Tirar3r)rrr@r{rrZrr[)rlrrrrerr"r"r#r#s&   zFieldStorage.skip_linescCs&|jrtdStjd|jddSdS)Nzwb+zw+r%)r+newline)rtempfileZ TemporaryFiler+)rlr"r"r#r9s zFieldStorage.make_file)N)N) rorprqosrArmrrrrnrrrrrrOrrrrrrrrrrrrrrrrr"r"r"r#r %s>+#   E   2cCstdttjt_yNt}ttt|t|t dd}|fdd}td|Wnt YnXtdda y&t}ttt|t|Wnt YnXdS) NzContent-type: text/htmlcSs tddS)Nz,testing print_exception() -- italics?)execr"r"r"r#r^lsztest..fcSs |dS)Nr")r^r"r"r#gnsztest..gz9

What follows is a test, not an actual exception:

z*

Second try with a small maxlen...

2) printr4stdoutstderrr rrrrrrr:)rAformr^rr"r"r#r[s4    c Csx|dkrt\}}}ddl}ttd||||||}tdtd|ddt|df~dS)Nrz+

Traceback (most recent call last):

z
%s%s
rra) r4exc_info tracebackr format_tbformat_exception_onlyhtmlrjoin)rtrktbrrrsr"r"r#rs c Cs`t|}ttdtdx*|D]"}tdt|dt||q(WtdtdS)Nz

Shell Environment:

z
z
z
z
)sortedrrrr)rArrgr"r"r#rs  "cCst|}ttd|s&tdtdxb|D]Z}tdt|ddd||}tdttt|d td tt|q4Wtd tdS) Nz

Form Contents:

z

No form fields.z

z
: )r]zzz
z
)rrrrrreprrt)rrrgrkr"r"r#rs  c Csjttdy t}Wn6tk rP}ztdtt|Wdd}~XYnXtt|tdS)Nz#

Current Working Directory:

zOSError:)rrgetcwdrrrstr)pwdmsgr"r"r#rs &cCs(ttdtttjtdS)Nz

Command Line Arguments:

)rr4r>r"r"r"r#rs  cCs tddS)Na

These environment variables could have been set:

  • AUTH_TYPE
  • CONTENT_LENGTH
  • CONTENT_TYPE
  • DATE_GMT
  • DATE_LOCAL
  • DOCUMENT_NAME
  • DOCUMENT_ROOT
  • DOCUMENT_URI
  • GATEWAY_INTERFACE
  • LAST_MODIFIED
  • PATH
  • PATH_INFO
  • PATH_TRANSLATED
  • QUERY_STRING
  • REMOTE_ADDR
  • REMOTE_HOST
  • REMOTE_IDENT
  • REMOTE_USER
  • REQUEST_METHOD
  • SCRIPT_NAME
  • SERVER_NAME
  • SERVER_PORT
  • SERVER_PROTOCOL
  • SERVER_ROOT
  • SERVER_SOFTWARE
In addition, HTTP headers sent by the server may be passed in the environment as well. Here are some common variable names:
  • HTTP_ACCEPT
  • HTTP_CONNECTION
  • HTTP_HOST
  • HTTP_PRAGMA
  • HTTP_REFERER
  • HTTP_USER_AGENT
)rr"r"r"r#rs'cCsFtdtdd|dd}|dd}|dd }|rB|d d }|S) Nz1cgi.escape is deprecated, use html.escape insteadrG) stacklevelr*z&z>rWz")rrHrJ)r\Zquoter"r"r#rs     cCs(ddl}t|trd}nd}|||S)Nrs^[ -~]{0,200}[!-~]$z^[ -~]{0,200}[!-~]$)rer7rmatch)r\rZ _vb_patternr"r"r#rs  r__main__)rr)rr)rIrJr*)NNNN)N)0 __version__iorrrZcollections.abcrr4rZ urllib.parser?Z email.parserrZ email.messagerwarningsrrrr__all__rrr$r rr)rr:rAr r r rr_rr r rrrrrrrrrror"r"r"r#s`    # H    :'   /