def test_dotenv_nonempty_selfreferential_interpolation(): stream = StringIO(u'some_path="${some_path}:a/b/c"\n') stream.seek(0) assert u'some_path' not in os.environ with restore_os_environ(): os.environ[u'some_path'] = u'x/y/z' parsed_dict = dotenv_values(stream=stream) assert {u'some_path': u'x/y/z:a/b/c'} == parsed_dict
def test_dotenv_values_stream(env, string, interpolate, expected): with mock.patch.dict(os.environ, env, clear=True): stream = StringIO(string) stream.seek(0) result = dotenv.dotenv_values(stream=stream, interpolate=interpolate) assert result == expected
def test_dotenv_values_utf_8(): stream = StringIO(u"a=à\n") load_dotenv(stream=stream) if PY2: assert os.environ["a"] == u"à".encode(sys.getfilesystemencoding()) else: assert os.environ["a"] == "à"
def recipe_env(self): _platform = platform.system().lower() recipe = self.recipe() or {} env = {} def load_env(**kwargs): return { k: v for k, v in dotenv_values(**kwargs).items() if v is not None # exclude config section line } def file_loader(d): return [ d[k] for k in sorted( [k for k, v in d.items() if isinstance(v, string_types)]) ] dot_env = recipe.get("dotenv") if dot_env: # non platform specific dotenv env_files = file_loader(dot_env) if isinstance(dot_env.get(_platform), dict): # platform specific dotenv env_files += file_loader(dot_env[_platform]) for file in env_files: env.update(load_env(dotenv_path=file)) recipe_env = recipe.get("env") if recipe_env: stream = StringIO() _parser = ConfigParser() _parser.optionxform = str # to prevent turning keys into lowercase _parser.read_dict({"env": recipe_env}) _parser.write(stream) stream.seek(0) # must reset buffer env.update(load_env(stream=stream)) env.update({ "REZUP_CONTAINER": self._container.name(), "REZUP_USING_REMOTE": "yes" if self._is_pulled else "", }) return env
def test_load_dotenv_utf_8(): stream = StringIO("a=à") result = dotenv.load_dotenv(stream=stream) assert result is True if PY2: assert os.environ == {"a": "à".encode(sys.getfilesystemencoding())} else: assert os.environ == {"a": "à"}
def test_dotenv_values_export(): stream = StringIO('export foo=bar\n') stream.seek(0) load_dotenv(stream=stream) assert 'foo' in os.environ assert os.environ['foo'] == 'bar'
def test_dotenv_values_stream(): stream = StringIO(u'hello="it works!😃"\nDOTENV=${hello}\n') stream.seek(0) parsed_dict = dotenv_values(stream=stream) assert 'DOTENV' in parsed_dict assert parsed_dict['DOTENV'] == u'it works!😃'
def test_dotenv_empty_selfreferential_interpolation(): stream = StringIO(u'some_path="${some_path}:a/b/c"\n') stream.seek(0) assert u'some_path' not in os.environ parsed_dict = dotenv_values(stream=stream) assert {u'some_path': u':a/b/c'} == parsed_dict
def test_parse_stream(test_input, expected): result = parse_stream(StringIO(test_input)) assert list(result) == expected
def test_dotenv_values_no_interpolate_strict(): stream = StringIO(u'no_interpolate_strict=${MYVAR}') stream.seek(0) parsed_dict = dotenv_values(stream=stream, interpolate=False) assert 'no_interpolate_strict' in parsed_dict assert parsed_dict['no_interpolate_strict'] == u'${MYVAR}'