From f926e377deb3f21a6d44a2a2f3ecd130dde01385 Mon Sep 17 00:00:00 2001
From: Jorrit Schaap <schaap@astron.nl>
Date: Tue, 19 Jul 2022 11:58:59 +0200
Subject: [PATCH] TMSS-1912: use orjson which is even faster and supports
 datetime serialization

---
 Docker/lofar-ci/Dockerfile_ci_scu                            | 2 +-
 SAS/TMSS/backend/src/tmss/settings.py                        | 4 ++--
 SAS/TMSS/backend/src/tmss/tmssapp/renderers/CMakeLists.txt   | 1 +
 SAS/TMSS/backend/src/tmss/tmssapp/renderers/UJSONRenderer.py | 2 +-
 SAS/TMSS/backend/src/tmss/tmssapp/renderers/__init__.py      | 1 +
 5 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/Docker/lofar-ci/Dockerfile_ci_scu b/Docker/lofar-ci/Dockerfile_ci_scu
index 21b693d8012..709c27e871f 100644
--- a/Docker/lofar-ci/Dockerfile_ci_scu
+++ b/Docker/lofar-ci/Dockerfile_ci_scu
@@ -27,7 +27,7 @@ RUN mkdir -p /opt/oracle && \
     unzip instantclient-basic-linux.x64-21.1.0.0.0.zip
 ENV LD_LIBRARY_PATH /opt/oracle/instantclient_21_1:$LD_LIBRARY_PATH
 
-RUN pip3 install cython kombu lxml requests pygcn xmljson mysql-connector-python python-dateutil Django==3.0.9 djangorestframework==3.11.1 djangorestframework-xml ldap==1.0.2 flask fabric coverage python-qpid-proton PyGreSQL numpy h5py psycopg2 testing.postgresql Flask-Testing scipy Markdown django-filter python-ldap python-ldap-test ldap3 django-jsonforms django-json-widget django-jsoneditor drf-yasg flex swagger-spec-validator django-auth-ldap mozilla-django-oidc jsonschema comet pyxb==1.2.5 graphviz isodate astropy packaging django-debug-toolbar pymysql astroplan SimpleWebSocketServer websocket_client drf-flex-fields django-property-filter cx_Oracle cachetools gunicorn gevent ujson
+RUN pip3 install cython kombu lxml requests pygcn xmljson mysql-connector-python python-dateutil Django==3.0.9 djangorestframework==3.11.1 djangorestframework-xml ldap==1.0.2 flask fabric coverage python-qpid-proton PyGreSQL numpy h5py psycopg2 testing.postgresql Flask-Testing scipy Markdown django-filter python-ldap python-ldap-test ldap3 django-jsonforms django-json-widget django-jsoneditor drf-yasg flex swagger-spec-validator django-auth-ldap mozilla-django-oidc jsonschema comet pyxb==1.2.5 graphviz isodate astropy packaging django-debug-toolbar pymysql astroplan SimpleWebSocketServer websocket_client drf-flex-fields django-property-filter cx_Oracle cachetools gunicorn gevent ujson orjson
 
 #Viewflow package 
 RUN pip3 install django-material django-viewflow
diff --git a/SAS/TMSS/backend/src/tmss/settings.py b/SAS/TMSS/backend/src/tmss/settings.py
index 914c34430ad..3f4859a631b 100644
--- a/SAS/TMSS/backend/src/tmss/settings.py
+++ b/SAS/TMSS/backend/src/tmss/settings.py
@@ -212,8 +212,8 @@ REST_FRAMEWORK = {
     'PAGE_SIZE': 50,
     'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
     'DEFAULT_RENDERER_CLASSES': (
-        # we use our own faster ujson serializer
-        'lofar.sas.tmss.tmss.tmssapp.renderers.UJSONRenderer',
+        # we use our own faster orjson serializer
+        'lofar.sas.tmss.tmss.tmssapp.renderers.ORJSONRenderer',
         'rest_framework.renderers.BrowsableAPIRenderer',
     ),
     'DEFAULT_FILTER_BACKENDS': (
diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/renderers/CMakeLists.txt b/SAS/TMSS/backend/src/tmss/tmssapp/renderers/CMakeLists.txt
index ac08da30bee..c51d623b1e3 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/renderers/CMakeLists.txt
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/renderers/CMakeLists.txt
@@ -5,6 +5,7 @@ set(_py_files
     __init__.py
     PlainTextRenderer.py
     UJSONRenderer.py
+    ORJSONRenderer.py
     )
 
 python_install(${_py_files}
diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/renderers/UJSONRenderer.py b/SAS/TMSS/backend/src/tmss/tmssapp/renderers/UJSONRenderer.py
index 414e2c59603..687cdeae784 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/renderers/UJSONRenderer.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/renderers/UJSONRenderer.py
@@ -3,7 +3,7 @@ import ujson
 
 class UJSONRenderer(JSONRenderer):
     """
-    Faster version of plain drf JSONRenderer using ujson
+    Faster version of plain drf JSONRenderer using ujson (which does NOT support datetime serialization)
     """
     def render(self, data, accepted_media_type=None, renderer_context=None):
         """
diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/renderers/__init__.py b/SAS/TMSS/backend/src/tmss/tmssapp/renderers/__init__.py
index 942a55c5fb4..338f4e4aefb 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/renderers/__init__.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/renderers/__init__.py
@@ -1,2 +1,3 @@
 from .PlainTextRenderer import *
 from .UJSONRenderer import *
+from .ORJSONRenderer import *
-- 
GitLab