
    ;eY                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmZ  ej        d          Z G d d          Z e            e_         G d	 d
          Zd Zdi fd ed          fd ed          fdi fdi fdddgifd ed          fd ed          fd ed          fdddgifdddgifdddgifdddgifd ed          fd  ed!          fd"d#gd$gd%fd&dd#d'gifd(d)gd*gd+gd,fd-d.gd/gd0gd1gd2gd3gd4gd5gd6fd7d8gd9gd:gd)gd;gd<gd=fgZd> Zd? Zd@ ZdA Z G dB dCej                  ZdDZdEZdFZdGZdHZedIk    r ej                      dS dS )J    N)
namedtuple)StringIOBytesIO)support)warnings_helpercgic                        e Zd Zg Zej        ZdS )HackedSysModuleN)__name__
__module____qualname__argvsysstdin     $/usr/lib/python3.11/test/test_cgi.pyr
   r
      s         DIEEEr   r
   c                   &    e Zd Zd Zd Zd Zd ZdS )ComparableExceptionc                     || _         d S N)err)selfr   s     r   __init__zComparableException.__init__   s    r   c                 *    t          | j                  S r   )strr   r   s    r   __str__zComparableException.__str__   s    48}}r   c                     t          |t                    st          S | j        j        |j        k    o| j        j        |j        k    S r   )
isinstance	ExceptionNotImplementedr   	__class__args)r   anExcs     r   __eq__zComparableException.__eq__   sA    %++ 	"!!"eo5 ,+	-r   c                 ,    t          | j        |          S r   )getattrr   )r   attrs     r   __getattr__zComparableException.__getattr__"   s    tx&&&r   N)r   r   r   r   r   r&   r*   r   r   r   r   r      sP            - - -' ' ' ' 'r   r   c                 |   i }|dk    rd }d|d<   | |d<   nd|dk    rLt          |                     d                    }d|d<   d|d<   t          t          |                     |d<   nt	          d	|z            	 t
                              ||d
          S # t          $ r}t          |          cY d }~S d }~ww xY w)NGETREQUEST_METHODQUERY_STRINGPOSTlatin-1!application/x-www-form-urlencodedCONTENT_TYPECONTENT_LENGTHzunknown method: %s   )strict_parsing)	r   encoder   len
ValueErrorr   parser!   r   )bufmethodenvfpr   s        r   do_testr>   %   s    
C %!N	6		SZZ	**++ &AN #CHH-6777(yySy333 ( ( ("3''''''''(s   ;B 
B;"B60B;6B; &bad query field: ''z&&=z=&=z=aaz&=az=a&z=&abad query field: 'a'zb=abzb+=azb za=b=aza=+b=az b=az&b=azb&=abad query field: 'b'za=a+b&b=b+ca bb crC   rE   za=a+b&a=b+ab azx=1&y=2.0&z=2-3.%2b012.02-3.+0xyzzHbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=env400006r	964546263z130003.300038zen-US 0bb2e248638833d48cb7fed300000f1br<   bustomer)z1Hbc5161168c542333633315dee1182227:key_store_seqidcuyerexpirekidlobaleorder_idssviewzQgroup_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=BrowseBrowse313921005470custom)SUBMIT_assigned_to	_category_statusgroup_idsetc                 .    t          | t                    S )N)key)sortedrepr)seqs    r   normrn   a   s    #4    r   c                     d | D             S )Nc                     g | ]
}|d          S )r   r   .0ps     r   
<listcomp>zfirst_elts.<locals>.<listcomp>e   s    QAaDr   r   lists    r   
first_eltsrw   d   s    $r   c                     d | D             S )Nc                 :    g | ]}|d          |d         d          fS )r   r4   r   rq   s     r   rt   z%first_second_elts.<locals>.<listcomp>h   s(    ***QqT1Q47O***r   r   ru   s    r   first_second_eltsrz   g   s    **T****r   c                 l   d}t          |                     |                    }|                    d           t                              |||          }i }t          |                                          D ]9\  }}t          |t                    r|	                    |          p|j
        ||<   :|S )Nr0   r   )r=   environencoding)r   r6   seekr   FieldStoragedictitemsr    rv   getlistvalue)datar|   r}   
