Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
_interpreters.bind() -> _interpreters.set___main___attrs()
  • Loading branch information
ericsnowcurrently committed Nov 6, 2023
commit 8e99e66c186a9a89ed113834eaadf4d7a98943a8
8 changes: 6 additions & 2 deletions Lib/test/support/interpreters.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,14 @@ def close(self):
"""
return _interpreters.destroy(self._id)

# XXX setattr?
def bind(self, ns=None, /, **kwargs):
"""Bind the given values into the interpreter's __main__."""
"""Bind the given values into the interpreter's __main__.

The values must be shareable.
"""
ns = dict(ns, **kwargs) if ns is not None else kwargs
_interpreters.bind(self._id, ns)
_interpreters.set___main___attrs(self._id, ns)

# XXX Rename "run" to "exec"?
# XXX Do not allow init to overwrite (by default)?
Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test__xxinterpchannels.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,7 @@ def test_run_string_arg_unresolved(self):
cid = channels.create()
interp = interpreters.create()

interpreters.bind(interp, dict(cid=cid.send))
interpreters.set___main___attrs(interp, dict(cid=cid.send))
out = _run_output(interp, dedent("""
import _xxinterpchannels as _channels
print(cid.end)
Expand Down
14 changes: 7 additions & 7 deletions Lib/test/test__xxsubinterpreters.py
Original file line number Diff line number Diff line change
Expand Up @@ -659,7 +659,7 @@ def test_shareable_types(self):
]
for obj in objects:
with self.subTest(obj):
interpreters.bind(interp, dict(obj=obj))
interpreters.set___main___attrs(interp, dict(obj=obj))
interpreters.run_string(
interp,
f'assert(obj == {obj!r})',
Expand Down Expand Up @@ -790,7 +790,7 @@ def test_with_shared(self):
with open({w}, 'wb') as chan:
pickle.dump(ns, chan)
""")
interpreters.bind(self.id, shared)
interpreters.set___main___attrs(self.id, shared)
interpreters.run_string(self.id, script)
with open(r, 'rb') as chan:
ns = pickle.load(chan)
Expand All @@ -812,7 +812,7 @@ def test_shared_overwrites(self):
ns2 = dict(vars())
del ns2['__builtins__']
""")
interpreters.bind(self.id, shared)
interpreters.set___main___attrs(self.id, shared)
interpreters.run_string(self.id, script)

r, w = os.pipe()
Expand Down Expand Up @@ -844,7 +844,7 @@ def test_shared_overwrites_default_vars(self):
with open({w}, 'wb') as chan:
pickle.dump(ns, chan)
""")
interpreters.bind(self.id, shared)
interpreters.set___main___attrs(self.id, shared)
interpreters.run_string(self.id, script)
with open(r, 'rb') as chan:
ns = pickle.load(chan)
Expand Down Expand Up @@ -951,7 +951,7 @@ def script():
with open(w, 'w', encoding="utf-8") as spipe:
with contextlib.redirect_stdout(spipe):
print('it worked!', end='')
interpreters.bind(self.id, dict(w=w))
interpreters.set___main___attrs(self.id, dict(w=w))
interpreters.run_func(self.id, script)

with open(r, encoding="utf-8") as outfile:
Expand All @@ -968,7 +968,7 @@ def script():
with contextlib.redirect_stdout(spipe):
print('it worked!', end='')
def f():
interpreters.bind(self.id, dict(w=w))
interpreters.set___main___attrs(self.id, dict(w=w))
interpreters.run_func(self.id, script)
t = threading.Thread(target=f)
t.start()
Expand All @@ -989,7 +989,7 @@ def script():
with contextlib.redirect_stdout(spipe):
print('it worked!', end='')
code = script.__code__
interpreters.bind(self.id, dict(w=w))
interpreters.set___main___attrs(self.id, dict(w=w))
interpreters.run_func(self.id, code)

with open(r, encoding="utf-8") as outfile:
Expand Down
14 changes: 8 additions & 6 deletions Modules/_xxsubinterpretersmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -403,10 +403,12 @@ PyDoc_STRVAR(get_main_doc,
Return the ID of main interpreter.");

static PyObject *
interp_bind(PyObject *self, PyObject *args)
interp_set___main___attrs(PyObject *self, PyObject *args)
{
PyObject *id, *updates;
if (!PyArg_ParseTuple(args, "OO:" MODULE_NAME ".bind", &id, &updates)) {
if (!PyArg_ParseTuple(args, "OO:" MODULE_NAME ".set___main___attrs",
&id, &updates))
{
return NULL;
}

Expand Down Expand Up @@ -449,8 +451,8 @@ interp_bind(PyObject *self, PyObject *args)
Py_RETURN_NONE;
}

PyDoc_STRVAR(bind_doc,
"bind(id, ns)\n\
PyDoc_STRVAR(set___main___attrs_doc,
"set___main___attrs(id, ns)\n\
\n\
Bind the given attributes in the interpreter's __main__ module.");

Expand Down Expand Up @@ -750,8 +752,8 @@ static PyMethodDef module_functions[] = {
{"run_func", _PyCFunction_CAST(interp_run_func),
METH_VARARGS | METH_KEYWORDS, run_func_doc},

{"bind", _PyCFunction_CAST(interp_bind),
METH_VARARGS, bind_doc},
{"set___main___attrs", _PyCFunction_CAST(interp_set___main___attrs),
METH_VARARGS, set___main___attrs_doc},
{"is_shareable", _PyCFunction_CAST(object_is_shareable),
METH_VARARGS | METH_KEYWORDS, is_shareable_doc},

Expand Down