From 4d9fc918fc257682ad8e948f870f6be0aa6bda60 Mon Sep 17 00:00:00 2001 From: Curtis Maloney Date: Mon, 19 Nov 2018 12:26:17 +1100 Subject: [PATCH] Leverage __set_name_ from Py3.6 --- cbs/__init__.py | 19 ++++++++++++++----- tests/test_env.py | 7 +++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/cbs/__init__.py b/cbs/__init__.py index 8e71b46..2f071cc 100644 --- a/cbs/__init__.py +++ b/cbs/__init__.py @@ -39,8 +39,6 @@ def SETTING(self): def SETTING(self): ''' def __new__(cls, *args, **kwargs): - if 'type' in kwargs and 'cast' not in kwargs: - kwargs['cast'] = kwargs.pop('type') if not args: return partial(cls, **kwargs) return object.__new__(cls) @@ -48,10 +46,17 @@ def __new__(cls, *args, **kwargs): def __init__(self, getter, key=None, cast=None, prefix=None): self.getter = getter self.cast = cast - self.key = key or getter.__name__ + if key is None and getter is not None: + key = getter.__name__ if prefix is None: prefix = DEFAULT_ENV_PREFIX - self.var_name = ''.join([prefix, self.key]) + self.prefix = prefix + self._set_name(key) + + def _set_name(self, name): + self.key = name + if name: + self.var_name = ''.join([self.prefix, name]) def __get__(self, obj, klass=None): if obj is None: @@ -61,7 +66,7 @@ def __get__(self, obj, klass=None): except KeyError: if self.getter is None: raise RuntimeError( - 'You must set the %s environment variable.' % self.var_name + f'You must set the {self.var_name} environment variable.' ) value = self.getter(obj) else: @@ -70,6 +75,10 @@ def __get__(self, obj, klass=None): obj.__dict__[self.key] = value return value + def __set_name__(self, owner, name): + if self.key is None: + self._set_name(name) + class envbool(env): ''' diff --git a/tests/test_env.py b/tests/test_env.py index 06d9a2b..66c7237 100644 --- a/tests/test_env.py +++ b/tests/test_env.py @@ -194,3 +194,10 @@ class Settings: self.assertEqual(Settings().SETTING, True) + def test_set_name(self): + + class Settings: + + SETTING = cbs.env(None) + + self.assertEqual(Settings.SETTING.key, 'SETTING')