osc-lib: parseractions
Leave parseractions.py and test_parseractions.py as a sanity check during the deprecation period. Change-Id: I1a7469b6d872284e0276502a1a287bc0b87f8f83
This commit is contained in:
parent
59dffb9c62
commit
be192676bd
@ -152,13 +152,13 @@ the plugin commands:
|
||||
.. code-block:: python
|
||||
|
||||
# osc-lib interfaces available to plugins:
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import exceptions
|
||||
from osc_lib import logs
|
||||
from osc_lib import utils
|
||||
|
||||
# OSC common interfaces available to plugins:
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
|
||||
|
||||
class DeleteMypluginobject(command.Command):
|
||||
|
@ -1,5 +1,3 @@
|
||||
# Copyright 2013 OpenStack Foundation
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
@ -13,154 +11,15 @@
|
||||
# under the License.
|
||||
#
|
||||
|
||||
"""argparse Custom Actions"""
|
||||
# NOTE(dtroyer): This file is deprecated in Jun 2016, remove after 4.x release
|
||||
# or Jun 2017.
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
from openstackclient.i18n import _
|
||||
from osc_lib.cli.parseractions import * # noqa
|
||||
|
||||
|
||||
class KeyValueAction(argparse.Action):
|
||||
"""A custom action to parse arguments as key=value pairs
|
||||
|
||||
Ensures that ``dest`` is a dict
|
||||
"""
|
||||
|
||||
def __call__(self, parser, namespace, values, option_string=None):
|
||||
# Make sure we have an empty dict rather than None
|
||||
if getattr(namespace, self.dest, None) is None:
|
||||
setattr(namespace, self.dest, {})
|
||||
|
||||
# Add value if an assignment else remove it
|
||||
if '=' in values:
|
||||
getattr(namespace, self.dest, {}).update([values.split('=', 1)])
|
||||
else:
|
||||
msg = _("Expected 'key=value' type, "
|
||||
"but got: %s") % (str(values))
|
||||
raise argparse.ArgumentTypeError(msg)
|
||||
|
||||
|
||||
class MultiKeyValueAction(argparse.Action):
|
||||
"""A custom action to parse arguments as key1=value1,key2=value2 pairs
|
||||
|
||||
Ensure that ``dest`` is a list. The list will finally contain multiple
|
||||
dicts, with key=value pairs in them.
|
||||
|
||||
NOTE: The arguments string should be a comma separated key-value pairs.
|
||||
And comma(',') and equal('=') may not be used in the key or value.
|
||||
"""
|
||||
|
||||
def __init__(self, option_strings, dest, nargs=None,
|
||||
required_keys=None, optional_keys=None, **kwargs):
|
||||
"""Initialize the action object, and parse customized options
|
||||
|
||||
Required keys and optional keys can be specified when initializing
|
||||
the action to enable the key validation. If none of them specified,
|
||||
the key validation will be skipped.
|
||||
|
||||
:param required_keys: a list of required keys
|
||||
:param optional_keys: a list of optional keys
|
||||
"""
|
||||
if nargs:
|
||||
raise ValueError("Parameter 'nargs' is not allowed, but got %s"
|
||||
% nargs)
|
||||
|
||||
super(MultiKeyValueAction, self).__init__(option_strings,
|
||||
dest, **kwargs)
|
||||
|
||||
# required_keys: A list of keys that is required. None by default.
|
||||
if required_keys and not isinstance(required_keys, list):
|
||||
raise TypeError("'required_keys' must be a list")
|
||||
self.required_keys = set(required_keys or [])
|
||||
|
||||
# optional_keys: A list of keys that is optional. None by default.
|
||||
if optional_keys and not isinstance(optional_keys, list):
|
||||
raise TypeError("'optional_keys' must be a list")
|
||||
self.optional_keys = set(optional_keys or [])
|
||||
|
||||
def __call__(self, parser, namespace, values, metavar=None):
|
||||
# Make sure we have an empty list rather than None
|
||||
if getattr(namespace, self.dest, None) is None:
|
||||
setattr(namespace, self.dest, [])
|
||||
|
||||
params = {}
|
||||
for kv in values.split(','):
|
||||
# Add value if an assignment else raise ArgumentTypeError
|
||||
if '=' in kv:
|
||||
params.update([kv.split('=', 1)])
|
||||
else:
|
||||
msg = _("Expected key=value pairs separated by comma, "
|
||||
"but got: %s") % (str(kv))
|
||||
raise argparse.ArgumentTypeError(msg)
|
||||
|
||||
# Check key validation
|
||||
valid_keys = self.required_keys | self.optional_keys
|
||||
if valid_keys:
|
||||
invalid_keys = [k for k in params if k not in valid_keys]
|
||||
if invalid_keys:
|
||||
msg = _("Invalid keys %(invalid_keys)s specified.\n"
|
||||
"Valid keys are: %(valid_keys)s.")
|
||||
raise argparse.ArgumentTypeError(
|
||||
msg % {'invalid_keys': ', '.join(invalid_keys),
|
||||
'valid_keys': ', '.join(valid_keys)}
|
||||
)
|
||||
|
||||
if self.required_keys:
|
||||
missing_keys = [k for k in self.required_keys if k not in params]
|
||||
if missing_keys:
|
||||
msg = _("Missing required keys %(missing_keys)s.\n"
|
||||
"Required keys are: %(required_keys)s.")
|
||||
raise argparse.ArgumentTypeError(
|
||||
msg % {'missing_keys': ', '.join(missing_keys),
|
||||
'required_keys': ', '.join(self.required_keys)}
|
||||
)
|
||||
|
||||
# Update the dest dict
|
||||
getattr(namespace, self.dest, []).append(params)
|
||||
|
||||
|
||||
class RangeAction(argparse.Action):
|
||||
"""A custom action to parse a single value or a range of values
|
||||
|
||||
Parses single integer values or a range of integer values delimited
|
||||
by a colon and returns a tuple of integers:
|
||||
'4' sets ``dest`` to (4, 4)
|
||||
'6:9' sets ``dest`` to (6, 9)
|
||||
"""
|
||||
|
||||
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, %(range0)s is not "
|
||||
"less than %(range1)s")
|
||||
% {'range0': range[0], 'range1': range[1]})
|
||||
raise argparse.ArgumentError(self, msg)
|
||||
else:
|
||||
# Too many values
|
||||
msg = _("Invalid range, too many values")
|
||||
raise argparse.ArgumentError(self, msg)
|
||||
|
||||
|
||||
class NonNegativeAction(argparse.Action):
|
||||
"""A custom action to check whether the value is non-negative or not
|
||||
|
||||
Ensures the value is >= 0.
|
||||
"""
|
||||
|
||||
def __call__(self, parser, namespace, values, option_string=None):
|
||||
if int(values) >= 0:
|
||||
setattr(namespace, self.dest, values)
|
||||
else:
|
||||
msg = (_("%s expected a non-negative integer")
|
||||
% (str(option_string)))
|
||||
raise argparse.ArgumentTypeError(msg)
|
||||
sys.stderr.write(
|
||||
"WARNING: %s is deprecated and will be removed after Jun 2017. "
|
||||
"Please use osc_lib.cli.parseractions\n" % __name__
|
||||
)
|
||||
|
@ -16,11 +16,11 @@
|
||||
|
||||
"""Compute v2 Aggregate action implementations"""
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
|
@ -17,11 +17,11 @@
|
||||
|
||||
import sys
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
|
@ -15,12 +15,12 @@
|
||||
|
||||
"""Flavor action implementations"""
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import exceptions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common as identity_common
|
||||
|
||||
|
@ -21,6 +21,7 @@ import io
|
||||
import os
|
||||
import sys
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import exceptions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
@ -31,7 +32,6 @@ except ImportError:
|
||||
from novaclient.v1_1 import servers
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common as identity_common
|
||||
|
||||
|
@ -16,11 +16,11 @@
|
||||
"""Identity v2 Project action implementations"""
|
||||
|
||||
from keystoneauth1 import exceptions as ks_exc
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
|
@ -16,11 +16,11 @@
|
||||
"""Project action implementations"""
|
||||
|
||||
from keystoneauth1 import exceptions as ks_exc
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
import argparse
|
||||
import io
|
||||
import os
|
||||
import six
|
||||
import sys
|
||||
|
||||
if os.name == "nt":
|
||||
@ -27,11 +26,12 @@ else:
|
||||
msvcrt = None
|
||||
|
||||
from glanceclient.common import utils as gc_utils
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.api import utils as api_utils
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
|
@ -18,13 +18,13 @@
|
||||
import argparse
|
||||
|
||||
from glanceclient.common import utils as gc_utils
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import exceptions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.api import utils as api_utils
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common
|
||||
|
||||
|
@ -16,11 +16,11 @@
|
||||
import argparse
|
||||
import logging
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import exceptions
|
||||
from osc_lib import utils
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common as identity_common
|
||||
|
||||
|
@ -17,10 +17,10 @@ import argparse
|
||||
import json
|
||||
import logging
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common as identity_common
|
||||
|
||||
|
@ -20,11 +20,11 @@ try:
|
||||
except ImportError:
|
||||
from novaclient.v1_1 import security_group_rules as compute_secgroup_rules
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import exceptions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common as identity_common
|
||||
from openstackclient.network import common
|
||||
|
@ -15,11 +15,11 @@
|
||||
|
||||
import copy
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import exceptions
|
||||
from osc_lib import utils
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common as identity_common
|
||||
|
||||
|
@ -13,10 +13,10 @@
|
||||
|
||||
"""Subnet pool action implementations"""
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common as identity_common
|
||||
|
||||
|
@ -13,11 +13,11 @@
|
||||
|
||||
"""Account v1 action implementations"""
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
|
||||
|
||||
class SetAccount(command.Command):
|
||||
|
@ -16,11 +16,11 @@
|
||||
"""Container v1 action implementations"""
|
||||
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
|
||||
|
||||
class CreateContainer(command.Lister):
|
||||
|
@ -16,11 +16,11 @@
|
||||
"""Object v1 action implementations"""
|
||||
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
|
||||
|
||||
class CreateObject(command.Lister):
|
||||
|
@ -13,6 +13,9 @@
|
||||
# under the License.
|
||||
#
|
||||
|
||||
# NOTE(dtroyer): This file is deprecated in Jun 2016, remove after 4.x release
|
||||
# or Jun 2017.
|
||||
|
||||
import argparse
|
||||
|
||||
from openstackclient.common import parseractions
|
||||
|
@ -15,11 +15,11 @@
|
||||
|
||||
"""Volume v1 QoS action implementations"""
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
|
@ -17,11 +17,11 @@
|
||||
|
||||
import copy
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
|
@ -17,11 +17,11 @@
|
||||
|
||||
import argparse
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
|
@ -15,11 +15,11 @@
|
||||
|
||||
"""Volume v1 Type action implementations"""
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
|
@ -15,11 +15,11 @@
|
||||
|
||||
"""Volume v2 QoS action implementations"""
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
|
@ -16,11 +16,11 @@
|
||||
|
||||
import copy
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
|
@ -16,11 +16,11 @@
|
||||
|
||||
import copy
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common as identity_common
|
||||
|
||||
|
@ -14,12 +14,12 @@
|
||||
|
||||
"""Volume v2 Type action implementations"""
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib import exceptions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.common import command
|
||||
from openstackclient.common import parseractions
|
||||
from openstackclient.i18n import _
|
||||
from openstackclient.identity import common as identity_common
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user