/
run.py
139 lines (104 loc) · 3.78 KB
/
run.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
# -*- coding: utf-8 -*-
# python imports
import os
import subprocess
import sys, traceback
try:
import argparse
except:
print 'error: please install argparse (sudo pip install argparse)'
exit(0)
fwpath = os.path.abspath(os.path.dirname(__file__))
venv_dir = os.path.join(fwpath, 'venv')
def get_parser():
parser = argparse.ArgumentParser(description='ijust project')
# Add arguments
parser.add_argument(
'-r', '--run', help='run server', required=False, action='store_true')
parser.add_argument(
'-co', '--config-object', help='configure from object', metavar='CONFIG_OBJECT', dest='conf_obj', required=False, type=str, nargs=1)
parser.add_argument(
'-cf', '--config-file', help='import local config file', metavar='CONFIG_FILE', dest='conf_file', required=False, type=str, nargs=1)
parser.add_argument(
'-u', '--update', help='update requirements', required=False, action='store_true')
parser.add_argument(
'-crdb', '--create-database', help='create database', required=False, action='store_true')
parser.add_argument(
'-drdb', '--drop-database', help='drop database', required=False, action='store_true')
parser.add_argument(
'--test-all', help='test all resources', required=False, action='store_true')
parser.add_argument(
'--test-one', help='test resource', metavar='RESOURCE', dest='resource', required=False, type=str, nargs=1)
return parser
def run():
app.run(host='0.0.0.0', port=5000)
def develop():
configure_app(app, DevelopmentConfig())
def product():
configure_app(app, ProductionConfig())
def import_local_config_file(filename):
if not os.path.isabs(filename):
filename = os.path.join(os.getcwd(), filename)
configure_app(app, filename, is_pyfile=True)
def update_requirements():
subprocess.call([os.path.join(venv_dir, 'bin/pip'), 'install', '-r', os.path.join(fwpath, 'requirements')])
def create_database():
from project import app
from project.extensions import db
import project.models
with app.app_context():
db.create_all()
db.session.commit()
def drop_database():
from project import app
from project.extensions import db
import project.models
with app.app_context():
db.drop_all()
db.session.commit()
def test(resource=None):
try:
import pyresttest
except ImportError:
print ' *** please install/update requirements or fix the problem ***'
traceback.print_exc(file=sys.stdout)
exit(0)
from tests import run
run(resource)
if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
if args.update:
update_requirements()
elif args.create_database:
create_database()
elif args.drop_database:
drop_database()
elif args.test_all:
test()
elif args.resource:
test(args.resource[0])
elif args.run:
# project imports
try:
from project import app
from project.application import configure_app
from project.config import DefaultConfig, DevelopmentConfig, ProductionConfig
except ImportError:
print ' *** please install/update requirements or fix the problem ***'
traceback.print_exc(file=sys.stdout)
exit(0)
if args.conf_obj:
conf_obj = args.conf_obj[0]
if conf_obj == 'develop':
develop()
elif conf_obj == 'product':
product()
else:
print "error: undefined config '%s'" % conf_obj
exit(0)
if args.conf_file:
import_local_config_file(args.conf_file[0])
run()
else:
parser.print_help()