quantplay 2.0.74__tar.gz → 2.0.76__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {quantplay-2.0.74 → quantplay-2.0.76}/PKG-INFO +26 -1
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/angelone.py +1 -1
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/broker_factory.py +1 -1
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/dhan.py +12 -2
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/ft_utils/flattrade_utils.py +12 -6
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay.egg-info/PKG-INFO +26 -1
- {quantplay-2.0.74 → quantplay-2.0.76}/setup.py +1 -1
- {quantplay-2.0.74 → quantplay-2.0.76}/README.md +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/pyproject.toml +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/aliceblue.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/auto_login/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/auto_login/aliceblue.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/finvasia_utils/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/finvasia_utils/fa_noren.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/five_paisa.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/flattrade.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/ft_utils/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/ft_utils/ft_noren.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/generics/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/generics/broker.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/iifl_xts.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/kite_utils.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/kotak.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/motilal.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/noren.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/shoonya.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/uplink/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/uplink/uplink_utils.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/upstox.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/xts.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/xts_utils/Connect.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/xts_utils/Exception.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/xts_utils/InteractiveSocketClient.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/xts_utils/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/zerodha.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/exception/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/exception/exceptions.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/model/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/model/broker.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/model/generics.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/model/instrument_data.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/model/order_event.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/py.typed +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/caching.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/constant.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/exchange.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/number_utils.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/pickle_utils.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/selenium_utils.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/wrapper/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/wrapper/aws/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/wrapper/aws/s3.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay.egg-info/SOURCES.txt +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay.egg-info/dependency_links.txt +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay.egg-info/requires.txt +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/quantplay.egg-info/top_level.txt +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/setup.cfg +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/tests/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/tests/conftest.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/tests/wrapper/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/tests/wrapper/aws/__init__.py +0 -0
- {quantplay-2.0.74 → quantplay-2.0.76}/tests/wrapper/aws/s3_test.py +0 -0
|
@@ -1,11 +1,36 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: quantplay
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.76
|
|
4
4
|
Summary: This python package will be stored in AWS CodeArtifact
|
|
5
5
|
Home-page:
|
|
6
6
|
Author:
|
|
7
7
|
Author-email:
|
|
8
8
|
License: MIT
|
|
9
|
+
Requires-Dist: setuptools
|
|
10
|
+
Requires-Dist: path
|
|
11
|
+
Requires-Dist: pyotp
|
|
12
|
+
Requires-Dist: retrying
|
|
13
|
+
Requires-Dist: boto3
|
|
14
|
+
Requires-Dist: numpy
|
|
15
|
+
Requires-Dist: websocket-client
|
|
16
|
+
Requires-Dist: smartapi-python
|
|
17
|
+
Requires-Dist: logzero
|
|
18
|
+
Requires-Dist: selenium
|
|
19
|
+
Requires-Dist: requests
|
|
20
|
+
Requires-Dist: pandas
|
|
21
|
+
Requires-Dist: pyarrow
|
|
22
|
+
Requires-Dist: polars
|
|
23
|
+
Requires-Dist: kiteconnect
|
|
24
|
+
Requires-Dist: pya3
|
|
25
|
+
Requires-Dist: py5paisa
|
|
26
|
+
Requires-Dist: upstox-python-sdk
|
|
27
|
+
Requires-Dist: undetected-chromedriver
|
|
28
|
+
Requires-Dist: cachetools
|
|
29
|
+
Requires-Dist: py_vollib
|
|
30
|
+
Requires-Dist: python-engineio
|
|
31
|
+
Requires-Dist: python-socketio
|
|
32
|
+
Requires-Dist: six
|
|
33
|
+
Requires-Dist: dhanhq
|
|
9
34
|
|
|
10
35
|
# Quantplay Alpha playground
|
|
11
36
|
|
|
@@ -85,7 +85,7 @@ class AngelOne(Broker):
|
|
|
85
85
|
totp=pyotp.TOTP(str(totp)).now(),
|
|
86
86
|
)
|
|
87
87
|
|
|
88
|
-
if response["status"]
|
|
88
|
+
if not response["status"]:
|
|
89
89
|
if "message" in response:
|
|
90
90
|
raise InvalidArgumentException(response["message"])
|
|
91
91
|
raise InvalidArgumentException("Invalid API credentials")
|
|
@@ -61,7 +61,7 @@ broker_instruments_map = {
|
|
|
61
61
|
Broker.ANGELONE: "angelone_instruments",
|
|
62
62
|
Broker.ALICEBLUE: "aliceblue_instruments",
|
|
63
63
|
Broker.UPSTOX: "upstox_instruments",
|
|
64
|
-
Broker.DHAN: "
|
|
64
|
+
Broker.DHAN: "dhan_instruments",
|
|
65
65
|
Broker.KOTAK: "upstox_instruments",
|
|
66
66
|
Broker.FIVEPAISA_OPENAPI: "5paisa_instruments",
|
|
67
67
|
}
|
|
@@ -41,9 +41,11 @@ class Dhan(Broker):
|
|
|
41
41
|
|
|
42
42
|
except Exception:
|
|
43
43
|
raise TokenException("Dhan Session Expired")
|
|
44
|
+
if load_instrument:
|
|
45
|
+
self.load_instrument()
|
|
44
46
|
|
|
45
47
|
def load_instrument(self, file_name: str | None = None) -> None:
|
|
46
|
-
super().load_instrument("
|
|
48
|
+
super().load_instrument("dhan_instruments")
|
|
47
49
|
|
|
48
50
|
def set_username(self, username: str):
|
|
49
51
|
self.username = username
|
|
@@ -148,6 +150,12 @@ class Dhan(Broker):
|
|
|
148
150
|
|
|
149
151
|
raise InvalidArgumentException(f"Product {product} not supported for trading")
|
|
150
152
|
|
|
153
|
+
def get_symbol(self, symbol: str, exchange: ExchangeType | None = None):
|
|
154
|
+
if symbol not in self.quantplay_symbol_map:
|
|
155
|
+
return symbol
|
|
156
|
+
|
|
157
|
+
return self.quantplay_symbol_map[symbol]
|
|
158
|
+
|
|
151
159
|
# @retry(wait_exponential_multiplier=3000, wait_exponential_max=10000, stop_max_attempt_number=3)
|
|
152
160
|
def place_order(
|
|
153
161
|
self,
|
|
@@ -165,8 +173,10 @@ class Dhan(Broker):
|
|
|
165
173
|
Constants.logger.info(
|
|
166
174
|
f"[PLACING_ORDER] {tradingsymbol} {exchange} {quantity} {tag}"
|
|
167
175
|
)
|
|
176
|
+
tradingsymbol = self.get_symbol(tradingsymbol)
|
|
177
|
+
security_id = self.symbol_data[f"{exchange}:{tradingsymbol}"]["token"]
|
|
168
178
|
order_id: str = self.dhan.place_order( # type:ignore
|
|
169
|
-
security_id=
|
|
179
|
+
security_id=security_id, # hdfcbank
|
|
170
180
|
exchange_segment=self.get_exchange_segment(exchange),
|
|
171
181
|
transaction_type=transaction_type,
|
|
172
182
|
quantity=quantity,
|
|
@@ -9,6 +9,7 @@ from selenium.common.exceptions import WebDriverException
|
|
|
9
9
|
from quantplay.exception.exceptions import (
|
|
10
10
|
InvalidArgumentException,
|
|
11
11
|
RetryableException,
|
|
12
|
+
TokenException,
|
|
12
13
|
WrongLibrarySetup,
|
|
13
14
|
retry_exception,
|
|
14
15
|
)
|
|
@@ -68,9 +69,11 @@ class FlatTradeUtils:
|
|
|
68
69
|
)
|
|
69
70
|
error_message = error_attempt.text
|
|
70
71
|
|
|
71
|
-
if error_message in [
|
|
72
|
-
"
|
|
73
|
-
"
|
|
72
|
+
if error_message.lower() in [
|
|
73
|
+
"invalid input : wrong password",
|
|
74
|
+
"invalid api key",
|
|
75
|
+
"resetpassword",
|
|
76
|
+
"user blocked due to multiple wrong attempts",
|
|
74
77
|
]:
|
|
75
78
|
raise InvalidArgumentException(
|
|
76
79
|
f"Flattrade Login Failed: {error_message}"
|
|
@@ -79,19 +82,22 @@ class FlatTradeUtils:
|
|
|
79
82
|
except Exception as e:
|
|
80
83
|
Constants.logger.error(f"Flattrade Selenium Error : {e}")
|
|
81
84
|
traceback.print_exc()
|
|
85
|
+
raise TokenException(str(e))
|
|
82
86
|
|
|
83
87
|
finally:
|
|
84
88
|
Constants.logger.error(
|
|
85
89
|
f"Flattrade Unkown Selenium Error : {error_message}"
|
|
86
90
|
)
|
|
87
|
-
raise
|
|
91
|
+
raise TokenException(
|
|
92
|
+
f"Flattrade Unkown Selenium Error : {error_message}"
|
|
93
|
+
)
|
|
88
94
|
|
|
89
95
|
try:
|
|
90
96
|
request_token = url.split("code=")[1].split("&")[0]
|
|
91
97
|
except Exception as e:
|
|
92
98
|
Constants.logger.error(f"Flattrade Selenium Error for {url}")
|
|
93
99
|
traceback.print_exc()
|
|
94
|
-
raise e
|
|
100
|
+
raise TokenException(str(e))
|
|
95
101
|
|
|
96
102
|
driver.close()
|
|
97
103
|
|
|
@@ -99,7 +105,7 @@ class FlatTradeUtils:
|
|
|
99
105
|
|
|
100
106
|
except binascii.Error:
|
|
101
107
|
raise InvalidArgumentException("Invalid TOTP key provided")
|
|
102
|
-
except InvalidArgumentException as e:
|
|
108
|
+
except (InvalidArgumentException, TokenException) as e:
|
|
103
109
|
raise e
|
|
104
110
|
except WebDriverException:
|
|
105
111
|
raise WrongLibrarySetup("Selenium setup need to be fixed")
|
|
@@ -1,11 +1,36 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: quantplay
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.76
|
|
4
4
|
Summary: This python package will be stored in AWS CodeArtifact
|
|
5
5
|
Home-page:
|
|
6
6
|
Author:
|
|
7
7
|
Author-email:
|
|
8
8
|
License: MIT
|
|
9
|
+
Requires-Dist: setuptools
|
|
10
|
+
Requires-Dist: path
|
|
11
|
+
Requires-Dist: pyotp
|
|
12
|
+
Requires-Dist: retrying
|
|
13
|
+
Requires-Dist: boto3
|
|
14
|
+
Requires-Dist: numpy
|
|
15
|
+
Requires-Dist: websocket-client
|
|
16
|
+
Requires-Dist: smartapi-python
|
|
17
|
+
Requires-Dist: logzero
|
|
18
|
+
Requires-Dist: selenium
|
|
19
|
+
Requires-Dist: requests
|
|
20
|
+
Requires-Dist: pandas
|
|
21
|
+
Requires-Dist: pyarrow
|
|
22
|
+
Requires-Dist: polars
|
|
23
|
+
Requires-Dist: kiteconnect
|
|
24
|
+
Requires-Dist: pya3
|
|
25
|
+
Requires-Dist: py5paisa
|
|
26
|
+
Requires-Dist: upstox-python-sdk
|
|
27
|
+
Requires-Dist: undetected-chromedriver
|
|
28
|
+
Requires-Dist: cachetools
|
|
29
|
+
Requires-Dist: py_vollib
|
|
30
|
+
Requires-Dist: python-engineio
|
|
31
|
+
Requires-Dist: python-socketio
|
|
32
|
+
Requires-Dist: six
|
|
33
|
+
Requires-Dist: dhanhq
|
|
9
34
|
|
|
10
35
|
# Quantplay Alpha playground
|
|
11
36
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|