Argparse set from env var
Jump to navigation
Jump to search
https://gist.github.com/orls/51525c86ee77a56ad396
Example 1
import argparse
import os
class EnvDefault(argparse.Action):
def __init__(self, envvar, required=True, default=None, **kwargs):
if not default and envvar:
if envvar in os.environ:
default = os.environ[envvar]
if required and default:
required = False
super(EnvDefault, self).__init__(default=default, required=required,
**kwargs)
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, values)
import argparse
from envdefault import EnvDefault
parser=argparse.ArgumentParser()
parser.add_argument(
"-u", "--url", action=EnvDefault, envvar='URL',
help="Specify the URL to process (can also be specified using URL environment variable)")
args=parser.parse_args()
Another Example
import argparse
import os
# Courtesy of http://stackoverflow.com/a/10551190 with env-var retrieval fixed
class EnvDefault(argparse.Action):
"""An argparse action class that auto-sets missing default values from env
vars. Defaults to requiring the argument."""
def __init__(self, envvar, required=True, default=None, **kwargs):
if not default and envvar:
if envvar in os.environ:
default = os.environ[envvar]
if required and default:
required = False
super(EnvDefault, self).__init__(default=default, required=required,
**kwargs)
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, values)
# functional sugar for the above
def env_default(envvar):
def wrapper(**kwargs):
return EnvDefault(envvar, **kwargs)
return wrapper
import argparse
from EnvDefault import env_default
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="use env vars as defaults for argparse"
)
parser.add_argument(
"--alpha", "-a",
action=env_default('ALPHA'),
required=False,
help="""Optional. Value from CLI will be used if present, or from env var ALPHA.
If neither of these is present, value is None becasue no fallback default
was given"""
)
parser.add_argument(
"--beta", "-b",
action=env_default('BETA'),
required=True,
help="""Required. Value from CLI will be used if present, or from env var BETA.
If neither of these is present, it's an error"""
)
parser.add_argument(
"--gamma", "-g",
action=env_default('GAMMA'),
required=True,
default=9001,
help="""Value from CLI will be used if present, or from env var GAMMA.
If neither of these is present, default of 9001 is used"""
)
print parser.parse_args()