#python #protocol-buffers
#python #протокол-буферы
Вопрос:
Я изучаю использование буферов протокола и хотел бы использовать новый тип данных метки времени, который находится в protobuf3. Вот мой файл .proto:
syntax = "proto3";
package shoppingbasket;
import "google/protobuf/timestamp.proto";
message TransactionItem {
optional string product = 1;
optional int32 quantity = 2;
optional double price = 3;
optional double discount = 4;
}
message Basket {
optional string basket = 1;
optional google.protobuf.Timestamp tstamp = 2;
optional string customer = 3;
optional string store = 4;
optional string channel = 5;
repeated TransactionItem transactionItems = 6;
}
message Baskets {
repeated Basket baskets = 1;
}
После генерации классов python из этого файла .proto я пытаюсь создать некоторые объекты, используя сгенерированные классы. Вот код:
import shoppingbasket_pb2
from google.protobuf.timestamp_pb2 import Timestamp
baskets = shoppingbasket_pb2.Baskets()
basket1 = baskets.baskets.add()
basket1.basket = "001"
basket1.tstamp = Timestamp().GetCurrentTime()
сбой с ошибкой:
Ошибка атрибута: недопустимо присвоение составному полю «tstamp» в объекте сообщения протокола.
Кто-нибудь может объяснить мне, почему это не работает, поскольку я в замешательстве.
Ответ №1:
Комментарии:
1. Этот API — это катастрофа,
.GetCurrentTime()
устанавливает значение? что ?!
Ответ №2:
Вы также можете проанализировать его:
Timestamp().FromJsonString("2022-03-26T22:23:34Z")