From 9b3d107934ab698a49a1382017014b7ddb7f02aa Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Sun, 8 Nov 2020 00:09:15 +0200 Subject: [PATCH] Add configuration utilities --- trains/utilities/attrs.py | 4 ++++ trains/utilities/config.py | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/trains/utilities/attrs.py b/trains/utilities/attrs.py index 0ecee840..ac464f3e 100644 --- a/trains/utilities/attrs.py +++ b/trains/utilities/attrs.py @@ -16,3 +16,7 @@ class attrs(object): def __call__(self, f): return attr.attrs(*self.args, **self.kwargs)(f) + + +def readonly(value): + return property(lambda self: value) diff --git a/trains/utilities/config.py b/trains/utilities/config.py index ce17a764..b2d9c42d 100644 --- a/trains/utilities/config.py +++ b/trains/utilities/config.py @@ -1,5 +1,7 @@ from __future__ import division +import json + import six import humanfriendly import pyparsing @@ -81,3 +83,16 @@ def text_to_config_dict(text): six.raise_from(ValueError("Could not parse configuration text ({}):\n{}".format(pos, text)), None) except Exception: six.raise_from(ValueError("Could not parse configuration text:\n{}".format(text)), None) + + +def verify_basic_value(value): + # return True if value of of basic type (json serializable) + if not isinstance(value, + six.string_types + six.integer_types + + (six.text_type, float, list, tuple, dict, type(None))): + return False + try: + json.dumps(value) + return True + except TypeError: + return False