Source code for pyquickhelper.ipythonhelper.magic_class
# -*- coding: utf-8 -*-
"""
Magic command to handle files
:githublink:`%|py|6`
"""
from __future__ import print_function
import warnings
with warnings.catch_warnings():
warnings.simplefilter("ignore")
from IPython.core.magic import Magics, magics_class
[docs]@magics_class
class MagicClassWithHelpers(Magics):
"""
Provides some functions reused in others classes inherited from *Magics*.
The class should not be registered as it is but should be
used as an ancestor for another class.
It can be registered this way::
def register_file_magics():
from IPython import get_ipython
ip = get_ipython()
ip.register_magics(MagicFile)
:githublink:`%|py|26`
"""
_parser_store = {}
@property
def Context(self):
"""
return the context or None
:githublink:`%|py|34`
"""
if self.shell is None:
return None
return self.shell.user_ns
[docs] def add_context(self, context):
"""
add context to the class, mostly for debug purpose
:param context: dictionary
:githublink:`%|py|44`
"""
if self.shell is None:
class EmptyClass:
def __init__(self):
self.user_ns = {}
self.shell = EmptyClass()
for k, v in context.items():
self.shell.user_ns[k] = v
[docs] def get_parser(self, parser_class, name):
"""
Returns a parser for a magic command, initializes it
if it does not exists, it creates it. The parsers are stored
in static member *_parser_store*.
:param parser_class: the parser to use for this magic command
:param name: name of the static variable which will contain the parser
See method :meth:`get_args <pyquickhelper.ipythonhelper.magic_class.MagicClassWithHelpers.get_args>`
:githublink:`%|py|64`
"""
res = MagicClassWithHelpers._parser_store.get(name, None)
if res is None:
MagicClassWithHelpers._parser_store[name] = parser_class()
return MagicClassWithHelpers._parser_store[name]
return res
[docs] def get_args(self, line, parser, print_function=print):
"""
parser a command line with a given parser
:param line: string (command line)
:param parser: parser which has to be used to parse *line*
:param print_function: function to use to display the help
:return: results
If the line cannot be parsed, the function displays the help
using function print.
Example::
@line_magic
def custom_magic_command(self, line):
parser = self.get_parser(MagicClass.custom_magic_command_parser, "custom_magic_command")
args = self.get_args(line, parser)
if args is not None:
param = args.param
# ....
:githublink:`%|py|93`
"""
try:
args = parser.parse_cmd(line, context=self.Context)
except SystemExit: # pragma: no cover
print_function(parser.format_usage())
args = None
return args