import logging
from openstack.exceptions import (
    SDKException, BadRequestException)


class ErrorException(Exception):
    """ Base class for exceptions in this module.

    Attributes:
        OpenStackError -- boolean
    """

    def __init__(self, e):
        super().__init__(e)

        self.OpenStackError = True


def OpenStackError(func):
    """ Decorator to wrap openstack error in simple Exception.
    Return decorated function
    """

    def wrap_OpenStackError(*args, **kw):

        try:
            try:
                return func(*args, **kw)

            except SDKException as e:
                raise ErrorException(e)

            except BadRequestException as e:
                raise ErrorException(e)

        except Exception as e:
            raise e

    return wrap_OpenStackError