#!/usr/bin/python # ZetCode PyGTK tutorial # # This example shows a TreeView widget # in a list view mode # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import sys, os import gtk import objectfetch import urllib2 from BeautifulSoup import BeautifulSoup from xml.dom.minidom import parse, parseString from sugar.activity import activity from sugar.datastore import datastore from path import path ACTIVITYPATH = path(activity.get_bundle_path()) global online online = False class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(350, 250) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("DataManager") vbox = gtk.VBox(False, 8) sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) vbox.pack_start(sw, True, True, 0) store = self.create_model() treeView = gtk.TreeView(store) treeView.connect("row-activated", self.on_activated) treeView.set_rules_hint(True) sw.add(treeView) self.create_columns(treeView) self.statusbar = gtk.Statusbar() vbox.pack_start(self.statusbar, False, False, 0) self.add(vbox) self.show_all() def create_model(self): global online store = gtk.ListStore(str, str, str) #let's display objects from the schoolserver pth = ACTIVITYPATH / 'xoconfig' configf = open(pth, "r") config = configf.read() configf.close() pos = config.find('[Server]') if pos < 0: print 'schoolserver not found' xoserial = None store.append(["schoolserver not found", "",""]) else: pos = pos + 8 print 'config', config[pos:] pos1 = pos + config[pos:].find("= ") + 2 pos2 = pos + config[pos:].find("@") xoserial = config[pos1:pos2] print 'xoserial', xoserial, config[pos1:pos2+1] #temp for testing xoserial = 'SHC84201F3B' if xoserial: url = "http://schoolserver/ds-restore/" + xoserial + "/datastore-latest" print 'url', url try: response = urllib2.urlopen(url) except: print 'schoolserver not found' response = None if response: soup = BeautifulSoup(response) online = True else: print 'schoolserver not found at', url if online: print 'soup=', soup.prettify() entries = soup.findAll("li") print len(entries) for i in range(10): print len(entries[i].contents), entries[i].contents colx = str(entries[i].contents[0]) pos1 = colx.find('<') pos2 = colx.find('>') col0 = colx[pos1:pos2] col1 = 'col1' + colx[pos2+1:] temp = entries[i].contents[1].split(' ') col2 = 'col2:' + temp[0] col3 = 'col3:' + temp[1] store.append([col1, col2, col3]) #print 'sample', entries[0].toprettyxml() #objects from the local datastore results, count = datastore.find(dict()) print 'number of datastore items', count for f in results: obj = datastore.get(f.object_id) f.destroy() store.append([obj.get_file_path(), obj.metadata['title'], obj.metadata['mime_type']]) #ignore for the moment return store def create_columns(self, treeView): rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("Title", rendererText, text=1) column.set_sort_column_id(0) treeView.append_column(column) rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("Mime_type", rendererText, text=2) column.set_sort_column_id(1) treeView.append_column(column) def on_activated(self, widget, row, col): model = widget.get_model() text = model[row][0] + ", " + model[row][1] + ", " + model[row][2] self.statusbar.push(0, text) PyApp() gtk.main()