Skip to main content

Custom json serializers for the Starlette web framework.

Project description

Starlette Json

Introduction

Starlette json responses for various json serializers available in the python community.

Why:

  • Remove ujson dependency from core starlette package
  • Add adaptors for other serializers
  • Customize serializer rendering settings

Requirements

Installation

$ pip install starlette-json

Optional installs

Install at least one of these:

Usage

Response examples

from starlette.applications import Starlette
from starlette.responses import JSONResponse

from starlette_json import ORJsonResponse, UJsonResponse, RapidJsonResponse, SimpleJsonResponse

app = Starlette()
data = {'Hello': 'World'}

@app.route('/json')
def json(request):
	return JSONResponse(data)

@app.route('/orjson')
def orjson(request):
	return ORJsonResponse(data)

@app.route('/ujson')
def ujson(request):
	return UJsonResponse(data)

@app.route('/rapidjson')
def rapidjson(request):
	return RapidJsonResponse(data)

@app.route('/simplejson')
def rapidjson(request):
	return SimpleJsonResponse(data)

Custom response rendering options:

See the docs for the specific json serializer for available options

from starlette.applications import Starlette
from starlette_json import ORJsonResponse, UJsonResponse, RapidJsonResponse
import orjson

app = Starlette()
data = {'Hello': 'World'}

@app.route('/orjson')
def orjson(request):
	return ORJsonResponse(
		data,
		default=lambda x: str(x),
		option=orjson.OPT_STRICT_INTEGER | orjson.OPT_NAIVE_UTC
	)

@app.route('/ujson')
def ujson(request):
	return UJsonResponse(
		data,
		encode_html_chars=True,
		ensure_ascii=False,
		escape_forward_slashes=False
	)

@app.route('/rapidjson')
def rapidjson(request):
	return RapidJsonResponse(data, sort_keys=True, indent=4)

@app.route('/simplejson')
def rapidjson(request):
	return SimpleJsonResponse(
		data,
		skipkeys=False,
		ensure_ascii=True,
		check_circular=True,
		allow_nan=True
	)

Json request body parsing:

from starlette.applications import Starlette
from starlette_json import ORJsonMiddleware, ORJsonResponse

app = Starlette()

app.add_middleware(ORJsonMiddleware)

@app.route('/orjson')
def orjson(request):
	body = await request.json() # Parsed with orjson
	return ORJsonResponse({'message':'ok'})

Contributing

PRs very welcome. CONTRIBUTING.md

Todo

  • Tests?

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for starlette-json, version 19.11.15
Filename, size File type Python version Upload date Hashes
Filename, size starlette_json-19.11.15-py3-none-any.whl (7.4 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size starlette_json-19.11.15.tar.gz (4.3 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page