fake_stdinformresultkvs           r   
gen_resultr   j   s    HX..//JOOAz7XNNDFT

  "" G G1q$'';DLLOOFqwq		Mr   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	 e
j        e          d	             Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdddgdddZd Zd Zd Zd Zd Zd ZdS ) CgiTestsc                    t          t                              d                    }t                              d          dd}t                              ||          }dgdgdgdgd}|                     ||           d S )	Nlatin1558boundaryzCONTENT-LENGTH Add 1234   Testing 123.
r?   )submitidfiletitle)r   POSTDATAr6   BOUNDARYr   parse_multipartassertEqual)r   r=   r<   r   expecteds        r   test_parse_multipartzCgiTests.test_parse_multipartx   s    X__X..//#??844!&( ($$R--&ix./2$@ @*****r   c                     d}t          |                    d                    }dd                    d          i}t                              ||          }ddgi}|                     ||           d S )NzY--JfISa01
Content-Disposition: form-data; name="submit-name"

just a string

--JfISa01--
r   r   JfISa01submit-namezjust a string
)r   r6   r   r   r   )r   r   r=   r<   r   r   s         r   +test_parse_multipart_without_content_lengthz4CgiTests.test_parse_multipart_without_content_length   s{     X__X..//9++H556$$R--!$5#67*****r   c                    d}d}t          |                    d                    }|                    d          t          t          |                    d                              d}t                              ||dd          }d	d
gi}|                     ||           |                     d                    d          |d	         d                             dd                     d S )Nr   u]   --JfISa01
Content-Disposition: form-data; name="submit-name"
Content-Length: 3

☃
--JfISa01utf8r   r   asciisurrogateescape)r}   errorsr   u	   u   ☃r   )r   r6   r   r7   r   r   r   )r   r   r   r=   r<   r   r   s          r   %test_parse_multipart_invalid_encodingz.CgiTests.test_parse_multipart_invalid_encoding   s     X__V,,--#??844!$S)@)@%A%A!B!BD D$$Rw,= % ? ?!$8#9:***00.q188ARSS	U 	U 	U 	U 	Ur   c                    t                                           }|                     |           |                     dt	          |                     |                     t          |          t          |                                                     |j                             t          dd          d                     | 
                    |           d S )Nr   MockFieldStoragename
fieldvalue)r   r   assertFalseassertInrl   r   rv   keysappendr   
assertTruer   fss     r   test_fieldstorage_propertiesz%CgiTests.test_fieldstorage_properties   s    nd2hh///b4		??333
=z"4f==lKKLLLr   c                 $   |                      t          t          j        dddi           |                      t          t          j        dd           t                              ddi	          }|                      t          t          |           d S )
Nznot-a-file-objr-   PUTr|   foobarzcontent-type
text/plain)headers)assertRaises	TypeErrorr   r   boolr   s     r   test_fieldstorage_invalidz"CgiTests.test_fieldstorage_invalid   s    )S%57GEUV[D\ 	 	^ 	^ 	^)S%5ueDDD~l&CDD)T2.....r   c           	         t           D ]\  }}t          |d          }|                     ||dt          |          z             t          |d          }|                     ||dt          |          z             d|i}t                              |          }t          |t                    r5|                     t          |          t          |                     | 	                    |
                                |
                                           |                     |                    dd          d           |
                                D ]}||         }|                     ||           t          |          d	k    r*|                     |                    |          |           ]|                     |                    |          |d
                    d S )Nr,   zError parsing %s method GETr/   zError parsing %s method POSTr.   r   znonexistent fielddefaultr4   r   )parse_strict_test_casesr>   r   rl   r   r   r    r   r7   assertCountEqualr   getvaluer   )r   origexpectdr<   r   rj   
