A simple and fast HTTP framework for Python
Project description
gongish
A simple and fast HTTP framework for Python.
from gongish import Application
app = Application()
@app.route("/hello/:name")
def get(name: str):
return f"Hello {name}"
Installation
pip install gongish
Usage
Quickstart
Create a module (for example
main.py
) and define your first application.
from gongish import Application
app = Application()
@app.route('/')
def get():
return 'Index'
@app.route('/about')
def get():
return 'About'
now serve the app
with:
gongish serve main:app -b :8080
Configuration
YAML is the configuration format we use as global app config which powered by
pymlconf
.
production.yaml
debug: False
redis:
host: localhost
port: port
main.py
from gongish import Application
app = Application()
@app.text('/')
def get():
return f'Redis Address: {app.config.redis.host}{app.config.redis.port}'
app.configure('production.yaml')
You can use OS environment variables inside config file:
sqlite:
path: %(HOME)/myappdb.sqlite
Routing
Python decorators are used to define routes and the wrapped function name must match with expected HTTP verb.
for example we want to call POST /user
, the route definition must be like:
@app.route('/user')
def post():
return 'User created!'
Methods for routing:
-
Exact path
@app.route('/') def get(): return 'Index' @app.route('/about') def get(): return 'About'
-
Positional arguments
@app.route('/user/:user_id') def get(user_id): return f'Hi {}' @app.route('/user/:id/book/:id') def get(user_id, book_id): return f'User #{user_id} and Book #{book_id}'
-
Wildcard
@app.json('/user/*') def get(*args): return args @app.json('/user/book/*') def get(*args): return args
Formatters
When the response is ready, at final stage it will wrap by a formatter.
Available formatters: text
, json
, binary
from gongish import Application
app = Application()
@app.text('/')
def get():
return 'Index'
@app.json('/user')
def get():
return dict(name='John')
the text
formatter used as default, but you can change it:
from gongish import Application
class MyApp(Application):
default_formatter = Application.format_json
app = MyApp()
@app.route('/user')
def get():
return dict(name='John')
or in very special cases:
import yaml
from gongish import Application
app = Application()
def format_yaml(request, response):
response.type = 'text/x-yaml'
response.body = yaml.dump(response.body)
@app.route('/user', formatter=format_yaml)
def get():
return dict(name='John')
Exceptions
from gongish import Application, HTTPNotFound, HTTPNoContent, HTTPFound
app = Application()
@app.route('/user/:id')
def get(user_id):
if user_id == '0':
raise HTTPNotFound
return dict(name='John')
@app.route('/user/:id')
def put(user_id):
raise HTTPNoContent
@app.route('/redirectme')
def get():
raise HTTPFound('https://github.com')
Complete list available in gongish/exceptions.py
.
Streaming
You can use Python Generators as route handler:
@app.route('/')
def get():
yield 'First'
yield 'Second'
with HTTP chunked data transfer:
@app.binary('/')
@app.chunked
def get():
yield b'First'
yield b'Second'
Static Server
You can serve static files inside a directory like:
from gongish import Application
app = Application()
app.add_static('/public', '/var/www')
app.add_static('/another/public', '/var/www', default_document='index.html5')
Note: Static file handler designed for some limited use cases. for large projects use web servers like
nginx
instead.
Credits
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
Built Distribution
File details
Details for the file gongish-1.5.0.tar.gz
.
File metadata
- Download URL: gongish-1.5.0.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
5fd4eed3ccf35f1ae06792082e7c609150c80308225601a215aae5bc7815f4d2
|
|
MD5 |
f48c06dd17ff3827c34058e01ba3b2ec
|
|
BLAKE2b-256 |
8a5395f1577321a9dfb9dbb772cfcbe3fd2e546bbbaa829c20364de2b2fb2041
|
File details
Details for the file gongish-1.5.0-py3-none-any.whl
.
File metadata
- Download URL: gongish-1.5.0-py3-none-any.whl
- Upload date:
- Size: 15.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
9d00b795c2a27e9a1ed3b8746c7a4831d4c42c6bd129873926bdfe96ff8a6eb0
|
|
MD5 |
111ecf546cf40c995bef6359b92e8991
|
|
BLAKE2b-256 |
729416087ef634661b25824c99f3397b0f46053154e3328a20399a19925671dd
|