quantplay 2.0.70__tar.gz → 2.0.72__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.70 → quantplay-2.0.72}/PKG-INFO +1 -1
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/aliceblue.py +2 -2
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/angelone.py +1 -1
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/auto_login/aliceblue.py +2 -2
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/five_paisa.py +1 -1
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/ft_utils/flattrade_utils.py +2 -2
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/generics/broker.py +1 -1
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/kite_utils.py +3 -3
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/motilal.py +5 -3
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/shoonya.py +1 -1
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/uplink/uplink_utils.py +2 -2
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/xts.py +1 -1
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay.egg-info/PKG-INFO +1 -1
- {quantplay-2.0.70 → quantplay-2.0.72}/setup.py +1 -1
- {quantplay-2.0.70 → quantplay-2.0.72}/README.md +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/pyproject.toml +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/auto_login/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/broker_factory.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/dhan.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/finvasia_utils/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/finvasia_utils/fa_noren.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/flattrade.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/ft_utils/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/ft_utils/ft_noren.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/generics/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/iifl_xts.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/kotak.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/noren.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/uplink/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/upstox.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/xts_utils/Connect.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/xts_utils/Exception.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/xts_utils/InteractiveSocketClient.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/xts_utils/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/broker/zerodha.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/exception/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/exception/exceptions.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/model/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/model/broker.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/model/generics.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/model/instrument_data.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/model/order_event.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/py.typed +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/utils/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/utils/caching.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/utils/constant.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/utils/exchange.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/utils/number_utils.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/utils/pickle_utils.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/utils/selenium_utils.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/wrapper/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/wrapper/aws/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay/wrapper/aws/s3.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay.egg-info/SOURCES.txt +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay.egg-info/dependency_links.txt +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay.egg-info/requires.txt +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/quantplay.egg-info/top_level.txt +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/setup.cfg +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/tests/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/tests/conftest.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/tests/wrapper/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/tests/wrapper/aws/__init__.py +0 -0
- {quantplay-2.0.70 → quantplay-2.0.72}/tests/wrapper/aws/s3_test.py +0 -0
|
@@ -234,7 +234,7 @@ class Aliceblue(Broker):
|
|
|
234
234
|
Constants.logger.info(f"[PLACE_ORDER_RESPONSE] {response}")
|
|
235
235
|
return response["NOrdNo"]
|
|
236
236
|
except Exception as e:
|
|
237
|
-
|
|
237
|
+
traceback.print_exc()
|
|
238
238
|
exception_message = f"Order placement failed [{str(e)}]"
|
|
239
239
|
raise QuantplayOrderPlacementException(exception_message)
|
|
240
240
|
|
|
@@ -307,7 +307,7 @@ class Aliceblue(Broker):
|
|
|
307
307
|
)
|
|
308
308
|
logger.info(f"[MODIFY_ORDER_RESPONSE] [{order_id}] response [{response}]")
|
|
309
309
|
except Exception as e:
|
|
310
|
-
|
|
310
|
+
traceback.print_exc()
|
|
311
311
|
Constants.logger.error(
|
|
312
312
|
f"[MODIFY_ORDER_FAILED] {data} with exception {str(e)}"
|
|
313
313
|
)
|
|
@@ -83,7 +83,7 @@ class AliceblueLogin:
|
|
|
83
83
|
AliceblueLogin.click_on_login(driver)
|
|
84
84
|
AliceblueLogin.enter_user_id(driver, user_id)
|
|
85
85
|
AliceblueLogin.enter_password(driver, password)
|
|
86
|
-
AliceblueLogin.enter_totp(driver, pyotp.TOTP(totp).now())
|
|
86
|
+
AliceblueLogin.enter_totp(driver, pyotp.TOTP(str(totp)).now())
|
|
87
87
|
|
|
88
88
|
except binascii.Error:
|
|
89
89
|
raise InvalidArgumentException("Invalid TOTP key provided")
|
|
@@ -97,5 +97,5 @@ class AliceblueLogin:
|
|
|
97
97
|
traceback.print_exc()
|
|
98
98
|
raise RetryableException("Selenium setup need to be fixed")
|
|
99
99
|
except Exception as e:
|
|
100
|
-
|
|
100
|
+
traceback.print_exc()
|
|
101
101
|
raise RetryableException(str(e))
|
|
@@ -77,7 +77,7 @@ class FivePaisa(Broker):
|
|
|
77
77
|
if totp is None:
|
|
78
78
|
raise InvalidArgumentException("TOTP Key is Missing")
|
|
79
79
|
|
|
80
|
-
self.client.get_totp_session(client_id, pyotp.TOTP(totp).now(), pin)
|
|
80
|
+
self.client.get_totp_session(client_id, pyotp.TOTP(str(totp)).now(), pin)
|
|
81
81
|
|
|
82
82
|
try:
|
|
83
83
|
self.margins()
|
|
@@ -33,7 +33,7 @@ class FlatTradeUtils:
|
|
|
33
33
|
)
|
|
34
34
|
def get_request_code(api_key: str, user_id: str, password: str, totp: str):
|
|
35
35
|
try:
|
|
36
|
-
pyotp.TOTP(totp).now()
|
|
36
|
+
pyotp.TOTP(str(totp)).now()
|
|
37
37
|
driver = Selenium().get_browser()
|
|
38
38
|
|
|
39
39
|
flattrade_url = f"https://auth.flattrade.in/?app_key={api_key}"
|
|
@@ -48,7 +48,7 @@ class FlatTradeUtils:
|
|
|
48
48
|
password_element.send_keys(password)
|
|
49
49
|
|
|
50
50
|
totp_pin = driver.find_element("xpath", FlatTradeUtils.totp_xpath)
|
|
51
|
-
totp_pin.send_keys(pyotp.TOTP(totp).now())
|
|
51
|
+
totp_pin.send_keys(pyotp.TOTP(str(totp)).now())
|
|
52
52
|
|
|
53
53
|
time.sleep(1)
|
|
54
54
|
|
|
@@ -619,7 +619,7 @@ class Broker(ABC):
|
|
|
619
619
|
self.order_log[order_id] = copy.deepcopy(order)
|
|
620
620
|
time.sleep(3)
|
|
621
621
|
except Exception:
|
|
622
|
-
|
|
622
|
+
traceback.print_exc()
|
|
623
623
|
print(f"Unable to process order stream for {self.user_id}")
|
|
624
624
|
time.sleep(5)
|
|
625
625
|
|
|
@@ -70,7 +70,7 @@ class KiteUtils:
|
|
|
70
70
|
raise InvalidArgumentException("Password Key is Missing")
|
|
71
71
|
|
|
72
72
|
try:
|
|
73
|
-
pyotp.TOTP(totp).now()
|
|
73
|
+
pyotp.TOTP(str(totp)).now()
|
|
74
74
|
driver = Selenium().get_browser()
|
|
75
75
|
|
|
76
76
|
kite_url = "https://kite.trade/connect/login?api_key={}&v=3".format(api_key)
|
|
@@ -95,7 +95,7 @@ class KiteUtils:
|
|
|
95
95
|
KiteUtils.check_error(page_source)
|
|
96
96
|
|
|
97
97
|
kite_pin = driver.find_element("xpath", KiteUtils.kite_pin_xpath)
|
|
98
|
-
kite_pin.send_keys(pyotp.TOTP(totp).now())
|
|
98
|
+
kite_pin.send_keys(pyotp.TOTP(str(totp)).now())
|
|
99
99
|
time.sleep(1)
|
|
100
100
|
|
|
101
101
|
page_source = driver.page_source
|
|
@@ -119,5 +119,5 @@ class KiteUtils:
|
|
|
119
119
|
except WebDriverException:
|
|
120
120
|
raise RetryableException("Selenium setup need to be fixed")
|
|
121
121
|
except Exception as e:
|
|
122
|
-
|
|
122
|
+
traceback.print_exc()
|
|
123
123
|
raise RetryableException(str(e))
|
|
@@ -194,12 +194,14 @@ class Motilal(Broker):
|
|
|
194
194
|
return exchange
|
|
195
195
|
|
|
196
196
|
def get_product(self, product: ProductType):
|
|
197
|
+
# TODO: Use Maps Instead
|
|
197
198
|
if product == "CNC":
|
|
198
199
|
return "DELIVERY"
|
|
199
200
|
elif product == "NRML":
|
|
200
201
|
return "NORMAL"
|
|
201
202
|
elif product == "MIS":
|
|
202
203
|
return "NORMAL"
|
|
204
|
+
|
|
203
205
|
return product
|
|
204
206
|
|
|
205
207
|
def place_order_quantity(
|
|
@@ -231,11 +233,11 @@ class Motilal(Broker):
|
|
|
231
233
|
def generate_token(
|
|
232
234
|
self, user_id: str, password: str, api_key: str, two_fa: str, totp: str
|
|
233
235
|
):
|
|
234
|
-
current_totp = pyotp.TOTP(totp).now()
|
|
236
|
+
current_totp = pyotp.TOTP(str(totp)).now()
|
|
235
237
|
Constants.logger.info("TOTP is {}".format(current_totp))
|
|
236
238
|
# initializing string
|
|
237
|
-
|
|
238
|
-
result = hashlib.sha256(
|
|
239
|
+
encoded_str = "{}{}".format(password, api_key)
|
|
240
|
+
result = hashlib.sha256(encoded_str.encode())
|
|
239
241
|
|
|
240
242
|
data = {
|
|
241
243
|
"userid": user_id,
|
|
@@ -42,7 +42,7 @@ class FinvAsia(Noren):
|
|
|
42
42
|
"uname": None,
|
|
43
43
|
}
|
|
44
44
|
elif user_id and password and totp and vendor_code and api_secret and imei:
|
|
45
|
-
totp = pyotp.TOTP(totp).now()
|
|
45
|
+
totp = pyotp.TOTP(str(totp)).now()
|
|
46
46
|
response = self.login(
|
|
47
47
|
user_id=user_id,
|
|
48
48
|
password=password,
|
|
@@ -85,7 +85,7 @@ class UplinkUtils:
|
|
|
85
85
|
time.sleep(1)
|
|
86
86
|
|
|
87
87
|
totp_element = driver.find_element("xpath", UplinkUtils.totp_xpath)
|
|
88
|
-
totp_now = pyotp.TOTP(totp).now()
|
|
88
|
+
totp_now = pyotp.TOTP(str(totp)).now()
|
|
89
89
|
totp_element.send_keys(totp_now)
|
|
90
90
|
time.sleep(1)
|
|
91
91
|
|
|
@@ -115,5 +115,5 @@ class UplinkUtils:
|
|
|
115
115
|
except WebDriverException:
|
|
116
116
|
raise RetryableException("Selenium setup need to be fixed")
|
|
117
117
|
except Exception as e:
|
|
118
|
-
|
|
118
|
+
traceback.print_exc()
|
|
119
119
|
raise RetryableException(str(e))
|
|
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
|