quantplay 2.0.47__tar.gz → 2.0.49__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 (64) hide show
  1. {quantplay-2.0.47 → quantplay-2.0.49}/PKG-INFO +1 -1
  2. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/dhan.py +27 -76
  3. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay.egg-info/PKG-INFO +1 -1
  4. {quantplay-2.0.47 → quantplay-2.0.49}/setup.py +1 -1
  5. {quantplay-2.0.47 → quantplay-2.0.49}/README.md +0 -0
  6. {quantplay-2.0.47 → quantplay-2.0.49}/pyproject.toml +0 -0
  7. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/__init__.py +0 -0
  8. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/__init__.py +0 -0
  9. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/aliceblue.py +0 -0
  10. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/angelone.py +0 -0
  11. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/auto_login/__init__.py +0 -0
  12. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/auto_login/aliceblue.py +0 -0
  13. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/broker_factory.py +0 -0
  14. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/finvasia_utils/__init__.py +0 -0
  15. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/finvasia_utils/fa_noren.py +0 -0
  16. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/five_paisa.py +0 -0
  17. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/flattrade.py +0 -0
  18. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/ft_utils/__init__.py +0 -0
  19. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/ft_utils/flattrade_utils.py +0 -0
  20. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/ft_utils/ft_noren.py +0 -0
  21. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/generics/__init__.py +0 -0
  22. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/generics/broker.py +0 -0
  23. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/iifl_xts.py +0 -0
  24. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/kite_utils.py +0 -0
  25. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/motilal.py +0 -0
  26. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/noren.py +0 -0
  27. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/shoonya.py +0 -0
  28. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/uplink/__init__.py +0 -0
  29. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/uplink/uplink_utils.py +0 -0
  30. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/upstox.py +0 -0
  31. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/xts.py +0 -0
  32. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/xts_utils/Connect.py +0 -0
  33. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/xts_utils/Exception.py +0 -0
  34. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/xts_utils/InteractiveSocketClient.py +0 -0
  35. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/xts_utils/__init__.py +0 -0
  36. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/broker/zerodha.py +0 -0
  37. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/exception/__init__.py +0 -0
  38. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/exception/exceptions.py +0 -0
  39. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/model/__init__.py +0 -0
  40. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/model/broker.py +0 -0
  41. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/model/generics.py +0 -0
  42. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/model/instrument_data.py +0 -0
  43. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/model/order_event.py +0 -0
  44. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/py.typed +0 -0
  45. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/utils/__init__.py +0 -0
  46. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/utils/caching.py +0 -0
  47. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/utils/constant.py +0 -0
  48. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/utils/exchange.py +0 -0
  49. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/utils/number_utils.py +0 -0
  50. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/utils/pickle_utils.py +0 -0
  51. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/utils/selenium_utils.py +0 -0
  52. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/wrapper/__init__.py +0 -0
  53. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/wrapper/aws/__init__.py +0 -0
  54. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay/wrapper/aws/s3.py +0 -0
  55. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay.egg-info/SOURCES.txt +0 -0
  56. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay.egg-info/dependency_links.txt +0 -0
  57. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay.egg-info/requires.txt +0 -0
  58. {quantplay-2.0.47 → quantplay-2.0.49}/quantplay.egg-info/top_level.txt +0 -0
  59. {quantplay-2.0.47 → quantplay-2.0.49}/setup.cfg +0 -0
  60. {quantplay-2.0.47 → quantplay-2.0.49}/tests/__init__.py +0 -0
  61. {quantplay-2.0.47 → quantplay-2.0.49}/tests/conftest.py +0 -0
  62. {quantplay-2.0.47 → quantplay-2.0.49}/tests/wrapper/__init__.py +0 -0
  63. {quantplay-2.0.47 → quantplay-2.0.49}/tests/wrapper/aws/__init__.py +0 -0
  64. {quantplay-2.0.47 → quantplay-2.0.49}/tests/wrapper/aws/s3_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: quantplay
