I would like to pass my database connection to the EchoHandler class, however I can't figure out how to do that or access the EchoHandler class at all.
class EchoHandler(SocketServer.StreamRequestHandler): def handle(self): print self.client_address, 'connected' if __name__ == '__main__': conn = MySQLdb.connect (host = "10.0.0.5", user = "user", passwd = "pass", db = "database") SocketServer.ForkingTCPServer.allow_reuse_address = 1 server = SocketServer.ForkingTCPServer(('10.0.0.6', 4242), EchoHandler) print "Server listening on localhost:4242..." try: server.allow_reuse_address server.serve_forever() except KeyboardInterrupt: print "\nbailing..."
Unfortunately, there really isn't an easy way to access the handlers directly from outside the server.
You have two options to get the information to the EchoHandler instances:
server.conn = conn
before calling server_forever()
) and then access that property in EchoHandler.handler through self.server.conn
.finish_request
and assign the value there (you would have to pass it to the constructor of EchoHandler and overwrite EchoHandler.__init__). That is a far messier solution and it pretty much requires you to store the connection on the server anyway.My optionon of your best bet:
class EchoHandler(SocketServer.StreamRequestHandler): def handle(self): # I have no idea why you would print this but this is an example print( self.server.conn ); print self.client_address, 'connected' if __name__ == '__main__': SocketServer.ForkingTCPServer.allow_reuse_address = 1 server = SocketServer.ForkingTCPServer(('10.0.0.6', 4242), EchoHandler) server.conn = MySQLdb.connect (host = "10.0.0.5", user = "user", passwd = "pass", db = "database") # continue as normal
Mark T has the following to say on the python list archive
In the handler class, self.server refers to the server object, so subclass the server and override init to take any additional server parameters and store them as instance variables.
import SocketServer class MyServer(SocketServer.ThreadingTCPServer): def __init__(self, server_address, RequestHandlerClass, arg1, arg2): SocketServer.ThreadingTCPServer.__init__(self, server_address, RequestHandlerClass) self.arg1 = arg1 self.arg2 = arg2 class MyHandler(SocketServer.StreamRequestHandler): def handle(self): print self.server.arg1 print self.server.arg2
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With