Custom actions for argparse package
Project description
argparse_actions
================
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
1. Write your own from scratch
2. Submit an enhancement request
3. 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
================
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
1. Write your own from scratch
2. Submit an enhancement request
3. 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.
Source Distribution
argparse_actions-0.4.2.tar.gz
(5.5 kB
view hashes)