Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDILab开源决策智能平台
treevalue
提交
b7e3e913
T
treevalue
项目概览
OpenDILab开源决策智能平台
/
treevalue
大约 1 年 前同步成功
通知
3
Star
213
Fork
3
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
treevalue
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b7e3e913
编写于
8月 10, 2021
作者:
HansBug
😆
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor cli part
上级
f3d3d42e
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
108 addition
and
26 deletion
+108
-26
docs/source/api_doc/utils/exception.rst
docs/source/api_doc/utils/exception.rst
+8
-0
docs/source/api_doc/utils/index.rst
docs/source/api_doc/utils/index.rst
+1
-0
test/utils/__init__.py
test/utils/__init__.py
+1
-0
test/utils/test_exception.py
test/utils/test_exception.py
+48
-0
treevalue/entry/cli/graph.py
treevalue/entry/cli/graph.py
+11
-11
treevalue/entry/cli/utils.py
treevalue/entry/cli/utils.py
+7
-15
treevalue/utils/__init__.py
treevalue/utils/__init__.py
+1
-0
treevalue/utils/exception.py
treevalue/utils/exception.py
+31
-0
未找到文件。
docs/source/api_doc/utils/exception.rst
0 → 100644
浏览文件 @
b7e3e913
treevalue.utils.exception
================================
str_traceback
-----------------
.. autofunction:: treevalue.utils.exception.str_traceback
docs/source/api_doc/utils/index.rst
浏览文件 @
b7e3e913
...
...
@@ -7,6 +7,7 @@ treevalue.utils
clazz
color
enum
exception
final
func
imports
...
...
test/utils/__init__.py
浏览文件 @
b7e3e913
from
.test_clazz
import
TestUtilsClazz
from
.test_color
import
TestUtilsColor
from
.test_enum
import
TestUtilsEnum
from
.test_exception
import
TestUtilsException
from
.test_final
import
TestUtilsFinal
from
.test_func
import
TestUtilsFunc
from
.test_imports
import
TestUtilsImports
...
...
test/utils/test_exception.py
0 → 100644
浏览文件 @
b7e3e913
import
pytest
from
treevalue.utils
import
str_traceback
@
pytest
.
mark
.
unittest
class
TestUtilsException
:
def
test_str_traceback
(
self
):
def
func1
(
x
):
return
func2
(
x
*
3
+
1
)
def
func2
(
x
):
if
x
%
2
==
0
:
return
func3
(
x
)
else
:
return
func4
(
x
)
def
func3
(
x
):
raise
RuntimeError
(
'this is a runtime error'
)
def
func4
(
x
):
raise
ValueError
(
'this is a value error'
)
try
:
func1
(
1
)
except
Exception
as
err
:
str_
=
str_traceback
(
err
)
assert
'func1'
in
str_
assert
'func2'
in
str_
assert
'func3'
in
str_
assert
'RuntimeError'
in
str_
assert
'this is a runtime error'
in
str_
assert
'func4'
not
in
str_
assert
'ValueError'
not
in
str_
assert
'this is a value error'
not
in
str_
try
:
func1
(
2
)
except
Exception
as
err
:
str_
=
str_traceback
(
err
)
assert
'func1'
in
str_
assert
'func2'
in
str_
assert
'func3'
not
in
str_
assert
'RuntimeError'
not
in
str_
assert
'this is a runtime error'
not
in
str_
assert
'func4'
in
str_
assert
'ValueError'
in
str_
assert
'this is a value error'
in
str_
treevalue/entry/cli/graph.py
浏览文件 @
b7e3e913
...
...
@@ -15,7 +15,7 @@ import dill
from
graphviz
import
Digraph
,
Graph
from
.base
import
CONTEXT_SETTINGS
from
.utils
import
_multiple_validator
,
_click_pending
,
_err_validator
,
_
validator
from
.utils
import
multiple_validator
,
_click_pending
,
err_validator
,
validator
from
...tree
import
TreeValue
,
load
,
graphics
from
...utils
import
dynamic_call
,
quick_import_object
,
iter_import_objects
...
...
@@ -53,16 +53,16 @@ def _import_tree_from_binary(filename_pattern, title='') -> Iterator[Tuple[TreeV
))
@
_
err_validator
((
ImportError
,))
@
_
multiple_validator
@
_
validator
@
err_validator
((
ImportError
,))
@
multiple_validator
@
validator
def
validate_trees
(
value
:
str
)
->
Iterator
[
Tuple
[
TreeValue
,
str
]]:
_items
=
[
item
.
strip
()
for
item
in
value
.
split
(
':'
,
maxsplit
=
3
)]
return
chain
(
_import_tree_from_binary
(
*
_items
),
_import_tree_from_package
(
*
_items
))
@
_
err_validator
((
ImportError
,))
@
_
validator
@
err_validator
((
ImportError
,))
@
validator
def
validate_graph
(
value
:
str
):
if
value
is
None
:
return
value
...
...
@@ -71,8 +71,8 @@ def validate_graph(value: str):
return
_graph
@
_
multiple_validator
@
_
validator
@
multiple_validator
@
validator
def
validate_cfg
(
value
:
str
)
->
Tuple
[
str
,
str
]:
_items
=
value
.
split
(
'='
,
maxsplit
=
2
)
if
len
(
_items
)
<
2
:
...
...
@@ -82,9 +82,9 @@ def validate_cfg(value: str) -> Tuple[str, str]:
return
key
,
value
@
_
err_validator
((
ImportError
,))
@
_
multiple_validator
@
_
validator
@
err_validator
((
ImportError
,))
@
multiple_validator
@
validator
def
validate_duplicate_types
(
value
:
str
):
_it
,
_
,
_
=
quick_import_object
(
value
,
lambda
t
:
isinstance
(
t
,
type
))
return
_it
...
...
treevalue/entry/cli/utils.py
浏览文件 @
b7e3e913
import
io
import
sys
import
traceback
from
contextlib
import
contextmanager
from
functools
import
wraps
from
typing
import
Callable
,
Union
,
Tuple
import
click
from
...utils
import
dynamic_call
from
...utils
import
dynamic_call
,
str_traceback
def
_
validator
(
func
):
def
validator
(
func
):
func
=
dynamic_call
(
func
)
@
wraps
(
func
)
...
...
@@ -20,8 +18,8 @@ def _validator(func):
return
_new_func
def
_
multiple_validator
(
func
):
func
=
_
validator
(
func
)
def
multiple_validator
(
func
):
func
=
validator
(
func
)
@
wraps
(
func
)
def
_new_func
(
ctx
,
param
,
value
):
...
...
@@ -38,9 +36,9 @@ _EXPECTED_TREE_ERRORS = (
_EXCEPTION_WRAPPED
=
'__exception_wrapped__'
def
_
err_validator
(
types
:
Union
[
type
,
Tuple
[
type
]]):
def
err_validator
(
types
:
Union
[
type
,
Tuple
[
type
]]):
def
_decorator
(
func
):
func
=
_
validator
(
func
)
func
=
validator
(
func
)
@
wraps
(
func
)
def
_new_func
(
ctx
,
param
,
value
):
...
...
@@ -83,15 +81,9 @@ def _click_pending(text: str, ok: Union[Callable, str] = 'OK', error: Union[Call
yield
except
BaseException
as
err
:
click
.
secho
(
click
.
style
(
error
(
err
),
fg
=
'red'
),
nl
=
False
)
click
.
secho
(
_print_exception
(
err
),
file
=
sys
.
stderr
)
click
.
secho
(
str_traceback
(
err
),
file
=
sys
.
stderr
)
raise
err
else
:
click
.
secho
(
click
.
style
(
ok
(),
fg
=
'green'
),
nl
=
False
)
finally
:
click
.
echo
(
'.'
,
nl
=
True
)
def
_print_exception
(
err
:
BaseException
)
->
str
:
with
io
.
StringIO
()
as
fs
:
traceback
.
print_exception
(
type
(
err
),
err
,
err
.
__backtrace__
,
file
=
fs
)
return
fs
.
getvalue
()
treevalue/utils/__init__.py
浏览文件 @
b7e3e913
from
.clazz
import
init_magic
,
class_wraps
,
common_bases
,
common_direct_base
,
get_class_full_name
from
.color
import
Color
from
.enum
import
int_enum_loads
from
.exception
import
str_traceback
from
.final
import
FinalMeta
from
.func
import
args_iter
,
dynamic_call
,
static_call
,
post_process
,
pre_process
,
freduce
,
raising
,
warning_
from
.imports
import
import_object
,
quick_import_object
,
iter_import_objects
...
...
treevalue/utils/exception.py
0 → 100644
浏览文件 @
b7e3e913
import
io
import
traceback
def
str_traceback
(
err
:
BaseException
)
->
str
:
"""
Overview:
Get full backtrace for exception object.
Arguments:
- err (:obj:`BaseException`): Exception object.
Returns:
- backtrace (:obj:`str`): Full string backtrace.
Example:
>>> try:
>>> raise RuntimeError('runtime error')
>>> except Exception as err:
>>> s = str_traceback(err)
The output should be like
>>> Traceback (most recent call last):
>>> File "<stdin>", line 2, in <module>
>>> raise RuntimeError('runtime error')
>>> RuntimeError: runtime error
"""
with
io
.
StringIO
()
as
fs
:
traceback
.
print_exception
(
type
(
err
),
err
,
err
.
__traceback__
,
file
=
fs
)
return
fs
.
getvalue
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录