expect_vals           r   test_strictzCgiTests.test_strict   s   3 	J 	JLD&e$$AQ(ET

(RSSSf%%AQ(Fd(STTT!4(C!!#!..B&$'' J  Vc"gg666%%fkkmmRWWYY???   -@)!L!LiXXX!;;== J JC!'JMM#r***:**((S)9)9:FFFF((S)9)9:a=IIII/	J 	Jr   c                    ddgdgdfddgdgdgdfdt          d	          fd
t          d	          fdt          d          fdt          d	          fdt          d          fddgdgdfddddgifg	}|D ]\  }}d|i}t                              d|          }t          |t                    r|                                D ]}||         }|                     ||           t          |          dk    r*|                     |	                    |          |           ]|                     |	                    |          |d                    d S )Nz	x=1;y=2.0rK   rL   )rO   rP   zx=1;y=2.0;z=2-3.%2b0rM   rN   ;rA   z;;z=;arD   z;b=azb;=arF   za=a+b;b=b+crG   rH   rI   za=a+b;a=b+arC   rJ   r.   )	separatorr|   r4   r   )
r8   r   r   r    r   r   r   r7   r   r   )r   parse_semicolonr   r   r<   r   rj   r   s           r   test_separatorzCgiTests.test_separator   s   UG445#C5whZ%P%PQ*2334:3445J5667Z 5667Z 67785'889S5%.12

 , 
	J 
	JLD&!4(C!!C!==B&$'' J!;;== J JC!'JMM#r***:**((S)9)9:FFFF((S)9)9:a=IIII
	J 
	Jr   )categoryc                 |   t                               d           t                      t           _        t                               dd           t                               dd           |                     t           j                                        d           t          j        	                    t          j
                  rxd t           _        t          j
        t           _        t                               dd           |                     t           j                   t                               d           d S d S )NTestingz%szTesting initlog 1zTesting log 2z Testing initlog 1
Testing log 2
zTesting log 3zTesting log 4)r   logr   logfpinitlogr   r   ospathexistsdevnulllogfile
addCleanupcloselogr   s    r   test_logzCgiTests.test_log   s    	JJ	D-...o&&&++--/STTT7>>"*%% 	%CI*CKKKo...OOCL)))GGO$$$$$	% 	%r   c                     G d d          } |t          j        d                    }|                     |j                   |                    ddz             |                    d           ddi}t                              ||	          }|                     |j        j                   | 	                    |j
        d
           |                                 d S )Nc                   "    e Zd Zd ZddZd ZdS )=CgiTests.test_fieldstorage_readline.<locals>.TestReadlineFilec                 "    || _         d| _        d S )Nr   )r   numcalls)r   r   s     r   r   zFCgiTests.test_fieldstorage_readline.<locals>.TestReadlineFile.__init__   s     	 !r   Nc                     | xj         dz  c_         |r| j                            |          S | j                                        S )Nr4   )r   r   readline)r   sizes     r   r   zFCgiTests.test_fieldstorage_readline.<locals>.TestReadlineFile.readline   sD    " 09--d3339--///r   c                     | j         d         }t          ||          }t          |t                    st	          | ||           |S )Nr   )__dict__r(   r    intsetattr)r   r   r   rC   s       r   r*   zICgiTests.test_fieldstorage_readline.<locals>.TestReadlineFile.__getattr__  sF    }V,D$''!!S)) +D$***r   r   )r   r   r   r   r   r*   r   r   r   TestReadlineFiler      sF        " " "0 0 0 0    r   r   zwb+s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi   r   r-   r   r=   r|      )tempfileTemporaryFiler   closewriter~   r   r   r   assertGreaterr   )r   r   fr<   r   s        r   test_fieldstorage_readlinez#CgiTests.test_fieldstorage_readline   s    
	 	 	 	 	 	 	 	& X3E::;;   	
