def serialise_tracker(self, tracker: "DialogueStateTracker") -> Dict: """Serializes the tracker, returns object with decimal types""" d = tracker.as_dialogue().as_dict() d.update({ "sender_id": tracker.sender_id, }) # DynamoDB cannot store `float`s, so we'll convert them to `Decimal`s return core_utils.replace_floats_with_decimals(d)
def serialise_tracker(self, tracker: "DialogueStateTracker") -> Dict: """Serializes the tracker, returns object with decimal types""" d = tracker.as_dialogue().as_dict() d.update( { "sender_id": tracker.sender_id, "session_date": int(datetime.now(tz=timezone.utc).timestamp()), } ) return replace_floats_with_decimals(d)
def test_float_conversion_to_decimal(): # Create test objects d = { "int": -1, "float": 2.1, "list": ["one", "two"], "list_of_floats": [1.0, -2.1, 3.2], "nested_dict_with_floats": {"list_with_floats": [4.5, -5.6], "float": 6.7}, } d_replaced = replace_floats_with_decimals(d) assert isinstance(d_replaced["int"], int) assert isinstance(d_replaced["float"], Decimal) for t in d_replaced["list"]: assert isinstance(t, str) for f in d_replaced["list_of_floats"]: assert isinstance(f, Decimal) for f in d_replaced["nested_dict_with_floats"]["list_with_floats"]: assert isinstance(f, Decimal) assert isinstance(d_replaced["nested_dict_with_floats"]["float"], Decimal)
def test_float_conversion_to_decimal(): # Create test objects d = { "int": -1, "float": 2.1, "float_round": 1579507733.1107571125030517578125, "decimal_round": Decimal("0.92383747394838437473739439744"), "list": ["one", "two"], "list_of_floats": [1.0, -2.1, 3.2], "nested_dict_with_floats": {"list_with_floats": [4.5, -5.6], "float": 6.7}, } d_replaced = replace_floats_with_decimals(d) assert isinstance(d_replaced["int"], int) assert isinstance(d_replaced["float"], Decimal) assert d_replaced["float_round"] == Decimal("1579507733.110757113") assert d_replaced["decimal_round"] == Decimal("0.923837474") for t in d_replaced["list"]: assert isinstance(t, str) for f in d_replaced["list_of_floats"]: assert isinstance(f, Decimal) for f in d_replaced["nested_dict_with_floats"]["list_with_floats"]: assert isinstance(f, Decimal) assert isinstance(d_replaced["nested_dict_with_floats"]["float"], Decimal)
def test_replace_floats_with_decimals(_input: Any, expected: Any): assert utils.replace_floats_with_decimals(_input) == expected