userver: en/testsuite/utils/approx.py Source File
Loading...
Searching...
No Matches
approx.py
1import json
2import math
3
4
5class Float(float):
6 def __eq__(self, obj) -> bool:
7 if isinstance(obj, (float, int)):
8 return math.isclose(self, obj)
9 return super().__eq__(obj)
10
11 # pylint: disable=useless-super-delegation
12 def __hash__(self):
13 return super().__hash__()
14
15
16def json_loads(data, **kwargs):
17 return json.loads(data, parse_float=Float, **kwargs)
18
19
20def wrap_json(data):
21 # bool is int, so make exception for bool
22 if isinstance(data, bool):
23 return data
24
25 if isinstance(data, float):
26 return Float(data)
27 if isinstance(data, list):
28 return [wrap_json(item) for item in data]
29 if isinstance(data, dict):
30 return {k: wrap_json(v) for k, v in data.items()}
31 return data