annotate cherry2 copy.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 fxs = [f for f in os.listdir(audiodir) if os.path.isdir(os.path.join(audiodir, f))]
gyorgy@0 21 fxs.remove('dry')
gyorgy@0 22 print 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 #return ''' <p> <a href="/test/">start test </a> </p>'''
gyorgy@0 30
gyorgy@0 31 #print cherrypy.session.get_session_name()
gyorgy@0 32 #cherry.session.write_data()
gyorgy@0 33
gyorgy@0 34 #print cherrypy.session['gfdxgfdx']
gyorgy@0 35
gyorgy@0 36 #cherrypy.session['x'] = [1,2,3]
gyorgy@0 37 #print cherrypy.session['x']
gyorgy@0 38 #x = cherrypy.session['x']
gyorgy@0 39 #x.append(5)
gyorgy@0 40 #print cherrypy.session['x']
gyorgy@0 41 return "empty"
gyorgy@0 42
gyorgy@0 43
gyorgy@0 44 index.exposed = True
gyorgy@0 45
gyorgy@0 46 class TestPage:
gyorgy@0 47
gyorgy@0 48 sid = None
gyorgy@0 49 sid_filename = None
gyorgy@0 50
gyorgy@0 51 test = None
gyorgy@0 52 results = None
gyorgy@0 53 tests = None
gyorgy@0 54 test_nr = None
gyorgy@0 55 audio_pairs = None
gyorgy@0 56 page = None
gyorgy@0 57 pages = 4
gyorgy@0 58 pageComplete = None
gyorgy@0 59 userInfo = None
gyorgy@0 60
gyorgy@0 61 def index(self):
gyorgy@0 62 #return '''
gyorgy@0 63 # <p>
gyorgy@0 64 # <a href="/test/">start test</a>
gyorgy@0 65 # </p>'''
gyorgy@0 66 TestPage.sid = TestPage.getSid(self)
gyorgy@0 67 print TestPage.sid
gyorgy@0 68 return welcome_templ %TestPage.sid
gyorgy@0 69
gyorgy@0 70
gyorgy@0 71 def doStart(self, sessionId, startButton, userinfobox=None):
gyorgy@0 72 print "sid:"
gyorgy@0 73 print TestPage.sid
gyorgy@0 74 print sessionId
gyorgy@0 75 if TestPage.sid != int(sessionId):
gyorgy@0 76 return TestPage.sessionError(self)
gyorgy@0 77 else:
gyorgy@0 78 return TestPage.index2(self, userinfobox)
gyorgy@0 79
gyorgy@0 80
gyorgy@0 81
gyorgy@0 82
gyorgy@0 83 def index2(self, userinfo):
gyorgy@0 84
gyorgy@0 85 #TestPage.sid = TestPage.getSid(self)
gyorgy@0 86
gyorgy@0 87 #if TestPage.sid != TestPage.sidstart:
gyorgy@0 88 # return TestPage.sessionError(self)
gyorgy@0 89
gyorgy@0 90
gyorgy@0 91 TestPage.sid_filename = 'results/%s.txt'%TestPage.sid
gyorgy@0 92 TestPage.sid_userinfofilename = 'results/%s_info.txt'%TestPage.sid
gyorgy@0 93 print TestPage.sid_filename
gyorgy@0 94
gyorgy@0 95 f = open(TestPage.sid_userinfofilename, 'w')
gyorgy@0 96 f.write('%s\n%s'%(TestPage.sid, str(userinfo)))
gyorgy@0 97 f.close()
gyorgy@0 98
gyorgy@0 99
gyorgy@0 100 TestPage.pageComplete = []
gyorgy@0 101 for n in xrange(TestPage.pages):
gyorgy@0 102 TestPage.pageComplete.append(0)
gyorgy@0 103
gyorgy@0 104
gyorgy@0 105 #take 2 examples for each effect
gyorgy@0 106
gyorgy@0 107 TestPage.audio_pairs = []
gyorgy@0 108
gyorgy@0 109 # get effected files:
gyorgy@0 110
gyorgy@0 111 for fx in fxs:
gyorgy@0 112 dirlist = os.listdir('./audio/%s/'%fx)
gyorgy@0 113 filelist = []
gyorgy@0 114 for item in dirlist:
gyorgy@0 115 if item.split('.')[-1] == 'mp3':
gyorgy@0 116 filelist.append(item.split('.')[0])
gyorgy@0 117
gyorgy@0 118 # create audio pairs for this fx
gyorgy@0 119
gyorgy@0 120 first = second = random.choice(filelist)
gyorgy@0 121 while first==second:
gyorgy@0 122 second = random.choice(filelist)
gyorgy@0 123
gyorgy@0 124 dry1 = 'dry/%s' %first.split('_%s'%fx)[0]
gyorgy@0 125 fx1 = '%s/%s' %(fx, first)
gyorgy@0 126 dry2 = 'dry/%s' %second.split('_%s'%fx)[0]
gyorgy@0 127 fx2 = '%s/%s' %(fx, second)
gyorgy@0 128 TestPage.audio_pairs.append([fx, dry1, fx1])
gyorgy@0 129 TestPage.audio_pairs.append([fx, dry2, fx2])
gyorgy@0 130
gyorgy@0 131 #print TestPage.audio_pairs
gyorgy@0 132 random.shuffle(TestPage.audio_pairs)
gyorgy@0 133
gyorgy@0 134 TestPage.page = 1
gyorgy@0 135 TestPage.pages = 4
gyorgy@0 136 TestPage.tests = 10 * TestPage.pages
gyorgy@0 137 TestPage.results = []
gyorgy@0 138 for n in xrange(TestPage.tests): TestPage.results.append([None,0,0,0,0])
gyorgy@0 139
gyorgy@0 140 # create tuple to fill template
gyorgy@0 141 ts = []
gyorgy@0 142 for k in xrange(40):
gyorgy@0 143 ts.append(0)
gyorgy@0 144 ts.append(TestPage.page)
gyorgy@0 145 ts.append(TestPage.pages)
gyorgy@0 146
gyorgy@0 147 for k in xrange(10):
gyorgy@0 148 pos = 10 * (TestPage.page - 1) + k
gyorgy@0 149 #print pos
gyorgy@0 150 for n in xrange(3): ts.append(TestPage.audio_pairs[pos][1])
gyorgy@0 151 for n in xrange(3): ts.append(TestPage.audio_pairs[pos][2])
gyorgy@0 152
gyorgy@0 153 ts.append(TestPage.page)
gyorgy@0 154 ts.append(TestPage.sid)
gyorgy@0 155 print ts
gyorgy@0 156 ts = tuple(ts)
gyorgy@0 157
gyorgy@0 158 return audiotempl %ts
gyorgy@0 159
gyorgy@0 160
gyorgy@0 161
gyorgy@0 162 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 163 #print attribute1 + ' ' + attribute2
gyorgy@0 164 # Error check
gyorgy@0 165
gyorgy@0 166 print "################################# %s" %pageId
gyorgy@0 167 _pageId = int(pageId) - 1
gyorgy@0 168
gyorgy@0 169 if TestPage.page != int(pageId):
gyorgy@0 170 print "################################# BACK BUTTON PRESSED #################################"
gyorgy@0 171 #resString = ',\n'.join(str(x) for x in TestPage.results)
gyorgy@0 172 #resString += '\n\nERROR: BACK BUTTON PRESSED'
gyorgy@0 173 #f = open(TestPage.sid_filename, 'w')
gyorgy@0 174 #f.write(resString)
gyorgy@0 175 #f.close()
gyorgy@0 176 #return '''
gyorgy@0 177 # <p>
gyorgy@0 178 # <a href="/test/">nooo! you pressed the back button, please start again!</a>
gyorgy@0 179 # </p>'''
gyorgy@0 180
gyorgy@0 181 # instead: overwrite previously submitted data. WILL THE OLD VALUES BE SUBMITTED AGAIN IN ALL BROWSERS?
gyorgy@0 182 TestPage.page = int(pageId)
gyorgy@0 183
gyorgy@0 184
gyorgy@0 185
gyorgy@0 186 if TestPage.sid != int(sessionId):
gyorgy@0 187 return TestPage.sessionError(self)
gyorgy@0 188
gyorgy@0 189
gyorgy@0 190
gyorgy@0 191 #store results
gyorgy@0 192
gyorgy@0 193 pos = 10 * (TestPage.page - 1)
gyorgy@0 194
gyorgy@0 195 TestPage.results[pos] = [TestPage.audio_pairs[pos][2].split('/')[-1], int(attribute1_1), int(attribute1_2), int(attribute1_3), int(attribute1_4)]
gyorgy@0 196 TestPage.results[pos+1] = [TestPage.audio_pairs[pos+1][2].split('/')[-1], int(attribute2_1), int(attribute2_2), int(attribute2_3), int(attribute2_4)]
gyorgy@0 197 TestPage.results[pos+2] = [TestPage.audio_pairs[pos+2][2].split('/')[-1], int(attribute3_1), int(attribute3_2), int(attribute3_3), int(attribute3_4)]
gyorgy@0 198 TestPage.results[pos+3] = [TestPage.audio_pairs[pos+3][2].split('/')[-1], int(attribute4_1), int(attribute4_2), int(attribute4_3), int(attribute4_4)]
gyorgy@0 199 TestPage.results[pos+4] = [TestPage.audio_pairs[pos+4][2].split('/')[-1], int(attribute5_1), int(attribute5_2), int(attribute5_3), int(attribute5_4)]
gyorgy@0 200 TestPage.results[pos+5] = [TestPage.audio_pairs[pos+5][2].split('/')[-1], int(attribute6_1), int(attribute6_2), int(attribute6_3), int(attribute6_4)]
gyorgy@0 201 TestPage.results[pos+6] = [TestPage.audio_pairs[pos+6][2].split('/')[-1], int(attribute7_1), int(attribute7_2), int(attribute7_3), int(attribute7_4)]
gyorgy@0 202 TestPage.results[pos+7] = [TestPage.audio_pairs[pos+7][2].split('/')[-1], int(attribute8_1), int(attribute8_2), int(attribute8_3), int(attribute8_4)]
gyorgy@0 203 TestPage.results[pos+8] = [TestPage.audio_pairs[pos+8][2].split('/')[-1], int(attribute9_1), int(attribute9_2), int(attribute9_3), int(attribute9_4)]
gyorgy@0 204 TestPage.results[pos+9] = [TestPage.audio_pairs[pos+9][2].split('/')[-1], int(attribute10_1), int(attribute10_2), int(attribute10_3), int(attribute10_4)]
gyorgy@0 205
gyorgy@0 206 resString = ',\n'.join(str(x) for x in TestPage.results)
gyorgy@0 207
gyorgy@0 208 f = open(TestPage.sid_filename, 'w')
gyorgy@0 209 f.write(resString)
gyorgy@0 210 f.close()
gyorgy@0 211
gyorgy@0 212
gyorgy@0 213 if TestPage.page < TestPage.pages:
gyorgy@0 214 TestPage.page += 1
gyorgy@0 215
gyorgy@0 216 # create tuple to fill template
gyorgy@0 217 ts = []
gyorgy@0 218
gyorgy@0 219 npos = pos + 10
gyorgy@0 220 for k in xrange(10):
gyorgy@0 221 for i in xrange(4):
gyorgy@0 222 ts.append(TestPage.results[npos+k][i+1])
gyorgy@0 223
gyorgy@0 224 ts.append(TestPage.page)
gyorgy@0 225 ts.append(TestPage.pages)
gyorgy@0 226
gyorgy@0 227 for k in xrange(10):
gyorgy@0 228 pos = 10 * (TestPage.page - 1) + k
gyorgy@0 229 #print pos
gyorgy@0 230 for n in xrange(3): ts.append(TestPage.audio_pairs[pos][1])
gyorgy@0 231 for n in xrange(3): ts.append(TestPage.audio_pairs[pos][2])
gyorgy@0 232 ts.append(TestPage.page)
gyorgy@0 233 ts.append(TestPage.sid)
gyorgy@0 234 ts = tuple(ts)
gyorgy@0 235
gyorgy@0 236 #print TestPage.audio_pairs[TestPage.test-1][2]
gyorgy@0 237 #TestPage.pageComplete += 1
gyorgy@0 238 return audiotempl %ts
gyorgy@0 239 else:
gyorgy@0 240 end_filename = 'results/%s_f.txt'%TestPage.sid
gyorgy@0 241 os.rename(TestPage.sid_filename, end_filename)
gyorgy@0 242
gyorgy@0 243 print TestPage.results
gyorgy@0 244 _results = []
gyorgy@0 245
gyorgy@0 246 templ = ''
gyorgy@0 247 for n in xrange(TestPage.tests):
gyorgy@0 248 _templ = endtempl2 %(TestPage.results[n][0], TestPage.results[n][1], TestPage.results[n][2], TestPage.results[n][3], TestPage.results[n][4])
gyorgy@0 249 templ += _templ
gyorgy@0 250
gyorgy@0 251 #TestPage.pageComplete += 1
gyorgy@0 252 TestPage.sid = None
gyorgy@0 253 return endtempl%templ
gyorgy@0 254
gyorgy@0 255 index.exposed = True
gyorgy@0 256 doAttrib.exposed = True
gyorgy@0 257 index2.exposed = True
gyorgy@0 258 doStart.exposed = True
gyorgy@0 259
gyorgy@0 260
gyorgy@0 261 def sessionError(TestPage):
gyorgy@0 262 print "################################# SESSION ERROR #################################"
gyorgy@0 263 resString = ',\n'.join(str(x) for x in TestPage.results)
gyorgy@0 264 resString += '\n\nERROR: SESSION CONFUSION'
gyorgy@0 265 f = open(TestPage.sid_filename, 'w')
gyorgy@0 266 f.write(resString)
gyorgy@0 267 f.close()
gyorgy@0 268 return '''
gyorgy@0 269 <p>
gyorgy@0 270 <a href="/test/">oh noes! there is something wrong with your session, please start again or go for a coffee!</a>
gyorgy@0 271 </p>'''
gyorgy@0 272
gyorgy@0 273
gyorgy@0 274 def getSid(TestPage):
gyorgy@0 275 result_txts = os.listdir('results')
gyorgy@0 276 print result_txts
gyorgy@0 277 sid = int(random.random() * 100000000)
gyorgy@0 278 sid_filen = '%s.txt'%sid
gyorgy@0 279 while sid_filen in result_txts:
gyorgy@0 280 sid = int(random.random() * 100000000)
gyorgy@0 281 sid_filen = '%s.txt'%sid
gyorgy@0 282 return sid
gyorgy@0 283
gyorgy@0 284
gyorgy@0 285 # Of course we can also mount request handler objects right here!
gyorgy@0 286 root = HomePage()
gyorgy@0 287 root.test = TestPage()
gyorgy@0 288 #root = TestPage()
gyorgy@0 289
gyorgy@0 290
gyorgy@0 291 tutconf = os.path.join(os.path.dirname(__file__), 'conf.conf')
gyorgy@0 292
gyorgy@0 293 if __name__ == '__main__':
gyorgy@0 294 # CherryPy always starts with app.root when trying to map request URIs
gyorgy@0 295 # to objects, so we need to mount a request handler root. A request
gyorgy@0 296 # to '/' will be mapped to HelloWorld().index().
gyorgy@0 297 cherrypy.quickstart(root, config=tutconf)
gyorgy@0 298 else:
gyorgy@0 299 # This branch is for the test suite; you can ignore it.
gyorgy@0 300 cherrypy.tree.mount(root, config=tutconf)
gyorgy@0 301