@@ -18,22 +18,30 @@ def __init__(self, window):
1818 self .first_run = True
1919 self .stop = False
2020 self .dates = ["" ]
21- self .indexes = ["NIFTY" , "BANKNIFTY" , "NIFTYIT" ]
21+ self .indices = ["NIFTY" , "BANKNIFTY" , "NIFTYIT" ]
2222 self .headers = {'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
2323 'like Gecko) '
2424 'Chrome/80.0.3987.149 Safari/537.36' ,
2525 'accept-language' : 'en,gu;q=0.9,hi;q=0.8' , 'accept-encoding' : 'gzip, deflate, br' }
26+ self .session = requests .Session ()
27+ self .cookies = {}
2628 self .login_win (window )
2729
28- def get_data (self , event = "empty" ):
30+ def get_data (self , event = None ):
31+ request = None
2932 response = None
3033 if self .first_run :
3134 self .index = self .index_var .get ()
3235 try :
36+ url_oc = "https://www.nseindia.com/option-chain"
3337 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 )
3541 except Exception as err :
36- print (err )
42+ print (request .status_code )
43+ print (response .status_code )
44+ print (err , "1" )
3745 messagebox .showerror (title = "Error" , message = "Error in fetching dates.\n Please retry." )
3846 self .dates .clear ()
3947 self .dates = ["" ]
@@ -43,16 +51,18 @@ def get_data(self, event="empty"):
4351 else :
4452 try :
4553 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 )
4755 except Exception as err :
48- print (err )
56+ print (response )
57+ print (err , "2" )
4958 return
5059
5160 if response is not None :
5261 try :
5362 json_data = response .json ()
5463 except Exception as err :
55- print (err )
64+ print (response )
65+ print (err , "3" )
5666 json_data = {}
5767 else :
5868 json_data = {}
@@ -61,8 +71,11 @@ def get_data(self, event="empty"):
6171 messagebox .showerror (title = "Error" , message = "Error in fetching dates.\n Please retry." )
6272 self .dates .clear ()
6373 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" )
6679 return
6780 elif json_data == {}:
6881 return
@@ -74,8 +87,8 @@ def get_data(self, event="empty"):
7487 try :
7588 self .date_menu .config (values = tuple (self .dates ))
7689 self .date_menu .current (0 )
77- except TclError :
78- pass
90+ except TclError as err :
91+ print ( err , "5" )
7992
8093 return response , json_data
8194
@@ -89,13 +102,13 @@ def login_win(self, window):
89102 self .login .geometry ("260x90+{}+{}" .format (position_right , position_down ))
90103
91104 self .index_var = StringVar ()
92- self .index_var .set (self .indexes [0 ])
105+ self .index_var .set (self .indices [0 ])
93106 self .dates_var = StringVar ()
94107 self .dates_var .set (self .dates [0 ])
95108
96109 index_label = Label (self .login , text = "Index: " , justify = LEFT )
97110 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 )
99112 self .index_menu .config (width = 15 )
100113 self .index_menu .grid (row = 0 , column = 1 , sticky = N + S + E )
101114 date_label = Label (self .login , text = "Expiry Date: " , justify = LEFT )
@@ -128,7 +141,7 @@ def focus_widget(event, mode):
128141
129142 self .login .mainloop ()
130143
131- def start (self , event = "empty" ):
144+ def start (self , event = None ):
132145 self .expiry_date = self .dates_var .get ()
133146 if self .expiry_date == "" :
134147 messagebox .showerror (title = "Error" , message = "Incorrect Expiry Date.\n Please enter correct Expiry Date." )
@@ -138,10 +151,10 @@ def start(self, event="empty"):
138151 self .login .destroy ()
139152 self .main_win ()
140153 except ValueError as err :
141- print (err )
154+ print (err , "6" )
142155 messagebox .showerror (title = "Error" , message = "Incorrect Strike Price.\n Please enter correct Strike Price." )
143156
144- def change_state (self , event = "empty" ):
157+ def change_state (self , event = None ):
145158
146159 if not self .stop :
147160 self .stop = True
@@ -154,7 +167,7 @@ def change_state(self, event="empty"):
154167
155168 self .main ()
156169
157- def export (self , event = "empty" ):
170+ def export (self , event = None ):
158171 sheet_data = self .sheet .get_sheet_data ()
159172
160173 try :
@@ -165,11 +178,11 @@ def export(self, event="empty"):
165178 messagebox .showinfo (title = "Export Complete" ,
166179 message = "Data has been exported to NSE-Option-Chain-Analyzer.csv." )
167180 except Exception as err :
168- print (err )
181+ print (err , "7" )
169182 messagebox .showerror (title = "Export Failed" ,
170183 message = "An error occurred while exporting the data." )
171184
172- def links (self , link , event = "empty" ):
185+ def links (self , link , event = None ):
173186
174187 if link == "developer" :
175188 webbrowser .open_new ("https://github.com/VarunS2002/" )
@@ -198,7 +211,7 @@ def about_window(self):
198211
199212 return self .info
200213
201- def about (self , event = "empty" ):
214+ def about (self , event = None ):
202215 self .info = self .about_window ()
203216 self .info .rowconfigure (0 , weight = 1 )
204217 self .info .rowconfigure (1 , weight = 1 )
@@ -212,7 +225,7 @@ def about(self, event="empty"):
212225 heading .grid (row = 0 , column = 0 , columnspan = 2 , sticky = N + S + W + E )
213226 version_label = Label (self .info , text = "Version:" , relief = RIDGE )
214227 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 )
216229 version_val .grid (row = 1 , column = 1 , sticky = N + S + W + E )
217230 dev_label = Label (self .info , text = "Developer:" , relief = RIDGE )
218231 dev_label .grid (row = 2 , column = 0 , sticky = N + S + W + E )
@@ -234,10 +247,11 @@ def about(self, event="empty"):
234247
235248 self .info .mainloop ()
236249
237- def close (self , event = "empty" ):
250+ def close (self , event = None ):
238251 ask_quit = messagebox .askyesno ("Quit" , "All unsaved data will be lost.\n Proceed to quit?" , icon = 'warning' ,
239252 default = 'no' )
240253 if ask_quit :
254+ self .session .close ()
241255 self .root .destroy ()
242256 quit ()
243257 elif not ask_quit :
@@ -277,7 +291,7 @@ def main_win(self):
277291 top_frame .pack (fill = "both" , expand = True )
278292
279293 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)' ,
281295 'Put Boundary\n (in K)' , 'Call ITM' , 'Put ITM' )
282296 self .sheet = tksheet .Sheet (top_frame , column_width = 85 , align = "center" , headers = output_columns ,
283297 header_font = ("TkDefaultFont" , 9 , "bold" ), empty_horizontal = 0 ,
@@ -311,7 +325,7 @@ def main_win(self):
311325 max_call_oi_sp_label .grid (row = 1 , column = 0 , sticky = N + S + W + E )
312326 self .max_call_oi_sp_val = Label (bottom_frame , text = "" , relief = RIDGE )
313327 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" ))
315329 max_call_oi_label .grid (row = 1 , column = 2 , sticky = N + S + W + E )
316330 self .max_call_oi_val = Label (bottom_frame , text = "" , relief = RIDGE )
317331 self .max_call_oi_val .grid (row = 1 , column = 3 , sticky = N + S + W + E )
@@ -322,7 +336,7 @@ def main_win(self):
322336 max_put_oi_sp_label .grid (row = 1 , column = 4 , sticky = N + S + W + E )
323337 self .max_put_oi_sp_val = Label (bottom_frame , text = "" , relief = RIDGE )
324338 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" ))
326340 max_put_oi_label .grid (row = 1 , column = 6 , sticky = N + S + W + E )
327341 self .max_put_oi_val = Label (bottom_frame , text = "" , relief = RIDGE )
328342 self .max_put_oi_val .grid (row = 1 , column = 7 , sticky = N + S + W + E )
@@ -591,7 +605,8 @@ def main(self):
591605
592606 try :
593607 index = int (df [df ['Strike Price' ] == self .sp ].index .tolist ()[0 ])
594- except IndexError :
608+ except IndexError as err :
609+ print (err , "8" )
595610 messagebox .showerror (title = "Error" ,
596611 message = "Incorrect Strike Price.\n Please enter correct Strike Price." )
597612 self .root .destroy ()
@@ -661,7 +676,12 @@ def main(self):
661676 self .root .after ((self .seconds * 1000 ), self .main )
662677 return
663678
679+ @staticmethod
680+ def create_instance ():
681+ master_window = Tk ()
682+ Nse (master_window )
683+ master_window .mainloop ()
684+
664685
665- master_window = Tk ()
666- gui = Nse (master_window )
667- master_window .mainloop ()
686+ if __name__ == '__main__' :
687+ Nse .create_instance ()
0 commit comments