quantplay 2.0.80__tar.gz → 2.0.82__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.80 → quantplay-2.0.82}/PKG-INFO +1 -1
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/angelone.py +1 -1
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/ft_utils/flattrade_utils.py +12 -6
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/generics/broker.py +2 -2
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/noren.py +5 -1
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay.egg-info/PKG-INFO +1 -1
- {quantplay-2.0.80 → quantplay-2.0.82}/setup.py +1 -1
- {quantplay-2.0.80 → quantplay-2.0.82}/README.md +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/pyproject.toml +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/aliceblue.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/auto_login/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/auto_login/aliceblue.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/broker_factory.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/dhan.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/finvasia_utils/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/finvasia_utils/fa_noren.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/five_paisa.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/flattrade.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/ft_utils/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/ft_utils/ft_noren.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/generics/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/iifl_xts.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/kite_utils.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/kotak.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/motilal.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/shoonya.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/uplink/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/uplink/uplink_utils.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/upstox.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/xts.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/xts_utils/Connect.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/xts_utils/Exception.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/xts_utils/InteractiveSocketClient.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/xts_utils/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/broker/zerodha.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/exception/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/exception/exceptions.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/model/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/model/broker.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/model/generics.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/model/instrument_data.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/model/order_event.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/py.typed +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/utils/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/utils/caching.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/utils/constant.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/utils/exchange.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/utils/number_utils.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/utils/pickle_utils.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/utils/selenium_utils.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/wrapper/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/wrapper/aws/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay/wrapper/aws/s3.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay.egg-info/SOURCES.txt +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay.egg-info/dependency_links.txt +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay.egg-info/requires.txt +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/quantplay.egg-info/top_level.txt +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/setup.cfg +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/tests/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/tests/conftest.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/tests/wrapper/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/tests/wrapper/aws/__init__.py +0 -0
- {quantplay-2.0.80 → quantplay-2.0.82}/tests/wrapper/aws/s3_test.py +0 -0
|
@@ -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")
|
|
@@ -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")
|
|
@@ -635,13 +635,13 @@ class Broker(ABC):
|
|
|
635
635
|
if underlying_symbol in ["BANKNIFTY", "BANKEX"]:
|
|
636
636
|
return {"max_lots": 60, "lot_size": 15, "strike_gap": 100}
|
|
637
637
|
elif underlying_symbol == "FINNIFTY":
|
|
638
|
-
return {"max_lots":
|
|
638
|
+
return {"max_lots": 72, "lot_size": 25, "strike_gap": 50}
|
|
639
639
|
elif underlying_symbol == "SENSEX":
|
|
640
640
|
return {"max_lots": 100, "lot_size": 10, "strike_gap": 100}
|
|
641
641
|
elif underlying_symbol == "NIFTY":
|
|
642
642
|
return {"max_lots": 72, "lot_size": 25, "strike_gap": 50}
|
|
643
643
|
elif underlying_symbol == "MIDCPNIFTY":
|
|
644
|
-
return {"max_lots":
|
|
644
|
+
return {"max_lots": 56, "lot_size": 50, "strike_gap": 25}
|
|
645
645
|
|
|
646
646
|
raise Exception(f"Underlying {underlying_symbol} symbol not supported")
|
|
647
647
|
|
|
@@ -711,6 +711,10 @@ class Noren(Broker):
|
|
|
711
711
|
if "collateral" in api_margins:
|
|
712
712
|
collateral = api_margins["collateral"]
|
|
713
713
|
|
|
714
|
+
holdings_val = 0
|
|
715
|
+
if "grcoll" in api_margins:
|
|
716
|
+
holdings_val = api_margins["grcoll"]
|
|
717
|
+
|
|
714
718
|
if "marginused" not in api_margins:
|
|
715
719
|
api_margins["margin_used"] = 0
|
|
716
720
|
else:
|
|
@@ -735,7 +739,7 @@ class Noren(Broker):
|
|
|
735
739
|
except Exception:
|
|
736
740
|
margins["cash"] = 0
|
|
737
741
|
|
|
738
|
-
margins["total_balance"] = float(api_margins["cash"]) + float(
|
|
742
|
+
margins["total_balance"] = float(api_margins["cash"]) + float(holdings_val)
|
|
739
743
|
|
|
740
744
|
return margins
|
|
741
745
|
|
|
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
|