From 0dbd2da511f22ab4de5889959e2b7bd75c113359 Mon Sep 17 00:00:00 2001 From: Radu Suciu Date: Tue, 27 Aug 2024 11:35:22 -0700 Subject: [PATCH] Removes DjangoNumpyJSONEncoder (breaking change) --- README.md | 20 -------------------- drf_orjson_renderer/encoders.py | 30 ------------------------------ requirements/base.txt | 2 +- tests/test_renderer.py | 3 --- 4 files changed, 1 insertion(+), 54 deletions(-) delete mode 100644 drf_orjson_renderer/encoders.py diff --git a/README.md b/README.md index 208a0d5..f5c8c1e 100644 --- a/README.md +++ b/README.md @@ -97,25 +97,5 @@ order to take advantage of the RestFramework Browsable API, when the requested media type is not `application/json`, the ORJSON renderer will add `orjson.OPT_INDENT_2` to the options mask to pretty print your output. -## Numpy - -When this package was originally written ORJSON did not natively support -serializing numpy types. This package provided an encoder class that -overrides the DjangoJSONEncoder with support for numpy types. This encoder -is no longer necessary but included for backwards compatibility. - -```Python -from drf_orjson_renderer.encoders import DjangoNumpyJSONEncoder -from rest_framework.views import APIView - -class MyView(APIView): - - - def get_renderer_context(self): - renderer_context = super().get_renderer_context() - renderer_context["django_encoder_class"] = DjangoNumpyJSONEncoder - return renderer_context -``` - ## Benchmarks See the [orjson Benchmarks](https://github.com/ijl/orjson#performance) for more information diff --git a/drf_orjson_renderer/encoders.py b/drf_orjson_renderer/encoders.py deleted file mode 100644 index 44d697f..0000000 --- a/drf_orjson_renderer/encoders.py +++ /dev/null @@ -1,30 +0,0 @@ -import numpy -from django.core.serializers.json import DjangoJSONEncoder - - -class DjangoNumpyJSONEncoder(DjangoJSONEncoder): - int_types = ( - numpy.int_, - numpy.intc, - numpy.intp, - numpy.int8, - numpy.int16, - numpy.int32, - numpy.int64, - numpy.uint8, - numpy.uint16, - numpy.uint32, - numpy.uint64, - ) - - float_types = (numpy.float_, numpy.float16, numpy.float32, numpy.float64) - - def default(self, o): - if isinstance(o, self.int_types): - return int(o) - elif isinstance(o, self.float_types): - return float(o) - elif isinstance(o, numpy.ndarray): - return o.tolist() - - return super().default(o) diff --git a/requirements/base.txt b/requirements/base.txt index e383601..934ca84 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,3 +1,3 @@ Django>=3.2 djangorestframework>=3.9 -orjson>=2.4 +orjson>=3.3 diff --git a/tests/test_renderer.py b/tests/test_renderer.py index 533d21c..1be3269 100644 --- a/tests/test_renderer.py +++ b/tests/test_renderer.py @@ -16,7 +16,6 @@ from rest_framework.settings import api_settings from rest_framework.utils.serializer_helpers import ReturnDict, ReturnList -from drf_orjson_renderer.encoders import DjangoNumpyJSONEncoder from drf_orjson_renderer.parsers import ORJSONParser from drf_orjson_renderer.renderers import ORJSONRenderer @@ -284,7 +283,6 @@ def test_built_in_renderer_works_correctly_with_numpy_int(self): rendered = self.renderer.render( data=data, media_type="text/html", - renderer_context={"django_encoder_class": DjangoNumpyJSONEncoder,}, ) reloaded = orjson.loads(rendered) @@ -299,7 +297,6 @@ def test_built_in_renderer_works_correctly_with_numpy_floating(self): rendered = self.renderer.render( data=data, media_type="text/html", - renderer_context={"django_encoder_class": DjangoNumpyJSONEncoder,}, ) reloaded = orjson.loads(rendered)