#!/usr/bin/env python # coding=utf-8 # @author roowe # Mail bestluoliwe@gmail.com # Time-stamp: <2011-08-08 13:00:50 Monday by roowe> from bottle import run, route, get, post, request, response from bottle import static_file from bottle import template, TEMPLATE_PATH ,redirect from db import * import os import logging from bottle import debug debug(True) FORMAT = '%(asctime)s %(message)s' logging.basicConfig(format=FORMAT) logger = logging.getLogger() logger.setLevel(logging.DEBUG) hg=fortel_hg() HG_TEM="/home/roowe/work/Mercurial/templates/" HG_STATIC="{0}static/".format(HG_TEM) HG_REPO="/home/roowe/work/Mercurial/hg-repo/" TEMPLATE_PATH.append(HG_TEM) @route('/static/:filename') def server_static(filename): return static_file(filename, root=HG_STATIC) @route('/template/:filename') def server_static(filename): return static_file(filename, root=HG_TEM) @route('/project/static/:filename') def server_static(filename): redirect('/static/{0}'.format(filename)) def check_signin(): user_name = str(request.get_cookie("account", secret="some-secret-key")).lower() return user_name @route('/index') def index(): info = "" info += '''
''' Flag = 1 for root, dirs, files in os.walk(HG_REPO): for d in dirs: if os.path.exists(os.path.join(os.path.join(root, d), ".hg")): ans = hg.info_project(d) if Flag: Flag = 0 info += ''' '''.format(d, ans[0], ans[2]) else: Flag = 1 info += ''' '''.format(d, ans[0], ans[2]) break info += '''
所有項目信息
Project Name Description Contact Last change
{0} {1} -- {2}
{0} {1} -- {2}
''' return template('index', all_Project_info = info) @get('/new_project') def new_project_page(): user_name = check_signin() if not user_name: return template("login_page_after", title="首頁", message="請先登錄") res = '''

Allow_push''' for user in session.query(User).order_by(User.id): if user.name == user_name: res += ''''''.format(user.name) else: res += ''''''.format(user.name) res += '''

''' return template("new_project", allname=res) @post('/new_project') def new_project(): user_name = check_signin() project_name = str(request.forms.get('project_name')) description = str(request.forms.get('description')) logger.debug("description is %s", description) allow_read = "*" allow_push = "" Flag = 0 for user in session.query(User).order_by(User.id): tmp_name = request.forms.get(user.name) if tmp_name: if Flag: allow_push += ", " allow_push += str(tmp_name) Flag = 1 logger.debug("%s %s %s %s", project_name, description, user_name, allow_push) hg.create_project(project_name, description, user_name, allow_read, allow_push); return template("message", title="首頁", message="創建成功") @route('/manage_project') def manage_project(): user_name = check_signin() info = "" info += '''
''' Flag = 1 No_Project = 1 for root, dirs, files in os.walk(HG_REPO): for d in dirs: if os.path.exists(os.path.join(os.path.join(root, d), ".hg")): query = session.query(Project).filter_by(project_name=d).first() if query and query.project_owner == user_name: No_Project = 0 ans = hg.info_project(d) if Flag: Flag = 0 info += ''' '''.format(d, ans[0], ans[2]) else: Flag = 1 info += ''' '''.format(d, ans[0], ans[2]) break info += '''
你的項目信息
Project Name Description Contact Last change
{0} {1} -- {2}
{0} {1} -- {2}
''' if No_Project: return template('message', title="首頁", message="你還沒有創建過項目") else: return template('index', all_Project_info = info) @get('/project/:project_name') def show(project_name): info = "" ans = hg.info_project(project_name) info += '''
{0}的信息
Project Name{0}
Description{1}
Contact{2}
Last change{3}
Last push user{4}
Allow_read{5}
Allow_push{6}
'''.format(project_name, ans[0], '--', ans[2], ans[1], ans[3], ans[4]) project_owner = session.query(Project).filter_by(project_name=project_name).first().project_owner if check_signin != 'None' and project_owner == check_signin(): info += '''

添加新的Allow_push''' for user in session.query(User).order_by(User.id): if user.name not in ans[4]: info += ''''''.format(user.name) info += '''

''' return template('single_project', title=project_name, show=info) @post('/project/:project_name') def show(project_name): for user in session.query(User).order_by(User.id): tmp_name = request.forms.get(user.name) if tmp_name: hg.project_add_push(project_name,str(tmp_name)) logger.debug("re") return template('message', title='首頁',message="添加成功") @get('/register') def signup_page(): return template('register') @post('/register') def register(): user_name = str(request.forms.get('user_name')).lower() password = str(request.forms.get('password')) logger.debug("user %s ps %s", user_name, password) repeat_password = request.forms.get('repeat_password') res_message = "" if password != repeat_password: res_message = "密码不一致" if hg.add_user(user_name, password): res_message = "该账户已被注册" else: res_message = "注册成功" return template('signup_result', title=res_message, message=res_message) @get('/login') def signin_page(): if check_signin() != "none": redirect("/index") return template('login_page') @post('/login') def signin(): user_name = str(request.forms.get('user_name')).lower() password = str(request.forms.get('password')) query = session.query(User).filter_by(name=user_name).first() res_message = "" if query and str(query.name) == user_name and str(query.password) == password: response.set_cookie("account", user_name, secret='some-secret-key') redirect("/index") else: res_message = "Login failed" return template('login_page_after', title=res_message, message=res_message) @route('/logout') def logout(): user_name = request.get_cookie("account", secret="some-secret-key") res_mes = "" if user_name: response.delete_cookie("account") res_mes = "Logout Successly" else: res_mes = "請先登錄" return template('logout', message=res_mes) @get('/change_ps') def change_ps(): if not check_signin(): return template("login_page_after", title="首頁",message="請先登錄") return template("change_ps") @post('/change_ps') def change_ps(): user_name = check_signin() new_password = str(request.forms.get('new_password')) repeat_password = str(request.forms.get('repeat_password')) if hg.change_ps(user_name, new_password, repeat_password): return template('message', title='首頁',message="密碼不一致") else: return template('message', title='首頁',message="修改成功") run(reloader=True, host="0.0.0.0", port=8080)