# Path: tuskar/common/exception.py
# LOG = logging.getLogger(__name__)
# CONF = cfg.CONF
# class ProcessExecutionError(IOError):
# class TuskarException(Exception):
# class NotAuthorized(TuskarException):
# class AdminRequired(NotAuthorized):
# class PolicyNotAuthorized(NotAuthorized):
# class Invalid(TuskarException):
# class InvalidCPUInfo(Invalid):
# class InvalidIpAddressError(Invalid):
# class InvalidDiskFormat(Invalid):
# class InvalidUUID(Invalid):
# class InvalidMAC(Invalid):
# class InvalidParameterValue(Invalid):
# class NotFound(TuskarException):
# class DiskNotFound(NotFound):
# class ImageNotFound(NotFound):
# class HostNotFound(NotFound):
# class ConsoleNotFound(NotFound):
# class FileNotFound(NotFound):
# class NoValidHost(NotFound):
# class InstanceNotFound(NotFound):
# class RackNotFound(NotFound):
# class FlavorNotFound(NotFound):
# class NodeLocked(NotFound):
# class PortNotFound(NotFound):
# class PowerStateFailure(TuskarException):
# class ExclusiveLockRequired(NotAuthorized):
# class IPMIFailure(TuskarException):
#     def __init__(self, stdout=None, stderr=None, exit_code=None, cmd=None,
#                  description=None):
# def _cleanse_dict(original):
# def wrap_exception(notifier=None, publisher_id=None, event_type=None,
#                    level=None):
#     def inner(f):
#         def wrapped(self, context, *args, **kw):
#     def __init__(self, message=None, **kwargs):
#     def format_message(self):
# 
# Path: tuskar/openstack/common/log.py
# _DEFAULT_LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
# CONF = cfg.CONF
#     LEVEL_COLORS = {
#         logging.DEBUG: '\033[00;32m',  # GREEN
#         logging.INFO: '\033[00;36m',  # CYAN
#         logging.AUDIT: '\033[01;36m',  # BOLD CYAN
#         logging.WARN: '\033[01;33m',  # BOLD YELLOW
#         logging.ERROR: '\033[01;31m',  # BOLD RED
#         logging.CRITICAL: '\033[01;31m',  # BOLD RED
#     }
#     class NullHandler(logging.Handler):
# class BaseLoggerAdapter(logging.LoggerAdapter):
# class LazyAdapter(BaseLoggerAdapter):
# class ContextAdapter(BaseLoggerAdapter):
# class JSONFormatter(logging.Formatter):
# class LogConfigError(Exception):
# class WritableLogger(object):
# class ContextFormatter(logging.Formatter):
# class ColorHandler(logging.StreamHandler):
# class DeprecatedConfig(Exception):
#         def handle(self, record):
#         def emit(self, record):
#         def createLock(self):
# def _dictify_context(context):
# def _get_binary_name():
# def _get_log_file_path(binary=None):
#     def audit(self, msg, *args, **kwargs):
#     def __init__(self, name='unknown', version='unknown'):
#     def logger(self):
#     def __init__(self, logger, project_name, version_string):
#     def handlers(self):
#     def deprecated(self, msg, *args, **kwargs):
#     def process(self, msg, kwargs):
#     def __init__(self, fmt=None, datefmt=None):
#     def formatException(self, ei, strip_newlines=True):
#     def format(self, record):
# def _create_logging_excepthook(product_name):
#     def logging_excepthook(type, value, tb):
#     def __init__(self, log_config, err_msg):
#     def __str__(self):
# def _load_log_config(log_config):
# def setup(product_name):
# def set_defaults(logging_context_format_string):
# def _find_facility_from_conf():
# def _setup_logging_from_conf():
# def getLogger(name='unknown', version='unknown'):
# def getLazyLogger(name='unknown', version='unknown'):
#     def __init__(self, logger, level=logging.INFO):
#     def write(self, msg):
#     def format(self, record):
#     def formatException(self, exc_info, record=None):
#     def format(self, record):
#     def __init__(self, msg):


import os
from oslo.config import cfg
from tuskar.common import exception
from tuskar.openstack.common import log as logging
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

"""Utilities and helper functions."""




CONF = cfg.CONF
LOG = logging.getLogger(__name__)


class LazyPluggable(object):
    """A pluggable backend loaded lazily based on some value."""

    def __init__(self, pivot, config_group=None, **backends):
        self.__backends = backends
        self.__pivot = pivot
        self.__backend = None
        self.__config_group = config_group

    def __get_backend(self):
        if not self.__backend:
            if self.__config_group is None:
                backend_name = CONF[self.__pivot]
            else:
                backend_name = CONF[self.__config_group][self.__pivot]
            if backend_name not in self.__backends:
                msg = _('Invalid backend: %s') % backend_name

