Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
avocado
提交
8e2b165b
A
avocado
项目概览
openeuler
/
avocado
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
avocado
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
8e2b165b
编写于
4月 20, 2018
作者:
C
Cleber Rosa
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'optimize_datasize'
Signed-off-by:
N
Cleber Rosa
<
crosa@redhat.com
>
上级
ea947b23
acc6e360
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
46 addition
and
34 deletion
+46
-34
avocado/utils/data_structures.py
avocado/utils/data_structures.py
+46
-34
未找到文件。
avocado/utils/data_structures.py
浏览文件 @
8e2b165b
...
...
@@ -22,12 +22,10 @@ avocado core code or plugins.
"""
import
re
import
sys
import
math
from
six.moves
import
zip
from
collections
import
OrderedDict
class
InvalidDataSize
(
ValueError
):
...
...
@@ -262,48 +260,62 @@ class DataSize(object):
:type data: str
"""
MULTIPLIERS
=
OrderedDict
([(
'b'
,
1
),
# 2**0
(
'k'
,
1024
),
# 2**10
(
'm'
,
1048576
),
# 2**20
(
'g'
,
1073741824
),
# 2**30
(
't'
,
1099511627776
)])
# 2**40
__slots__
=
[
'_value'
,
'_unit'
]
MULTIPLIERS
=
{
'b'
:
1
,
# 2**0
'k'
:
1024
,
# 2**10
'm'
:
1048576
,
# 2**20
'g'
:
1073741824
,
# 2**30
't'
:
1099511627776
}
# 2**40
def
__init__
(
self
,
data
):
pattern
=
r
"^(\d+)([bkmgt])?$"
# Number and optional string
match
=
re
.
match
(
pattern
,
data
,
re
.
IGNORECASE
)
try
:
norm_size
=
data
.
strip
().
lower
()
last
=
norm_size
[
-
1
]
if
last
.
isdigit
():
self
.
_value
=
int
(
norm_size
)
self
.
_unit
=
'b'
elif
last
in
self
.
MULTIPLIERS
:
self
.
_value
=
int
(
norm_size
[:
-
1
])
self
.
_unit
=
last
else
:
raise
ValueError
if
match
is
None
:
raise
InvalidDataSize
(
'String not in size+unit format (i.e. '
'"10M", "100k", ...)'
)
if
self
.
_value
<
0
:
raise
ValueError
self
.
_value
,
unit
=
match
.
groups
()
if
unit
is
None
:
self
.
_unit
=
'b'
else
:
self
.
_unit
=
unit
.
lower
()
except
ValueError
:
raise
InvalidDataSize
(
'String not in size + unit format (i.e. '
'"10M", "100k", ...)'
)
@
property
def
value
(
self
):
return
int
(
self
.
_value
)
return
self
.
_value
@
property
def
unit
(
self
):
return
self
.
_unit
def
__getattr__
(
self
,
attr
):
"""
Creates one extra attribute per available conversion unit,
which will return the converted value.
"""
if
attr
not
in
self
.
MULTIPLIERS
:
raise
AttributeError
(
'Attribute %s does not exist.'
%
attr
)
return
int
(
self
.
value
*
self
.
MULTIPLIERS
[
self
.
unit
]
/
self
.
MULTIPLIERS
[
attr
])
@
property
def
b
(
self
):
return
self
.
_value
*
self
.
MULTIPLIERS
[
self
.
_unit
]
def
__dir__
(
self
):
"""
Makes the extra attributes visible when calling dir().
"""
listing
=
dir
(
type
(
self
))
+
list
(
self
.
__dict__
.
keys
())
listing
.
extend
([
'%s'
%
item
for
item
in
self
.
MULTIPLIERS
])
return
listing
@
property
def
k
(
self
):
return
int
(
self
.
_value
*
self
.
MULTIPLIERS
[
self
.
_unit
]
/
self
.
MULTIPLIERS
[
'k'
])
@
property
def
m
(
self
):
return
int
(
self
.
_value
*
self
.
MULTIPLIERS
[
self
.
_unit
]
/
self
.
MULTIPLIERS
[
'm'
])
@
property
def
g
(
self
):
return
int
(
self
.
_value
*
self
.
MULTIPLIERS
[
self
.
_unit
]
/
self
.
MULTIPLIERS
[
'g'
])
@
property
def
t
(
self
):
return
int
(
self
.
_value
*
self
.
MULTIPLIERS
[
self
.
_unit
]
/
self
.
MULTIPLIERS
[
't'
])
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录