gyorgy@0: """ gyorgy@0: Tutorial - Multiple objects gyorgy@0: gyorgy@0: This tutorial shows you how to create a site structure through multiple gyorgy@0: possibly nested request handler objects. gyorgy@0: """ gyorgy@0: gyorgy@0: import cherrypy, os, random gyorgy@0: from cherrypy.lib.static import serve_file gyorgy@0: from templates import * gyorgy@0: gyorgy@0: from DirectorySession import DirectorySession gyorgy@0: gyorgy@0: #from pprint import pprint gyorgy@0: gyorgy@0: PATH = os.path.abspath(os.path.dirname(__file__)) gyorgy@0: gyorgy@0: gyorgy@0: audiodir = './audio' gyorgy@0: fxs = [f for f in os.listdir(audiodir) if os.path.isdir(os.path.join(audiodir, f))] gyorgy@0: fxs.remove('dry') gyorgy@0: print fxs gyorgy@0: gyorgy@0: class Root(object): pass gyorgy@0: gyorgy@0: gyorgy@0: class HomePage: gyorgy@0: def index(self): gyorgy@0: #return '''

start test

''' gyorgy@0: gyorgy@0: #print cherrypy.session.get_session_name() gyorgy@0: #cherry.session.write_data() gyorgy@0: gyorgy@0: #print cherrypy.session['gfdxgfdx'] gyorgy@0: gyorgy@0: #cherrypy.session['x'] = [1,2,3] gyorgy@0: #print cherrypy.session['x'] gyorgy@0: #x = cherrypy.session['x'] gyorgy@0: #x.append(5) gyorgy@0: #print cherrypy.session['x'] gyorgy@0: return "empty" gyorgy@0: gyorgy@0: gyorgy@0: index.exposed = True gyorgy@0: gyorgy@0: class TestPage: gyorgy@0: gyorgy@0: sid = None gyorgy@0: sid_filename = None gyorgy@0: gyorgy@0: test = None gyorgy@0: results = None gyorgy@0: tests = None gyorgy@0: test_nr = None gyorgy@0: audio_pairs = None gyorgy@0: page = None gyorgy@0: pages = 4 gyorgy@0: pageComplete = None gyorgy@0: userInfo = None gyorgy@0: gyorgy@0: def index(self): gyorgy@0: #return ''' gyorgy@0: #

gyorgy@0: # start test gyorgy@0: #

