##// END OF EJS Templates
%time magic displays output even when code ends in semicolon #13837 (#13841)...
%time magic displays output even when code ends in semicolon #13837 (#13841) After the magic is evaluated and the result is calculated, the modification tests whether the evaluated magic was _time_ and whether semicolon is the final character. The result is killed if both things happen. My choice would be to remove the _time_ test, so a semicolon would prevent the print of the output of any magic, but this is only a suggestion I keep open. I did not write any automated test, but I can do that once (and if) the solution is accepted. [#13837](https://github.com/ipython/ipython/issues/13837) points to [#10227](https://github.com/ipython/ipython/issues/10227) (_Cell magic result in printing the last evaluated line even if followed by semicolon_). There, somebody says that ';' may be a meaningful character because we could have a C++ expression, for instance. The IPython repository says the documentation for other languages is in Jupyter. I ran Jupyter on my browser with C++ and saw that a semicolon after the last statement prevents the output to be printed (a semicolon between 2 statements in a cell seems to be necessary, though). See attached file for simple examples. Therefore, it seems that the semicolon at the end in C++ already behaves the same way that in Python and is not required by the interpreter. ![IPython_Cpp](https://user-images.githubusercontent.com/5789832/203915670-513514d6-70a4-4efa-b4f4-9a8293d5a1ff.png)

File last commit:

r27548:6d40fd89 merge
r28070:87de97f2 merge
Show More
test_deepreload.py
57 lines | 1.8 KiB | text/x-python | PythonLexer
# -*- coding: utf-8 -*-
"""Test suite for the deepreload module."""
# Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
import types
from pathlib import Path
import pytest
from tempfile import TemporaryDirectory
from IPython.lib.deepreload import modules_reloading
from IPython.lib.deepreload import reload as dreload
from IPython.utils.syspathcontext import prepended_to_syspath
def test_deepreload():
"Test that dreload does deep reloads and skips excluded modules."
with TemporaryDirectory() as tmpdir:
with prepended_to_syspath(tmpdir):
tmpdirpath = Path(tmpdir)
with open(tmpdirpath / "A.py", "w", encoding="utf-8") as f:
f.write("class Object:\n pass\nok = True\n")
with open(tmpdirpath / "B.py", "w", encoding="utf-8") as f:
f.write("import A\nassert A.ok, 'we are fine'\n")
import A
import B
# Test that A is not reloaded.
obj = A.Object()
dreload(B, exclude=["A"])
assert isinstance(obj, A.Object) is True
# Test that an import failure will not blow-up us.
A.ok = False
with pytest.raises(AssertionError, match="we are fine"):
dreload(B, exclude=["A"])
assert len(modules_reloading) == 0
assert not A.ok
# Test that A is reloaded.
obj = A.Object()
A.ok = False
dreload(B)
assert A.ok
assert isinstance(obj, A.Object) is False
def test_not_module():
pytest.raises(TypeError, dreload, "modulename")
def test_not_in_sys_modules():
fake_module = types.ModuleType("fake_module")
with pytest.raises(ImportError, match="not in sys.modules"):
dreload(fake_module)