Curio-based web framework
Project description
Trinket
A Curio HTTP server.
Installation
Trinket requires python3.7+
git clone https://github.com/trollfot/trinket.git
python3.7 -m venv trinket_env
source trinket_env/bin/activate
pip install -e trinket trinket[test]
pytest trinket/tests
Example
from trinket import Trinket, Response
from trinket.response import file_iterator
from trinket.extensions import logger
bauble = logger(Trinket())
@bauble.route('/')
async def hello(request):
return Response.raw(b'Hello World !')
@bauble.route('/raw', methods=['POST'])
async def raw(request):
return Response.raw(b'You got here')
@bauble.route('/read', methods=['POST'])
async def reader(request):
await request.parse_body()
files = list(request.files.keys())
return Response.raw("You got here and it's all read: {}".format(files))
@bauble.route('/hello/full/with/{one}/and/{two}')
async def json(request, one, two):
response = Response.json({
'parameters': f'{one} and {two}',
'query': request.query.get('query'),
'cookie': request.cookies['test'],
})
response.cookies.set(name='bench', value='value')
return response
@bauble.route('/websocket')
async def serve_websocket(request):
response = Response.streamer(file_iterator('myfile.ext'))
return response
@bauble.websocket('/chat')
async def chat(request, websocket):
while True:
msg = await websocket.recv()
for ws in bauble.websockets:
if ws is not websocket:
await ws.send(msg)
bauble.start()
Acknowledgments
Trinket relies heavily on packages from https://github.com/pyrates: very good re-useable components with Cython-improved performances.
Changelog
0.1.5 (2019-12-18)
Fixed body duplication on raw_body calls, due to the concatenation already happening in on_body, triggered by the reader.
0.1.4 (2019-12-16)
Dependencies maintenance : bumping versions to latest stable.
0.1.3 (2019-01-24)
Pinned specific package versions
Updated to use the last version of wsproto (0.13)
The Trinket application now inherits from dict to allow arbitrary storage
Decoupled the TCP serving/socket creation from the actual application
0.1.2 (2019-01-18)
Updated distribution files
0.1.1 (2019-01-18)
Added tests and testing utilities
Fixed missing imports
0.1 (2019-01-17)
Initial release
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.