3
- Version: 2.0.47
3
+ Version: 2.0.49
4
4
  Summary: This python package will be stored in AWS CodeArtifact
5
5
  Home-page:
6
6
  Author:
@@ -1,7 +1,5 @@
1
- import codecs
2
- import pickle
3
1
  import traceback
4
- from typing import Any, Dict, Hashable, List
2
+ from typing import Any, Dict
5
3
 
6
4
  import polars as pl
7
5
  from dhanhq import dhanhq # type:ignore
@@ -16,6 +14,7 @@ from quantplay.exception.exceptions import (
16
14
  )
17
15
  from quantplay.model.broker import (
18
16
  ExchangeType,
17
+ UserBrokerProfileResponse,
19
18
  )
20
19
  from quantplay.model.generics import (
21
20
  DhanTypes,
@@ -24,40 +23,22 @@ from quantplay.model.generics import (
24
23
  TransactionType,
25
24
  )
26
25
  from quantplay.utils.constant import Constants, OrderType
27
- from quantplay.utils.pickle_utils import InstrumentData, PickleUtils
28
26
 
29
27
 
30
28
  class Dhan(Broker):
31
- def __init__(self):
32
- super().__init__()
29
+ def __init__(
30
+ self,
31
+ user_id: str,
32
+ access_token: str,
33
+ load_instrument: bool = True,
34
+ ):
33
35
  self.dhan = dhanhq(
34
- client_id="1102866282",
35
- access_token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJkaGFuIiwicGFydG5lcklkIjoiIiwiZXhwIjoxNzIzODgxNjgxLCJ0b2tlbkNvbnN1bWVyVHlwZSI6IlNFTEYiLCJ3ZWJob29rVXJsIjoiIiwiZGhhbkNsaWVudElkIjoiMTEwMjg2NjI4MiJ9.0dNR4gOdIQ3KeaAokEwbRt6v_6ESn73r6yOL9-7lzphVCAmP-pahgK6OIOxVUExBJa0SaxX0TNX7Vk0RBQ-lxQ",
36
- )
37
- self.dhan_w = dhanhq(
38
- client_id="1100799116",
39
- access_token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJkaGFuIiwicGFydG5lcklkIjoiIiwiZXhwIjoxNzIxMzc3ODM5LCJ0b2tlbkNvbnN1bWVyVHlwZSI6IlNFTEYiLCJ3ZWJob29rVXJsIjoiIiwiZGhhbkNsaWVudElkIjoiMTEwMDc5OTExNiJ9.ykd4NYsnl7s1UegkUUY9tbP4OxxjqtskGi8JK0lyC9bRRPQRyxDv022JyDIl6crdFsQXfG7-6BsipPYxOtLR8g",
36
+ client_id=user_id,
37
+ access_token=access_token,
40
38
  )
41
39
 
42
- def set_wrapper(self, serialized_wrapper: str):
43
- self.wrapper = pickle.loads(codecs.decode(serialized_wrapper.encode(), "base64"))
44
-
45
- def initialize_symbol_data(self, save_as: str | None = None) -> None:
46
- try:
47
- self.symbol_data = InstrumentData.get_instance().load_data( # type: ignore
48
- "zerodha_instruments"
49
- )
50
- Constants.logger.info("[LOADING_INSTRUMENTS] loading data from cache")
51
- except Exception:
52
- instruments = self.wrapper.instruments() # type: ignore
53
- self.symbol_data = {}
54
- for instrument in instruments:
55
- exchange = instrument["exchange"]
56
- tradingsymbol = instrument["tradingsymbol"]
57
- self.symbol_data["{}:{}".format(exchange, tradingsymbol)] = instrument
58
-
59
- PickleUtils.save_data(self.symbol_data, "zerodha_instruments")
60
- Constants.logger.info("[LOADING_INSTRUMENTS] loading data from server")
40
+ def load_instrument(self, file_name: str | None = None) -> None:
41
+ super().load_instrument("upstox_instruments")
61
42
 
62
43
  def set_username(self, username: str):
63
44
  self.username = username
@@ -65,51 +46,9 @@ class Dhan(Broker):
65
46
  def get_username(self):
66
47
  return self.username
67
48
 
68
- @retry(
69
- wait_exponential_multiplier=3000,
70
- wait_exponential_max=10000,
71
- stop_max_attempt_number=3,
72
- )
73
- def get_ltps(self, trading_symbols: List[str]):
74
- response = self.wrapper.ltp(trading_symbols) # type: ignore
75
- if not isinstance(response, dict):
76
- raise InvalidArgumentException(
77
- "Invalid data response. Zerodha sent incorrect data, Please check."
78
- )
79
- api_response: Dict[str, Any] = response
80
- return api_response
81
-
82
49
  def get_quantplay_symbol(self, symbol: str):
83
50
  return symbol
84
51
 
85
- @retry(
86
- wait_exponential_multiplier=3000,
87
- wait_exponential_max=10000,
88
- stop_max_attempt_number=3,
89
- retry_on_exception=retry_exception,
90
- )
91
- def ltp(self, exchange: ExchangeType, tradingsymbol: str) -> float:
92
- try:
93
- key = f"{exchange}:{tradingsymbol}"
94
- response = self.wrapper.ltp([key]) # type: ignore
95
- if not isinstance(response, dict):
96
- raise InvalidArgumentException(
97
- "Invalid data response. Zerodha sent incorrect data, Please check."
98
- )
99
- api_response: Dict[Hashable, Any] = response
100
-
101
- if key not in api_response:
102
- raise InvalidArgumentException(
103
- "Symbol {} not listed on exchange".format(tradingsymbol)
104
- )
105
-
106
- return api_response[key]["last_price"]
107
- except Exception as e:
108
- exception_message = "GetLtp call failed for [{}] with error [{}]".format(
109
- tradingsymbol, str(e)
110
- )
111
- raise RetryableException(exception_message)
112
-
113
52
  @retry(
114
53
  wait_exponential_multiplier=3000,
115
54
  wait_exponential_max=10000,
@@ -135,7 +74,7 @@ class Dhan(Broker):
135
74
  trigger_price=order["trigger_price"],
136
75
  order_type=order["order_type"],
137
76
  )
138
- return response
77
+ return response # type:ignore
139
78
  except Exception as e:
140
79
  exception_message = (
141
80
  "OrderModificationFailed for {} failed with exception {}".format(
@@ -225,7 +164,7 @@ class Dhan(Broker):
225
164
  stop_max_attempt_number=3,
226
165
  )
227
166
  def holdings(self):
228
- holdings = self.dhan_w.get_holdings()
167
+ holdings = self.dhan.get_holdings()
229
168
 
230
169
  if not isinstance(holdings["data"], list):
231
170
  return pl.DataFrame(schema=self.holidings_schema)
@@ -259,7 +198,7 @@ class Dhan(Broker):
259
198
  retry_on_exception=retry_exception,
260
199
  )
261
200
  def positions(self, drop_cnc: bool = True) -> pl.DataFrame:
262
- positions = self.dhan_w.get_positions()
201
+ positions = self.dhan.get_positions()
263
202
 
264
203
  positions_df = pl.DataFrame(positions.get("data", {})) # type:ignore
265
204
 
@@ -436,3 +375,15 @@ class Dhan(Broker):
436
375
 
437
376
  return margins
438
377
  return {}
378
+
379
+ def profile(self) -> UserBrokerProfileResponse:
380
+ return {"user_id": "test"}
381
+
382
+ def get_exchange(
383
+ self,
384
+ exchange: ExchangeType,
385
+ ) -> Any:
386
+ return exchange
387
+
388
+ def ltp(self, exchange: ExchangeType, tradingsymbol: str) -> float:
389
+ return 0.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: quantplay
3
- Version: 2.0.47
3
+ Version: 2.0.49
4
4
  Summary: This python package will be stored in AWS CodeArtifact
5
5
  Home-page:
6
6
  Author:
@@ -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.47",
24
+ version="2.0.49",
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