import os
import functools
import traceback
from .ffi import track_event
def track_function(
name="",
type="",
include_args=[],
include_kwargs=[],
include_return_value=False,
include_env=[],
metadata={},
dispatch=False,
track_exceptions=True,
):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
raised_exception = None
event_metadata = metadata.copy()
# Include specific args
if include_args:
# TODO should be {}?
event_metadata["args"] = []
for arg_index in include_args:
try:
event_metadata["args"][arg_index] = args[arg_index]
except IndexError as e:
pass
# logger.error(
# f"Could not include arg {arg_index} in event metadata: {e}"
# )
# Include specific kwargs
if include_kwargs:
event_metadata["kwargs"] = {}
for kwarg_name in include_kwargs:
try:
event_metadata["kwargs"][kwarg_name] = kwargs[kwarg_name]
except KeyError as e:
pass
# logger.error(
# f"Could not include kwarg {kwarg_name} in event metadata: {e}"
# )
# Inlcude specific environment variables
if include_env:
event_metadata["env"] = {}
for env_name in include_env:
if env_name in os.environ:
event_metadata["env"][env_name] = os.environ[env_name]
try:
return_value = func(*args, **kwargs)
if include_return_value:
event_metadata["return_value"] = return_value
except Exception as e:
raised_exception = e
slug = name or func.__name__
track_event(
slug=slug, type=type, metadata=event_metadata, dispatch=dispatch
)
if raised_exception:
if track_exceptions:
event_metadata["stacktrace"] = "".join(
traceback.TracebackException.from_exception(
raised_exception
).format()
)
track_event(
slug=slug,
type="error",
metadata=event_metadata,
dispatch=True, # always dispatch errors right away
)
# original exception will be re-raised, which means you'll see the output again
# but it can then be handled through other means if necessary...
raise raised_exception
return return_value
return wrapper
return decorator
def track_command(*args, **kwargs):
if "dispatch" not in kwargs:
kwargs["dispatch"] = True
return track_function(type="command", *args, **kwargs)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
共13个文件
py:4个
so:2个
dylib:2个
资源分类:Python库 所属语言:Python 资源全名:cls-client-1.4.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源推荐
资源详情
资源评论
收起资源包目录
cls-client-1.4.0.tar.gz (13个子文件)
cls-client-1.4.0
PKG-INFO 421B
cls_client
client.py 3KB
__init__.py 53B
ffi
__init__.py 2KB
libs
libcls_ffi.dylib 4.22MB
libcls_ffi_arm64.dylib 4.08MB
libcls_ffi_aarch64.so 10.61MB
cls_ffi.dll 3.48MB
version 7B
libcls_ffi.so 10.67MB
pyproject.toml 365B
LICENSE 1KB
setup.py 560B
共 13 条
- 1
资源评论
挣扎的蓝藻
- 粉丝: 13w+
- 资源: 15万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功