Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Anderson <tony_anderson@usa.net>2009-08-14 15:08:39 (GMT)
committer Tony Anderson <tony_anderson@usa.net>2009-08-14 15:08:39 (GMT)
commitcc347df7be9fa906f8f9f431257edf8c48fdb626 (patch)
treefabc298fd813218fa9052f3a6754e92e65a9f1b6
parent21e5d116394d219d62d89ac5d205e10db6d9b223 (diff)
more development
-rw-r--r--datamanager.py183
1 files changed, 129 insertions, 54 deletions
diff --git a/datamanager.py b/datamanager.py
index 212b6a9..e6daf25 100644
--- a/datamanager.py
+++ b/datamanager.py
@@ -24,6 +24,7 @@ from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.menuitem import MenuItem
import os, sys
+import subprocess
import gtk
from path import path
@@ -31,8 +32,14 @@ import urllib2
from BeautifulSoup import BeautifulSoup
ACTIVITYPATH = path(activity.get_bundle_path())
+DATAPATH = path(activity.get_activity_root()) / "data"
+WORKPATH = DATAPATH / 'work'
+KEYPATH = ACTIVITYPATH / '.ssh'
+STOREPATH = path("/library/Datastore/")
+COMMONSPATH = path("/library/Commons/")
SERIALNUMBER = '/ofw/serial-number'
+USAGETOOLBAR = 1
class DataManager(activity.Activity):
@@ -40,14 +47,22 @@ class DataManager(activity.Activity):
activity.Activity.__init__(self, handle)
print 'activity initialized'
self.set_title("Datamanager")
+ f = open('/ofw/serial-number', 'r')
+ t = f.read()
+ self.xoserial = t[:11]
+ subprocess.call("mkdir -p " + WORKPATH, shell=True)
+ #Create the usage toolbar
+ self.usageTB = UsageToolbar(self.xoserial)
#Create the standard activity toolbox
toolbox = activity.ActivityToolbox(self)
+ toolbox.add_toolbar("Usage", self.usageTB)
+ toolbox.set_current_toolbar(USAGETOOLBAR)
self.set_toolbox(toolbox)
toolbox.show()
self.viewer = Listview()
self.child.pack_start(self.viewer, True, True, 0)
treeView = self.viewer.get_treeView()
- treeView.set_model(self.viewer.create_model())
+ treeView.set_model(self.viewer.create_model(self.usageTB, self.xoserial))
self.show_all()
# based on PyGTK tutorial by jan bodnar, zetcode.com, February 2009
@@ -83,72 +98,77 @@ class Listview(gtk.VBox):
def get_treeView(self):
return self.treeView
- def create_model(self):
+ def create_model(self, tb, xoserial):
global online
- store = gtk.ListStore(object, str, str, str)
+ #object is object_id, str = title, str = mime_type or activity,
+ #str is color of col 1, str is source color of col 0
+ store = gtk.ListStore(object, str, str, str, str)
#let's display objects from the schoolserver
- src = '/ofw/serial-number'
- print 'open configf', src
- configf = open(src, "r")
- xoserial = configf.read()
- configf.close()
- print 'xoserial:', xoserial[:11]
#temp for testing
- if len(xoserial)>0:
- url = "http://schoolserver/ds-restore/" + xoserial[:11] + "/datastore-latest"
- print 'url', url
- try:
- response = urllib2.urlopen(url)
- except:
- print 'schoolserver not found'
- response = None
- if response:
- soup = BeautifulSoup(response)
- self.online = True
- else:
- print 'schoolserver not found at', url
- else:
- print 'no xoserial'
+ url = "http://schoolserver/Commons/"
+ response = urllib2.urlopen(url)
+ if response:
+ self.online = True
+ self.addentries(store, response, "Blue", xoserial)
+ url = "http://schoolserver/Datastore/" + xoserial
+ response = urllib2.urlopen(url)
+ if response:
+ print 'response'
+ self.online = True
+ self.addentries(store, response, "Green", xoserial)
if self.online:
- print 'soup=', soup.prettify()
- entries = soup.findAll("li")
- print len(entries)
- rnge = len(entries)
- print 'entries:', rnge
- if rnge > 10:
- rnge = 10
- for i in range(rnge):
- 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()
+ print 'online'
+ else:
+ tb.item2.remove(tb.fuelguage2)
+ tb.lbl2.set_text("not connected")
#objects from the local datastore
results, count = datastore.find(dict())
print 'number of datastore items', count
- color = 0
- firsttime = True
- colors = ["red", "yellow", "blue", "green"]
for f in results:
obj = datastore.get(f.object_id)
- if firsttime:
- firsttime = False
- print 'type obj', type(obj)
- store.append([obj, obj.metadata['title'], obj.metadata['mime_type'], colors[color] ])
f.destroy()
- color += 1
- if color > 3:
- color = 0
- #ignore for the moment
+ if len(obj.get_file_path()) > 0:
+ color1 = "Red"
+ color2 = "Green"
+ else:
+ color1 = "White"
+ color2 = "Green"
+ itm = obj.metadata['mime_type']
+ if len(itm) <= 0:
+ itm = obj.metadata['activity']
+ store.append([obj, obj.metadata['title'], obj.metadata['mime_type'], color1, color2 ])
print 'return store'
return store
+ def addentries(self, store, response, color, xoserial):
+ soup = BeautifulSoup(response)
+ entry_candidates = soup.findAll('a')
+ for entry in entry_candidates:
+ t = str(entry)
+ pos = t.find('metadata')
+ if pos > 0:
+ pos2 = t.find('href=')
+ print color, t[pos2+6:pos+8]
+ obj = t[pos2+6:pos-1]
+ fn = t[pos2+6:pos+8]
+ if color == "green":
+ pth = COMMONSPATH / fn
+ else:
+ pth = STOREPATH / xoserial / fn
+ cmd = "sftp " + xoserial + "@schoolserver: " + pth
+ print 'get metadata:', cmd
+ subprocess.call(cmd, shell=True, cwd=WORKPATH)
+ pth = WORKPATH / fn
+ f = open(pth, 'r')
+ t = f.read()
+ f.close()
+ metadata = dict(t)
+ title = metadata['title']
+ activity = metadata['activity']
+ mime_type = metadata['mime_type']
+ store.append([obj, title, mime_type, color, color])
+ print 'new row', store[len(store) - 1]
+
def create_columns(self, treeView):
rendererText = gtk.CellRendererText()
@@ -188,3 +208,58 @@ class Listview(gtk.VBox):
except:
tstr = tstr + k + ':' + "" + '\n'
self.label.set_text(tstr)
+
+class UsageToolbar(gtk.Toolbar):
+
+ def __init__(self, xoserial):
+
+ gtk.Toolbar.__init__(self)
+
+ self.lbl1 = gtk.Label("XO")
+ self.lbl1.show()
+ self.item0 = gtk.ToolItem()
+ self.item0.add(self.lbl1)
+ self.insert(self.item0, -1)
+
+ self.fuelguage1 = gtk.ProgressBar(adjustment=None)
+ style = self.fuelguage1.get_style().copy()
+ style.bg[gtk.STATE_NORMAL] = gtk.gdk.color_parse('Blue')
+ style.bg[gtk.STATE_PRELIGHT] = gtk.gdk.color_parse('Red')
+ self.fuelguage1.set_style(style)
+ cmd = 'df -h /home/olpc/.sugar/default/datastore'
+ #need way to return stdout to get rslt
+ #subprocess.call(cmd, shell=True)
+ rslt = 0.69
+ self.fuelguage1.set_fraction(rslt)
+ self.fuelguage1.set_orientation(gtk.PROGRESS_LEFT_TO_RIGHT)
+ self.fuelguage1.show()
+ self.item1 = gtk.ToolItem()
+ self.item1.add(self.fuelguage1)
+ self.insert(self.item1, -1)
+
+ self.spacer = gtk.ToolItem()
+ self.spacer.set_expand(True)
+ self.insert(self.spacer, -1)
+
+ self.lbl2 = gtk.Label("schoolserver")
+ self.lbl2.show()
+ self.item3 = gtk.ToolItem()
+ self.item3.add(self.lbl2)
+ self.insert(self.item3, -1)
+
+ self.fuelguage2 = gtk.ProgressBar(adjustment=None)
+ style = self.fuelguage2.get_style().copy()
+ style.bg[gtk.STATE_NORMAL] = gtk.gdk.color_parse('Green')
+ style.bg[gtk.STATE_PRELIGHT] = gtk.gdk.color_parse('Red')
+ self.fuelguage2.set_style(style)
+ #need a way to know if schoolserver not online
+ #need a way to return rslt from stdout
+ cmd = "ssh -i " + KEYPATH + xoserial + "@schoolserver "
+ cmd = cmd + "du -h /library/datastore/" + xoserial
+ #subprocess.call(cmd, shell=True)
+ rslt = 0.01
+ self.fuelguage2.set_fraction(rslt)
+ self.fuelguage2.set_orientation(gtk.PROGRESS_LEFT_TO_RIGHT)
+ self.item2 = gtk.ToolItem()
+ self.item2.add(self.fuelguage2)
+ self.insert(self.item2, -1)