This repository was archived by the owner on Jan 12, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmanager.py
More file actions
150 lines (124 loc) · 3.82 KB
/
Copy pathmanager.py
File metadata and controls
150 lines (124 loc) · 3.82 KB
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
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""这个模块用来定义命令行接口.包括服务器的启动,部署,数据库的操作等等"""
import argparse
import os
import getpass
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import parse_command_line
from app import create_app
from config import config_dict
from app.models import session_context, User
parser = argparse.ArgumentParser()
sub_parser = parser.add_subparsers(help='subcommands')
# 用户相关命令
user_parser = sub_parser.add_parser(
'user',
help='user commands'
)
user_parser.add_argument(
'user_command',
choices=('createsuperuser',),
help='user command include createsuperuser...'
)
# 服务器启动的子命令
server_parser = sub_parser.add_parser(
'start',
help='about server start, include "dev|test|prod" start mode, '
'default is dev mode',
)
server_parser.add_argument(
'-m', '--start-mode',
dest='start_mode',
choices=['dev', 'test', 'prod'],
default='dev',
help='mode for server start'
)
server_parser.add_argument(
'--host',
dest='server_host',
default='127.0.0.1',
help='host for server start'
)
server_parser.add_argument(
'--port',
dest='server_port',
default=8000,
help='port for server start'
)
# 数据库操作的子命令
db_parser = sub_parser.add_parser(
'db',
help='about db operation'
)
db_parser.add_argument(
'db_command',
choices=['makemigrations', 'migrate'],
help='make database migrations file'
)
db_parser.add_argument(
'-m', '--comment',
dest='comment',
help='alembic migrations comment text'
)
db_parser.add_argument(
'--db_mode',
choices=['dev', 'test', 'prod'],
default='dev',
help='database configure mode, default is dev(development mode)'
)
def db_operation(args):
"""数据库操作命令
首先根据模式来决定使用的数据库
"""
# 根据模式设置环境变量
config_cls = config_dict[args.db_mode]
os.environ['SA_ENGINE_STRING'] = config_cls.SQLALCHEMY_URI
if args.db_command == 'makemigrations':
alembic_command = 'alembic revision --autogenerate'
if args.comment:
alembic_command += (' -m' + '"' + args.comment + '"')
os.system(alembic_command)
elif args.db_command == 'migrate':
alembic_command = 'alembic upgrade head'
os.system(alembic_command)
def start_server(args):
"""启动服务器
:param args.start_mode:
指定服务器开始的模式,包括dev, test, prod.
分别对应"开发","测试"和“产品”配置环境.
:param args.server_host: 服务器启动所使用的host
:param args.server_port: 服务器启动所使用的port
"""
start_mode = args.start_mode
app = create_app(start_mode)
http_server = HTTPServer(app, xheaders=True)
http_server.bind(args.server_port, args.server_host)
http_server.start()
# 打印启动提示日志
parse_command_line()
app.logger.info('server start at {0}:{1}'.format(
args.server_host, args.server_port
))
IOLoop.current().start()
def create_superuser():
"""创建草鸡用户"""
email = input("输入你的邮箱: ")
password = getpass.getpass('输入你的密码: ')
with session_context() as session:
user = User(email=email, password=password, is_superuser=True)
session.add(user)
print("创建成功")
def main(args):
if getattr(args, 'start_mode', None):
# 触发服务器启动的函数
start_server(args)
if getattr(args, 'db_command', None):
db_operation(args)
if getattr(args, 'user_command', None):
if args.user_command == 'createsuperuser':
create_superuser()
if __name__ == '__main__':
args = parser.parse_args()
main(args)