Fast HTTP Server/Client microframework for Python asyncio
Project description
BlackSheep
HTTP Server/Client microframework for Python asyncio, using Cython,
uvloop
, and
httptools
.
pip install blacksheep
from datetime import datetime
from blacksheep.server import Application
from blacksheep.server.responses import text
app = Application()
@app.route('/')
async def home(request):
return text(f'Hello, World! {datetime.utcnow().isoformat()}'))
app.start()
Disclaimer
This project is currently targeting only Linux and CPython: support for Windows and other implementations
of Python language are currently out of the scope. However, a Pure-Python version of this framework is planned, with name
BlueSheep
.
Objectives
- Clean architecture and source code, following SOLID principles
- Avoid CPU cycles to handle things that are not strictly necessary
- Intelligible and easy to learn API, similar to those of many Python web frameworks
- Keep the core package minimal and focused, as much as possible, on features defined in HTTP and HTML standards
- Targeting stateless applications to be deployed in the cloud
- High performance
Server Features
- Routing
- Middlewares
- Built-in support for multi processing
- Integration with built-in
logging
module to log access and errors synchronously - this is completely disabled by default - Chunked encoding through generators (yield syntax)
- Serving static files
Client Features
- Support for client side middlewares, enabling clean source code and separation of concerns (logging of different kinds, handling of cookies, etc.)
- HTTP connection pooling
- User friendly handling of SSL contexts (safe by default)
- Automatic handling of redirects (can be disabled, validates circular redirects and maximum number of redirects - redirects to URN are simply returned to code using the client)
- Automatic handling of cookies (can be disabled,
Set-Cookie
andCookie
headers)
Example:
import asyncio
from blacksheep.client import ClientSession
async def client_example(loop):
async with ClientSession() as client:
response = await client.get('https://docs.python.org/3/')
assert response is not None
text = await response.text()
print(text)
loop = asyncio.get_event_loop()
loop.run_until_complete(client_example(loop))
Note
This project is in alpha stage. The reason behind this framework is described in this page of the Wiki: Story.
Documentation
Please refer to the project Wiki.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
blacksheep-0.0.6.tar.gz
(669.7 kB
view hashes)