5
5
import logging
6
6
from asyncio import Task
7
7
from collections import Counter
8
+ from functools import partial
8
9
from typing import Coroutine
9
10
10
11
import httpx
@@ -53,29 +54,6 @@ async def example():
53
54
assert hook .api_successful_responses .get (operation_id ) is None
54
55
55
56
56
- def test_unit_prepare_request_payload ():
57
- """Test prepare request payload method properly sets split_pdf_page to 'false'
58
- and removes files key."""
59
- test_form_data = {
60
- "files" : ("test_file.pdf" , b"test_file_content" ),
61
- "split_pdf_page" : "true" ,
62
- "parameter_1" : "value_1" ,
63
- "parameter_2" : "value_2" ,
64
- "parameter_3" : "value_3" ,
65
- }
66
- expected_form_data = {
67
- "split_pdf_page" : "false" ,
68
- "parameter_1" : "value_1" ,
69
- "parameter_2" : "value_2" ,
70
- "parameter_3" : "value_3" ,
71
- }
72
-
73
- payload = request_utils .prepare_request_payload (test_form_data )
74
-
75
- assert payload != test_form_data
76
- assert payload , expected_form_data
77
-
78
-
79
57
def test_unit_prepare_request_headers ():
80
58
"""Test prepare request headers method properly removes Content-Type and Content-Length headers."""
81
59
test_headers = {
@@ -224,61 +202,31 @@ def test_unit_parse_form_data_none_filename_error():
224
202
form_utils .parse_form_data (decoded_data )
225
203
226
204
227
- def test_unit_is_pdf_valid_pdf ():
228
- """Test is pdf method returns True for valid pdf file with filename."""
205
+ def test_unit_is_pdf_valid_pdf_when_passing_file_object ():
206
+ """Test is pdf method returns pdf object for valid pdf file with filename."""
229
207
filename = "_sample_docs/layout-parser-paper-fast.pdf"
230
208
231
209
with open (filename , "rb" ) as f :
232
- file = shared .Files (
233
- content = f .read (),
234
- file_name = filename ,
235
- )
236
-
237
- result = pdf_utils .is_pdf (file )
210
+ result = pdf_utils .read_pdf (f )
238
211
239
- assert result is True
212
+ assert result is not None
240
213
241
214
242
- def test_unit_is_pdf_valid_pdf_without_file_extension ():
243
- """Test is pdf method returns True for file with valid pdf content without basing on file extension. """
215
+ def test_unit_is_pdf_valid_pdf_when_passing_binary_content ():
216
+ """Test is pdf method returns pdf object for file with valid pdf content"""
244
217
filename = "_sample_docs/layout-parser-paper-fast.pdf"
245
218
246
219
with open (filename , "rb" ) as f :
247
- file = shared .Files (
248
- content = f .read (),
249
- file_name = "uuid1234" ,
250
- )
251
-
252
- result = pdf_utils .is_pdf (file )
253
-
254
- assert result is True
255
-
256
-
257
- def test_unit_is_pdf_invalid_extension ():
258
- """Test is pdf method returns False for file with invalid extension."""
259
- file = shared .Files (content = b"txt_content" , file_name = "test_file.txt" )
260
-
261
- result = pdf_utils .is_pdf (file )
220
+ result = pdf_utils .read_pdf (f .read ())
262
221
263
- assert result is False
222
+ assert result is not None
264
223
265
224
266
225
def test_unit_is_pdf_invalid_pdf ():
267
- """Test is pdf method returns False for file with invalid pdf content."""
268
- file = shared .Files (content = b"invalid_pdf_content" , file_name = "test_file.pdf" )
269
-
270
- result = pdf_utils .is_pdf (file )
271
-
272
- assert result is False
273
-
274
-
275
- def test_unit_is_pdf_invalid_pdf_without_file_extension ():
276
- """Test is pdf method returns False for file with invalid pdf content without basing on file extension."""
277
- file = shared .Files (content = b"invalid_pdf_content" , file_name = "uuid1234" )
278
-
279
- result = pdf_utils .is_pdf (file )
226
+ """Test is pdf method returns False for file with invalid extension."""
227
+ result = pdf_utils .read_pdf (b"txt_content" )
280
228
281
- assert result is False
229
+ assert result is None
282
230
283
231
284
232
def test_unit_get_starting_page_number_missing_key ():
@@ -388,7 +336,10 @@ def test_unit_get_page_range_returns_valid_range(page_range, expected_result):
388
336
assert result == expected_result
389
337
390
338
391
- async def _request_mock (fails : bool , content : str ) -> requests .Response :
339
+ async def _request_mock (
340
+ async_client : httpx .AsyncClient , # not used by mock
341
+ fails : bool ,
342
+ content : str ) -> requests .Response :
392
343
response = requests .Response ()
393
344
response .status_code = 500 if fails else 200
394
345
response ._content = content .encode ()
@@ -399,40 +350,40 @@ async def _request_mock(fails: bool, content: str) -> requests.Response:
399
350
("allow_failed" , "tasks" , "expected_responses" ), [
400
351
pytest .param (
401
352
True , [
402
- _request_mock ( fails = False , content = "1" ),
403
- _request_mock ( fails = False , content = "2" ),
404
- _request_mock ( fails = False , content = "3" ),
405
- _request_mock ( fails = False , content = "4" ),
353
+ partial ( _request_mock , fails = False , content = "1" ),
354
+ partial ( _request_mock , fails = False , content = "2" ),
355
+ partial ( _request_mock , fails = False , content = "3" ),
356
+ partial ( _request_mock , fails = False , content = "4" ),
406
357
],
407
358
["1" , "2" , "3" , "4" ],
408
359
id = "no failures, fails allower"
409
360
),
410
361
pytest .param (
411
362
True , [
412
- _request_mock ( fails = False , content = "1" ),
413
- _request_mock ( fails = True , content = "2" ),
414
- _request_mock ( fails = False , content = "3" ),
415
- _request_mock ( fails = True , content = "4" ),
363
+ partial ( _request_mock , fails = False , content = "1" ),
364
+ partial ( _request_mock , fails = True , content = "2" ),
365
+ partial ( _request_mock , fails = False , content = "3" ),
366
+ partial ( _request_mock , fails = True , content = "4" ),
416
367
],
417
368
["1" , "2" , "3" , "4" ],
418
369
id = "failures, fails allowed"
419
370
),
420
371
pytest .param (
421
372
False , [
422
- _request_mock ( fails = True , content = "failure" ),
423
- _request_mock ( fails = False , content = "2" ),
424
- _request_mock ( fails = True , content = "failure" ),
425
- _request_mock ( fails = False , content = "4" ),
373
+ partial ( _request_mock , fails = True , content = "failure" ),
374
+ partial ( _request_mock , fails = False , content = "2" ),
375
+ partial ( _request_mock , fails = True , content = "failure" ),
376
+ partial ( _request_mock , fails = False , content = "4" ),
426
377
],
427
378
["failure" ],
428
379
id = "failures, fails disallowed"
429
380
),
430
381
pytest .param (
431
382
False , [
432
- _request_mock ( fails = False , content = "1" ),
433
- _request_mock ( fails = False , content = "2" ),
434
- _request_mock ( fails = False , content = "3" ),
435
- _request_mock ( fails = False , content = "4" ),
383
+ partial ( _request_mock , fails = False , content = "1" ),
384
+ partial ( _request_mock , fails = False , content = "2" ),
385
+ partial ( _request_mock , fails = False , content = "3" ),
386
+ partial ( _request_mock , fails = False , content = "4" ),
436
387
],
437
388
["1" , "2" , "3" , "4" ],
438
389
id = "no failures, fails disallowed"
@@ -451,14 +402,18 @@ async def test_unit_disallow_failed_coroutines(
451
402
assert response_contents == expected_responses
452
403
453
404
454
- async def _fetch_canceller_error (fails : bool , content : str , cancelled_counter : Counter ):
405
+ async def _fetch_canceller_error (
406
+ async_client : httpx .AsyncClient , # not used by mock
407
+ fails : bool ,
408
+ content : str ,
409
+ cancelled_counter : Counter ):
455
410
try :
456
411
if not fails :
457
412
await asyncio .sleep (0.01 )
458
413
print ("Doesn't fail" )
459
414
else :
460
415
print ("Fails" )
461
- return await _request_mock (fails = fails , content = content )
416
+ return await _request_mock (async_client = async_client , fails = fails , content = content )
462
417
except asyncio .CancelledError :
463
418
cancelled_counter .update (["cancelled" ])
464
419
print (cancelled_counter ["cancelled" ])
@@ -469,8 +424,8 @@ async def _fetch_canceller_error(fails: bool, content: str, cancelled_counter: C
469
424
async def test_remaining_tasks_cancelled_when_fails_disallowed ():
470
425
cancelled_counter = Counter ()
471
426
tasks = [
472
- _fetch_canceller_error ( fails = True , content = "1" , cancelled_counter = cancelled_counter ),
473
- * [_fetch_canceller_error ( fails = False , content = f"{ i } " , cancelled_counter = cancelled_counter )
427
+ partial ( _fetch_canceller_error , fails = True , content = "1" , cancelled_counter = cancelled_counter ),
428
+ * [partial ( _fetch_canceller_error , fails = False , content = f"{ i } " , cancelled_counter = cancelled_counter )
474
429
for i in range (2 , 200 )],
475
430
]
476
431
0 commit comments