@@ -27,6 +27,9 @@ def __init__(self, form_data_list: List[Tuple[str, Union[str, UploadFile]]]):
2727 @asynccontextmanager
2828 async def form (self ):
2929 yield self ._form_data
30+ for value in self ._form_data .values ():
31+ if isinstance (value , UploadFile ):
32+ value .file .close ()
3033
3134
3235def test_simple_form_fields ():
@@ -94,9 +97,9 @@ async def test_simple_form_submit():
9497
9598 request = FakeRequest ([('name' , 'bar' ), ('size' , '123' )])
9699
97- m = await form_dep .dependency (request )
98- assert isinstance (m , SimpleForm )
99- assert m .model_dump () == {'name' : 'bar' , 'size' : 123 }
100+ async with form_dep .dependency (request ) as m :
101+ assert isinstance (m , SimpleForm )
102+ assert m .model_dump () == {'name' : 'bar' , 'size' : 123 }
100103
101104
102105async def test_simple_form_submit_repeat ():
@@ -105,7 +108,8 @@ async def test_simple_form_submit_repeat():
105108 request = FakeRequest ([('name' , 'bar' ), ('size' , '123' ), ('size' , '456' )])
106109
107110 with pytest .raises (HTTPException ) as exc_info :
108- await form_dep .dependency (request )
111+ async with form_dep .dependency (request ):
112+ pass
109113
110114 # insert_assert(exc_info.value.detail)
111115 assert exc_info .value .detail == {
@@ -156,9 +160,9 @@ async def test_w_nested_form_submit():
156160
157161 request = FakeRequest ([('name' , 'bar' ), ('nested.x' , '123' )])
158162
159- m = await form_dep .dependency (request )
160- assert isinstance (m , FormWithNested )
161- assert m .model_dump () == {'name' : 'bar' , 'nested' : {'x' : 123 }}
163+ async with form_dep .dependency (request ) as m :
164+ assert isinstance (m , FormWithNested )
165+ assert m .model_dump () == {'name' : 'bar' , 'nested' : {'x' : 123 }}
162166
163167
164168class FormWithFile (BaseModel ):
@@ -190,8 +194,9 @@ async def test_file_submit():
190194 file = UploadFile (BytesIO (b'foobar' ), size = 6 , filename = 'testing.txt' )
191195 request = FakeRequest ([('profile_pic' , file )])
192196
193- m = await fastui_form (FormWithFile ).dependency (request )
194- assert m .model_dump () == {'profile_pic' : file }
197+ async with fastui_form (FormWithFile ).dependency (request ) as m :
198+ assert m .model_dump () == {'profile_pic' : file }
199+ assert not m .profile_pic .file .closed
195200
196201
197202async def test_file_submit_repeat ():
@@ -200,7 +205,8 @@ async def test_file_submit_repeat():
200205 request = FakeRequest ([('profile_pic' , file1 ), ('profile_pic' , file2 )])
201206
202207 with pytest .raises (HTTPException ) as exc_info :
203- await fastui_form (FormWithFile ).dependency (request )
208+ async with fastui_form (FormWithFile ).dependency (request ):
209+ pass
204210
205211 # insert_assert(exc_info.value.detail)
206212 assert exc_info .value .detail == {
@@ -239,16 +245,18 @@ async def test_file_constrained_submit():
239245 file = UploadFile (BytesIO (b'foobar' ), size = 16_000 , headers = headers )
240246 request = FakeRequest ([('profile_pic' , file )])
241247
242- m = await fastui_form (FormWithFileConstraint ).dependency (request )
243- assert m .model_dump () == {'profile_pic' : file }
248+ async with fastui_form (FormWithFileConstraint ).dependency (request ) as m :
249+ assert m .model_dump () == {'profile_pic' : file }
250+ assert not m .profile_pic .file .closed
244251
245252
246253async def test_file_constrained_submit_filename ():
247254 file = UploadFile (BytesIO (b'foobar' ), size = 16_000 , filename = 'image.png' )
248255 request = FakeRequest ([('profile_pic' , file )])
249256
250- m = await fastui_form (FormWithFileConstraint ).dependency (request )
251- assert m .model_dump () == {'profile_pic' : file }
257+ async with fastui_form (FormWithFileConstraint ).dependency (request ) as m :
258+ assert m .model_dump () == {'profile_pic' : file }
259+ assert not m .profile_pic .file .closed
252260
253261
254262async def test_file_constrained_submit_too_big ():
@@ -257,7 +265,8 @@ async def test_file_constrained_submit_too_big():
257265 request = FakeRequest ([('profile_pic' , file )])
258266
259267 with pytest .raises (HTTPException ) as exc_info :
260- await fastui_form (FormWithFileConstraint ).dependency (request )
268+ async with fastui_form (FormWithFileConstraint ).dependency (request ):
269+ pass
261270
262271 # insert_assert(exc_info.value.detail)
263272 assert exc_info .value .detail == {
@@ -277,7 +286,8 @@ async def test_file_constrained_submit_wrong_type():
277286 request = FakeRequest ([('profile_pic' , file )])
278287
279288 with pytest .raises (HTTPException ) as exc_info :
280- await fastui_form (FormWithFileConstraint ).dependency (request )
289+ async with fastui_form (FormWithFileConstraint ).dependency (request ):
290+ pass
281291
282292 # insert_assert(exc_info.value.detail)
283293 assert exc_info .value .detail == {
@@ -323,17 +333,20 @@ async def test_multiple_files_single():
323333 file = UploadFile (BytesIO (b'foobar' ), size = 16_000 , filename = 'image.png' )
324334 request = FakeRequest ([('files' , file )])
325335
326- m = await fastui_form (FormMultipleFiles ).dependency (request )
327- assert m .model_dump () == {'files' : [file ]}
336+ async with fastui_form (FormMultipleFiles ).dependency (request ) as m :
337+ assert m .model_dump () == {'files' : [file ]}
338+ assert not m .files [0 ].file .closed
328339
329340
330341async def test_multiple_files_multiple ():
331342 file1 = UploadFile (BytesIO (b'foobar' ), size = 6 , filename = 'image1.png' )
332343 file2 = UploadFile (BytesIO (b'foobar' ), size = 6 , filename = 'image2.png' )
333344 request = FakeRequest ([('files' , file1 ), ('files' , file2 )])
334345
335- m = await fastui_form (FormMultipleFiles ).dependency (request )
336- assert m .model_dump () == {'files' : [file1 , file2 ]}
346+ async with fastui_form (FormMultipleFiles ).dependency (request ) as m :
347+ assert m .model_dump () == {'files' : [file1 , file2 ]}
348+ assert not m .files [0 ].file .closed
349+ assert not m .files [1 ].file .closed
337350
338351
339352class FixedTuple (BaseModel ):
@@ -379,8 +392,8 @@ def test_fixed_tuple():
379392async def test_fixed_tuple_submit ():
380393 request = FakeRequest ([('foo.0' , 'bar' ), ('foo.1' , '123' ), ('foo.2' , '456' )])
381394
382- m = await fastui_form (FixedTuple ).dependency (request )
383- assert m .model_dump () == {'foo' : ('bar' , 123 , 456 )}
395+ async with fastui_form (FixedTuple ).dependency (request ) as m :
396+ assert m .model_dump () == {'foo' : ('bar' , 123 , 456 )}
384397
385398
386399class NestedTuple (BaseModel ):
@@ -426,8 +439,8 @@ def test_fixed_tuple_nested():
426439async def test_fixed_tuple_nested_submit ():
427440 request = FakeRequest ([('bar.foo.0' , 'bar' ), ('bar.foo.1' , '123' ), ('bar.foo.2' , '456' )])
428441
429- m = await fastui_form (NestedTuple ).dependency (request )
430- assert m .model_dump () == {'bar' : {'foo' : ('bar' , 123 , 456 )}}
442+ async with fastui_form (NestedTuple ).dependency (request ) as m :
443+ assert m .model_dump () == {'bar' : {'foo' : ('bar' , 123 , 456 )}}
431444
432445
433446def test_variable_tuple ():
0 commit comments