Skip to content

Commit 7fd83af

Browse files
authored
Update NSE_Option_Chain_Analyzer.py
1 parent 9250ec6 commit 7fd83af

File tree

1 file changed

+77
-50
lines changed

1 file changed

+77
-50
lines changed

NSE_Option_Chain_Analyzer.py

+77-50
Original file line numberDiff line numberDiff line change
@@ -34,75 +34,102 @@ def __init__(self, window: Tk):
3434
self.login_win(window)
3535

3636
def get_data(self, event=None):
37+
if self.first_run:
38+
return self.get_data_first_run()
39+
else:
40+
return self.get_data_refresh()
41+
42+
def get_data_first_run(self):
3743
request = None
3844
response = None
39-
if self.first_run:
40-
self.index = self.index_var.get()
45+
self.index = self.index_var.get()
46+
try:
47+
url = f"https://www.nseindia.com/api/option-chain-indices?symbol={self.index}"
48+
request = self.session.get(self.url_oc, headers=self.headers, timeout=5)
49+
self.cookies = dict(request.cookies)
50+
response = self.session.get(url, headers=self.headers, timeout=5, cookies=self.cookies)
51+
except Exception as err:
52+
print(request)
53+
print(response)
54+
print(err, "1")
55+
messagebox.showerror(title="Error", message="Error in fetching dates.\nPlease retry.")
56+
self.dates.clear()
57+
self.dates = [""]
58+
self.date_menu.config(values=tuple(self.dates))
59+
self.date_menu.current(0)
60+
return
61+
if response is not None:
4162
try:
42-
url = f"https://www.nseindia.com/api/option-chain-indices?symbol={self.index}"
43-
request = self.session.get(self.url_oc, headers=self.headers, timeout=5)
44-
self.cookies = dict(request.cookies)
45-
response = self.session.get(url, headers=self.headers, timeout=5, cookies=self.cookies)
63+
json_data = response.json()
4664
except Exception as err:
47-
print(request)
4865
print(response)
49-
print(err, "1")
50-
messagebox.showerror(title="Error", message="Error in fetching dates.\nPlease retry.")
51-
self.dates.clear()
52-
self.dates = [""]
66+
print(err, "2")
67+
json_data = {}
68+
else:
69+
json_data = {}
70+
if json_data == {}:
71+
messagebox.showerror(title="Error", message="Error in fetching dates.\nPlease retry.")
72+
self.dates.clear()
73+
self.dates = [""]
74+
try:
5375
self.date_menu.config(values=tuple(self.dates))
5476
self.date_menu.current(0)
55-
return
56-
else:
77+
except TclError as err:
78+
print(err, "3")
79+
return
80+
self.dates.clear()
81+
for dates in json_data['records']['expiryDates']:
82+
self.dates.append(dates)
83+
try:
84+
self.date_menu.config(values=tuple(self.dates))
85+
self.date_menu.current(0)
86+
except TclError as err:
87+
print(err, "4")
88+
89+
return response, json_data
90+
91+
def get_data_refresh(self):
92+
request = None
93+
response = None
94+
try:
95+
url = f"https://www.nseindia.com/api/option-chain-indices?symbol={self.index}"
96+
response = self.session.get(url, headers=self.headers, timeout=5, cookies=self.cookies)
97+
if response.status_code == 401:
98+
self.session.close()
99+
self.session = requests.Session()
100+
url = f"https://www.nseindia.com/api/option-chain-indices?symbol={self.index}"
101+
request = self.session.get(self.url_oc, headers=self.headers, timeout=5)
102+
self.cookies = dict(request.cookies)
103+
response = self.session.get(url, headers=self.headers, timeout=5, cookies=self.cookies)
104+
print("reset cookies")
105+
except Exception as err:
106+
print(request)
107+
print(response)
108+
print(err, "5")
57109
try:
110+
self.session.close()
111+
self.session = requests.Session()
58112
url = f"https://www.nseindia.com/api/option-chain-indices?symbol={self.index}"
113+
request = self.session.get(self.url_oc, headers=self.headers, timeout=5)
114+
self.cookies = dict(request.cookies)
59115
response = self.session.get(url, headers=self.headers, timeout=5, cookies=self.cookies)
60-
if response.status_code == 401:
61-
self.session.close()
62-
self.session = requests.Session()
63-
url = f"https://www.nseindia.com/api/option-chain-indices?symbol={self.index}"
64-
request = self.session.get(self.url_oc, headers=self.headers, timeout=5)
65-
self.cookies = dict(request.cookies)
66-
response = self.session.get(url, headers=self.headers, timeout=5, cookies=self.cookies)
67-
print("reset cookies")
116+
print("reset cookies")
68117
except Exception as err:
69118
print(request)
70119
print(response)
71-
print(err, "2")
120+
print(err, "6")
72121
return
73-
74122
if response is not None:
75123
try:
76124
json_data = response.json()
77125
except Exception as err:
78126
print(response)
79-
print(err, "3")
127+
print(err, "7")
80128
json_data = {}
81129
else:
82130
json_data = {}
83-
84-
if self.first_run and json_data == {}:
85-
messagebox.showerror(title="Error", message="Error in fetching dates.\nPlease retry.")
86-
self.dates.clear()
87-
self.dates = [""]
88-
try:
89-
self.date_menu.config(values=tuple(self.dates))
90-
self.date_menu.current(0)
91-
except TclError as err:
92-
print(err, "4")
131+
if json_data == {}:
93132
return
94-
elif json_data == {}:
95-
return
96-
97-
if self.first_run:
98-
self.dates.clear()
99-
for dates in json_data['records']['expiryDates']:
100-
self.dates.append(dates)
101-
try:
102-
self.date_menu.config(values=tuple(self.dates))
103-
self.date_menu.current(0)
104-
except TclError as err:
105-
print(err, "5")
106133