T!"""	q			&C00&&& 	1:q)))						r   c                 0   dd                     t                    dd}t          t                              d                    }t
                              ||d          }|                     t          |j	                  d           dd d	d
dd dd
dddd
dd dd
g}t          t          |j	                            D ]S}||                                         D ]6\  }}t          |j	        |         |          }|                     ||           7Td S )Nr/    multipart/form-data; boundary={}r   r-   r2   r3   r0   r|   r}      r   r   r   filenamer   r   r?   r   test.txtr   r   r   formatr   r   r   r6   r   r   r   r7   rv   ranger   r(   	r   r<   r=   r   r   rO   r   expgots	            r   test_fieldstorage_multipartz$CgiTests.test_fieldstorage_multipart  s6    %>EEhOO#% % X__Y//00b#	BBRWq)))4@@!dB?? ZARSS"tWEEG s27||$$ 	+ 	+A )//++ + +3bgaj!,,  c****+	+ 	+r   c                 6   dd                     t                    dd}t          dt                              d          z             }t
                              ||d          }|                     t          |j	                  d           d	d d
ddd dddddddd ddg}t          t          |j	                            D ]S}||                                         D ]6\  }}t          |j	        |         |          }|                     ||           7Td S )Nr/   r   560r   s   
r0   r   r   r   r   r   r   r?   r   r   r   r   r   r   r   s	            r   .test_fieldstorage_multipart_leading_whitespacez7CgiTests.test_fieldstorage_multipart_leading_whitespace(  s9   $>EEhOO#% % Wxy999::b#	BBRWq)))4@@!dB?? ZARSS"tWEEG s27||$$ 	+ 	+A )//++ + +3bgaj!,,  c****+	+ 	+r   c                    dd                     t                    dd}dD ]}t          t                              |                    }t
                              |||          }|                     t          |j	                  d           dd d	d
g}t          t          |j	                            D ]S}||                                         D ]6\  }}t          |j	        |         |          }	|                     |	|           7Td S )Nr/   r   r   r   )z
iso-8859-1zutf-8r   r4   r   u   çñr   )r   r   r   POSTDATA_NON_ASCIIr6   r   r   r   r7   rv   r   r   r(   )
r   r<   r}   r=   r   r   rO   r   r   r   s
             r   %test_fieldstorage_multipart_non_asciiz.CgiTests.test_fieldstorage_multipart_non_ascii;  s    &>EEhOO"$ $ / 	/ 	/H+228<<==B!!"c8!DDBS\\1---"t^LLMF3rw<<(( / /$Qioo// / /FAs!"'!*a00C$$S#....//	/ 	/r   c                      d}d  _          fd} |d|dz
  z              |d|dz
  z  dz               |d|dz
  z  dz   d|dz
  z  z              d S )Ni   c                     d                     dd          | z  }t          t          |                    ddd}                    t	          ||          d|                     d          i           d S )	Nzp---123
Content-Disposition: form-data; name="upload"; filename="fake.txt"
Content-Type: text/plain

%s
---123--

z
"multipart/form-data; boundary=-123r/   r3   r2   r-   uploadr   )replacer   r7   r   r   r6   )contentr   r|   r   s      r   checkz;CgiTests.test_fieldstorage_multipart_maxline.<locals>.checkN  s     GD&G$D %(D		NN$H$* G
 Zg66&x(@(@AC C C C Cr   rO   r4   rP   )maxDiff)r   maxliner  s   `  r   #test_fieldstorage_multipart_maxlinez,CgiTests.test_fieldstorage_multipart_maxlineJ  s    	C 	C 	C 	C 	C 	cWq[!"""cWq[!D()))cWq[!D(3'A++>>?????r   c                    dd                     t                    t          t          t                              d}t          t                              d                    }t                              ||d          }| 	                    t          |j
                  d           | 	                    |j
        d         j        d           | 	                    |j
        d         j        d	           | 	                    |j
        d
         j        d           |j
        d
         j        }| 	                    t          |          d           d dddd dddg}t          t          |                    D ]N}||                                         D ]1\  }}t          ||         |          }	| 	                    |	|           2Od S )Nr/   r   r   r0   r   r   r   r   Larryr4   filesz	file1.txts   ... contents of file1.txt ...r   z	file2.gifs   ...contents of file2.gif...)r   BOUNDARY_W3r   r7   POSTDATA_W3r   r6   r   r   r   rv   r   r   r   r   r(   )
