Browse Source

♻️ Simplify reading files in memory, do it sequentially instead of (fake) parallel

pull/14884/head
Sebastián Ramírez 5 months ago
parent
commit
e6f56e9fc4
  1. 15
      fastapi/dependencies/utils.py

15
fastapi/dependencies/utils.py

@ -1,7 +1,7 @@
import dataclasses import dataclasses
import inspect import inspect
import sys import sys
from collections.abc import Coroutine, Mapping, Sequence from collections.abc import Mapping, Sequence
from contextlib import AsyncExitStack, contextmanager from contextlib import AsyncExitStack, contextmanager
from copy import copy, deepcopy from copy import copy, deepcopy
from dataclasses import dataclass from dataclasses import dataclass
@ -15,7 +15,6 @@ from typing import (
cast, cast,
) )
import anyio
from fastapi import params from fastapi import params
from fastapi._compat import ( from fastapi._compat import (
ModelField, ModelField,
@ -903,16 +902,8 @@ async def _extract_form_body(
# For types # For types
assert isinstance(value, sequence_types) assert isinstance(value, sequence_types)
results: list[Union[bytes, str]] = [] results: list[Union[bytes, str]] = []
for sub_value in value:
async def process_fn( results.append(await sub_value.read())
fn: Callable[[], Coroutine[Any, Any, Any]],
) -> None:
result = await fn()
results.append(result) # noqa: B023
async with anyio.create_task_group() as tg:
for sub_value in value:
tg.start_soon(process_fn, sub_value.read)
value = serialize_sequence_value(field=field, value=results) value = serialize_sequence_value(field=field, value=results)
if value is not None: if value is not None:
values[get_validation_alias(field)] = value values[get_validation_alias(field)] = value

Loading…
Cancel
Save