diff options
Diffstat (limited to 'app/app.py')
-rw-r--r-- | app/app.py | 192 |
1 files changed, 10 insertions, 182 deletions
@@ -8,198 +8,26 @@ app.debug = True app.secret_key="ilovesugar" genshi = Genshi(app) +@app.route('/') +def hello_world(): + flash("Hello World") + return render_response('hello.html') + def shutdown_server(): func = request.environ.get('werkzeug.server.shutdown') if func is None: raise RuntimeError('Not running with the Werkzeug Server') func() -def list_files(directory): - files=os.listdir(directory) - print "showing %s" % directory - return sorted(files) - -def identify(filename): - if not os.path.exists(filename): - raise ValueError('File not found') - icon = 'document-generic.png' - mode = '' - directory=os.path.dirname(filename) - icon = 'document-generic.png' - href = '/edit/%s' % filename - if filename.endswith('.py'): - icon = 'text-x-python.png' - mode = 'python' - if filename.endswith('.html'): - icon = 'text-uri-list.png' - mode = 'html' - if filename.endswith('.css'): - icon = 'text-uri-list.png' - mode = 'css' - if filename.endswith('.js'): - icon = 'text-uri-list.png' - mode = 'javascript' - if os.path.isdir(filename): - icon = 'folder.png' - href = '/files/%s' % filename - mode = 'dir' - if filename.endswith('.xo'): - href = '#' - return icon,mode,href - -@app.route('/') -def index(): - try: - directory=session['pwd'] - except KeyError: - directory=u"" - return vsplit(frame2="/files/%s" % directory) - -@app.route('/edit/') -@app.route('/edit/<path:filename>') -def edit(filename): - try: - if len(session['edit_history'])==6: - session['edit_history'].pop(0) - if not filename in session['edit_history']: - session['edit_history'].append(filename) - except KeyError: - session['edit_history']=[filename,] - session.modified = True - icon, mode, href = identify(filename) - content = open(filename).read().decode('utf-8') - tmpl = 'editor.html' - directory=os.path.dirname(filename) - return render_response(tmpl, dict(content=content, icon=icon,basename=os.path.basename(filename), - filename=filename, absdir=os.path.normpath(directory), mode=mode, directory=directory)) - -@app.route('/save', methods=['POST']) -def save(): - filename = request.form['filename'] - f=open(filename,"wb") - content = request.form['content'] - # Ace seems to be confused about newlines - content = content.replace('\r\n', '\n').replace('\r', '\n') - f.write(content.encode('utf-8')) - print "saving content: %s" % filename - f.close() - directory = os.path.dirname(filename) - return "saved" - -@app.route('/chdir', methods=['POST']) -def chdir(): - if request.form['oldproject']!='': - session['project_dir']=os.getenv('HOME')+'/Activities/'+request.form['oldproject'] - with open(session['project_dir']+"/activity/activity.info", 'r') as f: - for line in f: - if line.startswith('name'): - session['project_name']=line[7:-1] - session['pwd']=session['project_home_dir']="." - os.chdir(session['project_dir']) - session['project_home']='/help' - #session['edit_history']=[] - if os.path.isdir('app'): - session['pwd']=session['project_home_dir']='app' - session['project_home']='/edit/app/app.py' - elif os.path.isfile('activity.py'): - session['project_home']='/edit/activity.py' - return vsplit(frame1=session['project_home'], - frame2='/files/%s' % session['pwd']) - -@app.route('/fileshome/') -def browse_home(): - try: - home_dir = session['project_home_dir'] - except KeyError: - home_dir = "." - return browse(home_dir) - -@app.route('/files/') -@app.route('/files/<path:directory>') -def browse(directory='.'): - session['pwd']=directory - - filelist = list_files(directory) - try: - session['project_dir'] - except KeyError: - filelist=[] - files = [] - if not os.path.abspath(directory)==os.path.abspath("."): - files.append( { 'name': '..', - 'icon': 'folder.png', - 'mode': 'dir', - 'href': '/files/%s' % os.path.join(directory,"..") }) - for filename in sorted(filelist): - icon, mode, href = identify(directory + "/" + filename) - if filename.startswith('.'): #hidden files - continue - if filename.endswith('.pyc'): #lets ignore these - continue - files.append( { 'name': filename, - 'icon': icon, - 'mode': mode, - 'href': href } ) - try: - project_name=session['project_name'] - except KeyError: - project_name='None'; - return render_response('filer.html', dict(files=files, - absdir=os.path.normpath(directory), - width=len(files)*94+10,# 94px is each file and 10px margin - project_name=project_name - )) - -@app.route('/delete/<path:filename>') -def delete(filename): - os.unlink(filename) - directory = os.path.dirname(filename) - return help() +@app.route('/debug') +def debug(): + raise Warning("This is a traceback of the Construct IDE environment. This is what you'll see when there's an error in your program or you manually raise an exception.") @app.route('/shutdown') def shutdown(): shutdown_server() return 'Goodbye' -@app.route('/help') -def help(): - port=request.environ.get('SERVER_PORT') - files=list_files(os.getenv('HOME')+'/Activities') - activities = [] - for file in files: - if file.endswith("activity"): - activities.append(file) - files = [] - try: - for filename in session['edit_history']: - icon, mode, href = identify(filename) - files.append( { 'name': os.path.basename(filename), - 'icon': icon, - 'mode': mode, - 'href': href } ) - except: - pass - try: - project_name=session['project_name'] - except KeyError: - project_name='None'; - - return render_response('help.html', dict(port=port, - activities=activities, - project_name=project_name, - edit_history=files)) - -def vsplit(frame1='/help', frame2='/files/'): - return render_response('split-view.html', dict(frame1=frame1, frame2=frame2)) - -@app.route('/split') -def split(): - return vsplit() - -@app.route('/debug') -def debug(): - raise Warning("This is a traceback of the Construct IDE environment. This is what you'll see when there's an error in your program or you manually raise an exception.") - if __name__=="__main__": try: port=int(sys.argv[1]) @@ -207,5 +35,5 @@ if __name__=="__main__": port=5000 import webbrowser webbrowser.open("http://localhost:%s/" % port) - #app.run(port=port) # for local only - app.run(host='0.0.0.0', port=port) # open for all + app.run(port=port) # for local only + #app.run(host='0.0.0.0', port=port) # open for all |