Custom actions for argparse package
Project description
This module implements some reusable custom actions to use with the argparse module.
Examples
The following example, taken from samples/folder_actions.py demonstrates the use of a custom action to verify the existence of a folder, specified from the command line:
import argparse import argparse_actions if __name__ == '__main__': parser = argparse.ArgumentParser(description='Custom Actions') parser.add_argument('directory', action=argparse_actions.FolderExistsAction) try: args = parser.parse_args() print 'Directory exists: {0}'.format(args.directory) except argparse_actions.NonFolderError as e: print 'Directory does not exist' print e
In the next example from samples/proper_ip.py, we use the ProperIpFormatAction custom action to verify if an IP address from command line is properly formatted:
import argparse import argparse_actions if __name__ == '__main__': parser = argparse.ArgumentParser(description='Custom Actions') parser.add_argument('ip', action=argparse_actions.ProperIpFormatAction) try: args = parser.parse_args() print 'IP is properly formatted: {0}'.format(args.ip) except argparse_actions.InvalidIp as e: print 'IP is invalid: {0}'.format(e.ip) # This will display similar output: # print e
Extending the Custom Actions
If you find a custom action that almost do what you want, you can
Write your own from scratch
Submit an enhancement request
Extend the existing custom action
I am not commenting on option 1–it is your choice. For option 2, I will be gladly to accept any reasonable request, but sometimes life happens and I might not response quickly enough. That leaves you with the third option of extending the custom action yourself. Don’t worry, it is not that hard. In the next example, I will take the ProperIpFormatAction custom action and extend it to include ‘localhost’ as one of the proper IP format:
import argparse import argparse_actions class IpAndLocalhostAction(argparse_actions.ProperIpFormatAction): def __call__(self, parser, namespace, values, option_string=None): # Do our check: allow for 'localhost' if values == 'localhost': setattr(namespace, self.dest, values) else: # Super class to perform its check parent = super(IpAndLocalhostAction, self) parent.__call__(parser, namespace, values, option_string) if __name__ == '__main__': parser = argparse.ArgumentParser(description='Custom Actions') parser.add_argument('ip', action=IpAndLocalhostAction) try: args = parser.parse_args() print 'IP is valid: {0}'.format(args.ip) except argparse_actions.InvalidIp as e: print e
Discussion:
The first step is to create a new class (IpAndLocalhostAction), based on an existing custom action (argparse_actions.ProperIpFormatAction, which is really a class itself)
Define the function __call__ to override the base custom action with your own logic.
More Ideas
Here are a few ideas I have in mind, which I might implement:
- Extend ProperIpFormatAction to determine if and IP…
Is reachable
Provides some services such as HTTP or FTP
Belongs to a particular list, such as the banned IP list
- Extend FolderExistsAction to determine if the folder is…
Writable
Empty
A symbolic link
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.