/
manage.py
151 lines (125 loc) · 4.21 KB
/
manage.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/usr/bin/env python
# coding=utf-8
import os
from datetime import datetime
import json
from flask import Markup
from flask import render_template
from flask import request
from flask.ext.script import Manager
from flask.ext.script import Shell
from app import create_app
from app import mongo
from app import login_manager
from app import mail
from app import redis
from app.core.models.roles import Role
from app.core.models.settings import Setting
from app.core.models.users import User
from app.core.models.posts import Post
from app.core.models.posts import Posts
from app.core.models.pages import Page
from app.core.models.pages import Pages
from app.core.models.permissions import Permission
from app.core.models.permissions_roles import PermissionsRoles
from app.core.models.tags import Tag
from app.core.models.comments import Comment
from app.core.models.comments import Comments
from app.core.models.mongo_counter import add_mongo_counters
# 启用覆盖测试
COV = None
if os.environ.get('PG_COVERAGE'):
import coverage
COV = coverage.coverage(branch=True, include='app/*')
COV.start()
# 导入.env内的环境配置
if os.path.exists('.env'):
print "Importing environment vars from .env"
for line in open('.env'):
var = line.strip().split('=')
if len(var) == 2:
os.environ[var[0]] = var[1]
# 创建App
app = create_app(os.getenv('PLOG_CONFIG') or 'default')
# 错误处理 # 蓝本不支持404和500的处理方法
@app.errorhandler(404)
def app_404(e):
return render_template('error_pages/404.html'), 404
@app.errorhandler(500)
def app_500(e):
return render_template('error_pages/500.html'), 500
@app.after_request
def app_after_request(response):
if request.endpoint != 'static':
return response
response.cache_control.max_age = 15552000
return response
# jinja_env
app.jinja_env.globals['Setting'] = Setting
app.jinja_env.globals['User'] = User
app.jinja_env.globals['Post'] = Post
app.jinja_env.globals['datetime'] = datetime
app.jinja_env.globals['json'] = json
app.jinja_env.globals['str'] = str
app.jinja_env.globals['Markup'] = Markup
manager = Manager(app)
# Manager Script上下文
def make_shell_context():
return dict(app=app, mongo=mongo, login_manager=login_manager, mail=mail, redis=redis, Role=Role, Setting=Setting,
User=User, Post=Post, Posts=Posts, Page=Page, Pages=Pages, Permission=Permission,
PermissionsRoles=PermissionsRoles, Tag=Tag, Comment=Comment, Comments=Comments)
manager.add_command('shell', Shell(make_context=make_shell_context))
@manager.command
def deploy():
"""
执行部署任务
:return:
"""
# 清空数据库
# TODO
# 为MongoDB 添加专用自增序列尾值记录表
add_mongo_counters()
# 默认角色添加
Role.insert_default_roles()
# 权限数据库索引与默认数据添加
Permission.create_table_indexes()
Permission.insert_defaults_permissions()
# 权限角色关系数据库索引与默认数据添加
PermissionsRoles.create_table_indexes()
PermissionsRoles.insert_defaults_permissions_roles()
# 文章数据库索引
Post.create_table_indexes()
# 用户数据库索引
User.create_table_indexes()
# 设置数据库索引与默认数据添加
Setting.insert_default_settings()
# 标签数据库索引
Tag.create_table_indexes()
# 评论数据库索引
Comment.create_table_indexes()
@manager.command
def test(coverage=False):
"""
测试
:param coverage 是否启用覆盖测试
:return:
"""
if coverage and not os.environ.get('PG_COVERAGE'):
import sys
os.environ['PG_COVERAGE'] = '1'
os.execvp(sys.executable, [sys.executable] + sys.argv)
import unittest
tests = unittest.TestLoader().discover('tests')
unittest.TextTestRunner(verbosity=2).run(tests)
if COV:
COV.stop()
COV.save()
print('Coverage Summary:')
COV.report()
basedir = os.path.abspath(os.path.dirname(__file__))
covdir = os.path.join(basedir, 'tests/coverage')
COV.html_report(directory=covdir)
print('HTML version: file://%s/index.html' % covdir)
COV.erase()
if __name__ == '__main__':
manager.run()