Created
July 11, 2009 19:00
-
-
Save batok/145358 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import wx | |
import socket | |
from wsgiref.simple_server import make_server | |
from threading import Thread | |
from datetime import datetime | |
class WebServer(Thread): | |
def __init__(self, window): | |
Thread.__init__(self) | |
self.window = window | |
self.setDaemon(1) | |
def doit(self, environ, start_response): | |
status = "200 OK" | |
headers = [('Content-type', 'text/html')] | |
start_response( status, headers ) | |
req = environ.get("PATH_INFO","").split("/")[-1] | |
query_string = environ.get("QUERY_STRING", None) | |
if req not in ("do", "menu", "exit"): | |
return "<html><body>Boo!</body></html>" | |
sc_date = datetime.now() | |
wx.CallAfter(self.window.WebRequest, sc_date, req, query_string) | |
return "<html><body>Done at %s</body></html>" % sc_date | |
def run(self): | |
s = make_server("", 8000, self.doit) | |
self.server = s | |
s.serve_forever() | |
def stop(self): | |
self.server.shutdown() | |
self.join() | |
class Frame(wx.Frame): | |
def __init__(self): | |
wx.Frame.__init__(self,None,-1, "I have a wsgi server", size = ( 400,100)) | |
self.panel = wx.Panel(self, -1) | |
self.label = wx.StaticText(self.panel, -1,"") | |
mb = wx.MenuBar() | |
self.SetMenuBar(mb) | |
menu = wx.Menu() | |
self.SHOW_DATE = wx.NewId() | |
menu.Append(self.SHOW_DATE, "Show Date") | |
self.SHOW_IP_ADDRESS = wx.NewId() | |
menu.Append(self.SHOW_IP_ADDRESS, "Show Ip Address") | |
mb.Append(menu, "File") | |
self.Bind(wx.EVT_MENU, self.OnShowDate, id = self.SHOW_DATE) | |
self.Bind(wx.EVT_MENU, self.OnShowIpAddress, id = self.SHOW_IP_ADDRESS) | |
self.webserver = WebServer(self) | |
self.webserver.start() | |
self.Bind(wx.EVT_CLOSE, self.OnClose) | |
def OnClose(self,event): | |
self.webserver.stop() | |
self.Destroy() | |
def WebRequest(self, sdate, req, qs = None): | |
if req == "exit": | |
ev = wx.CommandEvent( wx.wxEVT_CLOSE_WINDOW) | |
self.GetEventHandler().ProcessEvent( ev ) | |
return | |
if req == "menu": | |
if qs: | |
try: | |
menu_id = qs.split("&")[0].split("=")[0].upper() | |
ev = wx.CommandEvent( wx.wxEVT_COMMAND_MENU_SELECTED, getattr(self, menu_id)) | |
self.GetEventHandler().ProcessEvent( ev ) | |
except: | |
pass | |
return | |
self.label.SetLabel( "web request at %s" % sdate) | |
def OnShowDate(self,event): | |
wx.MessageBox("%s" % datetime.now(), "Showing Date") | |
return | |
def OnShowIpAddress(self,event): | |
wx.MessageBox("%s" % socket.gethostbyname(socket.gethostname()), "Ip address") | |
return | |
if __name__ == "__main__": | |
app = wx.PySimpleApp() | |
Frame().Show() | |
app.MainLoop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment