¡@

Home 

OpenStack Study: cliutils.py

OpenStack Index

**** CubicPower OpenStack Study ****

# vim: tabstop=4 shiftwidth=4 softtabstop=4

# Copyright 2012 Red Hat, Inc.

#

# 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

#

# http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing, software

# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT

# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the

# License for the specific language governing permissions and limitations

# under the License.

import inspect

**** CubicPower OpenStack Study ****

class MissingArgs(Exception):

**** CubicPower OpenStack Study ****

    def __init__(self, missing):

        self.missing = missing

**** CubicPower OpenStack Study ****

    def __str__(self):

        if len(self.missing) == 1:

            return "An argument is missing"

        else:

            return ("%(num)d arguments are missing" %

                    dict(num=len(self.missing)))

def validate_args(fn, *args, **kwargs):

    """Check that the supplied args are sufficient for calling a function.

    >>> validate_args(lambda a: None)

    Traceback (most recent call last):

        ...

    MissingArgs: An argument is missing

    >>> validate_args(lambda a, b, c, d: None, 0, c=1)

    Traceback (most recent call last):

        ...

    MissingArgs: 2 arguments are missing

    :param fn: the function to check

    :param arg: the positional arguments supplied

    :param kwargs: the keyword arguments supplied

    """

    argspec = inspect.getargspec(fn)

    num_defaults = len(argspec.defaults or [])

    required_args = argspec.args[:len(argspec.args) - num_defaults]

**** CubicPower OpenStack Study ****

def validate_args(fn, *args, **kwargs):

    """Check that the supplied args are sufficient for calling a function.

    >>> validate_args(lambda a: None)

    Traceback (most recent call last):

        ...

    MissingArgs: An argument is missing

    >>> validate_args(lambda a, b, c, d: None, 0, c=1)

    Traceback (most recent call last):

        ...

    MissingArgs: 2 arguments are missing

    :param fn: the function to check

    :param arg: the positional arguments supplied

    :param kwargs: the keyword arguments supplied

    """

    argspec = inspect.getargspec(fn)

    num_defaults = len(argspec.defaults or [])

    required_args = argspec.args[:len(argspec.args) - num_defaults]

**** CubicPower OpenStack Study ****

    def isbound(method):

        return getattr(method, 'im_self', None) is not None

    if isbound(fn):

        required_args.pop(0)

    missing = [arg for arg in required_args if arg not in kwargs]

    missing = missing[len(args):]

    if missing:

        raise MissingArgs(missing)