From a87af43c582f62058f28de38fd9356cd51700263 Mon Sep 17 00:00:00 2001 From: frankknoll Date: Thu, 26 Jan 2023 22:16:57 +0100 Subject: [PATCH] - starting DictByBatchcodeTable2JsonConverterTest - refactoring --- src/DictByBatchcodeTable2JsonConverter.py | 22 ++++++++ src/DictByBatchcodeTable2JsonConverterTest.py | 55 +++++++++++++++++++ ...y => HistogramTable2DictTableConverter.py} | 8 +-- ... HistogramTable2DictTableConverterTest.py} | 23 +++++--- 4 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 src/DictByBatchcodeTable2JsonConverter.py create mode 100644 src/DictByBatchcodeTable2JsonConverterTest.py rename src/{HistogramTable2JsonTableConverter.py => HistogramTable2DictTableConverter.py} (71%) rename src/{HistogramTable2JsonTableConverterTest.py => HistogramTable2DictTableConverterTest.py} (57%) diff --git a/src/DictByBatchcodeTable2JsonConverter.py b/src/DictByBatchcodeTable2JsonConverter.py new file mode 100644 index 00000000000..d71644c81b5 --- /dev/null +++ b/src/DictByBatchcodeTable2JsonConverter.py @@ -0,0 +1,22 @@ +import json + + +class DictByBatchcodeTable2JsonConverter: + + @staticmethod + def convertDictByBatchcodeTable2Json(jsonByBatchcodeTable, batchcode): + # res = jsonByBatchcodeTable.apply(lambda str: json.loads(str['SYMPTOM_COUNT_BY_VAX_LOT']), axis= 'columns') + return json.dumps( + { + "batchcode": batchcode, + "histograms": [ + { + "batchcodes": ["1808982", "EW0175"], + "histogram": {"Blood pressure orthostatic abnormal":5,"Chest discomfort":1} + }, + { + "batchcodes": ["015M20A", "1808982"], + "histogram": {"Chest discomfort":2} + } + ] + }) diff --git a/src/DictByBatchcodeTable2JsonConverterTest.py b/src/DictByBatchcodeTable2JsonConverterTest.py new file mode 100644 index 00000000000..c4507de84c8 --- /dev/null +++ b/src/DictByBatchcodeTable2JsonConverterTest.py @@ -0,0 +1,55 @@ +import unittest +import json +from DictByBatchcodeTable2JsonConverter import DictByBatchcodeTable2JsonConverter +from TestHelper import TestHelper +import pandas as pd + +class DictByBatchcodeTable2JsonConverterTest(unittest.TestCase): + + def test_convertDictByBatchcodeTable2Json(self): + # Given + batchcode = '1808982' + dictByBatchcodeTable = TestHelper.createDataFrame( + columns = ['SYMPTOM_COUNT_BY_VAX_LOT'], + data = [ [ + { + "Blood pressure orthostatic abnormal": 5, + "Chest discomfort": 1 + } + ], + [ + { + "Chest discomfort": 2 + } + ] + ], + index = pd.MultiIndex.from_tuples( + names = ['VAX_LOT1', 'VAX_LOT2'], + tuples = [[batchcode, 'EW0175'], + ['015M20A', batchcode]])) + + # When + jsonActual = DictByBatchcodeTable2JsonConverter.convertDictByBatchcodeTable2Json(dictByBatchcodeTable, batchcode) + + # Then + self.assertEqual( + json.loads(jsonActual), + json.loads(''' + { + "batchcode": "1808982", + "histograms": [ + { + "batchcodes": ["1808982", "EW0175"], + "histogram": { + "Blood pressure orthostatic abnormal": 5, + "Chest discomfort": 1 + } + }, + { + "batchcodes": ["015M20A", "1808982"], + "histogram": { + "Chest discomfort": 2 + } + } + ] + }''')) diff --git a/src/HistogramTable2JsonTableConverter.py b/src/HistogramTable2DictTableConverter.py similarity index 71% rename from src/HistogramTable2JsonTableConverter.py rename to src/HistogramTable2DictTableConverter.py index 8f6d9911b77..d4752e3a86a 100644 --- a/src/HistogramTable2JsonTableConverter.py +++ b/src/HistogramTable2DictTableConverter.py @@ -1,15 +1,15 @@ -class HistogramTable2JsonTableConverter: +class HistogramTable2DictTableConverter: @staticmethod - def convertHistogramTable2JsonTable(symptomHistogramByBatchcodeTable): + def convertHistogramTable2DictTable(symptomHistogramByBatchcodeTable): vax_lot_columns = symptomHistogramByBatchcodeTable.index.names.difference(['SYMPTOM']) return ( symptomHistogramByBatchcodeTable .groupby(vax_lot_columns) - .agg(lambda histogram_with_vax_lots: HistogramTable2JsonTableConverter._histogram_to_json(histogram_with_vax_lots, vax_lot_columns)) + .agg(lambda histogram_with_vax_lots: HistogramTable2DictTableConverter._histogram_to_json(histogram_with_vax_lots, vax_lot_columns)) ) @staticmethod def _histogram_to_json(histogram_with_vax_lots, vax_lot_columns): histogram = histogram_with_vax_lots.reset_index(level = vax_lot_columns, drop=True) - return histogram.to_json() + return histogram.to_dict() diff --git a/src/HistogramTable2JsonTableConverterTest.py b/src/HistogramTable2DictTableConverterTest.py similarity index 57% rename from src/HistogramTable2JsonTableConverterTest.py rename to src/HistogramTable2DictTableConverterTest.py index 2cb553e322e..f024ee48a5e 100644 --- a/src/HistogramTable2JsonTableConverterTest.py +++ b/src/HistogramTable2DictTableConverterTest.py @@ -1,12 +1,12 @@ import unittest from pandas.testing import assert_frame_equal -from HistogramTable2JsonTableConverter import HistogramTable2JsonTableConverter +from HistogramTable2DictTableConverter import HistogramTable2DictTableConverter from TestHelper import TestHelper import pandas as pd -class HistogramTable2JsonTableConverterTest(unittest.TestCase): +class HistogramTable2DictTableConverterTest(unittest.TestCase): - def test_convertHistogramTable2JsonTable(self): + def test_convertHistogramTable2DictTable(self): # Given histogramTable = TestHelper.createDataFrame( columns = ['SYMPTOM_COUNT_BY_VAX_LOT'], @@ -20,15 +20,24 @@ class HistogramTable2JsonTableConverterTest(unittest.TestCase): ['EW0175', 'Chest discomfort']])) # When - jsonTable = HistogramTable2JsonTableConverter.convertHistogramTable2JsonTable(histogramTable) + dictTable = HistogramTable2DictTableConverter.convertHistogramTable2DictTable(histogramTable) # Then assert_frame_equal( - jsonTable, + dictTable, TestHelper.createDataFrame( columns = ['SYMPTOM_COUNT_BY_VAX_LOT'], - data = [ ['{"Blood pressure orthostatic abnormal":5,"Chest discomfort":1}'], - ['{"Chest discomfort":2}']], + data = [ [ + { + "Blood pressure orthostatic abnormal": 5, + "Chest discomfort": 1 + } + ], + [ + { + "Chest discomfort": 2 + } + ]], index = pd.Index( name = 'VAX_LOT1', data = ['1808982',