|
19 | 19 | MutableMapping, |
20 | 20 | Optional, |
21 | 21 | Pattern, |
22 | | - Set, |
23 | 22 | Tuple, |
24 | 23 | Union, |
25 | 24 | cast, |
|
50 | 49 | reify, |
51 | 50 | sentinel, |
52 | 51 | set_exception, |
53 | | - set_result, |
54 | 52 | ) |
55 | 53 | from .http_parser import RawRequestMessage |
56 | 54 | from .http_writer import HttpVersion |
@@ -146,7 +144,6 @@ class BaseRequest(MutableMapping[str, Any], HeadersMixin): |
146 | 144 | "_loop", |
147 | 145 | "_transport_sslcontext", |
148 | 146 | "_transport_peername", |
149 | | - "_disconnection_waiters", |
150 | 147 | ] |
151 | 148 | ) |
152 | 149 |
|
@@ -194,7 +191,6 @@ def __init__( |
194 | 191 | self._task = task |
195 | 192 | self._client_max_size = client_max_size |
196 | 193 | self._loop = loop |
197 | | - self._disconnection_waiters: Set[asyncio.Future[None]] = set() |
198 | 194 |
|
199 | 195 | transport = self._protocol.transport |
200 | 196 | assert transport is not None |
@@ -823,21 +819,18 @@ async def _prepare_hook(self, response: StreamResponse) -> None: |
823 | 819 |
|
824 | 820 | def _cancel(self, exc: BaseException) -> None: |
825 | 821 | set_exception(self._payload, exc) |
826 | | - for fut in self._disconnection_waiters: |
827 | | - set_result(fut, None) |
828 | 822 |
|
829 | 823 | def _finish(self) -> None: |
830 | | - for fut in self._disconnection_waiters: |
831 | | - fut.cancel() |
832 | | - |
833 | | - async def wait_for_disconnection(self) -> None: |
834 | | - loop = asyncio.get_event_loop() |
835 | | - fut = loop.create_future() # type: asyncio.Future[None] |
836 | | - self._disconnection_waiters.add(fut) |
837 | | - try: |
838 | | - await fut |
839 | | - finally: |
840 | | - self._disconnection_waiters.remove(fut) |
| 824 | + if self._post is None or self.content_type != "multipart/form-data": |
| 825 | + return |
| 826 | + |
| 827 | + # NOTE: Release file descriptors for the |
| 828 | + # NOTE: `tempfile.Temporaryfile`-created `_io.BufferedRandom` |
| 829 | + # NOTE: instances of files sent within multipart request body |
| 830 | + # NOTE: via HTTP POST request. |
| 831 | + for file_name, file_field_object in self._post.items(): |
| 832 | + if isinstance(file_field_object, FileField): |
| 833 | + file_field_object.file.close() |
841 | 834 |
|
842 | 835 |
|
843 | 836 | class Request(BaseRequest): |
|
0 commit comments