Skip to content

[Feature] Удобная возможность на выходе получать родной Protobuff Response вместо Dataclasses #98

Open
megazhuk opened this issue Aug 1, 2022 · 0 comments
Labels
enhancement New feature or request

Comments

@megazhuk
Copy link

megazhuk commented Aug 1, 2022

Описание

Столкнулся с тем, что поднадобилось обратбатывать ответы в видк словарей.
В АПИ постоянная конвертация из датакласса в протобуф и обратно.
Например, все ответы от сервера прозодят через это:
_grpc_helpers.protobuf_to_dataclass(response, MarketDataResponse)

При этом в датаклассе остаются артефакты от Protobuf'а:
image
Что делает затруднительным перевод ответа в нативные типы, например в словарь, и тем более затрудняет перевод в JSON, для отправки в веб-интерфейс (UI так реализован).

Желаемое решение

Предлагаю сделать перевод ответов опциональным и включенным по-умогчанию, так как, видимо, решено было строить АПИ на датаклассах(что на мой личный взгляд является неоднозначным решением). Так как любое изменение proto-контрактов будет требовать ручного добавления/изменения в invest-python датаклассов и их обработчиков.
На данный момент частично решил проблему так в файле _grpc_helpers.py :
image
Ответы от сервера после этого посылаю в:
from google.protobuf.json_format import MessageToJson, MessageToDict

Дополнительно

Возможно, что можно решить ситуацию добавив параметры, в которых можно задавать в каких видах я желаю получать ответы от сервера. например (resp_json=False, resp_dict=True, resp_dataclass=True)
Или доделать реализыцию grpc_helpers.protobuf_to_dataclass, чтобы корректно переводила все protobuf-типы в нативные питоновские. Но этот вариант - самый неоптимальный, так как будет происходить конвертация protobuf -> dataclass -> dict -> JSON, вместо простого (уже реализованного Гуглом) protobuf -> JSON.

@megazhuk megazhuk added the enhancement New feature or request label Aug 1, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant