Index: tools/telemetry/telemetry/value/list_of_string_values.py |
diff --git a/tools/telemetry/telemetry/value/list_of_string_values.py b/tools/telemetry/telemetry/value/list_of_string_values.py |
index eaecbe1227f105435c5a394cb17b483ef64fbf4e..afce8fbaade703bf6d665a281612ea5cecda015f 100644 |
--- a/tools/telemetry/telemetry/value/list_of_string_values.py |
+++ b/tools/telemetry/telemetry/value/list_of_string_values.py |
@@ -3,19 +3,21 @@ |
# found in the LICENSE file. |
nednguyen
2014/08/15 14:06:52
I think we should kill string & list_of_string_val
|
from telemetry import value as value_module |
+from telemetry.value import none_values |
class ListOfStringValues(value_module.Value): |
def __init__(self, page, name, units, values, |
- important=True, description=None, |
+ important=True, description=None, none_value_reason=None, |
same_page_merge_policy=value_module.CONCATENATE): |
super(ListOfStringValues, self).__init__(page, name, units, important, |
description) |
- assert len(values) > 0 |
- assert isinstance(values, list) |
- for v in values: |
- assert isinstance(v, basestring) |
+ assert values is None or (len(values) > 0 and isinstance(values, list)) |
+ if isinstance(values, list): |
+ assert all(isinstance(v, basestring) for v in values) |
chrishenry
2014/08/15 04:43:20
Maybe a little more readable:
if values is not Non
ariblue
2014/08/15 22:10:26
Good call. Done.
|
+ none_values.ValidateValue(values, none_value_reason) |
self.values = values |
+ self.none_value_reason = none_value_reason |
self.same_page_merge_policy = same_page_merge_policy |
def __repr__(self): |
@@ -62,6 +64,10 @@ class ListOfStringValues(value_module.Value): |
def AsDict(self): |
d = super(ListOfStringValues, self).AsDict() |
d['values'] = self.values |
+ |
+ if self.none_value_reason is not None: |
+ d['none_value_reason'] = self.none_value_reason |
+ |
return d |
@staticmethod |
@@ -69,6 +75,9 @@ class ListOfStringValues(value_module.Value): |
kwargs = value_module.Value.GetConstructorKwArgs(value_dict, page_dict) |
kwargs['values'] = value_dict['values'] |
+ if 'none_value_reason' in value_dict: |
+ kwargs['none_value_reason'] = value_dict['none_value_reason'] |
+ |
return ListOfStringValues(**kwargs) |
@classmethod |
@@ -81,32 +90,34 @@ class ListOfStringValues(value_module.Value): |
v0.page, v0.name, v0.units, |
values[0].values, |
important=v0.important, |
- same_page_merge_policy=v0.same_page_merge_policy) |
+ same_page_merge_policy=v0.same_page_merge_policy, |
+ none_value_reason=v0.none_value_reason) |
assert v0.same_page_merge_policy == value_module.CONCATENATE |
- all_values = [] |
- for v in values: |
- all_values.extend(v.values) |
- return ListOfStringValues( |
- v0.page, v0.name, v0.units, |
- all_values, |
- important=v0.important, |
- same_page_merge_policy=v0.same_page_merge_policy) |
+ return cls._MergeLikeValues(values, v0.page, v0.name) |
@classmethod |
def MergeLikeValuesFromDifferentPages(cls, values, |
group_by_name_suffix=False): |
assert len(values) > 0 |
v0 = values[0] |
+ name = v0.name_suffix if group_by_name_suffix else v0.name |
+ return cls._MergeLikeValues(values, None, name) |
+ |
+ @classmethod |
+ def _MergeLikeValues(cls, values, page, name): |
+ v0 = values[0] |
all_values = [] |
+ none_value_reason = None |
for v in values: |
+ if(v.values is None): |
chrishenry
2014/08/15 04:43:20
Remove parenthesis around conditional
ariblue
2014/08/15 22:10:26
Done.
|
+ all_values = None |
+ none_value_reason = none_values.MERGE_FAILURE_REASON |
+ break |
all_values.extend(v.values) |
chrishenry
2014/08/15 04:43:20
Let's rename all_values to merged_values? Then Non
ariblue
2014/08/15 22:10:26
Done.
|
- if not group_by_name_suffix: |
- name = v0.name |
- else: |
- name = v0.name_suffix |
return ListOfStringValues( |
- None, name, v0.units, |
+ page, name, v0.units, |
all_values, |
important=v0.important, |
- same_page_merge_policy=v0.same_page_merge_policy) |
+ same_page_merge_policy=v0.same_page_merge_policy, |
+ none_value_reason=none_value_reason) |