[pypy-commit] pypy py3k: add sys._xoptions
pjenvey
noreply at buildbot.pypy.org
Sat Feb 23 00:30:05 CET 2013
Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r61628:5fae4dd9855f
Date: 2013-02-22 15:28 -0800
http://bitbucket.org/pypy/pypy/changeset/5fae4dd9855f/
Log: add sys._xoptions
diff --git a/pypy/interpreter/app_main.py b/pypy/interpreter/app_main.py
--- a/pypy/interpreter/app_main.py
+++ b/pypy/interpreter/app_main.py
@@ -11,6 +11,7 @@
-h, --help show this help message and exit
-m mod library module to be run as a script (terminates option list)
-W arg warning control (arg is action:message:category:module:lineno)
+ -X opt set implementation-specific option
-E ignore environment variables (such as PYTHONPATH)
-R ignored (see http://bugs.python.org/issue14621)
--version print the PyPy version
@@ -325,6 +326,9 @@
options["run_module"] = runmodule
return ['-m'] + list(iterargv)
+def X_option(options, xoption, iterargv):
+ options["_xoptions"].append(xoption)
+
def W_option(options, warnoption, iterargv):
options["warnoptions"].append(warnoption)
@@ -353,6 +357,7 @@
'--help': (print_help, None),
'm': (m_option, Ellipsis),
'W': (W_option, Ellipsis),
+ 'X': (X_option, Ellipsis),
'V': (print_version, None),
'--version': (print_version, None),
'--info': (print_info, None),
@@ -382,6 +387,7 @@
import os
options = default_options.copy()
options['warnoptions'] = []
+ options['_xoptions'] = []
iterargv = iter(argv)
argv = None
@@ -445,6 +451,9 @@
sys.flags = type(sys.flags)(flags)
sys.dont_write_bytecode = bool(sys.flags.dont_write_bytecode)
+ sys._xoptions = dict(x.split('=', 1) if '=' in x else (x, True)
+ for x in options['_xoptions'])
+
## if not we_are_translated():
## for key in sorted(options):
## print '%40s: %s' % (key, options[key])
diff --git a/pypy/interpreter/test2/test_app_main.py b/pypy/interpreter/test2/test_app_main.py
--- a/pypy/interpreter/test2/test_app_main.py
+++ b/pypy/interpreter/test2/test_app_main.py
@@ -170,6 +170,10 @@
self.check(['-Wbog'], {}, sys_argv=[''], warnoptions=['bog'], run_stdin=True)
self.check(['-W', 'ab', '-SWc'], {}, sys_argv=[''], warnoptions=['ab', 'c'],
run_stdin=True, no_site=1)
+ self.check(['-X', 'foo'], {}, sys_argv=[''], _xoptions=['foo'],
+ run_stdin=True)
+ self.check(['-X', 'foo=bar', '-Xbaz'], {}, sys_argv=[''],
+ _xoptions=['foo=bar', 'baz'], run_stdin=True)
self.check([], {'PYTHONDEBUG': '1'}, sys_argv=[''], run_stdin=True, debug=1)
self.check([], {'PYTHONDONTWRITEBYTECODE': '1'}, sys_argv=[''], run_stdin=True, dont_write_bytecode=1)
@@ -705,6 +709,13 @@
assert "__init__ argv: ['-m', 'extra']" in data
assert "__main__ argv: [%r, 'extra']" % p in data
+ def test_xoptions(self):
+ data = self.run('-Xfoo -Xbar=baz -Xquux=cdrom.com=FreeBSD -Xx=X,d=e '
+ '-c "import sys;print(sorted(sys._xoptions.items()))"')
+ expected = ("[('bar', 'baz'), ('foo', True), "
+ "('quux', 'cdrom.com=FreeBSD'), ('x', 'X,d=e')]")
+ assert expected in data
+
def test_pythoninspect_doesnt_override_isatty(self):
os.environ['PYTHONINSPECT_'] = '1'
try:
diff --git a/pypy/module/sys/__init__.py b/pypy/module/sys/__init__.py
--- a/pypy/module/sys/__init__.py
+++ b/pypy/module/sys/__init__.py
@@ -92,6 +92,7 @@
'callstats' : 'app.callstats',
'copyright' : 'app.copyright_str',
'flags' : 'app.null_sysflags',
+ '_xoptions' : 'app.null__xoptions',
}
def setbuiltinmodule(self, w_module, name):
diff --git a/pypy/module/sys/app.py b/pypy/module/sys/app.py
--- a/pypy/module/sys/app.py
+++ b/pypy/module/sys/app.py
@@ -104,3 +104,4 @@
hash_randomization = structseqfield(12)
null_sysflags = sysflags((0,)*13)
+null__xoptions = {}
More information about the pypy-commit
mailing list