- starting DictByBatchcodeTable2JsonConverterTest

- refactoring
This commit is contained in:
frankknoll
2023-01-26 22:16:57 +01:00
parent 4b38b0a6b7
commit a87af43c58
4 changed files with 97 additions and 11 deletions

View File

@@ -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}
}
]
})

View File

@@ -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
}
}
]
}'''))

View File

@@ -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()

View File

@@ -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',