diff cherryFxTest.py.orig @ 22:8498a7b84ff1

• Audio files
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Mon, 11 Mar 2013 13:35:29 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cherryFxTest.py.orig	Mon Mar 11 13:35:29 2013 +0000
@@ -0,0 +1,420 @@
+
+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__))
+
+#audiodir = './audio'
+#cherrypy.session['fxs'] = [cherrypy.session['f'] for cherrypy.session['f'] in os.listdir(audiodir) if os.path.isdir(os.path.join(audiodir, cherrypy.session['f']))]
+#cherrypy.session['fxs'].remove('dry')
+#print cherrypy.session['fxs']
+	
+class Root(object): pass
+
+
+class HomePage:
+	def index(self):
+		
+		return "move along, nothing to see here!"
+
+	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
+		#return '''
+		#	<p>
+		#	<a href="/test/">start test</a>
+		#	</p>'''
+		
+		#take 2 examples for each effect
+
+		cherrypy.session['audio'] = []
+		
+		# get effected files:
+		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] == 'wav':
+					cherrypy.session['audio'].append(cherrypy.session['cat'] + '/' + cherrypy.session['item'].split('.')[0])
+			
+		
+		#print TestPage.audio
+		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']
+		
+		#print cherrypy.session['audio']
+		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['page'] = int(pageId)
+		
+		
+		
+		
+		cherrypy.session['userinfobox'] = str([str(uinfo00), str(uinfo01), int(info1)]) + '\n'
+		cherrypy.session['sessionId'] = sessionId
+		#print "sid:"
+		#print TestPage.sid
+		#print sessionId
+		if cherrypy.session['sid'] != str(cherrypy.session['sessionId']):
+			return TestPage.sessionError(self)
+		else:
+			return TestPage.index2(self)
+
+		
+
+	def index2(self):
+		#try: print testvar
+		#except: pass
+	
+		cherrypy.session['page'] = 1
+		cherrypy.session['pages'] = 10
+		cherrypy.session['tests'] = len(cherrypy.session['audio']) #should be 66  #10 * cherrypy.session['pages']
+		cherrypy.session['results'] = []
+		for cherrypy.session['n'] in xrange(cherrypy.session['tests']): cherrypy.session['results'].append([None])
+
+		# create tuple to fill template
+		cherrypy.session['ts'] = []
+		for cherrypy.session['k'] in xrange(10):
+			cherrypy.session['ts'].append(0)
+			
+		return audiotempl%TestPage.makeTuple(self, 10)
+		
+	def doAttrib(self, pageId, sessionId, submitButton, attribute1=None, attribute2=None, attribute3=None, attribute4=None, attribute5=None, attribute6=None, attribute7=None, attribute8=None, attribute9=None, attribute10=None):
+		#print attribute1 + ' ' + attribute2
+		# Error check
+ 			
+		print "################################# %s" %pageId
+		#_pageId = int(pageId) - 1
+
+		if cherrypy.session['page'] != int(pageId):
+			print "################################# BACK BUTTON PRESSED #################################"
+
+		cherrypy.session['page'] = int(pageId)
+						
+		if cherrypy.session['sid'] != str(sessionId):
+			return TestPage.sessionError(self)
+				
+		#store results
+		
+		cherrypy.session['pos'] = 10 * (cherrypy.session['page'] - 1)		
+	 
+		cherrypy.session['results'][cherrypy.session['pos']] = [cherrypy.session['audio'][cherrypy.session['pos']][2].split('/')[-1], int(attribute1)]
+		cherrypy.session['results'][cherrypy.session['pos']+1] = [cherrypy.session['audio'][cherrypy.session['pos']+1][2].split('/')[-1], int(attribute2)]
+		cherrypy.session['results'][cherrypy.session['pos']+2] = [cherrypy.session['audio'][cherrypy.session['pos']+2][2].split('/')[-1], int(attribute3)]
+		cherrypy.session['results'][cherrypy.session['pos']+3] = [cherrypy.session['audio'][cherrypy.session['pos']+3][2].split('/')[-1], int(attribute4)]
+		cherrypy.session['results'][cherrypy.session['pos']+4] = [cherrypy.session['audio'][cherrypy.session['pos']+4][2].split('/')[-1], int(attribute5)]
+		cherrypy.session['results'][cherrypy.session['pos']+5] = [cherrypy.session['audio'][cherrypy.session['pos']+5][2].split('/')[-1], int(attribute6)]
+		cherrypy.session['results'][cherrypy.session['pos']+6] = [cherrypy.session['audio'][cherrypy.session['pos']+6][2].split('/')[-1], int(attribute7)]
+		cherrypy.session['results'][cherrypy.session['pos']+7] = [cherrypy.session['audio'][cherrypy.session['pos']+7][2].split('/')[-1], int(attribute8)]
+		cherrypy.session['results'][cherrypy.session['pos']+8] = [cherrypy.session['audio'][cherrypy.session['pos']+8][2].split('/')[-1], int(attribute9)]
+		cherrypy.session['results'][cherrypy.session['pos']+9] = [cherrypy.session['audio'][cherrypy.session['pos']+9][2].split('/')[-1], int(attribute10)]
+		
+		
+		resString = cherrypy.session['ip'] + '\n' + TestPage.outfileid + '\n' + cherrypy.session['userinfobox'] + '\n' + ',\n'.join(str(x) for x in cherrypy.session['results'])
+		
+		#f = open(TestPage.sid_filename, 'w')
+		#f.write(resString)
+		#f.close()
+		
+		cherrypy.session.write_data(resString,'%s.txt'%TestPage.outfileid)
+		
+		#if cherrypy.session['page'] < cherrypy.session['pages'] - 1:
+		cherrypy.session['page'] += 1
+		# create tuple to fill template
+		cherrypy.session['ts'] = []
+		cherrypy.session['npos'] = cherrypy.session['pos'] + 10
+		
+		if cherrypy.session['page'] < cherrypy.session['pages']:
+			cherrypy.session['m'] = 10
+		else:
+			cherrypy.session['m'] = 6
+		
+		for cherrypy.session['k'] in xrange(cherrypy.session['m']):
+			for cherrypy.session['i'] in xrange(4):
+				#print cherrypy.session['k']
+				#print cherrypy.session['i']
+				cherrypy.session['ts'].append(cherrypy.session['results'][cherrypy.session['npos']+cherrypy.session['k']][cherrypy.session['i']+1])	
+			
+		return audiotempl%TestPage.makeTuple(self, cherrypy.session['m'])
+
+	
+	index.exposed = True
+	doAttrib.exposed = True
+	index2.exposed = True
+	doStart.exposed = True
+
+	
+	def doAttrib2(self, pageId, sessionId, submitButton, attribute1=None, attribute2=None, attribute3=None, attribute4=None, attribute5=None, attribute6=None):
+		#print attribute1 + ' ' + attribute2
+		# Error check
+ 			
+		print "################################# %s" %pageId
+		#_pageId = int(pageId) - 1
+
+		if cherrypy.session['page'] != int(pageId):
+			print "################################# BACK BUTTON PRESSED #################################"
+
+		cherrypy.session['page'] = int(pageId)
+						
+		if cherrypy.session['sid'] != str(sessionId):
+			return TestPage.sessionError(self)
+				
+		#store results
+		
+		cherrypy.session['pos'] = 10 * (cherrypy.session['page'] - 1)		
+	 
+		cherrypy.session['results'][cherrypy.session['pos']] = [cherrypy.session['audio'][cherrypy.session['pos']][2].split('/')[-1], int(attribute1)]
+		cherrypy.session['results'][cherrypy.session['pos']+1] = [cherrypy.session['audio'][cherrypy.session['pos']+1][2].split('/')[-1], int(attribute2)]
+		cherrypy.session['results'][cherrypy.session['pos']+2] = [cherrypy.session['audio'][cherrypy.session['pos']+2][2].split('/')[-1], int(attribute3)]
+		cherrypy.session['results'][cherrypy.session['pos']+3] = [cherrypy.session['audio'][cherrypy.session['pos']+3][2].split('/')[-1], int(attribute4)]
+		cherrypy.session['results'][cherrypy.session['pos']+4] = [cherrypy.session['audio'][cherrypy.session['pos']+4][2].split('/')[-1], int(attribute5)]
+		cherrypy.session['results'][cherrypy.session['pos']+5] = [cherrypy.session['audio'][cherrypy.session['pos']+5][2].split('/')[-1], int(attribute6)]
+
+		
+		
+		resString = cherrypy.session['ip'] + '\n' + cherrypy.session['sid'] + '\n' + cherrypy.session['userinfobox'] + '\n' + ',\n'.join(str(x) for x in cherrypy.session['results'])
+		
+		#f = open(TestPage.sid_filename, 'w')
+		#f.write(resString)
+		#f.close()
+		#os.path.exists()
+		
+		cherrypy.session.write_data(resString,'%s.txt'%TestPage.outfileid)
+		
+	
+		print cherrypy.session['results']
+		#_results = []
+		
+		cherrypy.session['templ'] = ''
+		for cherrypy.session['n'] in xrange(cherrypy.session['tests']):
+			#print ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+			#print cherrypy.session['n']
+			cherrypy.session['_templ'] = endtempl2 %(cherrypy.session['results'][cherrypy.session['n']][0], cherrypy.session['results'][cherrypy.session['n']][1], cherrypy.session['results'][cherrypy.session['n']][2], cherrypy.session['results'][cherrypy.session['n']][3], cherrypy.session['results'][cherrypy.session['n']][4])
+			cherrypy.session['templ'] += cherrypy.session['_templ'] 
+
+		#TestPage.pageComplete += 1
+		try: 
+			#print 'skipping email'
+			TestPage.sendMail(self)
+		except:
+			print "WARNING: COULD NOT SEND RESULTS"
+			pass
+		cherrypy.session['sid'] = None
+		return endtempl%cherrypy.session['templ']
+		#return lastpage
+			
+			
+	index.exposed = True
+	doAttrib.exposed = True
+	doAttrib2.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 = 10 * (cherrypy.session['page'] - 1) + cherrypy.session['k']
+			#print pos
+			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>
+		<div id="video">
+		<embed id="roll-video" src="http://www.dafk.net/what/ilovethe80s.swf" width="400" height="300"></embed>
+		</div>
+		</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.daniele = 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)
\ No newline at end of file