diff --git a/Lib/os.py b/Lib/os.py index 5b8aa25da16..d72f32b22ee 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -387,22 +387,32 @@ class _Environ(MutableMapping): self.data = data = {} for key, value in environ.items(): data[keymap(key)] = str(value) + def __getitem__(self, key): return self.data[self.keymap(key)] + def __setitem__(self, key, value): value = str(value) self.putenv(key, value) self.data[self.keymap(key)] = value + def __delitem__(self, key): self.unsetenv(key) del self.data[self.keymap(key)] + def __iter__(self): for key in self.data: yield key + def __len__(self): return len(self.data) + + def __repr__(self): + return 'environ({!r})'.format(self.data) + def copy(self): return dict(self) + def setdefault(self, key, value): if key not in self: self[key] = value diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 907f94312d8..d7f763f8da1 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -400,6 +400,14 @@ class EnvironTests(mapping_tests.BasicTestMappingProtocol): for key, value in self._reference().items(): self.assertEqual(os.environ.get(key), value) + # Issue 7310 + def test___repr__(self): + """Check that the repr() of os.environ looks like environ({...}).""" + env = os.environ + self.assertTrue(isinstance(env.data, dict)) + self.assertEqual(repr(env), 'environ({!r})'.format(env.data)) + + class WalkTests(unittest.TestCase): """Tests for os.walk().""" diff --git a/Misc/NEWS b/Misc/NEWS index 835bb921d5a..9f1b145af56 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -79,6 +79,8 @@ Core and Builtins Library ------- +- Issue #7310: fix the __repr__ of os.environ to show the environment variables. + - Issue #7970: email.Generator.flatten now correctly flattens message/rfc822 messages parsed by email.Parser.HeaderParser.