From 1009920cbd4b7d281dc0a30d0994de397832f803 Mon Sep 17 00:00:00 2001 From: Graham Lee Date: Mon, 20 Jun 2022 16:13:03 +0100 Subject: [PATCH] Use ISO8601 format for dates #2714 --- .../reusable_data_service/main.py | 3 +++ .../reusable_data_service/util/iso_json_encoder.py | 14 ++++++++++++++ .../tests/test_case_end_to_end.py | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 data-serving/reusable-data-service/reusable_data_service/util/iso_json_encoder.py diff --git a/data-serving/reusable-data-service/reusable_data_service/main.py b/data-serving/reusable-data-service/reusable_data_service/main.py index 4a3f31e5d..d0cc23165 100644 --- a/data-serving/reusable-data-service/reusable_data_service/main.py +++ b/data-serving/reusable-data-service/reusable_data_service/main.py @@ -1,10 +1,13 @@ from flask import Flask, request from . import CaseController, MongoStore +from reusable_data_service.util.iso_json_encoder import ISOJSONEncoder import os import logging app = Flask(__name__) +app.json_encoder = ISOJSONEncoder + case_controller = None # Will be set up in main() diff --git a/data-serving/reusable-data-service/reusable_data_service/util/iso_json_encoder.py b/data-serving/reusable-data-service/reusable_data_service/util/iso_json_encoder.py new file mode 100644 index 000000000..dabbef994 --- /dev/null +++ b/data-serving/reusable-data-service/reusable_data_service/util/iso_json_encoder.py @@ -0,0 +1,14 @@ +import flask.json +import datetime + +class ISOJSONEncoder(flask.json.JSONEncoder): + def default(self, obj): + try: + if isinstance(obj, datetime.date): + return obj.isoformat() + iterable = iter(obj) + except TypeError: + pass + else: + return list(iterable) + return flask.json.JSONEncoder.default(self, obj) diff --git a/data-serving/reusable-data-service/tests/test_case_end_to_end.py b/data-serving/reusable-data-service/tests/test_case_end_to_end.py index c7d4a6bd9..aed5f041a 100644 --- a/data-serving/reusable-data-service/tests/test_case_end_to_end.py +++ b/data-serving/reusable-data-service/tests/test_case_end_to_end.py @@ -38,7 +38,7 @@ def test_get_case_with_known_id(client_with_patched_mongo): result = response.get_json() assert response.status_code == 200 assert result is not None - assert result["confirmation_date"] == "Fri, 31 Dec 2021 00:00:00 GMT" + assert result["confirmation_date"] == "2021-12-31" def test_get_case_with_poorly_formatted_id(client_with_patched_mongo):