Format: text/x-python
⬇ Download File (4.8 KB)
   1  #-----------------------------------------------------------------------------
   2  # Copyright (C) 2010-2011, IPython Development Team.
   3  #
   4  # Distributed under the terms of the Modified BSD License.
   5  #
   6  # The full license is in the file COPYING.txt, distributed with this software.
   7  #-----------------------------------------------------------------------------
   8  
   9  import argparse
  10  import sys
  11  
  12  from IPython.core.magic_arguments import (argument, argument_group, kwds,
  13      magic_arguments, parse_argstring, real_name)
  14  
  15  LEADING_SPACE = "" if sys.version_info > (3, 13) else " "
  16  
  17  
  18  @magic_arguments()
  19  @argument('-f', '--foo', help="an argument")
  20  def magic_foo1(self, args):
  21      """ A docstring.
  22      """
  23      return parse_argstring(magic_foo1, args)
  24  
  25  
  26  @magic_arguments()
  27  def magic_foo2(self, args):
  28      """ A docstring.
  29      """
  30      return parse_argstring(magic_foo2, args)
  31  
  32  
  33  @magic_arguments()
  34  @argument('-f', '--foo', help="an argument")
  35  @argument_group('Group')
  36  @argument('-b', '--bar', help="a grouped argument")
  37  @argument_group('Second Group')
  38  @argument('-z', '--baz', help="another grouped argument")
  39  def magic_foo3(self, args):
  40      """ A docstring.
  41      """
  42      return parse_argstring(magic_foo3, args)
  43  
  44  
  45  @magic_arguments()
  46  @kwds(argument_default=argparse.SUPPRESS)
  47  @argument('-f', '--foo', help="an argument")
  48  def magic_foo4(self, args):
  49      """ A docstring.
  50      """
  51      return parse_argstring(magic_foo4, args)
  52  
  53  
  54  @magic_arguments('frobnicate')
  55  @argument('-f', '--foo', help="an argument")
  56  def magic_foo5(self, args):
  57      """ A docstring.
  58      """
  59      return parse_argstring(magic_foo5, args)
  60  
  61  
  62  @magic_arguments()
  63  @argument('-f', '--foo', help="an argument")
  64  def magic_magic_foo(self, args):
  65      """ A docstring.
  66      """
  67      return parse_argstring(magic_magic_foo, args)
  68  
  69  
  70  @magic_arguments()
  71  @argument('-f', '--foo', help="an argument")
  72  def foo(self, args):
  73      """ A docstring.
  74      """
  75      return parse_argstring(foo, args)
  76  
  77  
  78  def test_magic_arguments():
  79      # “optional arguments” was replaced with “options” in argparse help
  80      # https://docs.python.org/3/whatsnew/3.10.html#argparse
  81      # https://bugs.python.org/issue9694
  82      options = "optional arguments" if sys.version_info < (3, 10) else "options"
  83  
  84      assert (
  85          magic_foo1.__doc__
  86          == f"::\n\n  %foo1 [-f FOO]\n\n{LEADING_SPACE}A docstring.\n\n{options}:\n  -f FOO, --foo FOO  an argument\n"
  87      )
  88      assert getattr(magic_foo1, "argcmd_name", None) == None
  89      assert real_name(magic_foo1) == "foo1"
  90      assert magic_foo1(None, "") == argparse.Namespace(foo=None)
  91      assert hasattr(magic_foo1, "has_arguments")
  92  
  93      assert magic_foo2.__doc__ == f"::\n\n  %foo2\n\n{LEADING_SPACE}A docstring.\n"
  94      assert getattr(magic_foo2, "argcmd_name", None) == None
  95      assert real_name(magic_foo2) == "foo2"
  96      assert magic_foo2(None, "") == argparse.Namespace()
  97      assert hasattr(magic_foo2, "has_arguments")
  98  
  99      assert (
 100          magic_foo3.__doc__
 101          == f"::\n\n  %foo3 [-f FOO] [-b BAR] [-z BAZ]\n\n{LEADING_SPACE}A docstring.\n\n{options}:\n  -f FOO, --foo FOO  an argument\n\nGroup:\n  -b BAR, --bar BAR  a grouped argument\n\nSecond Group:\n  -z BAZ, --baz BAZ  another grouped argument\n"
 102      )
 103      assert getattr(magic_foo3, "argcmd_name", None) == None
 104      assert real_name(magic_foo3) == "foo3"
 105      assert magic_foo3(None, "") == argparse.Namespace(bar=None, baz=None, foo=None)
 106      assert hasattr(magic_foo3, "has_arguments")
 107  
 108      assert (
 109          magic_foo4.__doc__
 110          == f"::\n\n  %foo4 [-f FOO]\n\n{LEADING_SPACE}A docstring.\n\n{options}:\n  -f FOO, --foo FOO  an argument\n"
 111      )
 112      assert getattr(magic_foo4, "argcmd_name", None) == None
 113      assert real_name(magic_foo4) == "foo4"
 114      assert magic_foo4(None, "") == argparse.Namespace()
 115      assert hasattr(magic_foo4, "has_arguments")
 116  
 117      assert (
 118          magic_foo5.__doc__
 119          == f"::\n\n  %frobnicate [-f FOO]\n\n{LEADING_SPACE}A docstring.\n\n{options}:\n  -f FOO, --foo FOO  an argument\n"
 120      )
 121      assert getattr(magic_foo5, "argcmd_name", None) == "frobnicate"
 122      assert real_name(magic_foo5) == "frobnicate"
 123      assert magic_foo5(None, "") == argparse.Namespace(foo=None)
 124      assert hasattr(magic_foo5, "has_arguments")
 125  
 126      assert (
 127          magic_magic_foo.__doc__
 128          == f"::\n\n  %magic_foo [-f FOO]\n\n{LEADING_SPACE}A docstring.\n\n{options}:\n  -f FOO, --foo FOO  an argument\n"
 129      )
 130      assert getattr(magic_magic_foo, "argcmd_name", None) == None
 131      assert real_name(magic_magic_foo) == "magic_foo"
 132      assert magic_magic_foo(None, "") == argparse.Namespace(foo=None)
 133      assert hasattr(magic_magic_foo, "has_arguments")
 134  
 135      assert (
 136          foo.__doc__
 137          == f"::\n\n  %foo [-f FOO]\n\n{LEADING_SPACE}A docstring.\n\n{options}:\n  -f FOO, --foo FOO  an argument\n"
 138      )
 139      assert getattr(foo, "argcmd_name", None) == None
 140      assert real_name(foo) == "foo"
 141      assert foo(None, "") == argparse.Namespace(foo=None)
 142      assert hasattr(foo, "has_arguments")
 143