r   r<   r=   r   r  r   rO   r   r   r   s
             r   test_fieldstorage_multipart_w3cz(CgiTests.test_fieldstorage_multipart_w3ca  s    %>EEkRR!#k"2"2335 5 [''	2233b#	BBRWq)))-888)7333'222
 UQ'''[Ccdd[Cabbds5zz"" 	+ 	+A )//++ + +3eAh**  c****+	+ 	+r   c                    d}d}dd                     |          t          t          |                    d}t          |                    d                    }t
                              ||d          }|                     t          |j                  d           |                     |j        d	         j	        d
           |                     |j        d	         j
        d           d S )Nr   z_--JfISa01
Content-Disposition: form-data; name="submit-name"
Content-Length: 5

Larry
--JfISa01r/   r   r   r0   r   r4   r   r   r  )r   r   r7   r   r6   r   r   r   rv   r   r   )r   r   r   r<   r=   r   s         r   %test_fieldstorage_part_content_lengthz.CgiTests.test_fieldstorage_part_content_lengthv  s     %>EEhOO!#h--002 2 X__Y//00b#	BBRWq)))-888)733333r   c                     t          d          }dd|d}t                              ||          }|                     t	          |d         j                                                  d           d S )Nsa   --MyBoundary
Content-Disposition: form-data; name="my-arg"; filename="foo"

Test

--MyBoundary--
r/   z(multipart/form-data; boundary=MyBoundary)r-   r2   z
wsgi.inputr   zmy-arg   )r   r   r   r   r7   r   read)r   r=   r<   fieldss       r   .test_field_storage_multipart_no_content_lengthz7CgiTests.test_field_storage_multipart_no_content_length  s        %F
 

 !!"c!22VH-27799::A>>>>>r   c                    t          d          }ddi}t                              ||          5 }|j                                        }|                     |j        j                   d d d            n# 1 swxY w Y   |                     |j        j                   |                     |d           | 	                    t          d          5  |j                                         d d d            d S # 1 swxY w Y   d S )Ns
   xxxxxxxxxxr-   r   r   
xxxxxxxxxxzI/O operation on closed file)r   r   r   r   r  r   closedr   r   assertRaisesRegexr8   )r   r=   r<   r   r  s        r   $test_fieldstorage_as_context_managerz-CgiTests.test_fieldstorage_as_context_manager  sc   Y'S11 	-RgllnnGRW^,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	'''(+++##J0NOO 	 	GLLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   9A55A9<A9C77C;>C;value1value2xvalue2yvalue3value4)key1key2key3key4c                     d}t          t          |                    dddd}t          ||          }|                     | j        |           d S )Nz$key2=value2x&key3=value3&key4=value4r1   zkey1=value1&key2=value2yr/   r3   r2   r.   r-   r   r7   r   r   
_qs_resultr   r   r|   r   s       r   testQSAndUrlEncodezCgiTests.testQSAndUrlEncode  sZ    5 #CII C : &	
 
 tW%%!,,,,,r   c                    d                     dgdz            }t          t          |                    ddd}|                     t                    5  t
                              t          |                                          |d           d d d            n# 1 swxY w Y   d	}t          t          |                    d
ddd}|                     t                    5  t
                              t          |                                          |d           d d d            n# 1 swxY w Y   t
                              t          |                                          |d           d S )Nr@   za=a   r1   r/   r  
   )r=   r|   max_num_fieldsz---123
Content-Disposition: form-data; name="a"

3
---123
Content-Type: application/x-www-form-urlencoded

a=4
---123
Content-Type: application/x-www-form-urlencoded

a=5
---123--
r  za=1&a=2r1  r   r  )	joinr   r7   r   r8   r   r   r   r6   )r   r   r|   s      r   test_max_num_fieldszCgiTests.test_max_num_fields  s   xx
##!#d))nn?$
 
 z** 	 	4;;==))!    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 !$CII D ) &	
 
 z** 	 	4;;==))     	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	t{{}}%% 	 	
 	
 	
 	
 	
s$   =BB!$B!%=D..D25D2c                     d}t          t          |                    dddd}t          ||          }|                     | j        |           d S )Nz---123
Content-Disposition: form-data; name="key2"

value2y
---123
Content-Disposition: form-data; name="key3"

value3
---123
Content-Disposition: form-data; name="key4"

value4
---123--
r  key1=value1&key2=value2xr/   r1  r2  r4  s       r   testQSAndFormDatazCgiTests.testQSAndFormData  s^     !$CII D : &	
 
 tW%%!,,,,,r   c                     d}t          t          |                    dddd}| j                                        }|                    ddi           t          ||          }|                     ||           d S )NaE  ---123
Content-Disposition: form-data; name="key2"

value2y
---123
Content-Disposition: form-data; name="key3"

value3
---123
Content-Disposition: form-data; name="key4"

value4
---123
Content-Disposition: form-data; name="upload"; filename="fake.txt"
Content-Type: text/plain

this is the content of the fake file

