Author: Paweł Piotr Przeradowski <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit