Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_TinkoffBotTwitch-main/venv/lib/python3.8/site-packages/tinkoff/invest/clients.py
7824 views
1
from typing import Optional
2
3
from .async_services import AsyncServices
4
from .channels import create_channel
5
from .services import Services
6
from .typedefs import ChannelArgumentType
7
8
__all__ = ("Client", "AsyncClient")
9
10
11
class Client:
12
def __init__(
13
self,
14
token: str,
15
*,
16
sandbox_token: Optional[str] = None,
17
options: Optional[ChannelArgumentType] = None,
18
app_name: Optional[str] = None,
19
):
20
self._token = token
21
self._sandbox_token = sandbox_token
22
self._options = options
23
self._app_name = app_name
24
self._channel = create_channel(options=options)
25
26
def __enter__(self) -> Services:
27
channel = self._channel.__enter__()
28
return Services(
29
channel,
30
token=self._token,
31
sandbox_token=self._sandbox_token,
32
app_name=self._app_name,
33
)
34
35
def __exit__(self, exc_type, exc_val, exc_tb):
36
self._channel.__exit__(exc_type, exc_val, exc_tb)
37
return False
38
39
40
class AsyncClient:
41
def __init__(
42
self,
43
token: str,
44
*,
45
sandbox_token: Optional[str] = None,
46
options: Optional[ChannelArgumentType] = None,
47
app_name: Optional[str] = None,
48
):
49
self._token = token
50
self._sandbox_token = sandbox_token
51
self._options = options
52
self._app_name = app_name
53
self._channel = create_channel(force_async=True, options=options)
54
55
async def __aenter__(self) -> AsyncServices:
56
channel = await self._channel.__aenter__()
57
return AsyncServices(
58
channel,
59
token=self._token,
60
sandbox_token=self._sandbox_token,
61
app_name=self._app_name,
62
)
63
64
async def __aexit__(self, exc_type, exc_val, exc_tb):
65
await self._channel.__aexit__(exc_type, exc_val, exc_tb)
66
return False
67
68