55import json
66import logging
77import os
8- from http .server import BaseHTTPRequestHandler , HTTPServer
9- from socketserver import ThreadingMixIn
108from logging .handlers import TimedRotatingFileHandler
119
10+ import tornado .ioloop
11+ import tornado .web
12+ import asyncio
13+
1214from external_webpage .request_handler_utils import get_detailed_state_of_specific_instrument , \
1315 get_summary_details_of_all_instruments , get_instrument_and_callback
1416from external_webpage .web_scrapper_manager import WebScrapperManager
2426HOST , PORT = '' , 60000
2527
2628
27- class MyHandler (BaseHTTPRequestHandler ):
29+ class MyHandler (tornado . web . RequestHandler ):
2830 """
2931 Handle for web calls for Json Borne
3032 """
3133
32- def do_GET (self ):
34+ def get (self ):
3335 """
3436 This is called by BaseHTTPRequestHandler every time a client does a GET.
3537 The response is written to self.wfile
3638 """
39+ path = self .request .uri
3740 instrument = "Not set"
3841 try :
39- instrument , callback = get_instrument_and_callback (self . path )
42+ instrument , callback = get_instrument_and_callback (path )
4043
4144 # Debug is only needed when debugging
42- logger .debug ("Connection from " + str ( self . client_address ) + " looking at " + str ( instrument ))
45+ logger .debug ("Connection from {} looking at {}" . format ( self . request . remote_ip , instrument ))
4346
4447 with scraped_data_lock :
4548 if instrument == "ALL" :
@@ -53,45 +56,44 @@ def do_GET(self):
5356 try :
5457 ans_as_json = str (json .dumps (ans ))
5558 except Exception as err :
56- raise ValueError ("Unable to convert answer data to JSON: %s" % err . message )
59+ raise ValueError ("Unable to convert answer data to JSON: {}" . format ( err ) )
5760
5861 response = "{}({})" .format (callback , ans_as_json )
5962
60- self .send_response (200 )
61- self .send_header ('Content-type' , 'text/html' )
62- self .end_headers ()
63- self .wfile .write (response .encode ("utf-8" ))
63+ self .set_status (200 )
64+ self .set_header ('Content-type' , 'text/html' )
65+ self .write (response .encode ("utf-8" ))
6466 except ValueError as e :
6567 logger .exception ("Value Error when getting data from {} for {}: {}" .format (
66- self .client_address , instrument , e ))
67- self .send_response (400 )
68+ self .request . remote_ip , instrument , e ))
69+ self .set_status (400 )
6870 except Exception as e :
6971 logger .exception ("Exception when getting data from {} for {}: {}" .format (
70- self .client_address , instrument , e ))
71- self .send_response (404 )
72+ self .request . remote_ip , instrument , e ))
73+ self .set_status (404 )
7274
7375 def log_message (self , format , * args ):
7476 """ By overriding this method and doing nothing we disable writing to console
7577 for every client request. Remove this to re-enable """
7678 return
7779
7880
79- class ThreadedHTTPServer (ThreadingMixIn , HTTPServer ):
80- """Handle requests in a separate thread."""
81-
82-
8381if __name__ == '__main__' :
8482 # It can sometime be useful to define a local instrument list to add/override the instrument list do this here
8583 # E.g. to add local instrument local_inst_list = {"localhost": "localhost"}
8684 local_inst_list = {}
8785 web_manager = WebScrapperManager (local_inst_list = local_inst_list )
8886 web_manager .start ()
8987
90- server = ThreadedHTTPServer (('' , PORT ), MyHandler )
88+ # As documented at https://github.com/tornadoweb/tornado/issues/2608
89+ asyncio .set_event_loop_policy (asyncio .WindowsSelectorEventLoopPolicy ())
9190
9291 try :
93- while True :
94- server .serve_forever ()
92+ application = tornado .web .Application ([
93+ (r"/" , MyHandler ),
94+ ])
95+ application .listen (PORT )
96+ tornado .ioloop .IOLoop .current ().start ()
9597 except KeyboardInterrupt :
9698 print ("Shutting down" )
9799 web_manager .stop ()
0 commit comments