@@ -18,22 +18,30 @@ def __init__(self, window):
18
18
self .first_run = True
19
19
self .stop = False
20
20
self .dates = ["" ]
21
- self .indexes = ["NIFTY" , "BANKNIFTY" , "NIFTYIT" ]
21
+ self .indices = ["NIFTY" , "BANKNIFTY" , "NIFTYIT" ]
22
22
self .headers = {'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
23
23
'like Gecko) '
24
24
'Chrome/80.0.3987.149 Safari/537.36' ,
25
25
'accept-language' : 'en,gu;q=0.9,hi;q=0.8' , 'accept-encoding' : 'gzip, deflate, br' }
26
+ self .session = requests .Session ()
27
+ self .cookies = {}
26
28
self .login_win (window )
27
29
28
- def get_data (self , event = "empty" ):
30
+ def get_data (self , event = None ):
31
+ request = None
29
32
response = None
30
33
if self .first_run :
31
34
self .index = self .index_var .get ()
32
35
try :
36
+ url_oc = "https://www.nseindia.com/option-chain"
33
37
url = f"https://www.nseindia.com/api/option-chain-indices?symbol={ self .index } "
34
- response = requests .get (url , headers = self .headers , timeout = 5 )
38
+ request = self .session .get (url_oc , headers = self .headers , timeout = 5 )
39
+ self .cookies = dict (request .cookies )
40
+ response = self .session .get (url , headers = self .headers , timeout = 5 , cookies = self .cookies )
35
41
except Exception as err :
36
- print (err )
42
+ print (request .status_code )
43
+ print (response .status_code )
44
+ print (err , "1" )
37
45
messagebox .showerror (title = "Error" , message = "Error in fetching dates.\n Please retry." )
38
46
self .dates .clear ()
39
47
self .dates = ["" ]
@@ -43,16 +51,18 @@ def get_data(self, event="empty"):
43
51
else :
44
52
try :
45
53
url = f"https://www.nseindia.com/api/option-chain-indices?symbol={ self .index } "
46
- response = requests . get (url , headers = self .headers , timeout = 5 )
54
+ response = self . session . get (url , headers = self .headers , timeout = 5 , cookies = self . cookies )
47
55
except Exception as err :
48
- print (err )
56
+ print (response )
57
+ print (err , "2" )
49
58
return
50
59
51
60
if response is not None :
52
61
try :
53
62
json_data = response .json ()
54
63
except Exception as err :
55
- print (err )
64
+ print (response )
65
+ print (err , "3" )
56
66
json_data = {}
57
67
else :
58
68
json_data = {}
@@ -61,8 +71,11 @@ def get_data(self, event="empty"):
61
71
messagebox .showerror (title = "Error" , message = "Error in fetching dates.\n Please retry." )
62
72
self .dates .clear ()
63
73
self .dates = ["" ]
64
- self .date_menu .config (values = tuple (self .dates ))
65
- self .date_menu .current (0 )
74
+ try :
75
+ self .date_menu .config (values = tuple (self .dates ))
76
+ self .date_menu .current (0 )
77
+ except TclError as err :
78
+ print (err , "4" )
66
79
return
67
80
elif json_data == {}:
68
81
return
@@ -74,8 +87,8 @@ def get_data(self, event="empty"):
74
87
try :
75
88
self .date_menu .config (values = tuple (self .dates ))
76
89
self .date_menu .current (0 )
77
- except TclError :
78
- pass
90
+ except TclError as err :
91
+ print ( err , "5" )
79
92
80
93
return response , json_data
81
94
@@ -89,13 +102,13 @@ def login_win(self, window):
89
102
self .login .geometry ("260x90+{}+{}" .format (position_right , position_down ))
90
103
91
104
self .index_var = StringVar ()
92
- self .index_var .set (self .indexes [0 ])
105
+ self .index_var .set (self .indices [0 ])
93
106
self .dates_var = StringVar ()
94
107
self .dates_var .set (self .dates [0 ])
95
108
96
109
index_label = Label (self .login , text = "Index: " , justify = LEFT )
97
110
index_label .grid (row = 0 , column = 0 , sticky = N + S + W )
98
- self .index_menu = Combobox (self .login , textvariable = self .index_var , values = self .indexes )
111
+ self .index_menu = Combobox (self .login , textvariable = self .index_var , values = self .indices )
99
112
self .index_menu .config (width = 15 )
100
113
self .index_menu .grid (row = 0 , column = 1 , sticky = N + S + E )
101
114
date_label = Label (self .login , text = "Expiry Date: " , justify = LEFT )
@@ -128,7 +141,7 @@ def focus_widget(event, mode):
128
141
129
142
self .login .mainloop ()
130
143
131
- def start (self , event = "empty" ):
144
+ def start (self , event = None ):
132
145
self .expiry_date = self .dates_var .get ()
133
146
if self .expiry_date == "" :
134
147
messagebox .showerror (title = "Error" , message = "Incorrect Expiry Date.\n Please enter correct Expiry Date." )
@@ -138,10 +151,10 @@ def start(self, event="empty"):
138
151
self .login .destroy ()
139
152
self .main_win ()
140
153
except ValueError as err :
141
- print (err )
154
+ print (err , "6" )
142
155
messagebox .showerror (title = "Error" , message = "Incorrect Strike Price.\n Please enter correct Strike Price." )
143
156
144
- def change_state (self , event = "empty" ):
157
+ def change_state (self , event = None ):
145
158
146
159
if not self .stop :
147
160
self .stop = True
@@ -154,7 +167,7 @@ def change_state(self, event="empty"):
154
167
155
168
self .main ()
156
169
157
- def export (self , event = "empty" ):
170
+ def export (self , event = None ):
158
171
sheet_data = self .sheet .get_sheet_data ()
159
172
160
173
try :
@@ -165,11 +178,11 @@ def export(self, event="empty"):
165
178
messagebox .showinfo (title = "Export Complete" ,
166
179
message = "Data has been exported to NSE-Option-Chain-Analyzer.csv." )
167
180
except Exception as err :
168
- print (err )
181
+ print (err , "7" )
169
182
messagebox .showerror (title = "Export Failed" ,
170
183
message = "An error occurred while exporting the data." )
171
184
172
- def links (self , link , event = "empty" ):
185
+ def links (self , link , event = None ):
173
186
174
187
if link == "developer" :
175
188
webbrowser .open_new ("https://github.com/VarunS2002/" )
@@ -198,7 +211,7 @@ def about_window(self):
198
211
199
212
return self .info
200
213
201
- def about (self , event = "empty" ):
214
+ def about (self , event = None ):
202
215
self .info = self .about_window ()
203
216
self .info .rowconfigure (0 , weight = 1 )
204
217
self .info .rowconfigure (1 , weight = 1 )
@@ -212,7 +225,7 @@ def about(self, event="empty"):
212
225
heading .grid (row = 0 , column = 0 , columnspan = 2 , sticky = N + S + W + E )
213
226
version_label = Label (self .info , text = "Version:" , relief = RIDGE )
214
227
version_label .grid (row = 1 , column = 0 , sticky = N + S + W + E )
215
- version_val = Label (self .info , text = "3.2 " , relief = RIDGE )
228
+ version_val = Label (self .info , text = "3.3 " , relief = RIDGE )
216
229
version_val .grid (row = 1 , column = 1 , sticky = N + S + W + E )
217
230
dev_label = Label (self .info , text = "Developer:" , relief = RIDGE )
218
231
dev_label .grid (row = 2 , column = 0 , sticky = N + S + W + E )
@@ -234,10 +247,11 @@ def about(self, event="empty"):
234
247
235
248
self .info .mainloop ()
236
249
237
- def close (self , event = "empty" ):
250
+ def close (self , event = None ):
238
251
ask_quit = messagebox .askyesno ("Quit" , "All unsaved data will be lost.\n Proceed to quit?" , icon = 'warning' ,
239
252
default = 'no' )
240
253
if ask_quit :
254
+ self .session .close ()
241
255
self .root .destroy ()
242
256
quit ()
243
257
elif not ask_quit :
@@ -277,7 +291,7 @@ def main_win(self):
277
291
top_frame .pack (fill = "both" , expand = True )
278
292
279
293
output_columns = (
280
- 'Time' , 'Points ' , 'Call Sum\n (in K)' , 'Put Sum\n (in K)' , 'Difference\n (in K)' , 'Call Boundary\n (in K)' ,
294
+ 'Time' , 'Value ' , 'Call Sum\n (in K)' , 'Put Sum\n (in K)' , 'Difference\n (in K)' , 'Call Boundary\n (in K)' ,
281
295
'Put Boundary\n (in K)' , 'Call ITM' , 'Put ITM' )
282
296
self .sheet = tksheet .Sheet (top_frame , column_width = 85 , align = "center" , headers = output_columns ,
283
297
header_font = ("TkDefaultFont" , 9 , "bold" ), empty_horizontal = 0 ,
@@ -311,7 +325,7 @@ def main_win(self):
311
325
max_call_oi_sp_label .grid (row = 1 , column = 0 , sticky = N + S + W + E )
312
326
self .max_call_oi_sp_val = Label (bottom_frame , text = "" , relief = RIDGE )
313
327
self .max_call_oi_sp_val .grid (row = 1 , column = 1 , sticky = N + S + W + E )
314
- max_call_oi_label = Label (bottom_frame , text = "OI:" , relief = RIDGE , font = ("TkDefaultFont" , 9 , "bold" ))
328
+ max_call_oi_label = Label (bottom_frame , text = "OI (in K) :" , relief = RIDGE , font = ("TkDefaultFont" , 9 , "bold" ))
315
329
max_call_oi_label .grid (row = 1 , column = 2 , sticky = N + S + W + E )
316
330
self .max_call_oi_val = Label (bottom_frame , text = "" , relief = RIDGE )
317
331
self .max_call_oi_val .grid (row = 1 , column = 3 , sticky = N + S + W + E )
@@ -322,7 +336,7 @@ def main_win(self):
322
336
max_put_oi_sp_label .grid (row = 1 , column = 4 , sticky = N + S + W + E )
323
337
self .max_put_oi_sp_val = Label (bottom_frame , text = "" , relief = RIDGE )
324
338
self .max_put_oi_sp_val .grid (row = 1 , column = 5 , sticky = N + S + W + E )
325
- max_put_oi_label = Label (bottom_frame , text = "OI:" , relief = RIDGE , font = ("TkDefaultFont" , 9 , "bold" ))
339
+ max_put_oi_label = Label (bottom_frame , text = "OI (in K) :" , relief = RIDGE , font = ("TkDefaultFont" , 9 , "bold" ))
326
340
max_put_oi_label .grid (row = 1 , column = 6 , sticky = N + S + W + E )
327
341
self .max_put_oi_val = Label (bottom_frame , text = "" , relief = RIDGE )
328
342
self .max_put_oi_val .grid (row = 1 , column = 7 , sticky = N + S + W + E )
@@ -591,7 +605,8 @@ def main(self):
591
605
592
606
try :
593
607
index = int (df [df ['Strike Price' ] == self .sp ].index .tolist ()[0 ])
594
- except IndexError :
608
+ except IndexError as err :
609
+ print (err , "8" )
595
610
messagebox .showerror (title = "Error" ,
596
611
message = "Incorrect Strike Price.\n Please enter correct Strike Price." )
597
612
self .root .destroy ()
@@ -661,7 +676,12 @@ def main(self):
661
676
self .root .after ((self .seconds * 1000 ), self .main )
662
677
return
663
678
679
+ @staticmethod
680
+ def create_instance ():
681
+ master_window = Tk ()
682
+ Nse (master_window )
683
+ master_window .mainloop ()
684
+
664
685
665
- master_window = Tk ()
666
- gui = Nse (master_window )
667
- master_window .mainloop ()
686
+ if __name__ == '__main__' :
687
+ Nse .create_instance ()
0 commit comments