forked from ocadotechnology/aimmo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun.py
executable file
·95 lines (71 loc) · 2.44 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
#!/usr/bin/env python
import logging
import minikube
import os
import subprocess
import sys
import time
from subprocess import CalledProcessError
_SCRIPT_LOCATION = os.path.abspath(os.path.dirname(__file__))
_MANAGE_PY = os.path.join(_SCRIPT_LOCATION, 'example_project', 'manage.py')
_SERVICE_PY = os.path.join(_SCRIPT_LOCATION, 'aimmo-game', 'service.py')
if __name__ == '__main__':
logging.basicConfig()
sys.path.append(os.path.join(_SCRIPT_LOCATION, 'example_project'))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example_project.settings")
def log(message):
print >> sys.stderr, message
def run_command(args, capture_output=False):
try:
if capture_output:
return subprocess.check_output(args)
else:
subprocess.check_call(args)
except CalledProcessError as e:
log('Command failed with exit status %d: %s' % (e.returncode, ' '.join(args)))
raise
PROCESSES = []
def run_command_async(args):
p = subprocess.Popen(args)
PROCESSES.append(p)
return p
def cleanup_processes():
for p in PROCESSES:
try:
p.terminate()
time.sleep(0.9)
p.kill()
except:
pass
def create_superuser_if_missing(username, password):
from django.contrib.auth.models import User
try:
User.objects.get_by_natural_key(username)
except User.DoesNotExist:
log('Creating superuser %s with password %s' % (username, password))
User.objects.create_superuser(username=username, email='[email protected]', password=password)
def main(use_minikube):
run_command(['pip', 'install', '-e', _SCRIPT_LOCATION])
run_command(['python', _MANAGE_PY, 'migrate', '--noinput'])
run_command(['python', _MANAGE_PY, 'collectstatic', '--noinput'])
create_superuser_if_missing(username='admin', password='admin')
server_args = []
if use_minikube:
minikube.start()
server_args.append('0.0.0.0:8000')
os.environ['AIMMO_MODE'] = 'minikube'
else:
time.sleep(2)
game = run_command_async(['python', _SERVICE_PY, '127.0.0.1', '5000'])
os.environ['AIMMO_MODE'] = 'threads'
server = run_command_async(['python', _MANAGE_PY, 'runserver'] + server_args)
try:
game.wait()
except NameError:
pass
server.wait()
if __name__ == '__main__':
try:
main('--kube' in sys.argv or '-k' in sys.argv)
finally:
cleanup_processes()