Mercurial > hg > env-test-daniele
view cherryFxTest.py @ 23:c74245e41387
• Converted audio files to MP3
• Added disclaimer on welcome page
• Changed code to handle mp3 files
author | Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk> |
---|---|
date | Mon, 25 Mar 2013 13:47:06 +0000 |
parents | e4921590577e |
children |
line wrap: on
line source
import cherrypy, os, random, smtplib, string from cherrypy.lib.static import serve_file from templates import * from DirectorySession import DirectorySession from ServerWrapper import ServerWrapper as CherryPyServer from ServerWrapper import Config as ServerConfig from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart from email.Utils import COMMASPACE, formatdate from email import Encoders from pprint import pprint PATH = os.path.abspath(os.path.dirname(__file__)) class Root(object): pass class HomePage: def index(self): return "This is the home page..." index.exposed = True class TestPage: def getAASPFiles(self): audioDir = './AASPAudio' cherrypy.session['cats'] = [cherrypy.session['f'] for cherrypy.session['f'] in os.listdir(audioDir) if os.path.isdir(os.path.join(audioDir,cherrypy.session['f']))] #print cherrypy.session['cats'] def index(self): TestPage.getAASPFiles(self) cherrypy.session['sid'] = None cherrypy.session['sid_filename'] = None if cherrypy.request.headers.has_key("X-Forwarded-For"): cherrypy.session['ip'] = cherrypy.request.headers["X-Forwarded-For"] elif cherrypy.request.headers.has_key("Remote-Addr"): cherrypy.session['ip'] = cherrypy.request.headers["Remote-Addr"] else : cherrypy.session['ip'] = None cherrypy.session['test'] = None cherrypy.session['results'] = None cherrypy.session['tests'] = None cherrypy.session['test_nr'] = None cherrypy.session['audio'] = None cherrypy.session['page'] = 0 cherrypy.session['pages'] = 6 cherrypy.session['userinfobox'] = None cherrypy.session['ts'] = None cherrypy.session['audio'] = [] cherrypy.session['audio'] = [] for cherrypy.session['cat'] in cherrypy.session['cats']: cherrypy.session['dirlist'] = os.listdir('./AASPAudio/%s/'%cherrypy.session['cat']) for cherrypy.session['item'] in cherrypy.session['dirlist']: if cherrypy.session['item'].split('.')[-1] == 'mp3': cherrypy.session['audio'].append(cherrypy.session['cat'] + '/' + cherrypy.session['item'].split('.')[0]) random.shuffle(cherrypy.session['audio']) #print "NUMBER OF TESTS:" #print len(cherrypy.session['audio']) cherrypy.session['sid'] = cherrypy.session.get_session_path().split('/')[1] #print cherrypy.session['sid'] #pprint(cherrypy.session['audio']) TestPage.outfileid = '%s' %cherrypy.session['sid'] ida = 0 while os.path.exists('./sessions/%s/%s.txt' %(cherrypy.session['sid'], TestPage.outfileid)): TestPage.outfileid += '_%s' %ida ida += 1 return welcome_templ %cherrypy.session['sid'] def doStart(self, pageId, sessionId, startButton, uinfo00=None, uinfo01=None, info1=None): if cherrypy.session['page'] != int(pageId): print "################################# BACK BUTTON PRESSED #################################" if cherrypy.session['sid'] != str(sessionId): return TestPage.sessionError(self) cherrypy.session['userinfobox'] = str([str(uinfo00), str(uinfo01), int(info1)]) + '\n' cherrypy.session['sessionId'] = sessionId if cherrypy.session['sid'] != str(cherrypy.session['sessionId']): return TestPage.sessionError(self) else: return TestPage.index2(self) def index2(self): cherrypy.session['page'] = 1 cherrypy.session['pages'] = 100 cherrypy.session['tests'] = len(cherrypy.session['audio']) cherrypy.session['results'] = [] for cherrypy.session['n'] in xrange(cherrypy.session['tests']): cherrypy.session['results'].append([None]) cherrypy.session['ts'] = [] for cherrypy.session['k'] in xrange(1): cherrypy.session['ts'].append(0) print "################################# %s" %str(cherrypy.session['page']) return audiotempl%TestPage.makeTuple(self, 1) def doAttrib(self, pageId, sessionId, submitButton, attribute1=None): print "################################# %s" %pageId if cherrypy.session['page'] != int(pageId): #return audiotempl%TestPage.makeTuple(self, cherrypy.session['m']) print "################################# BACK BUTTON PRESSED #################################" if cherrypy.session['sid'] != str(sessionId): return TestPage.sessionError(self) cherrypy.session['pos'] = (cherrypy.session['page'] - 1) cherrypy.session['results'][cherrypy.session['pos']] = [cherrypy.session['audio'][cherrypy.session['pos']].split('/')[-1], int(attribute1)] resString = cherrypy.session['ip'] + '\n' + TestPage.outfileid + '\n' + cherrypy.session['userinfobox'] + '\n' + ',\n'.join(str(x) for x in cherrypy.session['results']) print resString cherrypy.session.write_data(resString,'%s.txt'%TestPage.outfileid) cherrypy.session['page'] += 1 cherrypy.session['ts'] = [] cherrypy.session['npos'] = cherrypy.session['pos'] + 1 cherrypy.session['m'] = 1 for cherrypy.session['k'] in xrange(cherrypy.session['m']): cherrypy.session['ts'].append(0) #cherrypy.session['ts'].append(cherrypy.session['results'][cherrypy.session['npos']+cherrypy.session['k']]) if cherrypy.session['page'] != 100: return audiotempl%TestPage.makeTuple(self, cherrypy.session['m']) else: return endtempl%resString index.exposed = True doAttrib.exposed = True index2.exposed = True doStart.exposed = True def makeTuple(TestPage, nr): cherrypy.session['nr'] = nr cherrypy.session['ts'].append(cherrypy.session['page']) cherrypy.session['ts'].append(cherrypy.session['pages']) for cherrypy.session['k'] in xrange(cherrypy.session['nr']): pos = (cherrypy.session['page'] - 1) + cherrypy.session['k'] for n in xrange(3): cherrypy.session['ts'].append(cherrypy.session['audio'][pos]) cherrypy.session['ts'].append(cherrypy.session['page']) cherrypy.session['ts'].append(cherrypy.session['sid']) cherrypy.session['ts'] = tuple(cherrypy.session['ts']) print cherrypy.session['ts'] return cherrypy.session['ts'] def sessionError(TestPage): print "################################# SESSION ERROR #################################" cherrypy.session['resString'] = cherrypy.session['ip'] + '\n' + str(cherrypy.session['sid']) + '\n' + cherrypy.session['userinfobox'] + '\n' + ',\n'.join(str(x) for x in cherrypy.session['results']) cherrypy.session['resString'] += '\n\nERROR: SESSION CONFUSION' #f = open(TestPage.sid_filename, 'w') #f.write(resString) #f.close() cherrypy.session.write_data(cherrypy.session['resString'],'%s.txt'%TestPage.outfileid) return ''' <p> <a href="/test/">oh noes! there is something wrong with your session, please start again or go for a coffee!</a> </p>''' def sendMail(TestPage): cherrypy.session['file'] = './sessions/%s/%s.txt'%(cherrypy.session['sid'], TestPage.outfileid) # username = 'eecsqmul@gmail.com' # password = 'perceptual' # fro = 'FX-Test <eecsqmul@gmail.com>' # to = ['thomas.wilmering@eecs.qmul.ac.uk', 'gyorgy.fazekas@eecs.qmul.ac.uk'] # msg = MIMEMultipart() # msg['From'] = fro # msg['To'] = COMMASPACE.join(to) # msg['Date'] = formatdate(localtime=True) # msg['Subject'] = 'fx perceptual listening test' # msg.attach( MIMEText('Attached are new results from the listening test.')) # part = MIMEBase('application', "octet-stream") # part.set_payload( open(cherrypy.session['file'],"rb").read() ) # Encoders.encode_base64(part) # part.add_header('Content-Disposition', 'attachment; filename="%s"' % cherrypy.session['file']) # msg.attach(part) # server = smtplib.SMTP('smtp.gmail.com:587') # server.starttls() # server.login(username,password) # server.sendmail(fro, to, msg.as_string() ) # server.close() class OutPage: def index(self): return ''' <html> <body> </body> </html> ''' index.exposed = True # # Of course we can also mount request handler objects right here! # root = HomePage() # root.test = TestPage() # root.out = OutPage() # #root = TestPage() # # tutconf = os.path.join(os.path.dirname(__file__), 'conf.conf') def startFxTest(args): # check local switch if args.count('-local') : local = True; args.remove('-local'); print 'Startup: Local mode.' conf = os.path.join(os.path.dirname(__file__), 'local.conf') else: conf = os.path.join(os.path.dirname(__file__), 'server.conf') local = False # check string encoding print "Startup: String encoding = '%s'" %(str(sys.getdefaultencoding())) # check ip switch ip = '' if args.count('-ip') : try : # here we just see if it's numeric, parsing is done by the server wrapper if args[args.index('-ip')+1].replace('.','').replace(':','').isdigit() : ip = args[args.index('-ip')+1] else : print "Startup: Invalid service IP address. Use format: sawa.py -ip 127.0.0.1:8080" os._exit(-1) except : print "Startup: Invalid service IP address. (Insufficient arguments.) Use format: cherryFxTest.py -ip 127.0.0.1:8080" os._exit(-1) args.remove(args[args.index('-ip')+1]); args.remove('-ip') # old command: # cherrypy.quickstart(root, config=conf) # Of course we can also mount request handler objects right here! root = HomePage() root.test = TestPage() #root.out = OutPage() #root = TestPage() server = CherryPyServer(ServerConfig(root=root,local=local,conf=conf)) # if local : # server = CherryPyServer(ServerConfig(root=root,local=local,conf=conf)) # else : # server = CherryPyServer(ServerConfig(root=False,local=local,conf=conf)) server.mount(root,path_name='') server.quickstart(ip) if __name__ == '__main__': # CherryPy always starts with app.root when trying to map request URIs # to objects, so we need to mount a request handler root. A request # to '/' will be mapped to HelloWorld().index(). # cherrypy.quickstart(root, config=tutconf) import sys startFxTest(sys.argv[1:]) else: # This branch is for the test suite; you can ignore it. cherrypy.tree.mount(root, config=tutconf)