# Path: tuskar/common/exception.py
# LOG = logging.getLogger(__name__)
# CONF = cfg.CONF
# class ProcessExecutionError(IOError):
# class TuskarException(Exception):
# class NotAuthorized(TuskarException):
# class AdminRequired(NotAuthorized):
# class PolicyNotAuthorized(NotAuthorized):
# class Invalid(TuskarException):
# class InvalidCPUInfo(Invalid):
# class InvalidIpAddressError(Invalid):
# class InvalidDiskFormat(Invalid):
# class InvalidUUID(Invalid):
# class InvalidMAC(Invalid):
# class InvalidParameterValue(Invalid):
# class NotFound(TuskarException):
# class DiskNotFound(NotFound):
# class ImageNotFound(NotFound):
# class HostNotFound(NotFound):
# class ConsoleNotFound(NotFound):
# class FileNotFound(NotFound):
# class NoValidHost(NotFound):
# class InstanceNotFound(NotFound):
# class RackNotFound(NotFound):
# class FlavorNotFound(NotFound):
# class NodeLocked(NotFound):
# class PortNotFound(NotFound):
# class PowerStateFailure(TuskarException):
# class ExclusiveLockRequired(NotAuthorized):
# class IPMIFailure(TuskarException):
#     def __init__(self, stdout=None, stderr=None, exit_code=None, cmd=None,
#                  description=None):
# def _cleanse_dict(original):
# def wrap_exception(notifier=None, publisher_id=None, event_type=None,
#                    level=None):
#     def inner(f):
#         def wrapped(self, context, *args, **kw):
#     def __init__(self, message=None, **kwargs):
#     def format_message(self):
# 
# Path: tuskar/openstack/common/log.py
# _DEFAULT_LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
# CONF = cfg.CONF
#     LEVEL_COLORS = {
#         logging.DEBUG: '\033[00;32m',  # GREEN
#         logging.INFO: '\033[00;36m',  # CYAN
#         logging.AUDIT: '\033[01;36m',  # BOLD CYAN
#         logging.WARN: '\033[01;33m',  # BOLD YELLOW
#         logging.ERROR: '\033[01;31m',  # BOLD RED
#         logging.CRITICAL: '\033[01;31m',  # BOLD RED
#     }
#     class NullHandler(logging.Handler):
# class BaseLoggerAdapter(logging.LoggerAdapter):
# class LazyAdapter(BaseLoggerAdapter):
# class ContextAdapter(BaseLoggerAdapter):
# class JSONFormatter(logging.Formatter):
# class LogConfigError(Exception):
# class WritableLogger(object):
# class ContextFormatter(logging.Formatter):
# class ColorHandler(logging.StreamHandler):
# class DeprecatedConfig(Exception):
#         def handle(self, record):
#         def emit(self, record):
#         def createLock(self):
# def _dictify_context(context):
# def _get_binary_name():
# def _get_log_file_path(binary=None):
#     def audit(self, msg, *args, **kwargs):
#     def __init__(self, name='unknown', version='unknown'):
#     def logger(self):
#     def __init__(self, logger, project_name, version_string):
#     def handlers(self):
#     def deprecated(self, msg, *args, **kwargs):
#     def process(self, msg, kwargs):
#     def __init__(self, fmt=None, datefmt=None):
#     def formatException(self, ei, strip_newlines=True):
#     def format(self, record):
# def _create_logging_excepthook(product_name):
#     def logging_excepthook(type, value, tb):
#     def __init__(self, log_config, err_msg):
#     def __str__(self):
# def _load_log_config(log_config):
# def setup(product_name):
# def set_defaults(logging_context_format_string):
# def _find_facility_from_conf():
# def _setup_logging_from_conf():
# def getLogger(name='unknown', version='unknown'):
# def getLazyLogger(name='unknown', version='unknown'):
#     def __init__(self, logger, level=logging.INFO):
#     def write(self, msg):
#     def format(self, record):
#     def formatException(self, exc_info, record=None):
#     def format(self, record):
#     def __init__(self, msg):


# Path: tuskar/common/utils.py
import os
from oslo.config import cfg
from tuskar.common import exception
from tuskar.openstack.common import log as logging

#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

"""Utilities and helper functions."""




CONF = cfg.CONF
LOG = logging.getLogger(__name__)


class LazyPluggable(object):
    """A pluggable backend loaded lazily based on some value."""

    def __init__(self, pivot, config_group=None, **backends):
        self.__backends = backends
        self.__pivot = pivot
        self.__backend = None
        self.__config_group = config_group

    def __get_backend(self):
        if not self.__backend:
            if self.__config_group is None:
                backend_name = CONF[self.__pivot]
            else:
                backend_name = CONF[self.__config_group][self.__pivot]
            if backend_name not in self.__backends:
                msg = _('Invalid backend: %s') % backend_name

                raise exception.TuskarException(msg)