''' gyorgy@0: TestPage.sid = TestPage.getSid(self) gyorgy@0: print TestPage.sid gyorgy@0: return welcome_templ %TestPage.sid gyorgy@0: gyorgy@0: gyorgy@0: def doStart(self, sessionId, startButton, userinfobox=None): gyorgy@0: print "sid:" gyorgy@0: print TestPage.sid gyorgy@0: print sessionId gyorgy@0: if TestPage.sid != int(sessionId): gyorgy@0: return TestPage.sessionError(self) gyorgy@0: else: gyorgy@0: return TestPage.index2(self, userinfobox) gyorgy@0: gyorgy@0: gyorgy@0: gyorgy@0: gyorgy@0: def index2(self, userinfo): gyorgy@0: gyorgy@0: #TestPage.sid = TestPage.getSid(self) gyorgy@0: gyorgy@0: #if TestPage.sid != TestPage.sidstart: gyorgy@0: # return TestPage.sessionError(self) gyorgy@0: gyorgy@0: gyorgy@0: TestPage.sid_filename = 'results/%s.txt'%TestPage.sid gyorgy@0: TestPage.sid_userinfofilename = 'results/%s_info.txt'%TestPage.sid gyorgy@0: print TestPage.sid_filename gyorgy@0: gyorgy@0: f = open(TestPage.sid_userinfofilename, 'w') gyorgy@0: f.write('%s\n%s'%(TestPage.sid, str(userinfo))) gyorgy@0: f.close() gyorgy@0: gyorgy@0: gyorgy@0: TestPage.pageComplete = [] gyorgy@0: for n in xrange(TestPage.pages): gyorgy@0: TestPage.pageComplete.append(0) gyorgy@0: gyorgy@0: gyorgy@0: #take 2 examples for each effect gyorgy@0: gyorgy@0: TestPage.audio_pairs = [] gyorgy@0: gyorgy@0: # get effected files: gyorgy@0: gyorgy@0: for fx in fxs: gyorgy@0: dirlist = os.listdir('./audio/%s/'%fx) gyorgy@0: filelist = [] gyorgy@0: for item in dirlist: gyorgy@0: if item.split('.')[-1] == 'mp3': gyorgy@0: filelist.append(item.split('.')[0]) gyorgy@0: gyorgy@0: # create audio pairs for this fx gyorgy@0: gyorgy@0: first = second = random.choice(filelist) gyorgy@0: while first==second: gyorgy@0: second = random.choice(filelist) gyorgy@0: gyorgy@0: dry1 = 'dry/%s' %first.split('_%s'%fx)[0] gyorgy@0: fx1 = '%s/%s' %(fx, first) gyorgy@0: dry2 = 'dry/%s' %second.split('_%s'%fx)[0] gyorgy@0: fx2 = '%s/%s' %(fx, second) gyorgy@0: TestPage.audio_pairs.append([fx, dry1, fx1]) gyorgy@0: TestPage.audio_pairs.append([fx, dry2, fx2]) gyorgy@0: gyorgy@0: #print TestPage.audio_pairs gyorgy@0: random.shuffle(TestPage.audio_pairs) gyorgy@0: gyorgy@0: TestPage.page = 1 gyorgy@0: TestPage.pages = 4 gyorgy@0: TestPage.tests = 10 * TestPage.pages gyorgy@0: TestPage.results = [] gyorgy@0: for n in xrange(TestPage.tests): TestPage.results.append([None,0,0,0,0]) gyorgy@0: gyorgy@0: # create tuple to fill template gyorgy@0: ts = [] gyorgy@0: for k in xrange(40): gyorgy@0: ts.append(0) gyorgy@0: ts.append(TestPage.page) gyorgy@0: ts.append(TestPage.pages) gyorgy@0: gyorgy@0: for k in xrange(10): gyorgy@0: pos = 10 * (TestPage.page - 1) + k gyorgy@0: #print pos gyorgy@0: for n in xrange(3): ts.append(TestPage.audio_pairs[pos][1]) gyorgy@0: for n in xrange(3): ts.append(TestPage.audio_pairs[pos][2]) gyorgy@0: gyorgy@0: ts.append(TestPage.page) gyorgy@0: ts.append(TestPage.sid) gyorgy@0: print ts gyorgy@0: ts = tuple(ts) gyorgy@0: gyorgy@0: return audiotempl %ts gyorgy@0: gyorgy@0: gyorgy@0: gyorgy@0: 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: #print attribute1 + ' ' + attribute2 gyorgy@0: # Error check gyorgy@0: gyorgy@0: print "################################# %s" %pageId gyorgy@0: _pageId = int(pageId) - 1 gyorgy@0: gyorgy@0: if TestPage.page != int(pageId): gyorgy@0: print "################################# BACK BUTTON PRESSED #################################" gyorgy@0: #resString = ',\n'.join(str(x) for x in TestPage.results) gyorgy@0: #resString += '\n\nERROR: BACK BUTTON PRESSED' gyorgy@0: #f = open(TestPage.sid_filename, 'w') gyorgy@0: #f.write(resString) gyorgy@0: #f.close() gyorgy@0: #return ''' gyorgy@0: #

gyorgy@0: # nooo! you pressed the back button, please start again! gyorgy@0: #

