| 298 | context = None |
| 299 | |
| 300 | async def receive() -> Message: |
| 301 | nonlocal request_complete |
| 302 | |
| 303 | if request_complete: |
| 304 | if not response_complete.is_set(): |
| 305 | await response_complete.wait() |
| 306 | return {class="st">"type": class="st">"http.disconnect"} |
| 307 | |
| 308 | body = request.read() |
| 309 | if isinstance(body, str): |
| 310 | body_bytes: bytes = body.encode(class="st">"utf-8") class="cm"># pragma: no cover |
| 311 | elif body is None: |
| 312 | body_bytes = bclass="st">"" class="cm"># pragma: no cover |
| 313 | elif isinstance(body, GeneratorType): |
| 314 | try: class="cm"># pragma: no cover |
| 315 | chunk = body.send(None) |
| 316 | if isinstance(chunk, str): |
| 317 | chunk = chunk.encode(class="st">"utf-8") |
| 318 | return {class="st">"type": class="st">"http.request", class="st">"body": chunk, class="st">"more_body": True} |
| 319 | except StopIteration: class="cm"># pragma: no cover |
| 320 | request_complete = True |
| 321 | return {class="st">"type": class="st">"http.request", class="st">"body": bclass="st">""} |
| 322 | else: |
| 323 | body_bytes = body |
| 324 | |
| 325 | request_complete = True |
| 326 | return {class="st">"type": class="st">"http.request", class="st">"body": body_bytes} |
| 327 | |
| 328 | async def send(message: Message) -> None: |
| 329 | nonlocal raw_kwargs, response_started, template, context |