Skip to content

Instantly share code, notes, and snippets.

@batok
Created July 7, 2009 03:56
Show Gist options
  • Save batok/141877 to your computer and use it in GitHub Desktop.
Save batok/141877 to your computer and use it in GitHub Desktop.
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
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)
s.serve_forever()
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)
WebServer(self).start()
self.Bind(wx.EVT_CLOSE, lambda evt: 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