''' gyorgy@0: gyorgy@0: # instead: overwrite previously submitted data. WILL THE OLD VALUES BE SUBMITTED AGAIN IN ALL BROWSERS? gyorgy@0: TestPage.page = int(pageId) gyorgy@0: gyorgy@0: gyorgy@0: gyorgy@0: if TestPage.sid != int(sessionId): gyorgy@0: return TestPage.sessionError(self) gyorgy@0: gyorgy@0: gyorgy@0: gyorgy@0: #store results gyorgy@0: gyorgy@0: pos = 10 * (TestPage.page - 1) gyorgy@0: gyorgy@0: TestPage.results[pos] = [TestPage.audio_pairs[pos][2].split('/')[-1], int(attribute1_1), int(attribute1_2), int(attribute1_3), int(attribute1_4)] gyorgy@0: 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: 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: 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: 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: 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: 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: 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: 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: 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: gyorgy@0: resString = ',\n'.join(str(x) for x in TestPage.results) gyorgy@0: gyorgy@0: f = open(TestPage.sid_filename, 'w') gyorgy@0: f.write(resString) gyorgy@0: f.close() gyorgy@0: gyorgy@0: gyorgy@0: if TestPage.page < TestPage.pages: gyorgy@0: TestPage.page += 1 gyorgy@0: gyorgy@0: # create tuple to fill template gyorgy@0: ts = [] gyorgy@0: gyorgy@0: npos = pos + 10 gyorgy@0: for k in xrange(10): gyorgy@0: for i in xrange(4): gyorgy@0: ts.append(TestPage.results[npos+k][i+1]) gyorgy@0: gyorgy@0: ts.append(TestPage.page) gyorgy@0: ts.append(TestPage.pages) gyorgy@0: gyorgy@0: for k in xrange(10): gyorgy@0: pos = 10 * (TestPage.page - 1) + k gyorgy@0: #print pos gyorgy@0: for n in xrange(3): ts.append(TestPage.audio_pairs[pos][1]) gyorgy@0: for n in xrange(3): ts.append(TestPage.audio_pairs[pos][2]) gyorgy@0: ts.append(TestPage.page) gyorgy@0: ts.append(TestPage.sid) gyorgy@0: ts = tuple(ts) gyorgy@0: gyorgy@0: #print TestPage.audio_pairs[TestPage.test-1][2] gyorgy@0: #TestPage.pageComplete += 1 gyorgy@0: return audiotempl %ts gyorgy@0: else: gyorgy@0: end_filename = 'results/%s_f.txt'%TestPage.sid gyorgy@0: os.rename(TestPage.sid_filename, end_filename) gyorgy@0: gyorgy@0: print TestPage.results gyorgy@0: _results = [] gyorgy@0: gyorgy@0: templ = '' gyorgy@0: for n in xrange(TestPage.tests): gyorgy@0: _templ = endtempl2 %(TestPage.results[n][0], TestPage.results[n][1], TestPage.results[n][2], TestPage.results[n][3], TestPage.results[n][4]) gyorgy@0: templ += _templ gyorgy@0: gyorgy@0: #TestPage.pageComplete += 1 gyorgy@0: TestPage.sid = None gyorgy@0: return endtempl%templ gyorgy@0: gyorgy@0: index.exposed = True gyorgy@0: doAttrib.exposed = True gyorgy@0: index2.exposed = True gyorgy@0: doStart.exposed = True gyorgy@0: gyorgy@0: gyorgy@0: def sessionError(TestPage): gyorgy@0: print "################################# SESSION ERROR #################################" gyorgy@0: resString = ',\n'.join(str(x) for x in TestPage.results) gyorgy@0: resString += '\n\nERROR: SESSION CONFUSION' gyorgy@0: f = open(TestPage.sid_filename, 'w') gyorgy@0: f.write(resString) gyorgy@0: f.close() gyorgy@0: return ''' gyorgy@0:

gyorgy@0: oh noes! there is something wrong with your session, please start again or go for a coffee! gyorgy@0:

''' gyorgy@0: gyorgy@0: gyorgy@0: def getSid(TestPage): gyorgy@0: result_txts = os.listdir('results') gyorgy@0: print result_txts gyorgy@0: sid = int(random.random() * 100000000) gyorgy@0: sid_filen = '%s.txt'%sid gyorgy@0: while sid_filen in result_txts: gyorgy@0: sid = int(random.random() * 100000000) gyorgy@0: sid_filen = '%s.txt'%sid gyorgy@0: return sid gyorgy@0: gyorgy@0: gyorgy@0: # Of course we can also mount request handler objects right here! gyorgy@0: root = HomePage() gyorgy@0: root.test = TestPage() gyorgy@0: #root = TestPage() gyorgy@0: gyorgy@0: gyorgy@0: tutconf = os.path.join(os.path.dirname(__file__), 'conf.conf') gyorgy@0: gyorgy@0: if __name__ == '__main__': gyorgy@0: # CherryPy always starts with app.root when trying to map request URIs gyorgy@0: # to objects, so we need to mount a request handler root. A request gyorgy@0: # to '/' will be mapped to HelloWorld().index(). gyorgy@0: cherrypy.quickstart(root, config=tutconf) gyorgy@0: else: gyorgy@0: # This branch is for the test suite; you can ignore it. gyorgy@0: cherrypy.tree.mount(root, config=tutconf) gyorgy@0: