Hi Ranga,

I think I understand what you're after, but this really looks like
something you can solve yourself in several ways (e.g. just creating
classes that override one method) so I don't think it's worth changing the
argparse module to support this directly.

--Guido

On Thu, Sep 10, 2020 at 9:48 PM Ranga Swamy <rangap...@gmail.com> wrote:

> Hi Guido,
>
> Great to hear back from you.
>
> Currently we have the add_argument calling the custom action like shown
> below...
>
> Example:
> class MyAction(argparse.Action):
>      def __init__(self, option_strings, dest, nargs=None, **kwargs):
>          if nargs is not None:
>              raise ValueError("nargs not allowed")
>          super(MyAction, self).__init__(option_strings, dest, **kwargs)
>      def __call__(self, parser, namespace, values, option_string=None):
>          print('%r %r %r' % (namespace, values, option_string))
>          t1 = subprocess.run("docker container ls", capture_output=True,
> shell=True, text=True, check=True)
>          l = []
>          for line in t1.stdout.splitlines():
>            r = re.findall(r'\S+',line)
>            l.append(r[0])
>          values = l
>          setattr(namespace, self.dest, values)
> if __name__ == '__main__':
>   parser = argparse.ArgumentParser(description='A python code to display
> Docker stats', epilog='Hope you like this program')
>   parser.add_argument('-s', action=MyAction)
>   args = parser.parse_args()
>   print(args)
>
> Now in addition to calling the class I want to have a subfunction (may be
> a few methods ) under the same custom Actionclass which I want to execute
> by calling them in the action=MyAction.Method1/method2/Method3...
> instead of calling the custom ClassAction itself. This way I don't have to
> create multiple CustomActionClasses, just the multiple
> methods under same CustomAction Class
>
> Currently the way function(or Methods) can be called is by specifying them
> in
> 1. type=Class.Method (since type can take a callable)
> 2. action=CustomAction(with modified _call_ in the CutomClass subclass of
> argparse.Action)
> and
> 3. also via sub_parser=(func=custom method)
>    eg: subparser.set_defaults(func=Method1)
>
> So my suggestion is if there are ways of creating a CustomActionClass with
> modified __call__ methods then why
> not have additional methods that a user can define in those CustomAction
> subclass and be called in the action.
>
> So my code becomes readable based on different classes and different sub
> methods and debugging becomes convenient
> and the code looks elegant. So my modified CustomActionClass will look
> similar to below...
>
> class MyAction(argparse.Action):
>      def __init__(self, option_strings, dest, nargs=None, **kwargs):
>          if nargs is not None:
>              raise ValueError("nargs not allowed")
>          super(MyAction, self).__init__(option_strings, dest, **kwargs)
>      def __call__(self, parser, namespace, values, option_string=None):
>          print('%r %r %r' % (namespace, values, option_string))
>
>      def Method1(self, parser, namespace, values, option_string=None):
>          t1 = subprocess.run("docker container ls", capture_output=True,
> shell=True, text=True, check=True)
>          l = []
>          for line in t1.stdout.splitlines():
>            r = re.findall(r'\S+',line)
>            l.append(r[0])
>          values = l
>          setattr(namespace, self.dest, values)
>
>     def Method1(self, parser, namespace, values, option_string=None):
>       DO Something
>
>
> if __name__ == '__main__':
>   parser = argparse.ArgumentParser(description='A python code to display
> Docker stats', epilog='Hope you like this program')
>   parser.add_argument('-s', action=MyAction.Method1)
>   parser.add_argument('-t', action=MyAction.Method2)
>   parser.add_argument('-b', action=MyAction2.Method1)
>   args = parser.parse_args()
>   print(args)
>
> Thanks and Regards
> Rangaswamy
>
>
>
> On Thu, Sep 10, 2020 at 7:25 PM Guido van Rossum <gu...@python.org> wrote:
>
>> Rangarajan,
>>
>> You may be on to something but the description is a bit dense.
>>
>> Can you show some examples of how this would work, and contrast those
>> with how the same thing would have to be done without your proposed feature?
>>
>> —Guido
>>
>> On Thu, Sep 10, 2020 at 05:47 <rangap...@gmail.com> wrote:
>>
>>> Hi,
>>>
>>> Got the argparse() in version 3.8.2 and above the action=CusotmClass can
>>> have a user defined custom subclass and override the functionality in the
>>> def __init__() method. Along with this can we also have a built in custom
>>> method/methods that I can define under this custom Class, so that instead
>>> of calling the Action itself I have the option of calling the
>>> Action.Method() during the add_argument defintition.
>>>
>>>
>>>
>>> Regards
>>>
>>> Ranga
>>>
>>> _______________________________________________
>>>
>>> Python-ideas mailing list -- python-ideas@python.org
>>>
>>> To unsubscribe send an email to python-ideas-le...@python.org
>>>
>>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>>>
>>> Message archived at
>>> https://mail.python.org/archives/list/python-ideas@python.org/message/JBVLH244IKOVLHFBZKC7DDMB6QT2T5QQ/
>>>
>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>
>>> --
>> --Guido (mobile)
>>
>

-- 
--Guido van Rossum (python.org/~guido)
*Pronouns: he/him **(why is my pronoun here?)*
<http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/EPB7EQVPF24QGNP2J2WB6AW6AWST4I2A/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to