Django Rest Framework UJSON Renderer
==================
[][pypi]
[][pypi]
[][pypi]
[][pypi]

[pypi]: https://pypi.org/project/drf-ujson2/
Django Rest Framework renderer using [ujson](https://github.com/esnme/ultrajson)
## Installation
`pip install drf_ujson2`
You can then set the `UJSONRenderer` class as your default renderer in your `settings.py`
```python
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'drf_ujson.renderers.UJSONRenderer',
),
...
}
```
## Benchmarks
This is on average 2.3x faster than the default JSON Serializer.
```python
import timeit
setup = '''
from proposals.models import Proposal
from proposals.serializers import ProposalSerializer
from rest_framework.renderers import JSONRenderer
from drf_ujson.renderers import UJSONRenderer
proposals = Proposal.objects.all()
serialized = ProposalSerializer(proposals, many=True).data
'''
stdlib_test = '''
JSONRenderer().render(serialized)
'''
ujson_test = '''
UJSONRenderer().render(serialized)
'''
stdlib_result = timeit.repeat(stdlib_test, setup=setup, number=1, repeat=10)
ujson_result = timeit.repeat(ujson_test, setup=setup, number=1, repeat=10)
print stdlib_result
print sum(stdlib_result) / 10
print ujson_result
print sum(ujson_result) / 10
# stdlib results
[
0.004502058029174805,
0.004289865493774414,
0.006896018981933594,
0.0048198699951171875,
0.004084110260009766,
0.007154941558837891,
0.003937959671020508,
0.004029035568237305,
0.004770040512084961,
0.004539966583251953
]
# avg
0.00490238666534
# ujson results
[
0.0016620159149169922,
0.001817941665649414,
0.0015261173248291016,
0.0040950775146484375,
0.0021469593048095703,
0.001798868179321289,
0.001569986343383789,
0.0019931793212890625,
0.0017120838165283203,
0.001814126968383789
]
# avg
0.00201363563538
```
Raw data
{
"_id": null,
"home_page": "https://github.com/Amertz08/drf_ujson2",
"name": "drf-ujson2",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "django, djangorestframework, ujson",
"author": "Gizmag",
"author_email": "tech@gizmag.com",
"download_url": "https://files.pythonhosted.org/packages/ea/9b/6255e579d0903f2c1a50c77a7e3af8e563cd9f116af21ac6e7690eec019c/drf_ujson2-1.8.0.tar.gz",
"platform": null,
"description": "Django Rest Framework UJSON Renderer\n==================\n\n[][pypi]\n[][pypi]\n[][pypi]\n[][pypi]\n\n\n[pypi]: https://pypi.org/project/drf-ujson2/\n\nDjango Rest Framework renderer using [ujson](https://github.com/esnme/ultrajson)\n\n## Installation\n\n`pip install drf_ujson2`\n\nYou can then set the `UJSONRenderer` class as your default renderer in your `settings.py`\n\n```python\nREST_FRAMEWORK = {\n 'DEFAULT_RENDERER_CLASSES': (\n 'drf_ujson.renderers.UJSONRenderer',\n ),\n ...\n}\n```\n\n## Benchmarks\nThis is on average 2.3x faster than the default JSON Serializer.\n\n```python\nimport timeit\n\nsetup = '''\nfrom proposals.models import Proposal\nfrom proposals.serializers import ProposalSerializer\nfrom rest_framework.renderers import JSONRenderer\nfrom drf_ujson.renderers import UJSONRenderer\n\nproposals = Proposal.objects.all()\nserialized = ProposalSerializer(proposals, many=True).data\n'''\n\nstdlib_test = '''\nJSONRenderer().render(serialized)\n'''\n\nujson_test = '''\nUJSONRenderer().render(serialized)\n'''\n\nstdlib_result = timeit.repeat(stdlib_test, setup=setup, number=1, repeat=10)\nujson_result = timeit.repeat(ujson_test, setup=setup, number=1, repeat=10)\n\nprint stdlib_result\nprint sum(stdlib_result) / 10\nprint ujson_result\nprint sum(ujson_result) / 10\n\n# stdlib results\n[\n0.004502058029174805,\n0.004289865493774414,\n0.006896018981933594,\n0.0048198699951171875,\n0.004084110260009766,\n0.007154941558837891,\n0.003937959671020508,\n0.004029035568237305,\n0.004770040512084961,\n0.004539966583251953\n]\n# avg\n0.00490238666534\n\n# ujson results\n[\n0.0016620159149169922,\n0.001817941665649414,\n0.0015261173248291016,\n0.0040950775146484375,\n0.0021469593048095703,\n0.001798868179321289,\n0.001569986343383789,\n0.0019931793212890625,\n0.0017120838165283203,\n0.001814126968383789\n]\n# avg\n0.00201363563538\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "Django Rest Framework UJSON Renderer",
"version": "1.8.0",
"project_urls": {
"Homepage": "https://github.com/Amertz08/drf_ujson2"
},
"split_keywords": [
"django",
" djangorestframework",
" ujson"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "7cdd8f9f458de766c6e83912058c1fc47946a5cba34a8fee9fe7d9974c7d36b7",
"md5": "4bf281c3616d204596e5c872388c8299",
"sha256": "6a6e32f687e29394002d8bec91e8a9ab44251564888fa5d907c737bc2f62ce42"
},
"downloads": -1,
"filename": "drf_ujson2-1.8.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4bf281c3616d204596e5c872388c8299",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 4916,
"upload_time": "2025-02-01T05:32:20",
"upload_time_iso_8601": "2025-02-01T05:32:20.410170Z",
"url": "https://files.pythonhosted.org/packages/7c/dd/8f9f458de766c6e83912058c1fc47946a5cba34a8fee9fe7d9974c7d36b7/drf_ujson2-1.8.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ea9b6255e579d0903f2c1a50c77a7e3af8e563cd9f116af21ac6e7690eec019c",
"md5": "d3e3c4ba544a67185e5fb6201e81d0e6",
"sha256": "3b42cade02138cc1ddb159e4a91ff7115929d3066242bffc623ade9b3a525d70"
},
"downloads": -1,
"filename": "drf_ujson2-1.8.0.tar.gz",
"has_sig": false,
"md5_digest": "d3e3c4ba544a67185e5fb6201e81d0e6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 4642,
"upload_time": "2025-02-01T05:32:22",
"upload_time_iso_8601": "2025-02-01T05:32:22.506923Z",
"url": "https://files.pythonhosted.org/packages/ea/9b/6255e579d0903f2c1a50c77a7e3af8e563cd9f116af21ac6e7690eec019c/drf_ujson2-1.8.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-01 05:32:22",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Amertz08",
"github_project": "drf_ujson2",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "drf-ujson2"
}