Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Custom lazy magics do not show help (?) until they are imported

Ouverte
#15,383 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
48/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
python
Domaine
cli

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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de ipython/ipython

Toutes les issues de ipython/ipython

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.