---123--
r  r=  r/   r1  r  s%   this is the content of the fake file
)r   r7   r3  copyupdater   r   )r   r   r|   r   r   s        r   testQSAndFormDataFilezCgiTests.testQSAndFormDataFile  s    * !$CII D : &	
 
 %%''?
 	 	 	 tW%%#####r   c                    |                      t                              d          di f           |                      t                              d          di f           |                      t                              d          dddif           |                      t                              d          dddif           |                      t                              d          ddd	d
f           |                      t                              d          dddif           |                      t                              d          dddif           |                      t                              d          ddddf           |                      t                              d          ddddf           d S )Nr   ztext/vnd.just.made.this.up ; ztext/vnd.just.made.this.upztext/plain;charset=us-asciicharsetzus-asciiztext/plain ; charset="us-ascii"z,text/plain ; charset="us-ascii"; another=optopt)rD  anotherz attachment; filename="silly.txt"
attachmentr   z	silly.txtz#attachment; filename="strange;name"zstrange;namez-attachment; filename="strange;name";size=123;123)r   r   z-form-data; name="files"; filename="fo\"o;bar"z	form-datar  zfo"o;bar)r   r   )r   r   parse_headerr   s    r   test_parse_headerzCgiTests.test_parse_header%  s   \**2	  	  	  	<==)2.	0 	0 	0 	:;;Iz23	5 	5 	5 	>??Iz23	5 	5 	5 	KLLzeDDE	G 	G 	G 	?@@J45	7 	7 	7 	BCCJ78	: 	: 	: 	LMMFFG	I 	I 	I 	MNN7
CCD	F 	F 	F 	F 	Fr   c                 F    h d}t          j        | t          |           d S )N>	   r   dologr   nologmaxlenr   r   r   valid_boundary)not_exported)r   check__all__r   )r   rP  s     r   test_allzCgiTests.test_allB  s3    ( ( ( 	T3\BBBBBBr   N)r   r   r   r   r   r   r   r   r   r   r   ignore_warningsDeprecationWarningr   r   r  r  r  r  r  r  r!  r&  r3  r5  r;  r>  rB  rJ  rR  r   r   r   r   r   v   s       + + ++ + +U U U$  / / /J J J4J J J0 %_$.@AAA% % BA%# # #J+ + +$+ + +&/ / /@ @ @.+ + +*4 4 4$? ? ?"	 	 	 I&	 J	- 	- 	-4
 4
 4
l- - -0 $  $  $DF F F:C C C C Cr   r   z6---------------------------721837373350705526688164684a  -----------------------------721837373350705526688164684
Content-Disposition: form-data; name="id"

1234
-----------------------------721837373350705526688164684
Content-Disposition: form-data; name="title"


-----------------------------721837373350705526688164684
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain

Testing 123.

-----------------------------721837373350705526688164684
Content-Disposition: form-data; name="submit"

 Add 
-----------------------------721837373350705526688164684--
u   -----------------------------721837373350705526688164684
Content-Disposition: form-data; name="id"

çñ
-----------------------------721837373350705526688164684
AaB03xa  --AaB03x
Content-Disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-Disposition: form-data; name="files"
Content-Type: multipart/mixed; boundary=BbC04y

--BbC04y
Content-Disposition: file; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--BbC04y
Content-Disposition: file; filename="file2.gif"
Content-Type: image/gif
Content-Transfer-Encoding: binary

...contents of file2.gif...
--BbC04y--
--AaB03x--
__main__)!r   r   r   unittestcollectionsr   ior   r   testr   test.supportr   import_deprecatedr   r
   r   r>   r8   r   rn   rw   rz   r   TestCaser   r   r   r  r  r  r   mainr   r   r   <module>r_     sY   				 



   " " " " " "                       ( ( ( ( ( ('o'..        /

' ' ' ' ' ' ' ' ( ( (& H***
+
+,	::+,,-"I
BK	B;
JJ,--.
JJ,--.
JJ-../
S3%LdSE]sUGnfXZZ-../ZZ.//05'001S5%.)*C5whZHHI w<D:u	56Gl 		 Y
i7(Z 	A( T! ! !     + + +
 
 
PC PC PC PC PCx  PC PC PCf D*  . zHMOOOOO r   