summaryrefslogtreecommitdiff
path: root/fixtures/_fixtures/environ.py
diff options
context:
space:
mode:
Diffstat (limited to 'fixtures/_fixtures/environ.py')
-rw-r--r--fixtures/_fixtures/environ.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/fixtures/_fixtures/environ.py b/fixtures/_fixtures/environ.py
new file mode 100644
index 0000000..5494429
--- /dev/null
+++ b/fixtures/_fixtures/environ.py
@@ -0,0 +1,58 @@
+# fixtures: Fixtures with cleanups for testing and convenience.
+#
+# Copyright (c) 2010, 2011, Robert Collins <robertc@robertcollins.net>
+#
+# Licensed under either the Apache License, Version 2.0 or the BSD 3-clause
+# license at the users choice. A copy of both licenses are available in the
+# project source as Apache-2.0 and BSD. You may not use this file except in
+# compliance with one of these two licences.
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under these licenses is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# license you chose for the specific language governing permissions and
+# limitations under that license.
+
+__all__ = [
+ 'EnvironmentVariable',
+ 'EnvironmentVariableFixture'
+ ]
+
+import os
+
+from fixtures import Fixture
+
+
+class EnvironmentVariable(Fixture):
+ """Isolate a specific environment variable."""
+
+ def __init__(self, varname, newvalue=None):
+ """Create an EnvironmentVariable fixture.
+
+ :param varname: the name of the variable to isolate.
+ :param newvalue: A value to set the variable to. If None, the variable
+ will be deleted.
+
+ During setup the variable will be deleted or assigned the requested
+ value, and this will be restored in cleanUp.
+ """
+ super(EnvironmentVariable, self).__init__()
+ self.varname = varname
+ self.newvalue = newvalue
+
+ def setUp(self):
+ super(EnvironmentVariable, self).setUp()
+ varname = self.varname
+ orig_value = os.environ.get(varname)
+ if orig_value is not None:
+ self.addCleanup(os.environ.__setitem__, varname, orig_value)
+ del os.environ[varname]
+ else:
+ self.addCleanup(os.environ.pop, varname, '')
+ if self.newvalue is not None:
+ os.environ[varname] = self.newvalue
+ else:
+ os.environ.pop(varname, '')
+
+
+EnvironmentVariableFixture = EnvironmentVariable