azure_functions_worker/utils/wrappers.py (41 lines of code) (raw):
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
from typing import Any, Callable
from ..logging import error_logger, logger
from .common import is_envvar_false, is_envvar_true
from .tracing import extend_exception_message
def enable_feature_by(flag: str,
default: Any = None,
flag_default: bool = False) -> Callable:
def decorate(func):
def call(*args, **kwargs):
if is_envvar_true(flag):
return func(*args, **kwargs)
if flag_default and not is_envvar_false(flag):
return func(*args, **kwargs)
return default
return call
return decorate
def disable_feature_by(flag: str,
default: Any = None,
flag_default: bool = False) -> Callable:
def decorate(func):
def call(*args, **kwargs):
if is_envvar_true(flag):
return default
if flag_default and not is_envvar_false(flag):
return default
return func(*args, **kwargs)
return call
return decorate
def attach_message_to_exception(expt_type: Exception, message: str,
debug_logs=None) -> Callable:
def decorate(func):
def call(*args, **kwargs):
try:
return func(*args, **kwargs)
except expt_type as e:
if debug_logs is not None:
logger.error(debug_logs)
error_logger.exception("Error: %s, %s", e, message)
raise extend_exception_message(e, message)
return call
return decorate