1 import gtk, gtk.glade, re
 2 from urllib import urlopen, urlencode as encode
 3 
 4 # handles the http fetch
 5 def fetchMenu(where, when):
 6     where = {'Commons': 45, 'Colleges': 71}[where]
 7     postData = encode({'mMeal': 'All Meals', 'mDH': where, 'mDate': when})
 8     
 9     tagRe = re.compile(r'<B>(.+)</B>|<H4>(.+)</H4>')
10     t = ''
11     for line in urlopen('http://www.yaledining.org/menu_app.cfm', postData):
12         for tag in tagRe.finditer(line):
13             bTag, hTag = tag.groups()
14             if hTag: t += hTag + '\n'
15             if bTag: t += '\t' + bTag + '\n'
16 
17     return t
18 
19 # handles the gui
20 class Menu:
21     def __init__(self):
22         wt = self.wTree = gtk.glade.XML('menu.glade') 
23 
24         self.date = wt.get_widget('date')
25         self.dh   = wt.get_widget('diningHall')
26         self.mdst = wt.get_widget('menuDisplay').get_buffer().set_text
27 
28         self.dh.set_active(0)
29 
30         wt.signal_autoconnect({ 'getMenu' : self.getMenu, 'goAway' : gtk.main_quit })
31 
32     def getMenu(self, widget):
33         x = self.dh.get_active()
34         if x:
35             self.mdst(fetchMenu(self.dh.get_model()[x][0], self.date.get_text()))
36         else:
37             self.mdst('Need to choose a dining hall.')
38 
39 if __name__ == "__main__":
40     # I'm a real program, do something.
41     mg = Menu()
42     gtk.main()


syntax highlighted by Code2HTML, v. 0.9.1