# pylint:disable=redefined-builtin,too-many-lines import logging from datetime import datetime from typing import Generator, Iterable, Iterator, List, Optional import grpc from deprecation import deprecated from . import _grpc_helpers, utils from ._error_hub import handle_error_hub_gen from ._errors import handle_request_error, handle_request_error_gen from .exceptions import RequestError from .grpc import ( instruments_pb2, instruments_pb2_grpc, marketdata_pb2, marketdata_pb2_grpc, operations_pb2, operations_pb2_grpc, orders_pb2, orders_pb2_grpc, sandbox_pb2, sandbox_pb2_grpc, signals_pb2, signals_pb2_grpc, stoporders_pb2, stoporders_pb2_grpc, users_pb2, users_pb2_grpc, ) from .logging import get_tracking_id_from_call, log_request from .market_data_stream.market_data_stream_manager import MarketDataStreamManager from .metadata import get_metadata from .schemas import ( AssetRequest, AssetResponse, AssetsRequest, AssetsResponse, BondResponse, BondsResponse, Brand, BrokerReportRequest, BrokerReportResponse, CancelOrderRequest, CancelOrderResponse, CancelStopOrderRequest, CancelStopOrderResponse, CandleInterval, CandleSource, CloseSandboxAccountRequest, CloseSandboxAccountResponse, CreateFavoriteGroupRequest, CreateFavoriteGroupResponse, CurrenciesResponse, CurrencyResponse, CurrencyTransferRequest, CurrencyTransferResponse, DeleteFavoriteGroupRequest, DeleteFavoriteGroupResponse, DfaResponse, DfasRequest, DfasResponse, EditFavoritesActionType, EditFavoritesRequest, EditFavoritesRequestInstrument, EditFavoritesResponse, EtfResponse, EtfsResponse, ExchangeOrderType, FilterOptionsRequest, FindInstrumentRequest, FindInstrumentResponse, FutureResponse, FuturesResponse, GenerateBrokerReportRequest, GenerateDividendsForeignIssuerReportRequest, GetAccountsRequest, GetAccountsResponse, GetAccountValuesRequest, GetAccountValuesResponse, GetAccruedInterestsRequest, GetAccruedInterestsResponse, GetAssetFundamentalsRequest, GetAssetFundamentalsResponse, GetAssetReportsRequest, GetAssetReportsResponse, GetBankAccountsRequest, GetBankAccountsResponse, GetBondCouponsRequest, GetBondCouponsResponse, GetBondEventsRequest, GetBondEventsResponse, GetBrandRequest, GetBrandsRequest, GetBrandsResponse, GetBrokerReportRequest, GetCandlesRequest, GetCandlesResponse, GetClosePricesRequest, GetClosePricesResponse, GetConsensusForecastsRequest, GetConsensusForecastsResponse, GetCountriesRequest, GetCountriesResponse, GetDividendsForeignIssuerReportRequest, GetDividendsForeignIssuerRequest, GetDividendsForeignIssuerResponse, GetDividendsRequest, GetDividendsResponse, GetFavoriteGroupsRequest, GetFavoriteGroupsResponse, GetFavoritesRequest, GetFavoritesResponse, GetForecastRequest, GetForecastResponse, GetFuturesMarginRequest, GetFuturesMarginResponse, GetInfoRequest, GetInfoResponse, GetInsiderDealsRequest, GetInsiderDealsResponse, GetLastPricesRequest, GetLastPricesResponse, GetLastTradesRequest, GetLastTradesResponse, GetMarginAttributesRequest, GetMarginAttributesResponse, GetMarketValuesRequest, GetMarketValuesResponse, GetMaxLotsRequest, GetMaxLotsResponse, GetOperationsByCursorRequest, GetOperationsByCursorResponse, GetOrderBookRequest, GetOrderBookResponse, GetOrderPriceRequest, GetOrderPriceResponse, GetOrdersRequest, GetOrdersRequestFilters, GetOrdersResponse, GetOrderStateRequest, GetSignalsRequest, GetSignalsResponse, GetStopOrdersRequest, GetStopOrdersResponse, GetStrategiesRequest, GetStrategiesResponse, GetTechAnalysisRequest, GetTechAnalysisResponse, GetTradingStatusesRequest, GetTradingStatusesResponse, GetTradingStatusRequest, GetTradingStatusResponse, GetUserTariffRequest, GetUserTariffResponse, HistoricCandle, IndicativesRequest, IndicativesResponse, InstrumentClosePriceRequest, InstrumentExchangeType, InstrumentIdType, InstrumentRequest, InstrumentResponse, InstrumentsRequest, InstrumentStatus, InstrumentType, LastPriceType, MarketDataRequest, MarketDataResponse, MarketDataServerSideStreamRequest, MoneyValue, OpenSandboxAccountRequest, OpenSandboxAccountResponse, OperationsRequest, OperationsResponse, OperationsStreamRequest, OperationsStreamResponse, OperationState, OptionResponse, OptionsResponse, OrderDirection, OrderExecutionReportStatus, OrderIdType, OrderState, OrderStateStreamRequest, OrderStateStreamResponse, OrderType, Page, PayInRequest, PayInResponse, PingDelaySettings, PortfolioRequest, PortfolioResponse, PortfolioStreamRequest, PortfolioStreamResponse, PositionsRequest, PositionsResponse, PositionsStreamRequest, PositionsStreamResponse, PostOrderAsyncRequest, PostOrderAsyncResponse, PostOrderRequest, PostOrderResponse, PostStopOrderRequest, PostStopOrderRequestTrailingData, PostStopOrderResponse, PriceType, Quotation, ReplaceOrderRequest, RiskRatesRequest, RiskRatesResponse, SandboxPayInRequest, SandboxPayInResponse, ShareResponse, SharesResponse, StopOrderDirection, StopOrderExpirationType, StopOrderStatusOption, StopOrderType, StructuredNoteResponse, StructuredNotesResponse, TakeProfitType, TimeInForceType, TradeSourceType, TradesStreamRequest, TradesStreamResponse, TradingSchedulesRequest, TradingSchedulesResponse, WithdrawLimitsRequest, WithdrawLimitsResponse, ) from .typedefs import AccountId from .utils import get_intervals, now __all__ = ( "Services", "InstrumentsService", "MarketDataService", "MarketDataStreamService", "OperationsService", "OperationsStreamService", "OrdersStreamService", "OrdersService", "UsersService", "SandboxService", "StopOrdersService", "SignalService", ) logger = logging.getLogger(__name__) class Services: def __init__( self, channel: grpc.Channel, token: str, sandbox_token: Optional[str] = None, app_name: Optional[str] = None, ) -> None: metadata = get_metadata(token, app_name) sandbox_metadata = get_metadata(sandbox_token or token, app_name) self.instruments = InstrumentsService(channel, metadata) self.market_data = MarketDataService(channel, metadata) self.market_data_stream = MarketDataStreamService(channel, metadata) self.operations = OperationsService(channel, metadata) self.operations_stream = OperationsStreamService(channel, metadata) self.orders_stream = OrdersStreamService(channel, metadata) self.orders = OrdersService(channel, metadata) self.users = UsersService(channel, metadata) self.sandbox = SandboxService(channel, sandbox_metadata) self.stop_orders = StopOrdersService(channel, metadata) self.signals = SignalService(channel, metadata) def create_market_data_stream(self) -> MarketDataStreamManager: return MarketDataStreamManager( market_data_stream_service=self.market_data_stream ) def cancel_all_orders(self, account_id: AccountId) -> None: orders_service: OrdersService = self.orders stop_orders_service: StopOrdersService = self.stop_orders orders_response = orders_service.get_orders(account_id=account_id) for order in orders_response.orders: orders_service.cancel_order(account_id=account_id, order_id=order.order_id) stop_orders_response = stop_orders_service.get_stop_orders( account_id=account_id ) for stop_order in stop_orders_response.stop_orders: stop_orders_service.cancel_stop_order( account_id=account_id, stop_order_id=stop_order.stop_order_id ) # pylint:disable=too-many-nested-blocks def get_all_candles( self, *, from_: datetime, to: Optional[datetime] = None, interval: CandleInterval = CandleInterval(0), figi: str = "", instrument_id: str = "", candle_source_type: Optional[CandleSource] = None, ) -> Generator[HistoricCandle, None, None]: to = to or now() previous_candles = set() for current_from, current_to in get_intervals(interval, from_, to): candles_response: GetCandlesResponse = self.market_data.get_candles( figi=figi, interval=interval, from_=current_from, to=current_to, instrument_id=instrument_id, candle_source_type=candle_source_type, ) for candle in candles_response.candles: if candle not in previous_candles: yield candle previous_candles.add(candle) previous_candles = set(candles_response.candles) class InstrumentsService(_grpc_helpers.Service): _stub_factory = instruments_pb2_grpc.InstrumentsServiceStub @handle_request_error("TradingSchedules") def trading_schedules( self, *, exchange: str = "", from_: Optional[datetime] = None, to: Optional[datetime] = None, ) -> TradingSchedulesResponse: request = TradingSchedulesRequest() request.exchange = exchange if from_ is not None: request.from_ = from_ if to is not None: request.to = to response, call = self.stub.TradingSchedules.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.TradingSchedulesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "TradingSchedules") return _grpc_helpers.protobuf_to_dataclass(response, TradingSchedulesResponse) @handle_request_error("BondBy") def bond_by( self, *, id_type: InstrumentIdType = InstrumentIdType(0), class_code: str = "", id: str = "", ) -> BondResponse: request = InstrumentRequest() request.id_type = id_type request.class_code = class_code request.id = id response, call = self.stub.BondBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "BondBy") return _grpc_helpers.protobuf_to_dataclass(response, BondResponse) @handle_request_error("Bonds") def bonds( self, *, instrument_status: InstrumentStatus = InstrumentStatus(0), instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0), ) -> BondsResponse: request = InstrumentsRequest() request.instrument_status = instrument_status request.instrument_exchange = instrument_exchange response, call = self.stub.Bonds.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "Bonds") return _grpc_helpers.protobuf_to_dataclass(response, BondsResponse) @handle_request_error("CurrencyBy") def currency_by( self, *, id_type: InstrumentIdType = InstrumentIdType(0), class_code: str = "", id: str = "", ) -> CurrencyResponse: request = InstrumentRequest() request.id_type = id_type request.class_code = class_code request.id = id response, call = self.stub.CurrencyBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "CurrencyBy") return _grpc_helpers.protobuf_to_dataclass(response, CurrencyResponse) @handle_request_error("Currencies") def currencies( self, *, instrument_status: InstrumentStatus = InstrumentStatus(0), instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0), ) -> CurrenciesResponse: request = InstrumentsRequest() request.instrument_status = instrument_status request.instrument_exchange = instrument_exchange response, call = self.stub.Currencies.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "Currencies") return _grpc_helpers.protobuf_to_dataclass(response, CurrenciesResponse) @handle_request_error("EtfBy") def etf_by( self, *, id_type: InstrumentIdType = InstrumentIdType(0), class_code: str = "", id: str = "", ) -> EtfResponse: request = InstrumentRequest() request.id_type = id_type request.class_code = class_code request.id = id response, call = self.stub.EtfBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "EtfBy") return _grpc_helpers.protobuf_to_dataclass(response, EtfResponse) @handle_request_error("Etfs") def etfs( self, *, instrument_status: InstrumentStatus = InstrumentStatus(0), instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0), ) -> EtfsResponse: request = InstrumentsRequest() request.instrument_status = instrument_status request.instrument_exchange = instrument_exchange response, call = self.stub.Etfs.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "Etfs") return _grpc_helpers.protobuf_to_dataclass(response, EtfsResponse) @handle_request_error("FutureBy") def future_by( self, *, id_type: InstrumentIdType = InstrumentIdType(0), class_code: str = "", id: str = "", ) -> FutureResponse: request = InstrumentRequest() request.id_type = id_type request.class_code = class_code request.id = id response, call = self.stub.FutureBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "FutureBy") return _grpc_helpers.protobuf_to_dataclass(response, FutureResponse) @handle_request_error("Futures") def futures( self, *, instrument_status: InstrumentStatus = InstrumentStatus(0), instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0), ) -> FuturesResponse: request = InstrumentsRequest() request.instrument_status = instrument_status request.instrument_exchange = instrument_exchange response, call = self.stub.Futures.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "Futures") return _grpc_helpers.protobuf_to_dataclass(response, FuturesResponse) @handle_request_error("OptionBy") def option_by( self, *, id_type: InstrumentIdType = InstrumentIdType(0), class_code: str = "", id: str = "", ) -> OptionResponse: request = InstrumentRequest() request.id_type = id_type request.class_code = class_code request.id = id response, call = self.stub.OptionBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "OptionBy") return _grpc_helpers.protobuf_to_dataclass(response, OptionResponse) @deprecated(details="Use `Client.instruments.options_by(...)` method instead") @handle_request_error("Options") def options( self, *, instrument_status: InstrumentStatus = InstrumentStatus(0), instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0), ) -> OptionsResponse: request = InstrumentsRequest() request.instrument_status = instrument_status request.instrument_exchange = instrument_exchange response, call = self.stub.Options.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "Options") return _grpc_helpers.protobuf_to_dataclass(response, OptionsResponse) @handle_request_error("OptionsBy") def options_by( self, *, basic_asset_uid: str = "", basic_asset_position_uid: str = "" ) -> OptionsResponse: request = FilterOptionsRequest() request.basic_asset_uid = basic_asset_uid request.basic_asset_position_uid = basic_asset_position_uid response, call = self.stub.OptionsBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.FilterOptionsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "OptionsBy") return _grpc_helpers.protobuf_to_dataclass(response, OptionsResponse) @handle_request_error("ShareBy") def share_by( self, *, id_type: InstrumentIdType = InstrumentIdType(0), class_code: str = "", id: str = "", ) -> ShareResponse: request = InstrumentRequest() request.id_type = id_type request.class_code = class_code request.id = id response, call = self.stub.ShareBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "ShareBy") return _grpc_helpers.protobuf_to_dataclass(response, ShareResponse) @handle_request_error("Shares") def shares( self, *, instrument_status: InstrumentStatus = InstrumentStatus(0), instrument_exchange: InstrumentExchangeType = InstrumentExchangeType(0), ) -> SharesResponse: request = InstrumentsRequest() request.instrument_status = instrument_status request.instrument_exchange = instrument_exchange response, call = self.stub.Shares.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "Shares") return _grpc_helpers.protobuf_to_dataclass(response, SharesResponse) @handle_request_error("Indicatives") def indicatives( self, request: IndicativesRequest, ) -> IndicativesResponse: response, call = self.stub.Indicatives.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "Indicatives") return _grpc_helpers.protobuf_to_dataclass(response, IndicativesResponse) @handle_request_error("GetAccruedInterests") def get_accrued_interests( self, *, figi: str = "", from_: Optional[datetime] = None, to: Optional[datetime] = None, instrument_id: str = "", ) -> GetAccruedInterestsResponse: request = GetAccruedInterestsRequest() request.figi = figi request.instrument_id = instrument_id if from_ is not None: request.from_ = from_ if to is not None: request.to = to response, call = self.stub.GetAccruedInterests.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetAccruedInterestsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetAccruedInterests") return _grpc_helpers.protobuf_to_dataclass( response, GetAccruedInterestsResponse ) @handle_request_error("GetFuturesMargin") def get_futures_margin( self, *, figi: str = "", instrument_id: str = "" ) -> GetFuturesMarginResponse: request = GetFuturesMarginRequest() request.figi = figi request.instrument_id = instrument_id response, call = self.stub.GetFuturesMargin.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetFuturesMarginRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetFuturesMargin") return _grpc_helpers.protobuf_to_dataclass(response, GetFuturesMarginResponse) @handle_request_error("GetInstrumentBy") def get_instrument_by( self, *, id_type: InstrumentIdType = InstrumentIdType(0), class_code: str = "", id: str = "", ) -> InstrumentResponse: request = InstrumentRequest() request.id_type = id_type request.class_code = class_code request.id = id response, call = self.stub.GetInstrumentBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetInstrumentBy") return _grpc_helpers.protobuf_to_dataclass(response, InstrumentResponse) @handle_request_error("GetDividends") def get_dividends( self, *, figi: str = "", from_: Optional[datetime] = None, to: Optional[datetime] = None, instrument_id: str = "", ) -> GetDividendsResponse: request = GetDividendsRequest() request.figi = figi request.instrument_id = instrument_id if from_ is not None: request.from_ = from_ if to is not None: request.to = to response, call = self.stub.GetDividends.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetDividendsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetDividends") return _grpc_helpers.protobuf_to_dataclass(response, GetDividendsResponse) @handle_request_error("GetBondCoupons") def get_bond_coupons( self, *, figi: str = "", from_: Optional[datetime] = None, to: Optional[datetime] = None, instrument_id: str = "", ) -> GetBondCouponsResponse: request = GetBondCouponsRequest() request.figi = figi request.instrument_id = instrument_id if from_ is not None: request.from_ = from_ if to is not None: request.to = to response, call = self.stub.GetBondCoupons.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetBondCouponsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetBondCoupons") return _grpc_helpers.protobuf_to_dataclass(response, GetBondCouponsResponse) @handle_request_error("GetBondEvents") def get_bond_events(self, request: GetBondEventsRequest) -> GetBondEventsResponse: response, call = self.stub.GetBondEvents.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetBondEventsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetBondEvents") return _grpc_helpers.protobuf_to_dataclass(response, GetBondEventsResponse) @handle_request_error("GetAssetBy") def get_asset_by( self, *, id: str = "", ) -> AssetResponse: request = AssetRequest() request.id = id response, call = self.stub.GetAssetBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.AssetRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetAssetBy") return _grpc_helpers.protobuf_to_dataclass(response, AssetResponse) @handle_request_error("GetAssets") def get_assets( self, request: AssetsRequest, ) -> AssetsResponse: if request is None: request = AssetsRequest() response, call = self.stub.GetAssets.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.AssetsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetAssets") return _grpc_helpers.protobuf_to_dataclass(response, AssetsResponse) @handle_request_error("GetFavorites") def get_favorites( self, *, group_id: Optional[str] = None, ) -> GetFavoritesResponse: request = GetFavoritesRequest() if group_id is not None: request.group_id = group_id response, call = self.stub.GetFavorites.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetFavoritesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetFavorites") return _grpc_helpers.protobuf_to_dataclass(response, GetFavoritesResponse) @handle_request_error("EditFavorites") def edit_favorites( self, *, instruments: Optional[List[EditFavoritesRequestInstrument]] = None, action_type: Optional[EditFavoritesActionType] = None, group_id: Optional[str] = None, ) -> EditFavoritesResponse: request = EditFavoritesRequest() if action_type is not None: request.action_type = action_type if instruments is not None: request.instruments = instruments if group_id is not None: request.group_id = group_id response, call = self.stub.EditFavorites.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.EditFavoritesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "EditFavorites") return _grpc_helpers.protobuf_to_dataclass(response, EditFavoritesResponse) @handle_request_error("CreateFavoriteGroup") def create_favorite_group( self, request: CreateFavoriteGroupRequest, ) -> CreateFavoriteGroupResponse: response, call = self.stub.CreateFavoriteGroup.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.CreateFavoriteGroupRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "CreateFavoriteGroup") return _grpc_helpers.protobuf_to_dataclass( response, CreateFavoriteGroupResponse ) @handle_request_error("DeleteFavoriteGroup") def delete_favorite_group( self, request: DeleteFavoriteGroupRequest, ) -> DeleteFavoriteGroupResponse: response, call = self.stub.DeleteFavoriteGroup.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.DeleteFavoriteGroupRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "DeleteFavoriteGroup") return _grpc_helpers.protobuf_to_dataclass( response, DeleteFavoriteGroupResponse ) @handle_request_error("GetFavoriteGroups") def get_favorite_groups( self, request: GetFavoriteGroupsRequest, ) -> GetFavoriteGroupsResponse: response, call = self.stub.GetFavoriteGroups.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetFavoriteGroupsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetFavoriteGroups") return _grpc_helpers.protobuf_to_dataclass(response, GetFavoriteGroupsResponse) @handle_request_error("GetCountries") def get_countries( self, ) -> GetCountriesResponse: request = GetCountriesRequest() response, call = self.stub.GetCountries.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetCountriesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetCountries") return _grpc_helpers.protobuf_to_dataclass(response, GetCountriesResponse) @handle_request_error("FindInstrument") def find_instrument( self, *, query: str = "", instrument_kind: Optional[InstrumentType] = None, api_trade_available_flag: Optional[bool] = None, ) -> FindInstrumentResponse: request = FindInstrumentRequest() request.query = query if instrument_kind is not None: request.instrument_kind = instrument_kind if api_trade_available_flag is not None: request.api_trade_available_flag = api_trade_available_flag response, call = self.stub.FindInstrument.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.FindInstrumentRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "FindInstrument") return _grpc_helpers.protobuf_to_dataclass(response, FindInstrumentResponse) @handle_request_error("GetBrands") def get_brands( self, paging: Optional[Page] = None, ) -> GetBrandsResponse: request = GetBrandsRequest() if paging is not None: request.paging = paging response, call = self.stub.GetBrands.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetBrandsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetBrands") return _grpc_helpers.protobuf_to_dataclass(response, GetBrandsResponse) @handle_request_error("GetBrandBy") def get_brands_by(self, id: str = "") -> Brand: request = GetBrandRequest() request.id = id response, call = self.stub.GetBrandBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetBrandRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetBrandBy") return _grpc_helpers.protobuf_to_dataclass(response, Brand) @handle_request_error("GetAssetFundamentals") def get_asset_fundamentals( self, request: GetAssetFundamentalsRequest ) -> GetAssetFundamentalsResponse: response, call = self.stub.GetAssetFundamentals.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetAssetFundamentalsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetAssetFundamentals") return _grpc_helpers.protobuf_to_dataclass( response, GetAssetFundamentalsResponse ) @handle_request_error("GetAssetReports") def get_asset_reports( self, request: GetAssetReportsRequest ) -> GetAssetReportsResponse: response, call = self.stub.GetAssetReports.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetAssetReportsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetAssetReports") return _grpc_helpers.protobuf_to_dataclass(response, GetAssetReportsResponse) @handle_request_error("GetConsensusForecasts") def get_consensus_forecasts( self, request: GetConsensusForecastsRequest ) -> GetConsensusForecastsResponse: response, call = self.stub.GetConsensusForecasts.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetConsensusForecastsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetConsensusForecasts") return _grpc_helpers.protobuf_to_dataclass( response, GetConsensusForecastsResponse ) @handle_request_error("GetForecastBy") def get_forecast_by(self, request: GetForecastRequest) -> GetForecastResponse: response, call = self.stub.GetForecastBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetForecastRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetForecastBy") return _grpc_helpers.protobuf_to_dataclass(response, GetForecastResponse) @handle_request_error("GetRiskRates") def get_risk_rates(self, request: RiskRatesRequest) -> RiskRatesResponse: response, call = self.stub.GetRiskRates.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.RiskRatesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetRiskRates") return _grpc_helpers.protobuf_to_dataclass(response, RiskRatesResponse) @handle_request_error("GetInsiderDeals") def get_insider_deals( self, request: GetInsiderDealsRequest, ) -> GetInsiderDealsResponse: response, call = self.stub.GetInsiderDeals.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.GetInsiderDealsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetInsiderDeals") return _grpc_helpers.protobuf_to_dataclass(response, GetInsiderDealsResponse) @handle_request_error("StructuredNoteBy") def structured_note_by(self, request: InstrumentRequest) -> StructuredNoteResponse: response, call = self.stub.StructuredNoteBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "StructuredNoteBy") return _grpc_helpers.protobuf_to_dataclass(response, StructuredNoteResponse) @handle_request_error("StructuredNotes") def structured_notes( self, request: InstrumentsRequest, ) -> StructuredNotesResponse: response, call = self.stub.StructuredNotes.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "StructuredNotes") return _grpc_helpers.protobuf_to_dataclass(response, StructuredNotesResponse) @handle_request_error("Dfas") def dfas( self, ) -> DfasResponse: response, call = self.stub.Dfas.with_call( request=_grpc_helpers.dataclass_to_protobuff( DfasRequest(), instruments_pb2.DfasRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "Dfas") return _grpc_helpers.protobuf_to_dataclass(response, DfasResponse) @handle_request_error("DfaBy") def dfa_by( self, request: InstrumentRequest, ) -> DfaResponse: response, call = self.stub.DfaBy.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, instruments_pb2.InstrumentRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "DfaBy") return _grpc_helpers.protobuf_to_dataclass(response, DfaResponse) class MarketDataService(_grpc_helpers.Service): _stub_factory = marketdata_pb2_grpc.MarketDataServiceStub @handle_request_error("GetCandles") def get_candles( self, *, figi: str = "", from_: Optional[datetime] = None, to: Optional[datetime] = None, interval: CandleInterval = CandleInterval(0), instrument_id: str = "", candle_source_type: Optional[CandleSource] = None, limit: Optional[int] = None, ) -> GetCandlesResponse: request = GetCandlesRequest() request.figi = figi request.instrument_id = instrument_id request.candle_source_type = candle_source_type if from_ is not None: request.from_ = from_ if to is not None: request.to = to if limit is not None: request.limit = limit request.interval = interval response, call = self.stub.GetCandles.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.GetCandlesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetCandles") return _grpc_helpers.protobuf_to_dataclass(response, GetCandlesResponse) @handle_request_error("GetLastPrices") def get_last_prices( self, *, figi: Optional[List[str]] = None, instrument_id: Optional[List[str]] = None, last_price_type: LastPriceType = LastPriceType.LAST_PRICE_UNSPECIFIED, instrument_status: Optional[InstrumentStatus] = None, ) -> GetLastPricesResponse: figi = figi or [] instrument_id = instrument_id or [] request = GetLastPricesRequest() request.figi = figi request.instrument_id = instrument_id request.last_price_type = last_price_type if instrument_status: request.instrument_status = instrument_status response, call = self.stub.GetLastPrices.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.GetLastPricesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetLastPrices") return _grpc_helpers.protobuf_to_dataclass(response, GetLastPricesResponse) @handle_request_error("GetOrderBook") def get_order_book( self, *, figi: str = "", depth: int = 0, instrument_id: str = "" ) -> GetOrderBookResponse: request = GetOrderBookRequest() request.figi = figi request.instrument_id = instrument_id request.depth = depth response, call = self.stub.GetOrderBook.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.GetOrderBookRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetOrderBook") return _grpc_helpers.protobuf_to_dataclass(response, GetOrderBookResponse) @handle_request_error("GetTradingStatus") def get_trading_status( self, *, figi: str = "", instrument_id: str = "" ) -> GetTradingStatusResponse: request = GetTradingStatusRequest() request.figi = figi request.instrument_id = instrument_id response, call = self.stub.GetTradingStatus.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.GetTradingStatusRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetTradingStatus") return _grpc_helpers.protobuf_to_dataclass(response, GetTradingStatusResponse) @handle_request_error("GetTradingStatuses") def get_trading_statuses( self, *, instrument_ids: Optional[List[str]] = None ) -> GetTradingStatusesResponse: request = GetTradingStatusesRequest() if instrument_ids: request.instrument_id = instrument_ids response, call = self.stub.GetTradingStatuses.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.GetTradingStatusesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetTradingStatuses") return _grpc_helpers.protobuf_to_dataclass(response, GetTradingStatusesResponse) @handle_request_error("GetLastTrades") def get_last_trades( self, *, figi: str = "", from_: Optional[datetime] = None, to: Optional[datetime] = None, instrument_id: str = "", trade_source: "TradeSourceType" = TradeSourceType.TRADE_SOURCE_UNSPECIFIED, ) -> GetLastTradesResponse: request = GetLastTradesRequest() request.figi = figi request.instrument_id = instrument_id if from_ is not None: request.from_ = from_ if to is not None: request.to = to if trade_source is not None: request.trade_source = trade_source response, call = self.stub.GetLastTrades.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.GetLastTradesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetLastTrades") return _grpc_helpers.protobuf_to_dataclass(response, GetLastTradesResponse) @handle_request_error("GetClosePrices") def get_close_prices( self, *, instruments: Optional[List[InstrumentClosePriceRequest]] = None, instrument_status: Optional[InstrumentStatus] = None, ) -> GetClosePricesResponse: request = GetClosePricesRequest() if instruments: request.instruments = instruments if instrument_status: request.instrument_status = instrument_status response, call = self.stub.GetClosePrices.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.GetClosePricesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetClosePrices") return _grpc_helpers.protobuf_to_dataclass(response, GetClosePricesResponse) @handle_request_error("GetTechAnalysis") def get_tech_analysis( self, *, request: GetTechAnalysisRequest, ) -> GetTechAnalysisResponse: response, call = self.stub.GetTechAnalysis.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.GetTechAnalysisRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetTechAnalysis") return _grpc_helpers.protobuf_to_dataclass(response, GetTechAnalysisResponse) @handle_request_error("GetMarketValues") def get_market_values( self, *, request: GetMarketValuesRequest, ) -> GetMarketValuesResponse: response, call = self.stub.GetMarketValues.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.GetMarketValuesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetMarketValues") return _grpc_helpers.protobuf_to_dataclass(response, GetMarketValuesResponse) class MarketDataStreamService(_grpc_helpers.Service): _stub_factory = marketdata_pb2_grpc.MarketDataStreamServiceStub @staticmethod def _convert_market_data_stream_request( request_iterator: Iterable[MarketDataRequest], ) -> Iterable[marketdata_pb2.MarketDataRequest]: for request in request_iterator: yield _grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.MarketDataRequest() ) @handle_error_hub_gen() @handle_request_error_gen("MarketDataStream") def market_data_stream( self, request_iterator: Iterable[MarketDataRequest], ) -> Iterator[MarketDataResponse]: for response in self.stub.MarketDataStream( request_iterator=self._convert_market_data_stream_request(request_iterator), metadata=self.metadata, ): yield _grpc_helpers.protobuf_to_dataclass(response, MarketDataResponse) @staticmethod def _convert_market_data_server_side_stream_request( request_iterator: Iterable[MarketDataServerSideStreamRequest], ) -> Iterable[marketdata_pb2.MarketDataServerSideStreamRequest]: for request in request_iterator: yield _grpc_helpers.dataclass_to_protobuff( request, marketdata_pb2.MarketDataServerSideStreamRequest() ) @handle_error_hub_gen() @handle_request_error_gen("MarketDataServerSideStream") def market_data_server_side_stream( self, request_iterator: Iterable[MarketDataServerSideStreamRequest], ) -> Iterable[MarketDataResponse]: for response in self.stub.MarketDataServerSideStream( request_iterator=self._convert_market_data_server_side_stream_request( request_iterator ), metadata=self.metadata, ): yield _grpc_helpers.protobuf_to_dataclass(response, MarketDataResponse) class OperationsService(_grpc_helpers.Service): _stub_factory = operations_pb2_grpc.OperationsServiceStub @handle_request_error("GetOperations") def get_operations( self, *, account_id: str = "", from_: Optional[datetime] = None, to: Optional[datetime] = None, state: OperationState = OperationState(0), figi: str = "", ) -> OperationsResponse: request = OperationsRequest() request.account_id = account_id if from_ is not None: request.from_ = from_ if to is not None: request.to = to request.state = state request.figi = figi response, call = self.stub.GetOperations.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.OperationsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetOperations") return _grpc_helpers.protobuf_to_dataclass(response, OperationsResponse) @handle_request_error("GetPortfolio") def get_portfolio(self, *, account_id: str = "") -> PortfolioResponse: request = PortfolioRequest() request.account_id = account_id response, call = self.stub.GetPortfolio.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.PortfolioRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetPortfolio") return _grpc_helpers.protobuf_to_dataclass(response, PortfolioResponse) @handle_request_error("GetPositions") def get_positions(self, *, account_id: str = "") -> PositionsResponse: request = PositionsRequest() request.account_id = account_id response, call = self.stub.GetPositions.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.PositionsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetPositions") return _grpc_helpers.protobuf_to_dataclass(response, PositionsResponse) @handle_request_error("GetWithdrawLimits") def get_withdraw_limits(self, *, account_id: str = "") -> WithdrawLimitsResponse: request = WithdrawLimitsRequest() request.account_id = account_id response, call = self.stub.GetWithdrawLimits.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.WithdrawLimitsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetWithdrawLimits") return _grpc_helpers.protobuf_to_dataclass(response, WithdrawLimitsResponse) @handle_request_error("GetBrokerReport") def get_broker_report( self, *, generate_broker_report_request: Optional[GenerateBrokerReportRequest] = None, get_broker_report_request: Optional[GetBrokerReportRequest] = None, ) -> BrokerReportResponse: request = BrokerReportRequest() if generate_broker_report_request: request.generate_broker_report_request = generate_broker_report_request if get_broker_report_request: request.get_broker_report_request = get_broker_report_request response, call = self.stub.GetBrokerReport.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.BrokerReportRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetBrokerReport") return _grpc_helpers.protobuf_to_dataclass(response, BrokerReportResponse) @handle_request_error("GetDividendsForeignIssuer") def get_dividends_foreign_issuer( self, *, generate_div_foreign_issuer_report: Optional[ GenerateDividendsForeignIssuerReportRequest ] = None, get_div_foreign_issuer_report: Optional[ GetDividendsForeignIssuerReportRequest ] = None, ) -> GetDividendsForeignIssuerResponse: request = GetDividendsForeignIssuerRequest() if generate_div_foreign_issuer_report is not None: request.generate_div_foreign_issuer_report = ( generate_div_foreign_issuer_report ) if get_div_foreign_issuer_report is not None: request.get_div_foreign_issuer_report = get_div_foreign_issuer_report response, call = self.stub.GetDividendsForeignIssuer.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.GetDividendsForeignIssuerRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetDividendsForeignIssuer") return _grpc_helpers.protobuf_to_dataclass( response, GetDividendsForeignIssuerResponse ) @handle_request_error("GetOperationsByCursor") def get_operations_by_cursor( self, request: GetOperationsByCursorRequest, ) -> GetOperationsByCursorResponse: response, call = self.stub.GetOperationsByCursor.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.GetOperationsByCursorRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetOperationsByCursor") return _grpc_helpers.protobuf_to_dataclass( response, GetOperationsByCursorResponse ) class OperationsStreamService(_grpc_helpers.Service): _stub_factory = operations_pb2_grpc.OperationsStreamServiceStub @handle_error_hub_gen() @handle_request_error_gen("PortfolioStream") def portfolio_stream( self, *, accounts: Optional[List[str]] = None, ping_delay_ms: Optional[int] = None, ) -> Iterable[PortfolioStreamResponse]: request = PortfolioStreamRequest() ping_settings = PingDelaySettings() if ping_delay_ms is not None: ping_settings.ping_delay_ms = ping_delay_ms request.ping_settings = ping_settings if accounts: request.accounts = accounts else: raise ValueError("accounts can not be empty") for response in self.stub.PortfolioStream( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.PortfolioStreamRequest() ), metadata=self.metadata, ): yield _grpc_helpers.protobuf_to_dataclass(response, PortfolioStreamResponse) @handle_error_hub_gen() @handle_request_error_gen("PositionsStream") def positions_stream( self, *, accounts: Optional[List[str]] = None, ping_delay_ms: Optional[int] = None, with_initial_positions: Optional[bool] = None, ) -> Iterable[PositionsStreamResponse]: request = PositionsStreamRequest() if accounts: request.accounts = accounts else: raise ValueError("accounts can not be empty") ping_settings = PingDelaySettings() if ping_delay_ms is not None: ping_settings.ping_delay_ms = ping_delay_ms request.ping_settings = ping_settings if with_initial_positions: request.with_initial_positions = with_initial_positions for response in self.stub.PositionsStream( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.PositionsStreamRequest() ), metadata=self.metadata, ): yield _grpc_helpers.protobuf_to_dataclass(response, PositionsStreamResponse) @handle_error_hub_gen() @handle_request_error_gen("OperationsStream") def operations_stream( self, request: OperationsStreamRequest, ) -> Iterable[OperationsStreamResponse]: for response in self.stub.OperationsStream( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.OperationsStreamRequest() ), metadata=self.metadata, ): yield _grpc_helpers.protobuf_to_dataclass( response, OperationsStreamResponse ) class OrdersStreamService(_grpc_helpers.Service): _stub_factory = orders_pb2_grpc.OrdersStreamServiceStub @handle_error_hub_gen() @handle_request_error_gen("TradesStream") def trades_stream( self, *, accounts: Optional[List[str]] = None, ping_delay_ms: Optional[int] = None, ) -> Iterable[TradesStreamResponse]: request = TradesStreamRequest() if ping_delay_ms is not None: request.ping_delay_ms = ping_delay_ms if accounts: request.accounts = accounts else: raise ValueError("accounts can not be empty") for response in self.stub.TradesStream( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.TradesStreamRequest() ), metadata=self.metadata, ): yield _grpc_helpers.protobuf_to_dataclass(response, TradesStreamResponse) @handle_error_hub_gen() @handle_request_error_gen("OrderStateStream") def order_state_stream( self, *, request: OrderStateStreamRequest ) -> Iterable[OrderStateStreamResponse]: for response in self.stub.OrderStateStream( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.OrderStateStreamRequest() ), metadata=self.metadata, ): yield _grpc_helpers.protobuf_to_dataclass( response, OrderStateStreamResponse ) class OrdersService(_grpc_helpers.Service): _stub_factory = orders_pb2_grpc.OrdersServiceStub @handle_request_error("PostOrder") def post_order( self, *, figi: str = "", quantity: int = 0, price: Optional[Quotation] = None, direction: OrderDirection = OrderDirection(0), account_id: str = "", order_type: OrderType = OrderType(0), order_id: str = "", instrument_id: str = "", time_in_force: TimeInForceType = TimeInForceType(0), price_type: PriceType = PriceType(0), confirm_margin_trade: bool = False, ) -> PostOrderResponse: request = PostOrderRequest() request.figi = figi request.instrument_id = instrument_id request.quantity = quantity if price is not None: request.price = price request.direction = direction request.account_id = account_id request.order_type = order_type if not utils.empty_or_uuid(order_id): raise RequestError( grpc.StatusCode.INVALID_ARGUMENT, "order_id should be empty or uuid", None, ) request.order_id = order_id request.time_in_force = time_in_force request.price_type = price_type if confirm_margin_trade: request.confirm_margin_trade = confirm_margin_trade response, call = self.stub.PostOrder.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.PostOrderRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "PostOrder") return _grpc_helpers.protobuf_to_dataclass(response, PostOrderResponse) @handle_request_error("PostOrderAsync") def post_order_async( self, request: PostOrderAsyncRequest ) -> PostOrderAsyncResponse: if not utils.empty_or_uuid(request.order_id): raise RequestError( grpc.StatusCode.INVALID_ARGUMENT, "order_id should be empty or uuid", None, ) response, call = self.stub.PostOrderAsync.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.PostOrderAsyncRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "PostOrderAsync") return _grpc_helpers.protobuf_to_dataclass(response, PostOrderAsyncResponse) @handle_request_error("CancelOrder") def cancel_order( self, *, account_id: str = "", order_id: str = "", order_id_type: Optional["OrderIdType"] = None, ) -> CancelOrderResponse: request = CancelOrderRequest() request.account_id = account_id request.order_id = order_id request.order_id_type = order_id_type response, call = self.stub.CancelOrder.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.CancelOrderRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "CancelOrder") return _grpc_helpers.protobuf_to_dataclass(response, CancelOrderResponse) @handle_request_error("GetOrderState") def get_order_state( self, *, account_id: str = "", order_id: str = "", price_type: PriceType = PriceType(0), order_id_type: Optional["OrderIdType"] = None, ) -> OrderState: request = GetOrderStateRequest() request.account_id = account_id request.order_id = order_id request.price_type = price_type request.order_id_type = order_id_type response, call = self.stub.GetOrderState.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.GetOrderStateRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetOrderState") return _grpc_helpers.protobuf_to_dataclass(response, OrderState) @handle_request_error("GetOrders") def get_orders( self, *, account_id: str = "", from_: Optional[datetime] = None, to: Optional[datetime] = None, execution_status: Optional[List[OrderExecutionReportStatus]] = None, ) -> GetOrdersResponse: # noinspection DuplicatedCode request = GetOrdersRequest() request.account_id = account_id request.advanced_filters = GetOrdersRequestFilters() if from_ is not None: request.advanced_filters.from_ = from_ if to is not None: request.advanced_filters.to = to if execution_status is not None: request.advanced_filters.execution_status = execution_status response, call = self.stub.GetOrders.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.GetOrdersRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetOrders") return _grpc_helpers.protobuf_to_dataclass(response, GetOrdersResponse) @handle_request_error("ReplaceOrder") def replace_order(self, request: ReplaceOrderRequest) -> PostOrderResponse: response, call = self.stub.ReplaceOrder.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.ReplaceOrderRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "ReplaceOrder") return _grpc_helpers.protobuf_to_dataclass(response, PostOrderResponse) @handle_request_error("GetMaxLots") def get_max_lots(self, request: GetMaxLotsRequest) -> GetMaxLotsResponse: response, call = self.stub.GetMaxLots.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.GetMaxLotsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetMaxLots") return _grpc_helpers.protobuf_to_dataclass(response, GetMaxLotsResponse) @handle_request_error("GetOrderPrice") def get_order_price(self, request: GetOrderPriceRequest) -> GetOrderPriceResponse: response, call = self.stub.GetOrderPrice.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.GetOrderPriceRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetOrderPrice") return _grpc_helpers.protobuf_to_dataclass(response, GetOrderPriceResponse) class UsersService(_grpc_helpers.Service): _stub_factory = users_pb2_grpc.UsersServiceStub @handle_request_error("GetAccounts") def get_accounts(self) -> GetAccountsResponse: request = GetAccountsRequest() response, call = self.stub.GetAccounts.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, users_pb2.GetAccountsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetAccounts") return _grpc_helpers.protobuf_to_dataclass(response, GetAccountsResponse) @handle_request_error("GetMarginAttributes") def get_margin_attributes( self, *, account_id: str = "" ) -> GetMarginAttributesResponse: request = GetMarginAttributesRequest() request.account_id = account_id response, call = self.stub.GetMarginAttributes.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, users_pb2.GetMarginAttributesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetMarginAttributes") return _grpc_helpers.protobuf_to_dataclass( response, GetMarginAttributesResponse ) @handle_request_error("GetUserTariff") def get_user_tariff(self) -> GetUserTariffResponse: request = GetUserTariffRequest() response, call = self.stub.GetUserTariff.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, users_pb2.GetUserTariffRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetUserTariff") return _grpc_helpers.protobuf_to_dataclass(response, GetUserTariffResponse) @handle_request_error("GetInfo") def get_info(self) -> GetInfoResponse: request = GetInfoRequest() response, call = self.stub.GetInfo.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, users_pb2.GetInfoRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetInfo") return _grpc_helpers.protobuf_to_dataclass(response, GetInfoResponse) @handle_request_error("GetBankAccounts") def get_bank_accounts(self) -> GetBankAccountsResponse: request = GetBankAccountsRequest() response, call = self.stub.GetBankAccounts.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, users_pb2.GetBankAccountsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetBankAccounts") return _grpc_helpers.protobuf_to_dataclass(response, GetBankAccountsResponse) @handle_request_error("CurrencyTransfer") def currency_transfer( self, request: CurrencyTransferRequest ) -> CurrencyTransferResponse: response, call = self.stub.CurrencyTransfer.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, users_pb2.CurrencyTransferRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "CurrencyTransfer") return _grpc_helpers.protobuf_to_dataclass(response, CurrencyTransferResponse) @handle_request_error("PayIn") def pay_in(self, request: PayInRequest) -> PayInResponse: response, call = self.stub.PayIn.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, users_pb2.PayInRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "PayIn") return _grpc_helpers.protobuf_to_dataclass(response, PayInResponse) @handle_request_error("GetAccountValues") def get_account_values( self, request: GetAccountValuesRequest ) -> GetAccountValuesResponse: response, call = self.stub.GetAccountValues.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, users_pb2.GetAccountValuesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetAccountValues") return _grpc_helpers.protobuf_to_dataclass(response, GetAccountValuesResponse) class SandboxService(_grpc_helpers.Service): _stub_factory = sandbox_pb2_grpc.SandboxServiceStub @handle_request_error("OpenSandboxAccount") def open_sandbox_account( self, name: Optional[str] = "" ) -> OpenSandboxAccountResponse: request = OpenSandboxAccountRequest() request.name = name response, call = self.stub.OpenSandboxAccount.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, sandbox_pb2.OpenSandboxAccountRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "OpenSandboxAccount") return _grpc_helpers.protobuf_to_dataclass(response, OpenSandboxAccountResponse) @deprecated(details="Use `SandboxClient.users.get_accounts(...)` method instead") @handle_request_error("GetSandboxAccounts") def get_sandbox_accounts(self) -> GetAccountsResponse: request = GetAccountsRequest() response, call = self.stub.GetSandboxAccounts.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, users_pb2.GetAccountsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSandboxAccounts") return _grpc_helpers.protobuf_to_dataclass(response, GetAccountsResponse) @handle_request_error("CloseSandboxAccount") def close_sandbox_account( self, *, account_id: str = "" ) -> CloseSandboxAccountResponse: request = CloseSandboxAccountRequest() request.account_id = account_id response, call = self.stub.CloseSandboxAccount.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, sandbox_pb2.CloseSandboxAccountRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "CloseSandboxAccount") return _grpc_helpers.protobuf_to_dataclass( response, CloseSandboxAccountResponse ) @deprecated(details="Use `SandboxClient.orders.post_order(...)` method instead") @handle_request_error("PostSandboxOrder") def post_sandbox_order( self, *, figi: str = "", quantity: int = 0, price: Optional[Quotation] = None, direction: OrderDirection = OrderDirection(0), account_id: str = "", order_type: OrderType = OrderType(0), order_id: str = "", instrument_id: str = "", time_in_force: TimeInForceType = TimeInForceType(0), price_type: PriceType = PriceType(0), ) -> PostOrderResponse: request = PostOrderRequest() request.figi = figi request.instrument_id = instrument_id request.quantity = quantity if price is not None: request.price = price request.direction = direction request.account_id = account_id request.order_type = order_type if not utils.empty_or_uuid(order_id): raise RequestError( grpc.StatusCode.INVALID_ARGUMENT, "order_id should be empty or uuid", None, ) request.order_id = order_id request.time_in_force = time_in_force request.price_type = price_type response, call = self.stub.PostSandboxOrder.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.PostOrderRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "PostSandboxOrder") return _grpc_helpers.protobuf_to_dataclass(response, PostOrderResponse) @deprecated(details="Use `SandboxClient.orders.replace_order(...)` method instead") @handle_request_error("ReplaceSandboxOrder") def replace_sandbox_order( self, request: "ReplaceOrderRequest", ) -> PostOrderResponse: response, call = self.stub.ReplaceSandboxOrder.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.ReplaceOrderRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "ReplaceSandboxOrder") return _grpc_helpers.protobuf_to_dataclass(response, PostOrderResponse) @deprecated(details="Use `SandboxClient.orders.get_orders(...)` method instead") @handle_request_error("GetSandboxOrders") def get_sandbox_orders(self, *, account_id: str = "") -> GetOrdersResponse: request = GetOrdersRequest() request.account_id = account_id response, call = self.stub.GetSandboxOrders.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.GetOrdersRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSandboxOrders") return _grpc_helpers.protobuf_to_dataclass(response, GetOrdersResponse) @deprecated(details="Use `SandboxClient.orders.cancel_order(...)` method instead") @handle_request_error("CancelSandboxOrder") def cancel_sandbox_order( self, *, account_id: str = "", order_id: str = "", order_id_type: Optional["OrderIdType"] = None, ) -> CancelOrderResponse: request = CancelOrderRequest() request.account_id = account_id request.order_id = order_id request.order_id_type = order_id_type response, call = self.stub.CancelSandboxOrder.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.CancelOrderRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "CancelSandboxOrder") return _grpc_helpers.protobuf_to_dataclass(response, CancelOrderResponse) @deprecated( details="Use `SandboxClient.orders.get_order_state(...)` method instead" ) @handle_request_error("GetSandboxOrderState") def get_sandbox_order_state( self, *, account_id: str = "", order_id: str = "", price_type: PriceType = PriceType(0), order_id_type: Optional["OrderIdType"] = None, ) -> OrderState: request = GetOrderStateRequest() request.account_id = account_id request.order_id = order_id request.price_type = price_type request.order_id_type = order_id_type response, call = self.stub.GetSandboxOrderState.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.GetOrderStateRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSandboxOrderState") return _grpc_helpers.protobuf_to_dataclass(response, OrderState) @deprecated( details="Use `SandboxClient.operations.get_positions(...)` method instead" ) @handle_request_error("GetSandboxPositions") def get_sandbox_positions(self, *, account_id: str = "") -> PositionsResponse: request = PositionsRequest() request.account_id = account_id response, call = self.stub.GetSandboxPositions.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.PositionsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSandboxPositions") return _grpc_helpers.protobuf_to_dataclass(response, PositionsResponse) @deprecated( details="Use `SandboxClient.operations.get_operations(...)` method instead" ) @handle_request_error("GetSandboxOperations") def get_sandbox_operations( self, *, account_id: str = "", from_: Optional[datetime] = None, to: Optional[datetime] = None, state: OperationState = OperationState(0), figi: str = "", ) -> OperationsResponse: request = OperationsRequest() request.account_id = account_id if from_ is not None: request.from_ = from_ if to is not None: request.to = to request.state = state request.figi = figi response, call = self.stub.GetSandboxOperations.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.OperationsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSandboxOperations") return _grpc_helpers.protobuf_to_dataclass(response, OperationsResponse) @deprecated( details="Use `SandboxClient.operations.get_operations_by_cursor` method instead" ) @handle_request_error("GetOperationsByCursor") def get_operations_by_cursor( self, request: GetOperationsByCursorRequest, ) -> GetOperationsByCursorResponse: response, call = self.stub.GetSandboxOperationsByCursor.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.GetOperationsByCursorRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetOperationsByCursor") return _grpc_helpers.protobuf_to_dataclass( response, GetOperationsByCursorResponse ) @deprecated( details="Use `SandboxClient.operations.get_portfolio(...)` method instead" ) @handle_request_error("GetSandboxPortfolio") def get_sandbox_portfolio(self, *, account_id: str = "") -> PortfolioResponse: request = PortfolioRequest() request.account_id = account_id response, call = self.stub.GetSandboxPortfolio.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.PortfolioRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSandboxPortfolio") return _grpc_helpers.protobuf_to_dataclass(response, PortfolioResponse) @handle_request_error("SandboxPayIn") def sandbox_pay_in( self, *, account_id: str = "", amount: Optional[MoneyValue] = None ) -> SandboxPayInResponse: request = SandboxPayInRequest() request.account_id = account_id if amount is not None: request.amount = amount response, call = self.stub.SandboxPayIn.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, sandbox_pb2.SandboxPayInRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "SandboxPayIn") return _grpc_helpers.protobuf_to_dataclass(response, SandboxPayInResponse) @deprecated( details="Use `SandboxClient.operations.get_withdraw_limits(...)` method instead" ) @handle_request_error("GetSandboxWithdrawLimits") def get_sandbox_withdraw_limits( self, *, account_id: str = "", ) -> WithdrawLimitsResponse: request = WithdrawLimitsRequest() request.account_id = account_id response, call = self.stub.GetSandboxWithdrawLimits.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, operations_pb2.WithdrawLimitsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSandboxWithdrawLimits") return _grpc_helpers.protobuf_to_dataclass(response, WithdrawLimitsResponse) @handle_request_error("GetSandboxMaxLots") def get_sandbox_max_lots( self, *, request: GetMaxLotsRequest, ) -> GetMaxLotsResponse: response, call = self.stub.GetSandboxMaxLots.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.GetMaxLotsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSandboxMaxLots") return _grpc_helpers.protobuf_to_dataclass(response, GetMaxLotsResponse) @handle_request_error("PostSandboxOrderAsync") def post_sandbox_order_async( self, *, request: PostOrderAsyncRequest, ) -> PostOrderAsyncResponse: response, call = self.stub.PostSandboxOrderAsync.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.PostOrderAsyncRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "PostSandboxOrderAsync") return _grpc_helpers.protobuf_to_dataclass(response, PostOrderAsyncResponse) @handle_request_error("PostSandboxStopOrder") def post_sandbox_stop_order( self, *, request: PostStopOrderRequest, ) -> PostStopOrderResponse: response, call = self.stub.PostSandboxStopOrder.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, stoporders_pb2.PostStopOrderRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "PostSandboxStopOrder") return _grpc_helpers.protobuf_to_dataclass(response, PostStopOrderResponse) @handle_request_error("GetSandboxStopOrders") def get_sandbox_stop_orders( self, *, request: GetStopOrdersRequest, ) -> GetStopOrdersResponse: response, call = self.stub.GetSandboxStopOrders.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, stoporders_pb2.GetStopOrdersRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSandboxStopOrders") return _grpc_helpers.protobuf_to_dataclass(response, GetStopOrdersResponse) @handle_request_error("CancelSandboxStopOrder") def cancel_sandbox_stop_order( self, *, request: CancelStopOrderRequest, ) -> CancelStopOrderResponse: response, call = self.stub.CancelSandboxStopOrder.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, stoporders_pb2.CancelStopOrderRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "CancelSandboxStopOrder") return _grpc_helpers.protobuf_to_dataclass(response, CancelStopOrderResponse) @handle_request_error("GetSandboxOrderPrice") def get_sandbox_order_price( self, request: GetOrderPriceRequest ) -> GetOrderPriceResponse: response, call = self.stub.GetSandboxOrderPrice.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, orders_pb2.GetOrderPriceRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSandboxOrderPrice") return _grpc_helpers.protobuf_to_dataclass(response, GetOrderPriceResponse) class StopOrdersService(_grpc_helpers.Service): _stub_factory = stoporders_pb2_grpc.StopOrdersServiceStub @handle_request_error("PostStopOrder") def post_stop_order( self, *, figi: str = "", quantity: int = 0, price: Optional[Quotation] = None, stop_price: Optional[Quotation] = None, direction: StopOrderDirection = StopOrderDirection(0), account_id: str = "", expiration_type: StopOrderExpirationType = StopOrderExpirationType(0), stop_order_type: StopOrderType = StopOrderType(0), expire_date: Optional[datetime] = None, instrument_id: str = "", exchange_order_type: ExchangeOrderType = ExchangeOrderType(0), take_profit_type: TakeProfitType = TakeProfitType(0), trailing_data: Optional[PostStopOrderRequestTrailingData] = None, price_type: PriceType = PriceType(0), order_id: str = "", confirm_margin_trade: bool = False, instant_execution: Optional[bool] = None, ) -> PostStopOrderResponse: request = PostStopOrderRequest() request.figi = figi request.instrument_id = instrument_id request.quantity = quantity if price is not None: request.price = price if stop_price is not None: request.stop_price = stop_price request.direction = direction request.account_id = account_id request.expiration_type = expiration_type request.stop_order_type = stop_order_type if expire_date is not None: request.expire_date = expire_date request.exchange_order_type = exchange_order_type request.take_profit_type = take_profit_type if trailing_data is not None: request.trailing_data = trailing_data request.price_type = price_type request.order_id = order_id if confirm_margin_trade: request.confirm_margin_trade = confirm_margin_trade if instant_execution is not None: request.instant_execution = instant_execution response, call = self.stub.PostStopOrder.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, stoporders_pb2.PostStopOrderRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "PostStopOrder") return _grpc_helpers.protobuf_to_dataclass(response, PostStopOrderResponse) @handle_request_error("GetStopOrders") def get_stop_orders( self, *, account_id: str = "", status: StopOrderStatusOption = StopOrderStatusOption(0), from_: Optional[datetime] = None, to: Optional[datetime] = None, ) -> GetStopOrdersResponse: request = GetStopOrdersRequest() request.account_id = account_id request.status = status if from_ is not None: request.from_ = from_ if to is not None: request.to = to response, call = self.stub.GetStopOrders.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, stoporders_pb2.GetStopOrdersRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetStopOrders") return _grpc_helpers.protobuf_to_dataclass(response, GetStopOrdersResponse) @handle_request_error("CancelStopOrder") def cancel_stop_order( self, *, account_id: str = "", stop_order_id: str = "" ) -> CancelStopOrderResponse: request = CancelStopOrderRequest() request.account_id = account_id request.stop_order_id = stop_order_id response, call = self.stub.CancelStopOrder.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, stoporders_pb2.CancelStopOrderRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "CancelStopOrder") return _grpc_helpers.protobuf_to_dataclass(response, CancelStopOrderResponse) class SignalService(_grpc_helpers.Service): _stub_factory = signals_pb2_grpc.SignalServiceStub @handle_request_error("GetStrategies") def get_strategies( self, *, request: GetStrategiesRequest, ) -> GetStrategiesResponse: response, call = self.stub.GetStrategies.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, signals_pb2.GetStrategiesRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetStrategies") return _grpc_helpers.protobuf_to_dataclass(response, GetStrategiesResponse) @handle_request_error("GetSignals") def get_signals( self, *, request: GetSignalsRequest, ) -> GetSignalsResponse: response, call = self.stub.GetSignals.with_call( request=_grpc_helpers.dataclass_to_protobuff( request, signals_pb2.GetSignalsRequest() ), metadata=self.metadata, ) log_request(get_tracking_id_from_call(call), "GetSignals") return _grpc_helpers.protobuf_to_dataclass(response, GetSignalsResponse)