Skip to content

Instantly share code, notes, and snippets.

@batok
Created July 7, 2009 00:49
Show Gist options
  • Save batok/141794 to your computer and use it in GitHub Desktop.
Save batok/141794 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]
if req not in ("do", "date", "exit"):
return "<html><body>Boo!</body></html>"
sc_date = datetime.now()
wx.CallAfter(self.window.WebRequest, sc_date, req)
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")
mb.Append(menu, "File")
self.Bind(wx.EVT_MENU, self.OnShowDate, id = self.SHOW_DATE)
WebServer(self).start()
self.Bind(wx.EVT_CLOSE, lambda evt: self.Destroy())
def WebRequest(self, sdate, req):
if req == "exit":
ev = wx.CommandEvent( wx.wxEVT_CLOSE_WINDOW)
self.GetEventHandler().ProcessEvent( ev )
return
if req == "date":
ev = wx.CommandEvent( wx.wxEVT_COMMAND_MENU_SELECTED, self.SHOW_DATE)
self.GetEventHandler().ProcessEvent( ev )
return
self.label.SetLabel( "web request at %s" % sdate)
def OnShowDate(self,event):
wx.MessageBox("%s" % datetime.now(), "Showing Date")
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