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
nginxinstead.
Credits
Metadata
Release files for gongish 1.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gongish-1.5.0.tar.gz | 14.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gongish-1.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.0 kB
Release files / gongish-1.5.0.tar.gz
| Download URL | gongish-1.5.0.tar.gz |
|---|---|
| Size | 14.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5fd4eed3ccf35f1ae06792082e7c609150c80308225601a215aae5bc7815f4d2
|
|
BLAKE2b-256 checksum How to use checksums |
8a5395f1577321a9dfb9dbb772cfcbe3fd2e546bbbaa829c20364de2b2fb2041
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Release files / gongish-1.5.0-py3-none-any.whl
| Download URL | gongish-1.5.0-py3-none-any.whl |
|---|---|
| Size | 15.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9d00b795c2a27e9a1ed3b8746c7a4831d4c42c6bd129873926bdfe96ff8a6eb0
|
|
BLAKE2b-256 checksum How to use checksums |
729416087ef634661b25824c99f3397b0f46053154e3328a20399a19925671dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|