Skip to content

Instantly share code, notes, and snippets.

@bitprophet
Created August 19, 2011 01:59
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save bitprophet/ea5436e85960df773f79 to your computer and use it in GitHub Desktop.
Allow new values in settings().
Allow setting new values on env in settings().
Add a test, too.
diff --git a/fabric/context_managers.py b/fabric/context_managers.py
--- a/fabric/context_managers.py
+++ b/fabric/context_managers.py
@@ -85,13 +85,19 @@ def _setenv(**kwargs):
to be used directly.
"""
previous = {}
+ newsettings = []
for key, value in kwargs.iteritems():
- previous[key] = env[key]
+ try:
+ previous[key] = env[key]
+ except KeyError:
+ newsettings.append(key)
env[key] = value
try:
yield
finally:
env.update(previous)
+ for key in newsettings:
+ env.pop(key)
def settings(*args, **kwargs):
diff --git a/tests/test_context_managers.py b/tests/test_context_managers.py
--- a/tests/test_context_managers.py
+++ b/tests/test_context_managers.py
@@ -15,6 +15,12 @@ def test_settings_restored():
assert env.user == "foo"
assert env.user == "bar"
+def test_settings_extras():
+ assert "newkey" not in env
+ with settings(newkey="foo"):
+ assert env.newkey == "foo"
+ assert "newkey" not in env
+
#
# cd()
#
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment