diff --git a/.travis.yml b/.travis.yml index 313660f..873d54b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,6 @@ sudo: false env: - TOX_ENV=py27-flake8 - TOX_ENV=py27 - - TOX_ENV=py33 - TOX_ENV=py34 - TOX_ENV=py35 diff --git a/dotenv.py b/dotenv.py index 3b0b2ae..09f01a5 100644 --- a/dotenv.py +++ b/dotenv.py @@ -4,7 +4,7 @@ import warnings -__version__ = '1.4.1' +__version__ = '1.4.2' line_re = re.compile(r""" @@ -34,12 +34,17 @@ """, re.IGNORECASE | re.VERBOSE) -def read_dotenv(dotenv=None): +def read_dotenv(dotenv=None, override=False): """ Read a .env file into os.environ. If not given a path to a dotenv path, does filthy magic stack backtracking to find manage.py and then find the dotenv. + + If tests rely on .env files, setting the overwrite flag to True is a safe + way to ensure tests run consistently across all environments. + + :param override: True if values in .env should override system variables. """ if dotenv is None: frame_filename = sys._getframe().f_back.f_code.co_filename @@ -51,7 +56,10 @@ def read_dotenv(dotenv=None): if os.path.exists(dotenv): with open(dotenv) as f: for k, v in parse_dotenv(f.read()).items(): - os.environ.setdefault(k, v) + if override: + os.environ[k] = v + else: + os.environ.setdefault(k, v) else: warnings.warn("Not reading {0} - it doesn't exist.".format(dotenv), stacklevel=2) diff --git a/setup.py b/setup.py index f35ad7e..e482bcb 100644 --- a/setup.py +++ b/setup.py @@ -49,7 +49,6 @@ def get_version(module): 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.2', - 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Topic :: Internet :: WWW/HTTP', ] diff --git a/tox.ini b/tox.ini index 067966f..2bba69b 100644 --- a/tox.ini +++ b/tox.ini @@ -1,7 +1,7 @@ [tox] envlist = py27-flake8, - py27, py32, py33, py34, py35 + py27, py32, py34, py35 [testenv] commands = python setup.py test