From d8d7d33c559ff903996520fb18af9113c3959e6c Mon Sep 17 00:00:00 2001 From: Scott Ernst Date: Fri, 11 Sep 2020 09:38:20 -0500 Subject: [PATCH] Decimal Type Rendering Updates the render encoding across all JSON serialization sources to include support for rendering decimals to JSON-compatible floats. --- cauldron/render/encoding.py | 3 +++ cauldron/settings.json | 2 +- cauldron/test/render/test_render.py | 12 +++++++----- cauldron/test/support/mocking.py | 2 +- development.dockerfile | 5 +++++ 5 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 development.dockerfile diff --git a/cauldron/render/encoding.py b/cauldron/render/encoding.py index 74ec71c2..29876983 100644 --- a/cauldron/render/encoding.py +++ b/cauldron/render/encoding.py @@ -2,6 +2,7 @@ import json import numpy as np import pandas as pd +import decimal import typing from collections import namedtuple @@ -14,6 +15,8 @@ def default_override(value: typing.Any): """...""" + if isinstance(value, decimal.Decimal): + return float(value) if isinstance(value, datetime.date): return value.isoformat() elif isinstance(value, datetime.datetime): diff --git a/cauldron/settings.json b/cauldron/settings.json index 0aa3cc95..cea012ee 100644 --- a/cauldron/settings.json +++ b/cauldron/settings.json @@ -1,4 +1,4 @@ { - "version": "1.0.3", + "version": "1.0.4", "notebookVersion": "v1" } diff --git a/cauldron/test/render/test_render.py b/cauldron/test/render/test_render.py index dd363bd4..461a827d 100644 --- a/cauldron/test/render/test_render.py +++ b/cauldron/test/render/test_render.py @@ -2,6 +2,7 @@ import os from unittest.mock import patch from datetime import date +import decimal import pandas as pd from cauldron import render @@ -13,12 +14,13 @@ class TestRender(scaffolds.ResultsTest): def test_table(self): """Should render a table""" - + dt = date(2016, 9, 9) + d = decimal.Decimal('3.14') df = pd.DataFrame([ - {'a': 1, 'b': 'hello', 'c': True, 'd': date(2016, 9, 9)}, - {'a': 1, 'b': 'hello', 'c': True, 'd': date(2016, 9, 9)}, - {'a': 1, 'b': 'hello', 'c': True, 'd': date(2016, 9, 9)}, - {'a': 1, 'b': 'hello', 'c': True, 'd': date(2016, 9, 9)} + {'a': 1, 'b': 'hello', 'c': True, 'd': dt, 'e': d}, + {'a': 1, 'b': 'hello', 'c': True, 'd': dt, 'e': d}, + {'a': 1, 'b': 'hello', 'c': True, 'd': dt, 'e': d}, + {'a': 1, 'b': 'hello', 'c': True, 'd': dt, 'e': d} ]) result = render.table(df, 0.5, include_index=True) diff --git a/cauldron/test/support/mocking.py b/cauldron/test/support/mocking.py index 03ae5e97..678c3a5f 100644 --- a/cauldron/test/support/mocking.py +++ b/cauldron/test/support/mocking.py @@ -65,4 +65,4 @@ def __enter__(self): return self.mock_importer def __exit__(self, *args, **kwargs): - return self._patch.__exit__() + return self._patch.__exit__(*args) diff --git a/development.dockerfile b/development.dockerfile new file mode 100644 index 00000000..782cab5b --- /dev/null +++ b/development.dockerfile @@ -0,0 +1,5 @@ +FROM python:3.8 + +COPY requirements.txt /build-data/requirements.txt + +RUN pip install -r /build-data/requirements.txt --upgrade