diff --git a/apps/api/renderers.py b/apps/api/renderers.py new file mode 100644 index 0000000..b7d14d5 --- /dev/null +++ b/apps/api/renderers.py @@ -0,0 +1,14 @@ + +from rest_framework.renderers import JSONRenderer + + +# custom renderer to fix a horrible python json issue, that corrupts large integers +# issue example: parsing an integer 1204426362794811453 will corrupt the integer into 1204426362794811400. +class FixedJSONRenderer(JSONRenderer): + def render(self, data, *args, **kwargs): + if isinstance(data, dict): + data = { + key: str(value) if isinstance(value, int) and value > 9007199254740991 else value + for key, value in data.items() + } + return super().render(data, *args, **kwargs) diff --git a/core/settings.py b/core/settings.py index 170e788..0d3cac8 100644 --- a/core/settings.py +++ b/core/settings.py @@ -257,5 +257,10 @@ REST_FRAMEWORK = { 'anon': '100/day', 'user': '10000/hour' }, + 'DEFAULT_RENDERER_CLASSES': [ + 'apps.api.renderers.FixedJSONRenderer', + 'rest_framework.renderers.AdminRenderer', + 'rest_framework.renderers.BrowsableAPIRenderer' + ], "EXCEPTION_HANDLER": "apps.api.exceptions.conflict_exception_handler" }