-
-
Notifications
You must be signed in to change notification settings - Fork 40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Strange behaviors when using rich package in dealing with multiple line representation in Spyder console #494
Comments
Hi there @MekJohn thank you for the feedback! I think this something that needs to be solved over QtConsole. In fact, we are aiming to improve the behavior over jupyter/qtconsole#616. However, seems like we need further work over there. Running your example code with the changes over there I see the following: |
Quick update to say that after checking the Rich Console API, using jupyter/qtconsole#616 and with the following example code: import time
from rich.console import Console
from rich.progress import Progress
console = Console(force_jupyter=False)
with Progress(console=console) as progress:
task1 = progress.add_task("[red]Downloading...", total=1000)
task2 = progress.add_task("[green]Processing...", total=1000)
task3 = progress.add_task("[cyan]Cooking...", total=1000)
while not progress.finished:
progress.update(task1, advance=0.5)
progress.update(task2, advance=0.3)
progress.update(task3, advance=0.9)
time.sleep(0.02) I'm able to see the following behavior 🎉 : |
@dalthviz, I think to solve this we can overload the Rich That'd be similar to what we do to patch QApplication in our kernel: spyder-kernels/spyder_kernels/customize/spydercustomize.py Lines 88 to 96 in b6ffbb4
|
Checking over Rich, maybe what is needed is to change the handling done over That is the function that is called when nothing is passed over the Seems to me that instead of being handle along side Jupyter Notebooks probably QtConsole should be handle with the IPython case (returning def _is_jupyter() -> bool: # pragma: no cover
"""Check if we're running in a Jupyter notebook."""
try:
get_ipython # type: ignore[name-defined]
except NameError:
return False
ipython = get_ipython() # type: ignore[name-defined]
shell = ipython.__class__.__name__
if (
"google.colab" in str(ipython.__class__)
or os.getenv("DATABRICKS_RUNTIME_VERSION")
):
return True # Jupyter notebook
elif shell in ["TerminalInteractiveShell", "ZMQInteractiveShell"]:
return False # Terminal running IPython or QtConsole
else:
return False # Other type (?) What do you think @ccordoba12 ? Or even if no changes are done over the Rich package side, should |
Thanks for checking that @dalthviz! Unfortunately we can't add if ...:
...
elif shell in ["TerminalInteractiveShell", "ZMQInteractiveShell"]:
return False # Terminal running IPython or QtConsole because that will return However, we have our own shell class in Spyder-kernels ( Since that's a very simple change, I think you can submit a PR to Rich with it and it'll be accepted. |
Actually, since spyder-kernels uses So I guess from the Spyder side things are already working (as long as you have QtConsole 5.6.1 installed)? Maybe for the QtConsole side of things we should just create some documentation related with tips to be able to use Rich or something like that? 🤔 |
Yeah! That's really nice 👍🏽
The problem is that it's not possible for the kernel to tell if it's running code that was sent from QtConsole or JupyterLab (in other words, it's frontend agnostic). And that means that that We could implement a proper solution in Spyder (to support both Spyder-notebook and the IPython console) by sending to the kernel the current plugin with focus and making |
Using rich python package all going fine if you use only one line on live console display, but something weird come up when multiple line display are required with other complex objects like progress bars or tables ...
One line progress is ok in the spider console. See the following code took from rich documentation.
The weird things happen when you have to use multiple lines representation (also this example is taken from rich documentation).
In Spider console this last code block displays a result where only the last line is kept updated in place, printing others in multiple lines for each updates. See below.
In win console obviously there aren't any problems about that. All the three lines are kept updated in place.
Is there a way to solve it?
Win 11
Python 3.11
Spyder IDE 5.4.4
spyder-kernels 2.4.2
PyQt5 5.15.10
PyQt5-Qt5 5.15.2
PyQt5-sip 12.13.0_
The text was updated successfully, but these errors were encountered: