Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python2.5
- import sys
- import getopt
- from getpass import getpass
- from ZSI import ServiceProxy
- import csv
- import xml.dom.minidom
- from time import time
- import pickle
- ###################################################
- # set default values
- port=8080
- host="drop2.lms.gatech.edu"
- proto="http"
- ####################################################
- # Handle command line options
- def usage(rcode=1):
- print "usage: ", sys.argv[0], " [--file,-f=<file> --host=<hostname> --port=,-p<port> --help,-h --ssl,-s]"
- sys.exit(rcode)
- try:
- optlist, args = getopt.getopt(sys.argv[1:], "f:sh:p:", ['help', 'port=', 'host=', 'ssl', 'file='])
- except getopt.GetoptError:
- usage()
- for opt, arg in optlist:
- if opt in ["-h", "--help"]:
- usage(0)
- elif opt in ["--host"]:
- host=arg
- continue
- elif opt in ["-p", "--port"]:
- port=int(arg)
- continue
- elif opt in ["-s", "--ssl"]:
- proto='https'
- continue
- usage(0)
- elif opt in ["--host"]:
- host=arg
- continue
- elif opt in ["-p", "--port"]:
- port=int(arg)
- continue
- elif opt in ["-s", "--ssl"]:
- proto='https'
- continue
- elif opt in ["-f", "--file"]:
- file=arg
- continue
- ############################################
- # Log into the web service
- login_wsdl = proto + '://' + host + ':' + str(port) + '/sakai-axis/SakaiLogin.jws?wsdl'
- login = ServiceProxy.ServiceProxy(login_wsdl)
- user=raw_input("username: ")
- password=getpass("password: ")
- session=login.login(id=user, pw=password)['loginReturn']
- ############################################
- # XML Helper Methods
- def getText(nodelist):
- rc = ""
- for node in nodelist:
- if node.nodeType == node.TEXT_NODE:
- rc = rc + node.data
- return rc
- ############################################
- # Scripted actions below
- def save(filename):
- save_data = open(filename, 'wb')
- pickle.dump(sites, save_data, -1)
- save_data.close()
- file='/tmp/'+host+'.data.pkl'
- script_wsdl = proto + '://' + host + ':' + str(port) + '/sakai-axis/SakaiScript.jws?wsdl'
- script = ServiceProxy.ServiceProxy(script_wsdl)
- gtscript_wsdl = proto + '://' + host + ':' + str(port) + '/sakai-axis/GaTechScript.jws?wsdl'
- gtscript = ServiceProxy.ServiceProxy(gtscript_wsdl)
- sites = []
- try:
- pkl_file = open(file, 'rb')
- sites = pickle.load(pkl_file)
- pkl_file.close()
- except:
- allSites = gtscript.getAllSites(sessionid=session)
- print(allSites["getAllSitesReturn"])
- dom = xml.dom.minidom.parseString(allSites["getAllSitesReturn"])
- items = dom.getElementsByTagName("item")
- for item in items:
- siteId = getText(item.getElementsByTagName("siteId")[0].childNodes)
- type = getText(item.getElementsByTagName("siteType")[0].childNodes)
- term = getText(item.getElementsByTagName("siteTerm")[0].childNodes)
- sites.append((siteId, type, term))
- save(file)
- last_saved = time()
- count = 0
- while len(sites)>0:
- mysite = sites.pop()
- siteId = mysite[0]
- type = mysite[1]
- term = mysite[2]
- if (type == "course" and term == "FALL 2008"):
- try:
- #print "Removing Search tool from", mysite[0], ":\t",
- #result = script.removePageFromSite(sessionid=session, siteid=siteId, pagetitle=u'Search')['removePageFromSiteReturn']
- #print result
- print "Adding Sitestats tool to", mysite[0], ":\t",
- result = script.removePageFromSite(sessionid=session, siteid=siteId, pagetitle=u'Site Stats')['removePageFromSiteReturn']
- result += " " + script.addNewPageToSite(sessionid=session, siteid=siteId, pagetitle="Site Stats", pagelayout=0)['addNewPageToSiteReturn']
- result += " " + script.addNewToolToPage(sessionid=session, siteid=siteId, pagetitle="Site Stats", tooltitle="Site Stats", toolid="sakai.sitestats", layouthints="")['addNewToolToPageReturn']
- print result
- except:
- print "caught exception retrying"
- sites.append(mysite)
- if time() - last_saved > 60:
- print "A minute has passed, saving progress"
- save(file)
- print "Avg speed", count/(time()-last_saved), "records per second"
- last_saved = time()
- count = 0
- count += 1
- save(file)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement