| # |
| # Copyright (C) 2017 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| import logging |
| import sys |
| |
| from vts.proto import ComponentSpecificationMessage_pb2 as CompSpecMsg |
| |
| |
| def PbEnum2PyValue(var): |
| """Converts VariableSecificationMessage (Enum) to Python value. |
| |
| Args: |
| var: VariableSpecificationMessage to convert. |
| |
| Returns: |
| a converted value. |
| """ |
| return getattr(var.scalar_value, var.scalar_type) |
| |
| |
| def PbMask2PyValue(var): |
| """Converts VariableSecificationMessage (Mask) to Python value. |
| |
| Args: |
| var: VariableSpecificationMessage to convert. |
| |
| Returns: |
| a converted value. |
| """ |
| return getattr(var.scalar_value, var.scalar_type) |
| |
| |
| def PbScalar2PyValue(var): |
| """Converts VariableSecificationMessage (Scalar) to Python value. |
| |
| Args: |
| message: VariableSpecificationMessage to convert. |
| |
| Returns: |
| Converted scalar value. |
| """ |
| return getattr(var.scalar_value, var.scalar_type) |
| |
| |
| def PbString2PyString(var): |
| """Converts VTS VariableSecificationMessage (String) to Python string. |
| |
| Args: |
| var: VariableSpecificationMessage to convert. |
| |
| Returns: |
| Converted string. |
| """ |
| return var.string_value.message |
| |
| |
| def PbVector2PyList(var): |
| """Converts VariableSecificationMessage (Vector) to a Python list. |
| |
| Args: |
| var: VariableSpecificationMessage to convert. |
| |
| Returns: |
| A converted list if valid, None otherwise. |
| """ |
| result = [] |
| for curr_value in var.vector_value: |
| if curr_value.type == CompSpecMsg.TYPE_SCALAR: |
| result.append(PbScalar2PyValue(curr_value)) |
| elif curr_value.type == CompSpecMsg.TYPE_STRUCT: |
| result.append(PbStruct2PyDict(curr_value)) |
| else: |
| logging.error("unsupported type %s", curr_value.type) |
| return None |
| return result |
| |
| |
| def PbArray2PyList(var): |
| """Converts VariableSecificationMessage (Array) to a Python list. |
| |
| Args: |
| var: VariableSpecificationMessage to convert. |
| |
| Returns: |
| A converted list if valid, None otherwise |
| """ |
| result = [] |
| for curr_value in var.vector_value: |
| if curr_value.type == CompSpecMsg.TYPE_SCALAR: |
| result.append(PbScalar2PyValue(curr_value)) |
| elif curr_value.type == CompSpecMsg.TYPE_STRUCT: |
| result.append(PbStruct2PyDict(curr_value)) |
| else: |
| logging.error("unsupported type %s", curr_value.type) |
| return None |
| return result |
| |
| |
| def PbStruct2PyDict(var): |
| """Converts VariableSecificationMessage (struct) to Python dict. |
| |
| Args: |
| var: VariableSpecificationMessage to convert. |
| |
| Returns: |
| a dict, containing the converted data if valid. None otherwise. |
| """ |
| result = {} |
| for attr in var.struct_value: |
| if attr.type == CompSpecMsg.TYPE_ENUM: |
| result[attr.name] = PbEnum2PyValue(attr) |
| elif attr.type == CompSpecMsg.TYPE_SCALAR: |
| result[attr.name] = PbScalar2PyValue(attr) |
| elif attr.type == CompSpecMsg.TYPE_STRING: |
| result[attr.name] = PbString2PyString(attr) |
| elif attr.type == CompSpecMsg.TYPE_VECTOR: |
| result[attr.name] = PbVector2PyList(attr) |
| elif attr.type == CompSpecMsg.TYPE_STRUCT: |
| result[attr.name] = PbStruct2PyDict(attr) |
| elif attr.type == CompSpecMsg.TYPE_Array: |
| result[attr.name] = PbArray2PyList(attr) |
| else: |
| logging.error("PyDict2PbStruct: unsupported type %s", |
| attr.type) |
| return None |
| return result |
| |
| |
| def PbPredefined2PyValue(var): |
| """Converts VariableSecificationMessage (PREDEFINED_TYPE) to Python value. |
| |
| Args: |
| var: VariableSpecificationMessage to convert. |
| |
| Returns: |
| a converted value. |
| """ |
| return var.predefined_type |
| |
| |
| def Convert(var): |
| """Converts VariableSecificationMessage to Python native data structure. |
| |
| Args: |
| var: VariableSpecificationMessage of a target variable to convert. |
| |
| Returns: |
| A list containing the converted Python values if valid. None otherwise. |
| """ |
| if var.type == CompSpecMsg.TYPE_PREDEFINED: |
| return PbPredefined2PyValue(var) |
| elif var.type == CompSpecMsg.TYPE_SCALAR: |
| return PbScalar2PyValue(var) |
| elif var.type == CompSpecMsg.TYPE_VECTOR: |
| return PbVector2PyList(var) |
| elif var.type == CompSpecMsg.TYPE_STRUCT: |
| return PbStruct2PyDict(var) |
| elif var.type == CompSpecMsg.TYPE_ENUM: |
| return PbEnum2PyValue(var) |
| elif var.type == CompSpecMsg.TYPE_STRING: |
| return PbString2PyString(var) |
| elif var.type == CompSpecMsg.TYPE_MASK: |
| return PbMask2PyValue(var) |
| else: |
| logging.error("Got unsupported callback arg type %s" % var.type) |
| return None |
| |
| return message |