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.
Files changed (65) hide show
  1. {quantplay-2.0.74 → quantplay-2.0.76}/PKG-INFO +26 -1
  2. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/angelone.py +1 -1
  3. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/broker_factory.py +1 -1
  4. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/dhan.py +12 -2
  5. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/ft_utils/flattrade_utils.py +12 -6
  6. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay.egg-info/PKG-INFO +26 -1
  7. {quantplay-2.0.74 → quantplay-2.0.76}/setup.py +1 -1
  8. {quantplay-2.0.74 → quantplay-2.0.76}/README.md +0 -0
  9. {quantplay-2.0.74 → quantplay-2.0.76}/pyproject.toml +0 -0
  10. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/__init__.py +0 -0
  11. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/__init__.py +0 -0
  12. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/aliceblue.py +0 -0
  13. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/auto_login/__init__.py +0 -0
  14. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/auto_login/aliceblue.py +0 -0
  15. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/finvasia_utils/__init__.py +0 -0
  16. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/finvasia_utils/fa_noren.py +0 -0
  17. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/five_paisa.py +0 -0
  18. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/flattrade.py +0 -0
  19. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/ft_utils/__init__.py +0 -0
  20. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/ft_utils/ft_noren.py +0 -0
  21. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/generics/__init__.py +0 -0
  22. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/generics/broker.py +0 -0
  23. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/iifl_xts.py +0 -0
  24. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/kite_utils.py +0 -0
  25. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/kotak.py +0 -0
  26. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/motilal.py +0 -0
  27. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/noren.py +0 -0
  28. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/shoonya.py +0 -0
  29. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/uplink/__init__.py +0 -0
  30. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/uplink/uplink_utils.py +0 -0
  31. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/upstox.py +0 -0
  32. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/xts.py +0 -0
  33. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/xts_utils/Connect.py +0 -0
  34. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/xts_utils/Exception.py +0 -0
  35. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/xts_utils/InteractiveSocketClient.py +0 -0
  36. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/xts_utils/__init__.py +0 -0
  37. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/broker/zerodha.py +0 -0
  38. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/exception/__init__.py +0 -0
  39. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/exception/exceptions.py +0 -0
  40. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/model/__init__.py +0 -0
  41. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/model/broker.py +0 -0
  42. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/model/generics.py +0 -0
  43. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/model/instrument_data.py +0 -0
  44. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/model/order_event.py +0 -0
  45. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/py.typed +0 -0
  46. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/__init__.py +0 -0
  47. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/caching.py +0 -0
  48. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/constant.py +0 -0
  49. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/exchange.py +0 -0
  50. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/number_utils.py +0 -0
  51. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/pickle_utils.py +0 -0
  52. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/utils/selenium_utils.py +0 -0
  53. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/wrapper/__init__.py +0 -0
  54. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/wrapper/aws/__init__.py +0 -0
  55. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay/wrapper/aws/s3.py +0 -0
  56. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay.egg-info/SOURCES.txt +0 -0
  57. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay.egg-info/dependency_links.txt +0 -0
  58. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay.egg-info/requires.txt +0 -0
  59. {quantplay-2.0.74 → quantplay-2.0.76}/quantplay.egg-info/top_level.txt +0 -0
  60. {quantplay-2.0.74 → quantplay-2.0.76}/setup.cfg +0 -0
  61. {quantplay-2.0.74 → quantplay-2.0.76}/tests/__init__.py +0 -0
  62. {quantplay-2.0.74 → quantplay-2.0.76}/tests/conftest.py +0 -0
  63. {quantplay-2.0.74 → quantplay-2.0.76}/tests/wrapper/__init__.py +0 -0
  64. {quantplay-2.0.74 → quantplay-2.0.76}/tests/wrapper/aws/__init__.py +0 -0
  65. {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.74
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"] is False:
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: "upstox_instruments",
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("upstox_instruments")
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="1333", # hdfcbank
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
- "Invalid Input : Wrong Password",
73
- "Invalid API key",
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 Exception(f"Flattrade Unkown Selenium Error : {error_message}")
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.74
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
 
@@ -21,7 +21,7 @@ requirements = [
21
21
  setup(
22
22
  name="quantplay",
23
23
  long_description=Path("README.md").read_text(),
24
- version="2.0.74",
24
+ version="2.0.76",
25
25
  setup_requires=["pytest-runner"],
26
26
  install_requires=requirements,
27
27
  tests_require=[],
File without changes
File without changes
File without changes
File without changes
File without changes