107134
return response, json_data
108135

@@ -165,7 +192,7 @@ def start(self, event=None):
165192
self.login.destroy()
166193
self.main_win()
167194
except ValueError as err:
168-
print(err, "6")
195+
print(err, "8")
169196
messagebox.showerror(title="Error", message="Incorrect Strike Price.\nPlease enter correct Strike Price.")
170197

171198
def change_state(self, event=None):
@@ -192,7 +219,7 @@ def export(self, event=None):
192219
messagebox.showinfo(title="Export Complete",
193220
message="Data has been exported to NSE-Option-Chain-Analyzer.csv.")
194221
except Exception as err:
195-
print(err, "7")
222+
print(err, "9")
196223
messagebox.showerror(title="Export Failed",
197224
message="An error occurred while exporting the data.")
198225

@@ -253,7 +280,7 @@ def about(self, event=None):
253280
heading.grid(row=0, column=0, columnspan=2, sticky=N + S + W + E)
254281
version_label = Label(self.info, text="Version:", relief=RIDGE)
255282
version_label.grid(row=1, column=0, sticky=N + S + W + E)
256-
version_val = Label(self.info, text="3.4", relief=RIDGE)
283+
version_val = Label(self.info, text="3.5", relief=RIDGE)
257284
version_val.grid(row=1, column=1, sticky=N + S + W + E)
258285
dev_label = Label(self.info, text="Developer:", relief=RIDGE)
259286
dev_label.grid(row=2, column=0, sticky=N + S + W + E)
@@ -636,7 +663,7 @@ def main(self):
636663
try:
637664
index = int(df[df['Strike Price'] == self.sp].index.tolist()[0])
638665
except IndexError as err:
639-
print(err, "8")
666+
print(err, "10")
640667
messagebox.showerror(title="Error",
641668
message="Incorrect Strike Price.\nPlease enter correct Strike Price.")
642669
self.root.destroy()

0 commit comments

Comments
 (0)