(20241223) Trading Symbols Listing Started (Zerodha Kite).

This commit is contained in:
2024-12-23 12:42:27 +05:30
parent 1249841b05
commit 903a586cfe
14 changed files with 721 additions and 10 deletions
@@ -47,6 +47,11 @@ from controllers_v2.finstitutions.trading.base import TradingController
# Models:
from models.core.auth_token import CoreAuthTokenModel
from utils_v2.trading.zerodha_kite.models.auth_tokens import ZerodhaKiteAuthTokens
from models.api.finstitutions.trading.symbols.list import (
TradingSymbolListRequestData,
TradingSymbolListBrokerResponse,
TradingSymbol
)
# To work with MongoDB:
from bson.objectid import ObjectId
@@ -100,6 +105,12 @@ from kiteconnect import KiteConnect
class ZerodhaKiteTradingController(TradingController):
# ┏┓┓ ┓┏
# ┃ ┃┏┓┏┏ ┃┃┏┓┏┓┏
# ┗┛┗┗┻┛┛ ┗┛┗┻┛ ┛
CLIENT_NAME = "zerodhaKite"
# ┏┓
# ┃ ┏┓┏┓┏╋┏┓┓┏┏╋┏┓┏┓
# ┗┛┗┛┛┗┛┗┛ ┗┻┗┗┗┛┛
@@ -125,7 +136,7 @@ class ZerodhaKiteTradingController(TradingController):
"""
# Declare the client:
this_client = "zerodhaKite"
this_client = self.CLIENT_NAME
# Prepare base filter:
this_filter = {"client": this_client}
@@ -179,7 +190,7 @@ class ZerodhaKiteTradingController(TradingController):
:param sql_conn: The database connection to use to perform this activity.
:param mongo_data_conn: The database connection to use to perform this activity.
:param inbound_data: The data that came in from the broker. This could be in the JSON body, query params, etc.
:return: The model that hold the access tokens, or None if something failed.
:return: True if the callback loop was completed successfully, else False..
"""
# Start by assuming failure:
@@ -229,6 +240,55 @@ class ZerodhaKiteTradingController(TradingController):
# Done here:
return success
# ┏┳┓ ┓• ┏┓ ┓ ┓
# ┃ ┏┓┏┓┏┫┓┏┓┏┓ ┗┓┓┏┏┳┓┣┓┏┓┃┏
# ┻ ┛ ┗┻┗┻┗┛┗┗┫ ┗┛┗┫┛┗┗┗┛┗┛┗┛
# ┛ ┛
async def list_symbols(
self,
mongo_data_conn: AsyncMongo,
auth_token: CoreAuthTokenModel,
inbound_data: TradingSymbolListRequestData
) -> TradingSymbolListBrokerResponse:
"""
To get the list of tradeable symbols offered by Zerodha.
:param mongo_data_conn: The database connection to use to perform this activity.
:param auth_token: The token that has to be used to fetch the data.
:param inbound_data: The data that came in with the APi call.
:return: The structured response form the broker.
"""
# Start by assuming failure:
symbol_list = TradingSymbolListBrokerResponse()
try:
# Fit the token into the model:
zerodha_token = ZerodhaKiteAuthTokens(**auth_token.token)
# Now create an instance of the Kite:
kite = KiteConnect(api_key = auth_token.auth["apiKey"])
kite.set_access_token(zerodha_token.accessToken)
# Now we retrieve the list of symbols for every kind of exchange:
symbol_list.data = []
for exchange in inbound_data.exchanges:
symbols_subset = kite.instruments(exchange = exchange)
symbols_subset = [TradingSymbol.from_zerodha_kite(s) for s in symbols_subset[:10]]
symbol_list.data += symbols_subset
symbol_list.success = True
symbol_list.message = "Symbol list retrieved successfully."
# In case something goes wrong:
except Exception as exception:
symbol_list.exception = exception
symbol_list.message = str(exception)
# Done here:
return symbol_list
# *****************************************************************************************************************
# ***** ****