invest-python icon indicating copy to clipboard operation
invest-python copied to clipboard

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

Open megazhuk opened this issue 3 years ago • 0 comments

Описание

Столкнулся с тем, что поднадобилось обратбатывать ответы в видк словарей. В АПИ постоянная конвертация из датакласса в протобуф и обратно. Например, все ответы от сервера прозодят через это: _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 avatar Aug 01 '22 20:08 megazhuk