@@ -27,6 +27,9 @@ def __init__(self, form_data_list: List[Tuple[str, Union[str, UploadFile]]]):
27
27
@asynccontextmanager
28
28
async def form (self ):
29
29
yield self ._form_data
30
+ for value in self ._form_data .values ():
31
+ if isinstance (value , UploadFile ):
32
+ value .file .close ()
30
33
31
34
32
35
def test_simple_form_fields ():
@@ -94,9 +97,9 @@ async def test_simple_form_submit():
94
97
95
98
request = FakeRequest ([('name' , 'bar' ), ('size' , '123' )])
96
99
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 }
100
103
101
104
102
105
async def test_simple_form_submit_repeat ():
@@ -105,7 +108,8 @@ async def test_simple_form_submit_repeat():
105
108
request = FakeRequest ([('name' , 'bar' ), ('size' , '123' ), ('size' , '456' )])
106
109
107
110
with pytest .raises (HTTPException ) as exc_info :
108
- await form_dep .dependency (request )
111
+ async with form_dep .dependency (request ):
112
+ pass
109
113
110
114
# insert_assert(exc_info.value.detail)
111
115
assert exc_info .value .detail == {
@@ -156,9 +160,9 @@ async def test_w_nested_form_submit():
156
160
157
161
request = FakeRequest ([('name' , 'bar' ), ('nested.x' , '123' )])
158
162
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 }}
162
166
163
167
164
168
class FormWithFile (BaseModel ):
@@ -190,8 +194,9 @@ async def test_file_submit():
190
194
file = UploadFile (BytesIO (b'foobar' ), size = 6 , filename = 'testing.txt' )
191
195
request = FakeRequest ([('profile_pic' , file )])
192
196
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
195
200
196
201
197
202
async def test_file_submit_repeat ():
@@ -200,7 +205,8 @@ async def test_file_submit_repeat():
200
205
request = FakeRequest ([('profile_pic' , file1 ), ('profile_pic' , file2 )])
201
206
202
207
with pytest .raises (HTTPException ) as exc_info :
203
- await fastui_form (FormWithFile ).dependency (request )
208
+ async with fastui_form (FormWithFile ).dependency (request ):
209
+ pass
204
210
205
211
# insert_assert(exc_info.value.detail)
206
212
assert exc_info .value .detail == {
@@ -239,16 +245,18 @@ async def test_file_constrained_submit():
239
245
file = UploadFile (BytesIO (b'foobar' ), size = 16_000 , headers = headers )
240
246
request = FakeRequest ([('profile_pic' , file )])
241
247
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
244
251
245
252
246
253
async def test_file_constrained_submit_filename ():
247
254
file = UploadFile (BytesIO (b'foobar' ), size = 16_000 , filename = 'image.png' )
248
255
request = FakeRequest ([('profile_pic' , file )])
249
256
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
252
260
253
261
254
262
async def test_file_constrained_submit_too_big ():
@@ -257,7 +265,8 @@ async def test_file_constrained_submit_too_big():
257
265
request = FakeRequest ([('profile_pic' , file )])
258
266
259
267
with pytest .raises (HTTPException ) as exc_info :
260
- await fastui_form (FormWithFileConstraint ).dependency (request )
268
+ async with fastui_form (FormWithFileConstraint ).dependency (request ):
269
+ pass
261
270
262
271
# insert_assert(exc_info.value.detail)
263
272
assert exc_info .value .detail == {
@@ -277,7 +286,8 @@ async def test_file_constrained_submit_wrong_type():
277
286
request = FakeRequest ([('profile_pic' , file )])
278
287
279
288
with pytest .raises (HTTPException ) as exc_info :
280
- await fastui_form (FormWithFileConstraint ).dependency (request )
289
+ async with fastui_form (FormWithFileConstraint ).dependency (request ):
290
+ pass
281
291
282
292
# insert_assert(exc_info.value.detail)
283
293
assert exc_info .value .detail == {
@@ -323,17 +333,20 @@ async def test_multiple_files_single():
323
333
file = UploadFile (BytesIO (b'foobar' ), size = 16_000 , filename = 'image.png' )
324
334
request = FakeRequest ([('files' , file )])
325
335
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
328
339
329
340
330
341
async def test_multiple_files_multiple ():
331
342
file1 = UploadFile (BytesIO (b'foobar' ), size = 6 , filename = 'image1.png' )
332
343
file2 = UploadFile (BytesIO (b'foobar' ), size = 6 , filename = 'image2.png' )
333
344
request = FakeRequest ([('files' , file1 ), ('files' , file2 )])
334
345
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
337
350
338
351
339
352
class FixedTuple (BaseModel ):
@@ -379,8 +392,8 @@ def test_fixed_tuple():
379
392
async def test_fixed_tuple_submit ():
380
393
request = FakeRequest ([('foo.0' , 'bar' ), ('foo.1' , '123' ), ('foo.2' , '456' )])
381
394
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 )}
384
397
385
398
386
399
class NestedTuple (BaseModel ):
@@ -426,8 +439,8 @@ def test_fixed_tuple_nested():
426
439
async def test_fixed_tuple_nested_submit ():
427
440
request = FakeRequest ([('bar.foo.0' , 'bar' ), ('bar.foo.1' , '123' ), ('bar.foo.2' , '456' )])
428
441
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 )}}
431
444
432
445
433
446
def test_variable_tuple ():
0 commit comments