Учитывая прототипное определение
message EndpointResult {
int32 endpoint_id = 1;
// property id as key
map<int32, TimeSeries> properties = 2;
}
message TimeSeries {
repeated TimeEntry value = 2;
}
message TimeEntry {
int32 time_unit = 1;
float value = 2;
}
Я хочу заполнить карту в классе EndpointResult.Я пробовал разные подходы, предложенные в документах , но все они вызывают ошибку для меня.
Настройка тестового класса
end_point_rslt = nom.EndpointResult()
end_point_rslt.endpoint_id=0
ts = nom.TimeSeries()
te = ts.value.add()
te.time_unit = 0
te.value = 5.
Затем пробуем разные подходы:
end_point_rslt.properties[0] = ts
ValueError: прямое назначение суб-сообщения не разрешено
end_point_rslt.properties[0].submessage_field = ts
AttributeError: назначение не разрешено (нет поля «submessage_field» в объекте сообщения протокола).
end_point_rslt.properties.get_or_create(0)
end_point_rslt.properties[0] = ts
ValueError: прямое назначение submessage notпозволено
end_point_rslt.properties.get_or_create(0)
end_point_rslt.properties[0].submessage_field = ts
AttributeError: назначение не разрешено (нет поля «submessage_field» в объекте сообщения протокола).
end_point_rslt.properties = {0 : ts}
AttributeError:Не допускается присвоение повторяющегося поля "свойства" в объекте сообщения протокола.
end_point_rslt.properties.get_or_create(0)
end_point_rslt.properties = {0 : ts}
TypeError: Невозможно установить составное поле
Anyпример того, как использовать карту буфера протокола в Python, был бы очень признателен!