summaryrefslogtreecommitdiff
path: root/openstackclient/common
diff options
context:
space:
mode:
authorDean Troyer <dtroyer@gmail.com>2013-07-12 15:49:03 -0500
committerDean Troyer <dtroyer@gmail.com>2013-07-29 19:07:22 -0500
commitc94e262df8d2d37e6c2043a3c3d0bc1cb78348a5 (patch)
tree4db83cbff672f27f8d5ff94f9d97b03a4ba4d412 /openstackclient/common
parent65d2a14e3e834ce0c57c879ec7d42715058254bf (diff)
downloadpython-openstackclient-c94e262df8d2d37e6c2043a3c3d0bc1cb78348a5.tar.gz
Add security group commands
* Add security group: create, delete, list, set, show * Add server: add secgroup, remove secgroup * Add security group rule: create, delete, list * Add Oslo's strutils and gettextutils * Adds parseractions.RangeAction() to handle option arguments of either a single number or a range of numbers: '--port 25' or '--port 1024:65535' Blueprint: nova-client Change-Id: Iad2de1b273ba29197709fc4c6a1036b4ae99725f
Diffstat (limited to 'openstackclient/common')
-rw-r--r--openstackclient/common/parseractions.py24
-rw-r--r--openstackclient/common/utils.py5
2 files changed, 28 insertions, 1 deletions
diff --git a/openstackclient/common/parseractions.py b/openstackclient/common/parseractions.py
index f111c264..644472d8 100644
--- a/openstackclient/common/parseractions.py
+++ b/openstackclient/common/parseractions.py
@@ -32,3 +32,27 @@ class KeyValueAction(argparse.Action):
getattr(namespace, self.dest, {}).update([values.split('=', 1)])
else:
getattr(namespace, self.dest, {}).pop(values, None)
+
+
+class RangeAction(argparse.Action):
+ """A custom action to parse a single value or a range of values."""
+ def __call__(self, parser, namespace, values, option_string=None):
+ range = values.split(':')
+ if len(range) == 0:
+ # Nothing passed, return a zero default
+ setattr(namespace, self.dest, (0, 0))
+ elif len(range) == 1:
+ # Only a single value is present
+ setattr(namespace, self.dest, (int(range[0]), int(range[0])))
+ elif len(range) == 2:
+ # Range of two values
+ if int(range[0]) <= int(range[1]):
+ setattr(namespace, self.dest, (int(range[0]), int(range[1])))
+ else:
+ msg = "Invalid range, %s is not less than %s" % \
+ (range[0], range[1])
+ raise argparse.ArgumentError(self, msg)
+ else:
+ # Too many values
+ msg = "Invalid range, too many values"
+ raise argparse.ArgumentError(self, msg)
diff --git a/openstackclient/common/utils.py b/openstackclient/common/utils.py
index fd504ea1..4d2afd15 100644
--- a/openstackclient/common/utils.py
+++ b/openstackclient/common/utils.py
@@ -16,11 +16,13 @@
"""Common client utilities"""
import os
+import six
import sys
import time
import uuid
from openstackclient.common import exceptions
+from openstackclient.openstack.common import strutils
def find_resource(manager, name_or_id):
@@ -84,7 +86,8 @@ def format_dict(data):
output = ""
for s in data:
- output = output + s + "='" + data[s] + "', "
+ output = output + s + "='" + \
+ strutils.safe_encode(six.text_type(data[s])) + "', "
return output[:-2]