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.

Source Distribution

starlette_json-20.9.18.tar.gz (4.3 kB view hashes)

Uploaded source

Built Distribution

starlette_json-20.9.18-py3-none-any.whl (7.4 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page