3
3
import asyncio
4
4
import re
5
5
from asyncio import Task
6
- from functools import partial
7
6
from typing import Annotated , Any
8
7
9
8
from pydantic import BaseModel , Field , TypeAdapter
@@ -121,13 +120,15 @@ async def _fetch_requests_from_url(
121
120
"""
122
121
created_requests : list [Request ] = []
123
122
124
- def create_requests_from_response (request_input : _RequestsFromUrlInput , task : Task ) -> None :
123
+ async def create_requests_from_response (request_input : _RequestsFromUrlInput , task : Task ) -> None :
125
124
"""Extract links from response body and use them to create `Request` objects.
126
125
127
126
Use the regular expression to find all matching links in the response body, then create `Request`
128
127
objects from these links and the provided input attributes.
129
128
"""
130
- matches = re .finditer (URL_NO_COMMAS_REGEX , task .result ().read ().decode ('utf-8' ))
129
+ response = await (task .result ()).read ()
130
+ matches = re .finditer (URL_NO_COMMAS_REGEX , response .decode ('utf-8' ))
131
+
131
132
created_requests .extend (
132
133
[
133
134
Request .from_url (
@@ -150,7 +151,11 @@ def create_requests_from_response(request_input: _RequestsFromUrlInput, task: Ta
150
151
)
151
152
)
152
153
153
- get_response_task .add_done_callback (partial (create_requests_from_response , remote_url_requests_input ))
154
+ get_response_task .add_done_callback (
155
+ lambda task , inp = remote_url_requests_input : asyncio .create_task ( # type: ignore[misc]
156
+ create_requests_from_response (inp , task )
157
+ )
158
+ )
154
159
remote_url_requests .append (get_response_task )
155
160
156
161
await asyncio .gather (* remote_url_requests )
0 commit comments