import flask import flask.ext.login as flask_login from flask_login import current_user,login_required,login_user from flask import render_template, redirect, request, url_for, flash from flask.ext.bootstrap import Bootstrap from app import app,login_manager from .models import User from .forms import LoginForm, TrainForm, ExportDataForm, SpiderForm, JumpForm,JumpSpiderExportForm from werkzeug.utils import secure_filename import os import subprocess import time users = {'root': {'pw': 'abc123456789'}} @login_manager.user_loader def user_loader(username): if username not in users: return user = User() user.id = username return user @app.route('/', methods=['GET','POST']) @app.route('/login', methods=['GET','POST']) def login(): form = LoginForm() if form.validate_on_submit(): username = form.username.data passwd = form.password.data print username if username in users and users[username]['pw'] == passwd: user = User() user.id = username login_user(user) return redirect(request.args.get('next') or url_for('main')) flash('Invalid username or password.') return render_template('login.html', form=form) @app.route('/main', methods=['GET', 'POST']) @login_required def main(): form_1 = TrainForm() form_2 = JumpSpiderExportForm() package_dir = os.path.dirname(os.path.abspath(__file__)) shell_path = os.path.join(package_dir, '../../run.sh') if form_1.validate_on_submit(): #print 'hello' temp_list = [] type_name = form_1.type_name.data.encode('utf-8') temp_list.append(type_name) table_name = form_1.table_name.data.encode('utf-8') temp_list.append(table_name) img_dir = form_1.img_source.data.encode('utf-8') temp_list.append(img_dir) model_name = form_1.model_name.data.encode('utf-8') temp_list.append(model_name) label_name = form_1.label_source.data.encode('utf-8') temp_list.append(label_name) feat_type = form_1.feat_type.data.encode('utf-8') temp_list.append(feat_type) cmd_result = ','.join(temp_list) print cmd_result if type_name == 'train': if label_name == 'null': start = time.time() retcode = subprocess.call(shell_path + ' ' + cmd_result, shell = True) end = time.time() time_consume = str(end - start) if retcode == 0: flash('train without label file, ' + 'time consume: ' + time_consume + 's') else: flash('wrong job') else: start = time.time() retcode = subprocess.call(shell_path + ' ' + cmd_result, shell = True) end = time.time() time_consume = str(end - start) if retcode == 0: flash('train with label file, '+ 'time consume: ' + time_consume + 's') else: flash('wrong job') if type_name == 'analysis': if img_dir == 'null': start = time.time() retcode = subprocess.call(shell_path + ' ' + cmd_result, shell = True) end = time.time() time_consume = str(end - start) if retcode == 0: flash('analysis data from hbase table, ' + 'time consume: ' + time_consume + 's') else: flash('wrong job') else: start = time.time() retcode = subprocess.call(shell_path + ' ' + cmd_result, shell = True) end = time.time() time_consume = str(end - start) if retcode == 0: flash('analysis data from local directory, ' + 'time consume: ' + time_consume + 's') else: flash('wrong job') if form_2.validate_on_submit(): type_name = form_2.type_name.data.encode('utf-8') if type_name == 'spider': return redirect(url_for('spider')) if type_name =='export': return redirect(url_for('export')) return render_template('main.html', form_1=form_1, form_2=form_2,name = current_user.id) @app.route('/export', methods=['GET', 'POST']) @login_required def export(): form_1 = ExportDataForm() form_2 = JumpForm() package_dir = os.path.dirname(os.path.abspath(__file__)) shell_path = os.path.join(package_dir, '../../export.sh') if form_1.validate_on_submit(): temp_list = [] type_name = form_1.type_name.data.encode('utf-8') temp_list.append(type_name) table_name = form_1.table_name.data.encode('utf-8') temp_list.append(table_name) dst_dir = form_1.dst_dir.data.encode('utf-8') temp_list.append(dst_dir) cmd_result = ','.join(temp_list) print cmd_result start = time.time() retcode = subprocess.call(shell_path + ' ' + cmd_result, shell = True) end = time.time() time_consume = str(end - start) if retcode == 0: flash('export data from hbase to local directory, ' + 'time consume: ' + time_consume + 's') else: flash('wrong job') if form_2.validate_on_submit(): return redirect(url_for('main')) return render_template('export.html', form_1=form_1, form_2=form_2) @app.route('/spider', methods=['GET', 'POST']) @login_required def spider(): form_1 = SpiderForm() form_2 = JumpForm() package_dir = os.path.dirname(os.path.abspath(__file__)) shell_path = os.path.join(package_dir, '../../spider1.sh') if form_1.validate_on_submit(): temp_list = [] spider_source = form_1.spider_source.data.encode('utf-8') temp_list.append(spider_source) print spider_source table_name = form_1.table_name.data.encode('utf-8') temp_list.append(table_name) cmd_result = ' '.join(temp_list) start = time.time() retcode = subprocess.call(shell_path + ' ' + cmd_result, shell = True) end = time.time() time_consume = str(end - start) if retcode == 0: flash('scrape data from web to hbase, ' + 'time consume: ' + time_consume + 's') else: flash('wrong job') if form_2.validate_on_submit(): return redirect(url_for('main')) return render_template('spider.html', form_1=form_1, form_2 = form_2) @app.errorhandler(404) def page_not_found(e): return render_template('404.html'), 404 @login_manager.unauthorized_handler def unauthorized_handler(): return 'Unauthorized'