Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ e.g. running other server processes or multithreaded applications as each route

![httpout](https://raw.githubusercontent.com/nggit/httpout/main/examples/static/hello.gif)

## Install
## Installation
```
python3 -m pip install --upgrade httpout
```
Expand Down Expand Up @@ -59,8 +59,6 @@ This is an overview of how to view request methods and read form data.

```python
# form.py
import sys

from httpout import wait, request, response


Expand All @@ -71,7 +69,7 @@ method_bytes = request.method
if method_str != 'POST':
response.set_status(405, 'Method Not Allowed')
print('Method Not Allowed')
sys.exit()
exit()


# we can't use await outside the async context
Expand All @@ -84,8 +82,6 @@ print(method_str, method_bytes, form_data)
It can also be written this way:
```python
# form.py
import sys

from httpout import run, request, response


Expand All @@ -96,7 +92,7 @@ method_bytes = request.method
if method_str != 'POST':
response.set_status(405, 'Method Not Allowed')
print('Method Not Allowed')
sys.exit()
exit()


async def main():
Expand Down
12 changes: 11 additions & 1 deletion httpout/response.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,17 @@
class HTTPResponse:
def __init__(self, response):
self.response = response
self.protocol = response.request.protocol
self.loop = response.request.protocol.loop
self.logger = response.request.protocol.logger
self.tasks = set()

def __getattr__(self, name):
return getattr(self.response, name)

@property
def protocol(self): # don't cache request.protocol
return self.response.request.protocol

def create_task(self, coro):
task = self.loop.create_task(coro)

Expand All @@ -29,6 +32,13 @@ async def join(self):
await self.tasks.pop()

async def handle_exception(self, exc):
if self.protocol is None or self.protocol.transport is None:
return

if self.protocol.transport.is_closing(): # maybe stuck?
self.protocol.transport.abort()
return

if self.response.request.upgraded:
await self.response.handle_exception(exc)
else:
Expand Down
Loading