Author: Pawe&#322; Piotr Przeradowski <przeradow...@gmail.com>
Branch: pythoninspect-fix
Changeset: r65664:8f98f2b808f9
Date: 2013-07-23 22:52 +0200
http://bitbucket.org/pypy/pypy/changeset/8f98f2b808f9/

Log:    implement __pypy__.os.real_getenv with a test

diff --git a/pypy/module/__pypy__/__init__.py b/pypy/module/__pypy__/__init__.py
--- a/pypy/module/__pypy__/__init__.py
+++ b/pypy/module/__pypy__/__init__.py
@@ -50,6 +50,13 @@
     }
 
 
+class OsModule(MixedModule):
+    appleveldefs = {}
+    interpleveldefs = {
+        'real_getenv': 'interp_os.real_getenv'
+    }
+
+
 class Module(MixedModule):
     appleveldefs = {
     }
@@ -82,6 +89,7 @@
         "time": TimeModule,
         "thread": ThreadModule,
         "intop": IntOpModule,
+        "os": OsModule,
     }
 
     def setup_after_space_initialization(self):
diff --git a/pypy/module/__pypy__/interp_os.py 
b/pypy/module/__pypy__/interp_os.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/__pypy__/interp_os.py
@@ -0,0 +1,9 @@
+from rpython.rtyper.module.ll_os_environ import getenv_llimpl
+
+from pypy.interpreter.gateway import unwrap_spec
+
+
+@unwrap_spec(name=str)
+def real_getenv(space, name):
+    """Get an OS environment value skipping Python cache"""
+    return space.wrap(getenv_llimpl(name))
diff --git a/pypy/module/__pypy__/test/test_os.py 
b/pypy/module/__pypy__/test/test_os.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/__pypy__/test/test_os.py
@@ -0,0 +1,16 @@
+class AppTestOs:
+    spaceconfig = dict(usemodules=['__pypy__'])
+
+    def test_real_getenv(self):
+        import __pypy__.os
+        import os
+
+        key = 'UNLIKELY_SET'
+        assert key not in os.environ
+        os.putenv(key, '42')
+        # this one skips Python cache
+        assert __pypy__.os.real_getenv(key) == '42'
+        # this one can only see things set on interpter start (cached)
+        assert os.getenv(key) is None
+        os.unsetenv(key)
+        assert __pypy__.os.real_getenv(key) is None
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to