forked from Thatonesexyguy/gadget
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
85 lines (61 loc) · 1.92 KB
/
main.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
#!/usr/bin/env python
import sys
import os
import signal
import traceback
from twisted.internet import reactor
from gadget.globals import Globals
from gadget.commands import Commands
from gadget.plugins import load_plugins
from gadget.protocols import load_protocols
from gadget.messages import load_routes
realStdout = sys.stdout
realStderr = sys.stderr
def make_replacement(file):
class wrapper(object):
@staticmethod
def write(*args):
file.write(*args)
file.flush()
return wrapper()
sys.stdout = make_replacement(realStdout)
sys.stderr = make_replacement(realStderr)
def get_settings():
try:
import gadget_settings as settings
except ImportError:
import gadget_defaults as settings
print "Warning: gadget_settings.py not found - creating with defaults"
with open("gadget_settings.py", "w") as f:
f.write("from gadget_defaults import *\n\n")
except Exception as e:
print "Exception raised by gadget_settings.py:"
traceback.print_exc()
raise SystemExit
return settings
def sighup(signum, frame): #reload
reactor.stop()
Globals.restart = True
def sigquit(signum, frame): #quit
reactor.stop()
Globals.restart = False
def main():
if not os.path.exists("data/"):
os.mkdir("data/")
Globals.settings = get_settings()
Globals.commands = Commands()
Globals.commands.init_commands()
load_plugins()
load_protocols()
load_routes()
try:
signal.signal(signal.SIGQUIT, sigquit)
signal.signal(signal.SIGHUP, sighup)
except AttributeError: #windows compatability
pass
reactor.run()
if Globals.restart:
sys.argv[0] = os.path.abspath(sys.argv[0])
os.execv("/usr/bin/env", ["env", "python"] + sys.argv)
if __name__ == '__main__':
main()