Skip to content

Commit

Permalink
Merge pull request #279 from OpenApi-5p/users/jenish/historical
Browse files Browse the repository at this point in the history
basket margin
place bulk order
historical data
accesstoken
stratery - totp
  • Loading branch information
5paisa committed Jan 20, 2024
2 parents 79e9865 + 842c68f commit 976bd78
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 29 deletions.
3 changes: 1 addition & 2 deletions py5paisa/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@

JWT_HEADERS={
'Ocp-Apim-Subscription-Key': 'c89fab8d895a426d9e00db380b433027',
'x-clientcode':"",
'x-auth-token':""
'Authorization':''
}

JWT_PAYLOAD={
Expand Down
76 changes: 55 additions & 21 deletions py5paisa/py5paisa.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,10 @@ def order_request(self, req_type) -> None:
try:
self.payload["body"]["ClientCode"] = self.client_code
self.payload["head"]["key"] = self.USER_KEY
HEADERS["Authorization"] = f'Bearer {self.access_token}'
if self.access_token != "":
HEADERS["Authorization"] = f'Bearer {self.Jwt_token}'
else:
HEADERS["Authorization"] = f'Bearer {self.access_token}'
HEADERS["5Paisa-API-Uid"] = self.APIUID
if req_type == "OP":
url = self.ORDER_PLACEMENT_ROUTE
Expand Down Expand Up @@ -260,6 +263,12 @@ def order_request(self, req_type) -> None:
url = self.GETVTTORDER_ROUTE
elif req_type == "HVTT":
url = self.HISVTTORDER_ROUTE
elif req_type == "BMC":
url = self.BASKETMARGIN_ROUTE
elif req_type == "BLKO":
url = self.PLACEORDERBULK_ROUTE
# self.payload["head"]["requestCode"] = "5PSMOOrd"
self.payload["body"]["AppSource"]=self.APP_SOURCE
else:
raise Exception("Invalid request type!")
res = self.session.post(url, json=self.payload,
Expand Down Expand Up @@ -584,9 +593,7 @@ def jwt_validate(self):

def historical_data(self, Exch: str, ExchangeSegment: str, ScripCode: int, time: str, From: str, To: str):
try:
self.jwt_headers['x-clientcode'] = self.client_code
self.jwt_headers['x-auth-token'] = self.Jwt_token
self.jwt_headers["5Paisa-API-Uid"] = self.APIUID
self.jwt_headers["Authorization"] = f'Bearer {self.access_token}'
url = f'{self.HISTORICAL_DATA_ROUTE}{Exch}/{ExchangeSegment}/{ScripCode}/{time}?from={From}&end={To}'
timeList = ['1m', '3m', '5m', '10m', '15m', '30m', '60m', '1d']
if time not in timeList:
Expand Down Expand Up @@ -692,6 +699,8 @@ def set_url(self):
self.MODVTTORDER_ROUTE = MODVTTORDER_ROUTE
self.GETVTTORDER_ROUTE = GETVTTORDER_ROUTE
self.HISVTTORDER_ROUTE = HISVTTORDER_ROUTE
self.BASKETMARGIN_ROUTE = BASKETMARGIN_ROUTE
self.PLACEORDERBULK_ROUTE = PLACEORDERBULK_ROUTE
except Exception as e:
log_response(e)

Expand All @@ -714,25 +723,31 @@ def get_oauth_session(self, request_token):
except Exception as e:
log_response(e)

def get_access_token(self, request_token):
def get_access_token(self, request_token=None):
try:
self.payload["head"]["Key"] = self.USER_KEY
self.payload["body"]["RequestToken"] = request_token
self.payload["body"]["EncryKey"] = self.ENCRYPTION_KEY
self.payload["body"]["UserId"] = self.USER_ID
url = ACCESS_TOKEN_ROUTE

res = self.session.post(url, json=self.payload).json()
message = res["body"]["Message"]

if message == "Success":
self.access_token = res["body"]["AccessToken"]
self.Jwt_token = self.access_token
self._set_client_code(res["body"]["ClientCode"])
log_response("Logged in!!")
return self.access_token
if request_token is None:
if self.access_token != "":
return self.access_token
else:
log_response("Please login first")
else:
log_response(message)
self.payload["head"]["Key"] = self.USER_KEY
self.payload["body"]["RequestToken"] = request_token
self.payload["body"]["EncryKey"] = self.ENCRYPTION_KEY
self.payload["body"]["UserId"] = self.USER_ID
url = ACCESS_TOKEN_ROUTE

res = self.session.post(url, json=self.payload).json()
message = res["body"]["Message"]

if message == "Success":
self.access_token = res["body"]["AccessToken"]
self.Jwt_token = self.access_token
self._set_client_code(res["body"]["ClientCode"])
log_response("Logged in!!")
return self.access_token
else:
log_response(message)
except Exception as e:
log_response(e)

Expand Down Expand Up @@ -947,5 +962,24 @@ def vtt_order(self, order_type, **order):
except KeyError:
# Handle unknown order_type if needed
pass
except Exception as e:
log_response(e)

def basket_margin(self, BasketID: str,CoverPositions : str):
try:
if self.client_code != None:
self.payload["body"]["BasketID"] = BasketID
self.payload["body"]["CoverPositions"] = CoverPositions
return self.order_request("BMC")
except Exception as e:
log_response(e)

def place_order_bulk(self, **order):
try:
self.set_payload(order)
return self.order_request('BLKO')
except KeyError:
# Handle unknown order_type if needed
pass
except Exception as e:
log_response(e)
7 changes: 3 additions & 4 deletions py5paisa/strategy.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@

class strategies:

def __init__(self, user=None, passw=None, dob=None, cred=None, request_token=None):
def __init__(self, client_code=None, totp=None, pin=None, cred=None, request_token=None):
self.Client = FivePaisaClient(cred=cred)
if request_token is None:
self.Client = FivePaisaClient(email=user, passwd=passw, dob=dob, cred=cred)
self.Client.login()
self.Client.get_totp_session(client_code,totp,pin)
else:
self.Client = FivePaisaClient(cred=cred)
self.Client.get_access_token(request_token)

def get_scripcode(self,symbol,strike,expiry,opt):
Expand Down
6 changes: 4 additions & 2 deletions py5paisa/urlconst.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
MARKET_DEPTH_BY_SYMBOL_ROUTE = f'{BaseUrl}V1/MarketDepth'
MARKET_DEPTH_BY_SCRIP = f'{BaseUrl}V2/MarketDepth'
JWT_VALIDATION_ROUTE = "https://Openapi.indiainfoline.com/VendorsAPI/Service1.svc/JWTOpenApiValidation"
HISTORICAL_DATA_ROUTE = "https://openapi.5paisa.com/historical/"

#HISTORICAL_DATA_ROUTE = "https://openapi.5paisa.com/historical/" old url
HISTORICAL_DATA_ROUTE = "https://openapi.5paisa.com/V2/historical/"
IDEAS_ROUTE = f'{BaseUrl}TraderIDEAs'

TRADEBOOK_ROUTE = f'{BaseUrl}V1/TradeBook'
Expand Down Expand Up @@ -64,3 +64,5 @@
MODVTTORDER_ROUTE=f'{BaseUrl}ModifyVTTOrder'
GETVTTORDER_ROUTE=f'{BaseUrl}GetVTTOrder'
HISVTTORDER_ROUTE=f'{BaseUrl}GetHistoryVTTOrder'
BASKETMARGIN_ROUTE= f'{BaseUrl}PreOrdMarginCalculationBulkVendor'
PLACEORDERBULK_ROUTE= f'{BaseUrl}PlaceOrderBulk'

0 comments on commit 976bd78

Please sign in to comment.