Как определить тип значения поля oneof для proto3? - PullRequest
0 голосов
/ 26 марта 2020
syntax = "proto3";

package gRPC_Forecaster;

import "google/protobuf/timestamp.proto";

service Forecaster {
    rpc Forecast (ProductToForecast) returns (ForecastData) {}
}

message ProductToForecast {
    int32 productID = 1;
    google.protobuf.Timestamp startDate = 2;
    int32 forecastDurationInWeeks = 3;
    Model model = 4;
}

message ForecastData {
    repeated int32 data = 1;
    repeated int32 date = 2;
}

message Model {
    oneof model_oneof {
        ARIMA arima = 1;
        SARIMA sarima = 2;
    }
}

message ARIMA{
    int32 p = 1;
    int32 d = 2;
    int32 q = 3;
}

message SARIMA{
    int32 p = 1;
    int32 d = 2;
    int32 q = 3;
    int32 p2 = 4;
    int32 d2 = 5;
    int32 q2 = 6;

}

Выше приведен мой код proto3 для моей настройки gRP C, где у меня есть сервер pyhton и клиент PHP.
На клиенте PHP я установил объект модели как ARIMA.
Как мне проверить на моем python сервере, что тип request.model имеет тип ARIMA?
Кроме того, я хочу, чтобы клиент PHP мог установить модель на ARIMA или SARIMA, как я подхожу к этому правильному?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Посмотрите ссылку на буферы протокола для сгенерированного кода:

0 голосов
/ 26 марта 2020

Пока я нашел решение с помощью функции hasattr () , равной Python.
Так что, когда я получил запрос от приложения PHP, я могу выполнить hasattr(request.model, "arima") и работает. Я не уверен, что это путь к go.

...