Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added __init__.py
Empty file.
6 changes: 6 additions & 0 deletions base_service.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class BaseService:
_protobuf_stub = None

def __init__(self, channel, metadata):
self._stub = self._protobuf_stub(channel)
self._metadata = metadata
7 changes: 4 additions & 3 deletions examples/stream_client.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import os
import time

from tinkoff.invest import (
from tinkoff.invest import Client
from tinkoff.invest.grpc.marketdata import (
CandleInstrument,
Client,
MarketDataRequest,
SubscribeCandlesRequest,
SubscriptionAction,
Expand All @@ -23,6 +23,7 @@ def request_iterator():
CandleInstrument(
figi="BBG004730N88",
interval=SubscriptionInterval.SUBSCRIPTION_INTERVAL_ONE_MINUTE,
instrument_id="BBG004730N88",
)
],
)
Expand All @@ -31,7 +32,7 @@ def request_iterator():
time.sleep(1)

with Client(TOKEN) as client:
for marketdata in client.market_data_stream.market_data_stream(
for marketdata in client.market_data_stream.MarketDataStream(
request_iterator()
):
print(marketdata)
Expand Down
59 changes: 57 additions & 2 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ types-protobuf = "^4.23.0.4"
types-python-dateutil = "^2.8.12"
types-PyYAML = "^6.0.7"
types-requests = "^2.27.7"
iprotopy = "^0.3.0"

[tool.poetry.group.docs.dependencies]
mkdocs = "^1.5"
Expand Down
16 changes: 16 additions & 0 deletions scripts/generate_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import logging
from pathlib import Path

from iprotopy import PackageGenerator

logging.basicConfig(level=logging.DEBUG)


if __name__ == "__main__":
generator = PackageGenerator()
base_dir = Path().absolute().parent

generator.generate_sources(
proto_dir=base_dir / "protos",
out_dir=base_dir,
)
100 changes: 100 additions & 0 deletions tinkoff/invest/grpc/common.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
from dataclasses import dataclass
from datetime import datetime
from enum import IntEnum


class InstrumentType(IntEnum):
INSTRUMENT_TYPE_UNSPECIFIED = 0
INSTRUMENT_TYPE_BOND = 1
INSTRUMENT_TYPE_SHARE = 2
INSTRUMENT_TYPE_CURRENCY = 3
INSTRUMENT_TYPE_ETF = 4
INSTRUMENT_TYPE_FUTURES = 5
INSTRUMENT_TYPE_SP = 6
INSTRUMENT_TYPE_OPTION = 7
INSTRUMENT_TYPE_CLEARING_CERTIFICATE = 8
INSTRUMENT_TYPE_INDEX = 9
INSTRUMENT_TYPE_COMMODITY = 10


@dataclass
class MoneyValue:
currency: str
units: int
nano: int


@dataclass
class Quotation:
units: int
nano: int


class SecurityTradingStatus(IntEnum):
SECURITY_TRADING_STATUS_UNSPECIFIED = 0
SECURITY_TRADING_STATUS_NOT_AVAILABLE_FOR_TRADING = 1
SECURITY_TRADING_STATUS_OPENING_PERIOD = 2
SECURITY_TRADING_STATUS_CLOSING_PERIOD = 3
SECURITY_TRADING_STATUS_BREAK_IN_TRADING = 4
SECURITY_TRADING_STATUS_NORMAL_TRADING = 5
SECURITY_TRADING_STATUS_CLOSING_AUCTION = 6
SECURITY_TRADING_STATUS_DARK_POOL_AUCTION = 7
SECURITY_TRADING_STATUS_DISCRETE_AUCTION = 8
SECURITY_TRADING_STATUS_OPENING_AUCTION_PERIOD = 9
SECURITY_TRADING_STATUS_TRADING_AT_CLOSING_AUCTION_PRICE = 10
SECURITY_TRADING_STATUS_SESSION_ASSIGNED = 11
SECURITY_TRADING_STATUS_SESSION_CLOSE = 12
SECURITY_TRADING_STATUS_SESSION_OPEN = 13
SECURITY_TRADING_STATUS_DEALER_NORMAL_TRADING = 14
SECURITY_TRADING_STATUS_DEALER_BREAK_IN_TRADING = 15
SECURITY_TRADING_STATUS_DEALER_NOT_AVAILABLE_FOR_TRADING = 16


@dataclass
class Ping:
time: datetime
stream_id: str


class PriceType(IntEnum):
PRICE_TYPE_UNSPECIFIED = 0
PRICE_TYPE_POINT = 1
PRICE_TYPE_CURRENCY = 2


@dataclass
class Page:
limit: int
page_number: int


@dataclass
class PageResponse:
limit: int
page_number: int
total_count: int


@dataclass
class ResponseMetadata:
tracking_id: str
server_time: datetime


@dataclass
class BrandData:
logo_name: str
logo_base_color: str
text_color: str


class ResultSubscriptionStatus(IntEnum):
RESULT_SUBSCRIPTION_STATUS_UNSPECIFIED = 0
RESULT_SUBSCRIPTION_STATUS_OK = 1
RESULT_SUBSCRIPTION_STATUS_ERROR = 13


@dataclass
class ErrorDetail:
code: str
message: str
12 changes: 12 additions & 0 deletions tinkoff/invest/grpc/google/api/field_behavior.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from enum import IntEnum


class FieldBehavior(IntEnum):
FIELD_BEHAVIOR_UNSPECIFIED = 0
OPTIONAL = 1
REQUIRED = 2
OUTPUT_ONLY = 3
INPUT_ONLY = 4
IMMUTABLE = 5
UNORDERED_LIST = 6
NON_EMPTY_DEFAULT = 7
Loading