grim/envconfig2

Parents d198fc14fe06
Children 45c05d76586a
add support for prefixes and whether or not they're required
--- a/envconfig2.py Mon Sep 19 23:30:35 2016 -0500
+++ b/envconfig2.py Wed Sep 21 21:21:12 2016 -0500
@@ -24,51 +24,69 @@
__version__ = '0.1'
-def use_default(name, required):
- if name not in os.environ:
- if required:
- msg = 'required environmnet variable {} not set'.format(name)
+prefix = None
+prefix_required = False
+
+
+def find_variable(name, required):
+ names = []
+
+ if prefix:
+ names.append('{}_{}'.format(prefix, name))
- raise ValueError(msg)
+ if not prefix_required:
+ names.append(name)
+
+ for name in names:
+ if name in os.environ:
+ return name
- return True
+ if required:
+ msg = 'required environment variable {} not set'.format(name)
- return False
+ raise ValueError(msg)
+
+ return None
def boolean(name, default=None, required=False):
- if use_default(name, required):
+ var = find_variable(name, required)
+ if var is None:
return default
- val = os.environ[name].lower().strip()
+ val = os.environ[var].lower().strip()
return val in ['1', 't', 'true', 'y', 'yes']
def integer(name, default=None, required=False):
- if use_default(name, required):
+ var = find_variable(name, required)
+ if var is None:
return default
- return int(os.environ[name])
+ return int(os.environ[var])
def string(name, default=None, required=False):
- if use_default(name, required):
+ var = find_variable(name, required)
+ if var is None:
return default
- return os.environ[name]
+ return os.environ[var]
def list(name, separator=',', default=None, required=False):
- if use_default(name, required):
+ var = find_variable(name, required)
+ if var is None:
return default
- return [item.strip() for item in os.environ[name].split(separator)]
+ return [item.strip() for item in os.environ[var].split(separator)]
def json(name, default=None, required=False):
- if use_default(name, required):
+ var = find_variable(name, required)
+ if var is None:
return default
- return realjson.loads(os.environ[name])
+ return realjson.loads(os.environ[var])
--- a/tests/test_envconfig2.py Mon Sep 19 23:30:35 2016 -0500
+++ b/tests/test_envconfig2.py Wed Sep 21 21:21:12 2016 -0500
@@ -184,3 +184,63 @@
assert envconfig2.json('JSON') == {'foo': 'bar'}
+
+def test_prefix():
+ try:
+ os.environ = {
+ 'TEST_FOO': 'ABC',
+ }
+
+ envconfig2.prefix = 'TEST'
+
+ assert envconfig2.string('FOO') == 'ABC'
+ finally:
+ envconfig2.prefix = None
+
+
+def test_prefix_required_not_set():
+ try:
+ os.environ = {
+ 'BAR': '123',
+ }
+
+ envconfig2.prefix = 'TEST'
+ envconfig2.prefix_required = True
+
+ assert envconfig2.string('BAR') is None
+ assert envconfig2.string('FOO') is None
+ finally:
+ envconfig2.prefix = None
+ envconfig2.prefix_required = False
+
+
+def test_prefix_required_set():
+ try:
+ os.environ = {
+ 'TEST_FOO': 'ABC',
+ 'TEST_BAR': '123',
+ }
+
+ envconfig2.prefix = 'TEST'
+ envconfig2.prefix_required = True
+
+ assert envconfig2.string('FOO') == 'ABC'
+ assert envconfig2.string('BAR') == '123'
+ finally:
+ envconfig2.prefix = None
+ envconfig2.prefix_required = False
+
+
+def test_prefix_prefered():
+ try:
+ os.environ = {
+ 'FOO': 'ABC',
+ 'TEST_FOO': '123',
+ }
+
+ envconfig2.prefix = 'TEST'
+
+ assert envconfig2.string('FOO') == '123'
+ finally:
+ envconfig2.prefix = None
+