view cherry2 copy 2.py @ 0:032bc65ebafc

added core components
author George Fazekas <gyorgy.fazekas@eecs.qmul.ac.uk>
date Wed, 06 Mar 2013 15:45:48 +0000
parents
children
line wrap: on
line source
"""
Tutorial - Multiple objects

This tutorial shows you how to create a site structure through multiple
possibly nested request handler objects.
"""

import cherrypy, os, random
from cherrypy.lib.static import serve_file
from templates import *

from DirectorySession import DirectorySession

#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 "empty"
		

	index.exposed = True

class TestPage:

	def getFiles(self):
		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']
	
	def index(self):
		TestPage.getFiles(self)
		cherrypy.session['sid'] = None
		cherrypy.session['sid_filename'] = None

		cherrypy.session['test'] = None
		cherrypy.session['results'] = None
		cherrypy.session['tests'] = None
		cherrypy.session['test_nr'] = None
		cherrypy.session['audio_pairs'] = None
		cherrypy.session['page'] = None
		cherrypy.session['pages'] = 4
		cherrypy.session['userinfobox'] = None
		#return '''
		#	<p>
		#	<a href="/test/">start test</a>
		#	</p>'''
		cherrypy.session['sid'] = cherrypy.session.get_session_path().split('/')[1]
		print cherrypy.session['sid']
		
		
		
		return welcome_templ %cherrypy.session['sid']
		

	
	def doStart(self, sessionId, startButton, userinfobox=None):
		cherrypy.session['userinfobox'] = userinfobox
		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
		#testvar = "00000000000000000000000000000000000000000000000000000000000000000000000000"
		#TestPage.sid = TestPage.getSid(self)
		
		#if TestPage.sid != TestPage.sidstart:
		#	return TestPage.sessionError(self)
		
		
		#TestPage.sid_filename = 'results/%s.txt'%TestPage.sid
		#TestPage.sid_userinfofilename = 'results/%s_info.txt'%TestPage.sid
		#print TestPage.sid_filename
		
		#cherrypy.session['userinfo'] = userinfo
		
		
		#cherrypy.session.write_data(userinfo+'\n','results.txt')
		
		#f = open(TestPage.sid_userinfofilename, 'w')
		#f.write('%s\n%s'%(TestPage.sid, str(userinfo)))
		#f.close()
		
		
	#	TestPage.pageComplete = []
	#	for n in xrange(TestPage.pages): 
	#		TestPage.pageComplete.append(0)
		
		
		#take 2 examples for each effect

		cherrypy.session['audio_pairs'] = []
		
		# get effected files:
			
		for cherrypy.session['fx'] in cherrypy.session['fxs']:
			cherrypy.session['dirlist'] = os.listdir('./audio/%s/'%cherrypy.session['fx'])
			cherrypy.session['filelist'] = []
			for cherrypy.session['item'] in cherrypy.session['dirlist']:
				if cherrypy.session['item'].split('.')[-1] == 'mp3':
					cherrypy.session['filelist'].append(cherrypy.session['item'].split('.')[0])
			
			# create audio pairs for this fx
			
			cherrypy.session['first'] = cherrypy.session['second'] = random.choice(cherrypy.session['filelist'])
			while cherrypy.session['first'] == cherrypy.session['second']:
				cherrypy.session['second'] = random.choice(cherrypy.session['filelist'])

			cherrypy.session['dry1'] = 'dry/%s' %cherrypy.session['first'].split('_%s'%cherrypy.session['fx'])[0]
			cherrypy.session['fx1'] = '%s/%s' %(cherrypy.session['first'], cherrypy.session['fx'])
			cherrypy.session['dry2'] = 'dry/%s' %cherrypy.session['second'].split('_%s'%cherrypy.session['fx'])[0]
			cherrypy.session['fx2'] = '%s/%s' %(cherrypy.session['fx'], cherrypy.session['second'])
			cherrypy.session['audio_pairs'].append([cherrypy.session['fx'], cherrypy.session['dry1'], cherrypy.session['fx1']])
			cherrypy.session['audio_pairs'].append([cherrypy.session['fx'], cherrypy.session['dry2'], cherrypy.session['fx2']])
		
		#print TestPage.audio_pairs
		random.shuffle(cherrypy.session['audio_pairs'])

		cherrypy.session['page'] = 1
		cherrypy.session['pages'] = 4
		cherrypy.session['tests'] = 10 * cherrypy.session['pages']
		cherrypy.session['results'] = []
		for cherrypy.session['n'] in xrange(cherrypy.session['tests']): cherrypy.session['results'].append([None,0,0,0,0])


		# create tuple to fill template
		cherrypy.session['ts'] = []
		for cherrypy.session['k'] in xrange(40):
			cherrypy.session['ts'].append(0)
		cherrypy.session['ts'].append(cherrypy.session['page'])
		cherrypy.session['ts'].append(cherrypy.session['pages'])
		for k in xrange(10):
			pos = 10 * (cherrypy.session['page'] - 1) + k
			#print pos
			for n in xrange(3): cherrypy.session['ts'].append(cherrypy.session['audio_pairs'][pos][1])
			for n in xrange(3): cherrypy.session['ts'].append(cherrypy.session['audio_pairs'][pos][2])		
		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 audiotempl %cherrypy.session['ts']
	

			
		
		
		

	def doAttrib(self, pageId, sessionId, submitButton, attribute1_1=None, attribute1_2=None, attribute1_3=None, attribute1_4=None, attribute2_1=None, attribute2_2=None, attribute2_3=None, attribute2_4=None, attribute3_1=None, attribute3_2=None, attribute3_3=None, attribute3_4=None, attribute4_1=None, attribute4_2=None, attribute4_3=None, attribute4_4=None, attribute5_1=None, attribute5_2=None, attribute5_3=None, attribute5_4=None, attribute6_1=None, attribute6_2=None, attribute6_3=None, attribute6_4=None, attribute7_1=None, attribute7_2=None, attribute7_3=None, attribute7_4=None, attribute8_1=None, attribute8_2=None, attribute8_3=None, attribute8_4=None, attribute9_1=None, attribute9_2=None, attribute9_3=None, attribute9_4=None, attribute10_1=None, attribute10_2=None, attribute10_3=None, attribute10_4=None):
		#print attribute1 + ' ' + attribute2
		# Error check
 		
		
		

	
		print "################################# %s" %pageId
		#_pageId = int(pageId) - 1

		if cherrypy.session['page'] != int(pageId):
			print "################################# BACK BUTTON PRESSED #################################"
			#resString = ',\n'.join(str(x) for x in TestPage.results)
			#resString += '\n\nERROR: BACK BUTTON PRESSED'
			#f = open(TestPage.sid_filename, 'w')
			#f.write(resString)
			#f.close()
			#return '''
			#	<p>
			#	<a href="/test/">nooo! you pressed the back button, please start again!</a>
			#	</p>'''
			
			# instead: overwrite previously submitted data. WILL THE OLD VALUES BE SUBMITTED AGAIN IN ALL BROWSERS?
		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_pairs'][cherrypy.session['pos']][2].split('/')[-1], int(attribute1_1), int(attribute1_2), int(attribute1_3), int(attribute1_4)]
		cherrypy.session['results'][cherrypy.session['pos']+1] = [cherrypy.session['audio_pairs'][cherrypy.session['pos']+1][2].split('/')[-1], int(attribute2_1), int(attribute2_2), int(attribute2_3), int(attribute2_4)]
		cherrypy.session['results'][cherrypy.session['pos']+2] = [cherrypy.session['audio_pairs'][cherrypy.session['pos']+2][2].split('/')[-1], int(attribute3_1), int(attribute3_2), int(attribute3_3), int(attribute3_4)]
		cherrypy.session['results'][cherrypy.session['pos']+3] = [cherrypy.session['audio_pairs'][cherrypy.session['pos']+3][2].split('/')[-1], int(attribute4_1), int(attribute4_2), int(attribute4_3), int(attribute4_4)]
		cherrypy.session['results'][cherrypy.session['pos']+4] = [cherrypy.session['audio_pairs'][cherrypy.session['pos']+4][2].split('/')[-1], int(attribute5_1), int(attribute5_2), int(attribute5_3), int(attribute5_4)]
		cherrypy.session['results'][cherrypy.session['pos']+5] = [cherrypy.session['audio_pairs'][cherrypy.session['pos']+5][2].split('/')[-1], int(attribute6_1), int(attribute6_2), int(attribute6_3), int(attribute6_4)]
		cherrypy.session['results'][cherrypy.session['pos']+6] = [cherrypy.session['audio_pairs'][cherrypy.session['pos']+6][2].split('/')[-1], int(attribute7_1), int(attribute7_2), int(attribute7_3), int(attribute7_4)]
		cherrypy.session['results'][cherrypy.session['pos']+7] = [cherrypy.session['audio_pairs'][cherrypy.session['pos']+7][2].split('/')[-1], int(attribute8_1), int(attribute8_2), int(attribute8_3), int(attribute8_4)]
		cherrypy.session['results'][cherrypy.session['pos']+8] = [cherrypy.session['audio_pairs'][cherrypy.session['pos']+8][2].split('/')[-1], int(attribute9_1), int(attribute9_2), int(attribute9_3), int(attribute9_4)]
		cherrypy.session['results'][cherrypy.session['pos']+9] = [cherrypy.session['audio_pairs'][cherrypy.session['pos']+9][2].split('/')[-1], int(attribute10_1), int(attribute10_2), int(attribute10_3), int(attribute10_4)]
		
		
		resString = 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()
		
		cherrypy.session.write_data(resString,'%s.txt'%cherrypy.session['sid'])
		
		if cherrypy.session['page'] < cherrypy.session['pages']:
			cherrypy.session['page'] += 1
			
			# create tuple to fill template
			cherrypy.session['ts'] = []
			cherrypy.session['npos'] = cherrypy.session['pos'] + 10
			for cherrypy.session['k'] in xrange(10):
				for cherrypy.session['i'] in xrange(4):
					cherrypy.session['ts'].append(cherrypy.session['results'][cherrypy.session['npos']+cherrypy.session['k']][cherrypy.session['i']+1])
			cherrypy.session['ts'].append(cherrypy.session['page'])
			cherrypy.session['ts'].append(cherrypy.session['pages'])
			for cherrypy.session['n'] in xrange(10):
				pos = 10 * (cherrypy.session['page'] - 1) + cherrypy.session['n']
				#print pos
				for n in xrange(3): cherrypy.session['ts'].append(cherrypy.session['audio_pairs'][pos][1])
				for n in xrange(3): cherrypy.session['ts'].append(cherrypy.session['audio_pairs'][pos][2])
			cherrypy.session['ts'].append(cherrypy.session['page'])
			cherrypy.session['ts'].append(cherrypy.session['sid'])
			cherrypy.session['ts'] = tuple(cherrypy.session['ts'])
		
			return audiotempl %cherrypy.session['ts']
		else:
			#end_filename = 'results/%s_f.txt'%TestPage.sid
			#os.rename(TestPage.sid_filename, end_filename)
			
			print cherrypy.session['results']
			#_results = []
			
			cherrypy.session['templ'] = ''
			for cherrypy.session['n'] in xrange(cherrypy.session['tests']):
				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
			cherrypy.session['sid'] = None
			return endtempl%cherrypy.session['templ'] + """\n<a href="/test/">start test</a>"""
			
	index.exposed = True
	doAttrib.exposed = True
	index2.exposed = True
	doStart.exposed = True
	
	
	def sessionError(TestPage):
		print "################################# SESSION ERROR #################################"
		cherrypy.session['resString'] = 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'%cherrypy.session['sid'])
		
		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 getSid(TestPage):
#		result_txts = os.listdir('results')
#		print result_txts
#		sid = int(random.random() * 100000000)
#		sid_filen = '%s.txt'%sid
#		while sid_filen in result_txts:
#			sid = int(random.random() * 100000000)
#			sid_filen = '%s.txt'%sid
#		return sid
		

# Of course we can also mount request handler objects right here!
root = HomePage()
root.test = TestPage()
#root = TestPage()


tutconf = os.path.join(os.path.dirname(__file__), 'conf.conf')

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)
else:
	# This branch is for the test suite; you can ignore it.
	cherrypy.tree.mount(root, config=tutconf)