forked from miguelgrinberg/flack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
manage.py
executable file
·117 lines (93 loc) · 3.34 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
#!/usr/bin/env python
import os
import subprocess
import sys
import eventlet
eventlet.monkey_patch()
from flask_script import Manager, Command, Server as _Server, Option
from flack import create_app, db, socketio
manager = Manager(create_app)
class Server(_Server):
help = description = 'Runs the Socket.IO web server'
def get_options(self):
options = (
Option('-h', '--host',
dest='host',
default=self.host),
Option('-p', '--port',
dest='port',
type=int,
default=self.port),
Option('-d', '--debug',
action='store_true',
dest='use_debugger',
help=('enable the Werkzeug debugger (DO NOT use in '
'production code)'),
default=self.use_debugger),
Option('-D', '--no-debug',
action='store_false',
dest='use_debugger',
help='disable the Werkzeug debugger',
default=self.use_debugger),
Option('-r', '--reload',
action='store_true',
dest='use_reloader',
help=('monitor Python files for changes (not 100%% safe '
'for production use)'),
default=self.use_reloader),
Option('-R', '--no-reload',
action='store_false',
dest='use_reloader',
help='do not monitor Python files for changes',
default=self.use_reloader),
)
return options
def __call__(self, app, host, port, use_debugger, use_reloader):
# override the default runserver command to start a Socket.IO server
if use_debugger is None:
use_debugger = app.debug
if use_debugger is None:
use_debugger = True
if use_reloader is None:
use_reloader = app.debug
socketio.run(app,
host=host,
port=port,
debug=use_debugger,
use_reloader=use_reloader,
**self.server_options)
manager.add_command("runserver", Server())
class CeleryWorker(Command):
"""Starts the celery worker."""
name = 'celery'
capture_all_args = True
def run(self, argv):
ret = subprocess.call(
['celery', 'worker', '-A', 'flack.celery'] + argv)
sys.exit(ret)
manager.add_command("celery", CeleryWorker())
@manager.command
def createdb(drop_first=False):
"""Creates the database."""
if drop_first:
db.drop_all()
db.create_all()
@manager.command
def test():
"""Runs unit tests."""
tests = subprocess.call(['python', '-c', 'import tests; tests.run()'])
sys.exit(tests)
@manager.command
def lint():
"""Runs code linter."""
lint = subprocess.call(['flake8', '--ignore=E402', 'flack/',
'manage.py', 'tests/']) == 0
if lint:
print('OK')
sys.exit(lint)
if __name__ == '__main__':
if sys.argv[1] == 'test' or sys.argv[1] == 'lint':
# small hack, to ensure that Flask-Script uses the testing
# configuration if we are going to run the tests
os.environ['FLACK_CONFIG'] = 'testing'
manager.run()