Custom lazy magics do not show help (?) until they are imported
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 48/100
Piste de recherche
Commencez par InteractiveShell et le point d’entrée register_lazy du magic manager, puis reproduisez les exemples duals de line/cell et de time intégré avec run_cell. Suivez la manière dont la recherche d’aide et le lazy registration résolvent chaque magic form ; le travail est terminé lorsque la première demande d’aide fonctionne de manière cohérente et que l’écrasement d’une forme préserve l’autre comportement intégré.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Prior to 9.17.0 it did not work at all. Since 9.17.0 it sometimes works on the second attempt (depending on the order of registration):
import sys, types
from IPython.core.interactiveshell import InteractiveShell
from IPython.core.magic import Magics, cell_magic, line_magic, magics_class
@magics_class
class LineHalf(Magics):
@line_magic
def dual(self, line):
"""The line half of %dual."""
@magics_class
class CellHalf(Magics):
@cell_magic
def dual(self, line, cell):
"""The cell half of %%dual."""
sys.modules["provider"] = provider = types.ModuleType("provider")
provider.LineHalf, provider.CellHalf = LineHalf, CellHalf
ip = InteractiveShell()
ip.magics_manager.register_lazy("dual", "provider:LineHalf", "line")
ip.magics_manager.register_lazy("dual", "provider:CellHalf", "cell")
ip.run_cell("%%dual?") # does not work "Object `%%dual` not found."
ip.run_cell("%%dual?") # works, shows "Docstring: The cell half of %%dual."
If we swap registration order neither works:
import sys, types
from IPython.core.interactiveshell import InteractiveShell
from IPython.core.magic import Magics, cell_magic, line_magic, magics_class
@magics_class
class LineHalf(Magics):
@line_magic
def dual(self, line):
"""The line half of %dual."""
@magics_class
class CellHalf(Magics):
@cell_magic
def dual(self, line, cell):
"""The cell half of %%dual."""
sys.modules["provider"] = provider = types.ModuleType("provider")
provider.LineHalf, provider.CellHalf = LineHalf, CellHalf
ip = InteractiveShell()
ip.magics_manager.register_lazy("dual", "provider:CellHalf", "cell")
ip.magics_manager.register_lazy("dual", "provider:LineHalf", "line")
ip.run_cell("%%dual?") # does not work "Object `%%dual` not found."
ip.run_cell("%%dual?") # does not work "Object `%%dual` not found."
Also, there are issues when overwriting built-in dual magic with say only a line magic:
import sys, types
from IPython.core.interactiveshell import InteractiveShell
from IPython.core.magic import Magics, line_magic, magics_class
@magics_class
class MyMagics(Magics):
@line_magic
def time(self, line):
"""My own %time."""
sys.modules["provider"] = provider = types.ModuleType("provider")
provider.MyMagics = MyMagics
ip = InteractiveShell()
ip.magics_manager.register_lazy("time", "provider:MyMagics")
ip.run_cell("time?") # my own %time
ip.run_cell("%%time?") # expected: IPython's %%time docs
ip.run_cell("%%time\npass") # expected: a wall time report
- Langage dominant
- Python
- Étoiles
- 16.8k
- Forks
- 4.5k
- Merge moyen
- 5 h 50 min
- PR mergées (30 j)
- 5
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de ipython/ipython
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 78/100
-
autoreload breaks on partial Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
-
bug magics
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
Interaction with PEP 823 and 824 Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
Toutes les issues de ipython/ipython
Issues similaires
-
bug priority:low
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
CyberAgent/psd2svg#436 ·
-
area/install-update comp/cli comp/desktop P3 sweeper:risk-compatibility type/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
NousResearch/hermes-agent#122386 · 1 commentaire ·
-
ai-generated
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
vllm-project/production-stack#1105 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100