annotate cherry2 copy 2.py @ 25:4a4bd554b4c1 tip

Closing this sub branch.
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Mon, 25 Mar 2013 14:02:54 +0000
parents 032bc65ebafc
children
rev   line source
gyorgy@0 1 """
gyorgy@0 2 Tutorial - Multiple objects
gyorgy@0 3
gyorgy@0 4 This tutorial shows you how to create a site structure through multiple
gyorgy@0 5 possibly nested request handler objects.
gyorgy@0 6 """
gyorgy@0 7
gyorgy@0 8 import cherrypy, os, random
gyorgy@0 9 from cherrypy.lib.static import serve_file
gyorgy@0 10 from templates import *
gyorgy@0 11
gyorgy@0 12 from DirectorySession import DirectorySession
gyorgy@0 13
gyorgy@0 14 #from pprint import pprint
gyorgy@0 15
gyorgy@0 16 PATH = os.path.abspath(os.path.dirname(__file__))
gyorgy@0 17
gyorgy@0 18
gyorgy@0 19 #audiodir = './audio'
gyorgy@0 20 #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']))]
gyorgy@0 21 #cherrypy.session['fxs'].remove('dry')
gyorgy@0 22 #print cherrypy.session['fxs']
gyorgy@0 23
gyorgy@0 24 class Root(object): pass
gyorgy@0 25
gyorgy@0 26
gyorgy@0 27 class HomePage:
gyorgy@0 28 def index(self):
gyorgy@0 29
gyorgy@0 30
gyorgy@0 31
gyorgy@0 32 return "empty"
gyorgy@0 33
gyorgy@0 34
gyorgy@0 35 index.exposed = True
gyorgy@0 36
gyorgy@0 37 class TestPage:
gyorgy@0 38
gyorgy@0 39 def getFiles(self):
gyorgy@0 40 audiodir = './audio'
gyorgy@0 41 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']))]
gyorgy@0 42 cherrypy.session['fxs'].remove('dry')
gyorgy@0 43 print cherrypy.session['fxs']
gyorgy@0 44
gyorgy@0 45 def index(self):
gyorgy@0 46 TestPage.getFiles(self)
gyorgy@0 47 cherrypy.session['sid'] = None
gyorgy@0 48 cherrypy.session['sid_filename'] = None
gyorgy@0 49
gyorgy@0 50 cherrypy.session['test'] = None
gyorgy@0 51 cherrypy.session['results'] = None
gyorgy@0 52 cherrypy.session['tests'] = None
gyorgy@0 53 cherrypy.session['test_nr'] = None
gyorgy@0 54 cherrypy.session['audio_pairs'] = None
gyorgy@0 55 cherrypy.session['page'] = None
gyorgy@0 56 cherrypy.session['pages'] = 4
gyorgy@0 57 cherrypy.session['userinfobox'] = None
gyorgy@0 58 #return '''
gyorgy@0 59 # <p>
gyorgy@0 60 # <a href="/test/">start test</a>
gyorgy@0 61 # </p>'''
gyorgy@0 62 cherrypy.session['sid'] = cherrypy.session.get_session_path().split('/')[1]
gyorgy@0 63 print cherrypy.session['sid']
gyorgy@0 64
gyorgy@0 65
gyorgy@0 66
gyorgy@0 67 return welcome_templ %cherrypy.session['sid']
gyorgy@0 68
gyorgy@0 69
gyorgy@0 70
gyorgy@0 71 def doStart(self, sessionId, startButton, userinfobox=None):
gyorgy@0 72 cherrypy.session['userinfobox'] = userinfobox
gyorgy@0 73 cherrypy.session['sessionId'] = sessionId
gyorgy@0 74 #print "sid:"
gyorgy@0 75 #print TestPage.sid
gyorgy@0 76 #print sessionId
gyorgy@0 77 if cherrypy.session['sid'] != str(cherrypy.session['sessionId']):
gyorgy@0 78 return TestPage.sessionError(self)
gyorgy@0 79 else:
gyorgy@0 80 return TestPage.index2(self)
gyorgy@0 81
gyorgy@0 82
gyorgy@0 83
gyorgy@0 84
gyorgy@0 85 def index2(self):
gyorgy@0 86 try: print testvar
gyorgy@0 87 except: pass
gyorgy@0 88 #testvar = "00000000000000000000000000000000000000000000000000000000000000000000000000"
gyorgy@0 89 #TestPage.sid = TestPage.getSid(self)
gyorgy@0 90
gyorgy@0 91 #if TestPage.sid != TestPage.sidstart:
gyorgy@0 92 # return TestPage.sessionError(self)
gyorgy@0 93
gyorgy@0 94
gyorgy@0 95 #TestPage.sid_filename = 'results/%s.txt'%TestPage.sid
gyorgy@0 96 #TestPage.sid_userinfofilename = 'results/%s_info.txt'%TestPage.sid
gyorgy@0 97 #print TestPage.sid_filename
gyorgy@0 98
gyorgy@0 99 #cherrypy.session['userinfo'] = userinfo
gyorgy@0 100
gyorgy@0 101
gyorgy@0 102 #cherrypy.session.write_data(userinfo+'\n','results.txt')
gyorgy@0 103
gyorgy@0 104 #f = open(TestPage.sid_userinfofilename, 'w')
gyorgy@0 105 #f.write('%s\n%s'%(TestPage.sid, str(userinfo)))
gyorgy@0 106 #f.close()
gyorgy@0 107
gyorgy@0 108
gyorgy@0 109 # TestPage.pageComplete = []
gyorgy@0 110 # for n in xrange(TestPage.pages):
gyorgy@0 111 # TestPage.pageComplete.append(0)
gyorgy@0 112
gyorgy@0 113
gyorgy@0 114 #take 2 examples for each effect
gyorgy@0 115
gyorgy@0 116 cherrypy.session['audio_pairs'] = []
gyorgy@0 117
gyorgy@0 118 # get effected files:
gyorgy@0 119
gyorgy@0 120 for cherrypy.session['fx'] in cherrypy.session['fxs']:
gyorgy@0 121 cherrypy.session['dirlist'] = os.listdir('./audio/%s/'%cherrypy.session['fx'])
gyorgy@0 122 cherrypy.session['filelist'] = []
gyorgy@0 123 for cherrypy.session['item'] in cherrypy.session['dirlist']:
gyorgy@0 124 if cherrypy.session['item'].split('.')[-1] == 'mp3':
gyorgy@0 125 cherrypy.session['filelist'].append(cherrypy.session['item'].split('.')[0])
gyorgy@0 126
gyorgy@0 127 # create audio pairs for this fx
gyorgy@0 128
gyorgy@0 129 cherrypy.session['first'] = cherrypy.session['second'] = random.choice(cherrypy.session['filelist'])
gyorgy@0 130 while cherrypy.session['first'] == cherrypy.session['second']:
gyorgy@0 131 cherrypy.session['second'] = random.choice(cherrypy.session['filelist'])
gyorgy@0 132
gyorgy@0 133 cherrypy.session['dry1'] = 'dry/%s' %cherrypy.session['first'].split('_%s'%cherrypy.session['fx'])[0]
gyorgy@0 134 cherrypy.session['fx1'] = '%s/%s' %(cherrypy.session['first'], cherrypy.session['fx'])
gyorgy@0 135 cherrypy.session['dry2'] = 'dry/%s' %cherrypy.session['second'].split('_%s'%cherrypy.session['fx'])[0]
gyorgy@0 136 cherrypy.session['fx2'] = '%s/%s' %(cherrypy.session['fx'], cherrypy.session['second'])
gyorgy@0 137 cherrypy.session['audio_pairs'].append([cherrypy.session['fx'], cherrypy.session['dry1'], cherrypy.session['fx1']])
gyorgy@0 138 cherrypy.session['audio_pairs'].append([cherrypy.session['fx'], cherrypy.session['dry2'], cherrypy.session['fx2']])
gyorgy@0 139
gyorgy@0 140 #print TestPage.audio_pairs
gyorgy@0 141 random.shuffle(cherrypy.session['audio_pairs'])
gyorgy@0 142
gyorgy@0 143 cherrypy.session['page'] = 1
gyorgy@0 144 cherrypy.session['pages'] = 4
gyorgy@0 145 cherrypy.session['tests'] = 10 * cherrypy.session['pages']
gyorgy@0 146 cherrypy.session['results'] = []
gyorgy@0 147 for cherrypy.session['n'] in xrange(cherrypy.session['tests']): cherrypy.session['results'].append([None,0,0,0,0])
gyorgy@0 148
gyorgy@0 149
gyorgy@0 150 # create tuple to fill template
gyorgy@0 151 cherrypy.session['ts'] = []
gyorgy@0 152 for cherrypy.session['k'] in xrange(40):
gyorgy@0 153 cherrypy.session['ts'].append(0)
gyorgy@0 154 cherrypy.session['ts'].append(cherrypy.session['page'])
gyorgy@0 155 cherrypy.session['ts'].append(cherrypy.session['pages'])
gyorgy@0 156 for k in xrange(10):
gyorgy@0 157 pos = 10 * (cherrypy.session['page'] - 1) + k
gyorgy@0 158 #print pos
gyorgy@0 159 for n in xrange(3): cherrypy.session['ts'].append(cherrypy.session['audio_pairs'][pos][1])
gyorgy@0 160 for n in xrange(3): cherrypy.session['ts'].append(cherrypy.session['audio_pairs'][pos][2])
gyorgy@0 161 cherrypy.session['ts'].append(cherrypy.session['page'])
gyorgy@0 162 cherrypy.session['ts'].append(cherrypy.session['sid'])
gyorgy@0 163 cherrypy.session['ts'] = tuple(cherrypy.session['ts'])
gyorgy@0 164 print cherrypy.session['ts']
gyorgy@0 165
gyorgy@0 166 return audiotempl %cherrypy.session['ts']
gyorgy@0 167
gyorgy@0 168
gyorgy@0 169
gyorgy@0 170
gyorgy@0 171
gyorgy@0 172
gyorgy@0 173
gyorgy@0 174 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):
gyorgy@0 175 #print attribute1 + ' ' + attribute2
gyorgy@0 176 # Error check
gyorgy@0 177
gyorgy@0 178
gyorgy@0 179
gyorgy@0 180
gyorgy@0 181
gyorgy@0 182 print "################################# %s" %pageId
gyorgy@0 183 #_pageId = int(pageId) - 1
gyorgy@0 184
gyorgy@0 185 if cherrypy.session['page'] != int(pageId):
gyorgy@0 186 print "################################# BACK BUTTON PRESSED #################################"
gyorgy@0 187 #resString = ',\n'.join(str(x) for x in TestPage.results)
gyorgy@0 188 #resString += '\n\nERROR: BACK BUTTON PRESSED'
gyorgy@0 189 #f = open(TestPage.sid_filename, 'w')
gyorgy@0 190 #f.write(resString)
gyorgy@0 191 #f.close()
gyorgy@0 192 #return '''
gyorgy@0 193 # <p>
gyorgy@0 194 # <a href="/test/">nooo! you pressed the back button, please start again!</a>
gyorgy@0 195 # </p>'''
gyorgy@0 196
gyorgy@0 197 # instead: overwrite previously submitted data. WILL THE OLD VALUES BE SUBMITTED AGAIN IN ALL BROWSERS?
gyorgy@0 198 cherrypy.session['page'] = int(pageId)
gyorgy@0 199
gyorgy@0 200
gyorgy@0 201
gyorgy@0 202 if cherrypy.session['sid'] != str(sessionId):
gyorgy@0 203 return TestPage.sessionError(self)
gyorgy@0 204
gyorgy@0 205
gyorgy@0 206
gyorgy@0 207 #store results
gyorgy@0 208
gyorgy@0 209 cherrypy.session['pos'] = 10 * (cherrypy.session['page'] - 1)
gyorgy@0 210
gyorgy@0 211 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)]
gyorgy@0 212 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)]
gyorgy@0 213 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)]
gyorgy@0 214 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)]
gyorgy@0 215 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)]
gyorgy@0 216 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)]
gyorgy@0 217 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)]
gyorgy@0 218 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)]
gyorgy@0 219 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)]
gyorgy@0 220 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)]
gyorgy@0 221
gyorgy@0 222
gyorgy@0 223 resString = cherrypy.session['sid'] + '\n' + cherrypy.session['userinfobox'] + '\n' + ',\n'.join(str(x) for x in cherrypy.session['results'])
gyorgy@0 224
gyorgy@0 225 #f = open(TestPage.sid_filename, 'w')
gyorgy@0 226 #f.write(resString)
gyorgy@0 227 #f.close()
gyorgy@0 228
gyorgy@0 229 cherrypy.session.write_data(resString,'%s.txt'%cherrypy.session['sid'])
gyorgy@0 230
gyorgy@0 231 if cherrypy.session['page'] < cherrypy.session['pages']:
gyorgy@0 232 cherrypy.session['page'] += 1
gyorgy@0 233
gyorgy@0 234 # create tuple to fill template
gyorgy@0 235 cherrypy.session['ts'] = []
gyorgy@0 236 cherrypy.session['npos'] = cherrypy.session['pos'] + 10
gyorgy@0 237 for cherrypy.session['k'] in xrange(10):
gyorgy@0 238 for cherrypy.session['i'] in xrange(4):
gyorgy@0 239 cherrypy.session['ts'].append(cherrypy.session['results'][cherrypy.session['npos']+cherrypy.session['k']][cherrypy.session['i']+1])
gyorgy@0 240 cherrypy.session['ts'].append(cherrypy.session['page'])
gyorgy@0 241 cherrypy.session['ts'].append(cherrypy.session['pages'])
gyorgy@0 242 for cherrypy.session['n'] in xrange(10):
gyorgy@0 243 pos = 10 * (cherrypy.session['page'] - 1) + cherrypy.session['n']
gyorgy@0 244 #print pos
gyorgy@0 245 for n in xrange(3): cherrypy.session['ts'].append(cherrypy.session['audio_pairs'][pos][1])
gyorgy@0 246 for n in xrange(3): cherrypy.session['ts'].append(cherrypy.session['audio_pairs'][pos][2])
gyorgy@0 247 cherrypy.session['ts'].append(cherrypy.session['page'])
gyorgy@0 248 cherrypy.session['ts'].append(cherrypy.session['sid'])
gyorgy@0 249 cherrypy.session['ts'] = tuple(cherrypy.session['ts'])
gyorgy@0 250
gyorgy@0 251 return audiotempl %cherrypy.session['ts']
gyorgy@0 252 else:
gyorgy@0 253 #end_filename = 'results/%s_f.txt'%TestPage.sid
gyorgy@0 254 #os.rename(TestPage.sid_filename, end_filename)
gyorgy@0 255
gyorgy@0 256 print cherrypy.session['results']
gyorgy@0 257 #_results = []
gyorgy@0 258
gyorgy@0 259 cherrypy.session['templ'] = ''
gyorgy@0 260 for cherrypy.session['n'] in xrange(cherrypy.session['tests']):
gyorgy@0 261 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])
gyorgy@0 262 cherrypy.session['templ'] += cherrypy.session['_templ']
gyorgy@0 263
gyorgy@0 264 #TestPage.pageComplete += 1
gyorgy@0 265 cherrypy.session['sid'] = None
gyorgy@0 266 return endtempl%cherrypy.session['templ'] + """\n<a href="/test/">start test</a>"""
gyorgy@0 267
gyorgy@0 268 index.exposed = True
gyorgy@0 269 doAttrib.exposed = True
gyorgy@0 270 index2.exposed = True
gyorgy@0 271 doStart.exposed = True
gyorgy@0 272
gyorgy@0 273
gyorgy@0 274 def sessionError(TestPage):
gyorgy@0 275 print "################################# SESSION ERROR #################################"
gyorgy@0 276 cherrypy.session['resString'] = str(cherrypy.session['sid']) + '\n' + cherrypy.session['userinfobox'] + '\n' + ',\n'.join(str(x) for x in cherrypy.session['results'])
gyorgy@0 277 cherrypy.session['resString'] += '\n\nERROR: SESSION CONFUSION'
gyorgy@0 278 #f = open(TestPage.sid_filename, 'w')
gyorgy@0 279 #f.write(resString)
gyorgy@0 280 #f.close()
gyorgy@0 281 cherrypy.session.write_data(cherrypy.session['resString'],'%s.txt'%cherrypy.session['sid'])
gyorgy@0 282
gyorgy@0 283 return '''
gyorgy@0 284 <p>
gyorgy@0 285 <a href="/test/">oh noes! there is something wrong with your session, please start again or go for a coffee!</a>
gyorgy@0 286 </p>'''
gyorgy@0 287
gyorgy@0 288
gyorgy@0 289 # def getSid(TestPage):
gyorgy@0 290 # result_txts = os.listdir('results')
gyorgy@0 291 # print result_txts
gyorgy@0 292 # sid = int(random.random() * 100000000)
gyorgy@0 293 # sid_filen = '%s.txt'%sid
gyorgy@0 294 # while sid_filen in result_txts:
gyorgy@0 295 # sid = int(random.random() * 100000000)
gyorgy@0 296 # sid_filen = '%s.txt'%sid
gyorgy@0 297 # return sid
gyorgy@0 298
gyorgy@0 299
gyorgy@0 300 # Of course we can also mount request handler objects right here!
gyorgy@0 301 root = HomePage()
gyorgy@0 302 root.test = TestPage()
gyorgy@0 303 #root = TestPage()
gyorgy@0 304
gyorgy@0 305
gyorgy@0 306 tutconf = os.path.join(os.path.dirname(__file__), 'conf.conf')
gyorgy@0 307
gyorgy@0 308 if __name__ == '__main__':
gyorgy@0 309 # CherryPy always starts with app.root when trying to map request URIs
gyorgy@0 310 # to objects, so we need to mount a request handler root. A request
gyorgy@0 311 # to '/' will be mapped to HelloWorld().index().
gyorgy@0 312 cherrypy.quickstart(root, config=tutconf)
gyorgy@0 313 else:
gyorgy@0 314 # This branch is for the test suite; you can ignore it.
gyorgy@0 315 cherrypy.tree.mount(root, config=tutconf)
gyorgy@0 316