def failureresponse()

in hostfactory/host_provider/src/util.py [0:0]


def failureresponse(response):
    '''
    Decorator to ensure that a sane default response is always sent back to Symphony.
    '''
    def decorator(func):
        def _wrap(*args, **kwargs):
            logger = init_logging()
            try:
                return func(*args, **kwargs)
            except UserError as ue:
                with_message = deepcopy(response)
                message = str(ue)
                logger.debug(traceback.format_exc())
                
                try:
                    message_data = json.loads(message)
                    message = "Http Status %(Code)s: %(Message)s" % message_data
                except Exception:
                    pass
                
                with_message["message"] = message
                # args[0] is  self
                return args[0].stdout_handler.try_handle(with_message)
            except Exception as e:
                logger.exception(str(e))
                logger.debug(traceback.format_exc())
                with_message = deepcopy(response)
                with_message["message"] = str(e)
                return args[0].stdout_handler.try_handle(with_message)
            except SystemExit as se:
                # NOTE: see terminate_machines for more info
                logger.exception("System Exit occured intentionally write 0 json so symphony recovers")
                raise
            except:  # nopep8 ignore the bare except
                logger.exception("Caught unknown exception...")
                logger.debug(traceback.format_exc())
                with_message = deepcopy(response)
                with_message["message"] = traceback.format_exc()
                return args[0].stdout_handler.try_handle(with_message)
        return _wrap
    return decorator