cobalt.py

Sat, 08 Aug 2015 14:21:51 +0300

author
Teemu Piippo <tsapii@utu.fi>
date
Sat, 08 Aug 2015 14:21:51 +0300
changeset 150
2fd1f6ee05f5
parent 146
c17b82b1f573
child 152
1b734faab67a
permissions
-rwxr-xr-x

whitespace

0
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env python
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 '''
124
7b2cd8b1ba86 - now with extra license headers
Teemu Piippo <crimsondusk64@gmail.com>
parents: 96
diff changeset
3 Copyright 2014-2015 Teemu Piippo
0
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4 All rights reserved.
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 Redistribution and use in source and binary forms, with or without
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 modification, are permitted provided that the following conditions
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
8 are met:
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
9
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 1. Redistributions of source code must retain the above copyright
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
11 notice, this list of conditions and the following disclaimer.
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
12 2. Redistributions in binary form must reproduce the above copyright
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
13 notice, this list of conditions and the following disclaimer in the
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
14 documentation and/or other materials provided with the distribution.
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
15 3. The name of the author may not be used to endorse or promote products
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
16 derived from this software without specific prior written permission.
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
17
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
18 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
19 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
20 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
21 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
22 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
23 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
24 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
25 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
26 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
27 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
28 '''
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
29
146
c17b82b1f573 Mercurial handling major overhaul. Also get some stuff ready for Python 3
Teemu Piippo <tsapii@utu.fi>
parents: 140
diff changeset
30 from __future__ import print_function
0
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
31 import asyncore
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
32 import sys
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
33 import traceback
5
b6d2b7de0a6d - added .restart and .update
Santeri Piippo <crimsondusk64@gmail.com>
parents: 4
diff changeset
34 import os
65
20bd76353eb5 - modularized the configuration and made it more systematic
Teemu Piippo <crimsondusk64@gmail.com>
parents: 63
diff changeset
35 import modulecore as ModuleCore
73
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
36 import configfile as ConfigFile
65
20bd76353eb5 - modularized the configuration and made it more systematic
Teemu Piippo <crimsondusk64@gmail.com>
parents: 63
diff changeset
37 from configfile import Config
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
38 import hgpoll as HgPoll
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
39 import bt as Bt
73
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
40 import irc as Irc
92
da291d9426ea - first implementation of REST
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
41 import rest as Rest
73
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
42
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
43 if __name__ != '__main__':
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
44 raise ImportError ('cobalt may not be imported as a module')
20
2603faf5f91b - don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents: 19
diff changeset
45
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
46 g_BotActive = False
20
2603faf5f91b - don't run as root without asking first, added more startup messages
Santeri Piippo <crimsondusk64@gmail.com>
parents: 19
diff changeset
47
73
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
48 #
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
49 # Exception handling
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
50 #
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
51 def handle_exception(excType, excValue, trace):
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
52 excepterm (traceback.format_exception(excType, excValue, trace))
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
53
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
54 def excepterm (data):
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
55 for segment in data:
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
56 for line in segment.splitlines():
94
2c93636202a5 - argrrgh
Teemu Piippo <crimsondusk64@gmail.com>
parents: 92
diff changeset
57 #print line
73
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
58 Irc.broadcast (line)
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
59
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
60 for client in Irc.all_clients:
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
61 if len(data) > 0:
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
62 client.exceptdie()
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
63 else:
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
64 client.quit_irc()
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
65
96
24f0b13e87d3 - fixed REST
Teemu Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
66 if g_BotActive:
24f0b13e87d3 - fixed REST
Teemu Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
67 restart_self()
24f0b13e87d3 - fixed REST
Teemu Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
68 else:
24f0b13e87d3 - fixed REST
Teemu Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
69 quit()
73
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
70
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
71 def restart_self():
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
72 os.execl (sys.executable, sys.executable, * sys.argv)
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
73
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
74 def main():
73
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
75 global g_BotActive
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
76 sys.excepthook = handle_exception
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
77 all_clients = []
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
78 g_BotActive = False
2
1a24dd2d598e - added a basic /idgames search
Santeri Piippo <crimsondusk64@gmail.com>
parents: 1
diff changeset
79
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
80 try:
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
81 uid = os.geteuid()
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
82 except:
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
83 uid = -1
3
53486417a8e5 - handle the case where the mantisbt is not available
Santeri Piippo <crimsondusk64@gmail.com>
parents: 2
diff changeset
84
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
85 if uid == 0 and raw_input ('Do you seriously want to run cobalt as root? [y/N] ') != 'y':
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
86 quit()
65
20bd76353eb5 - modularized the configuration and made it more systematic
Teemu Piippo <crimsondusk64@gmail.com>
parents: 63
diff changeset
87
73
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
88 ConfigFile.init()
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
89 ModuleCore.init_data()
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
90 Bt.init()
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
91 HgPoll.init()
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
92
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
93 try:
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
94 autoconnects = Config.get_value ('autoconnect', [])
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
95
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
96 if len (autoconnects) == 0:
146
c17b82b1f573 Mercurial handling major overhaul. Also get some stuff ready for Python 3
Teemu Piippo <tsapii@utu.fi>
parents: 140
diff changeset
97 print ('Nowhere to connect.')
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
98 quit()
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
99
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
100 for aconn in autoconnects:
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
101 for conndata in Config.get_nodelist ('connections'):
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
102 if conndata.get_value ('name') == aconn:
96
24f0b13e87d3 - fixed REST
Teemu Piippo <crimsondusk64@gmail.com>
parents: 94
diff changeset
103 Irc.irc_client (conndata, 0)
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
104 break
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
105 else:
146
c17b82b1f573 Mercurial handling major overhaul. Also get some stuff ready for Python 3
Teemu Piippo <tsapii@utu.fi>
parents: 140
diff changeset
106 raise ValueError ('unknown autoconnect entry "%s"' % (aconn))
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
107
92
da291d9426ea - first implementation of REST
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
108 # Start the REST server
140
631451eecefc Update:
Teemu Piippo <crimsondusk64@gmail.com>
parents: 132
diff changeset
109 if Config.get_node ('rest').get_value ('active', True):
631451eecefc Update:
Teemu Piippo <crimsondusk64@gmail.com>
parents: 132
diff changeset
110 Rest.RESTServer()
92
da291d9426ea - first implementation of REST
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
111
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
112 g_BotActive = True
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
113 asyncore.loop()
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
114 except KeyboardInterrupt:
73
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
115 for client in Irc.all_clients:
72
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
116 client.keyboardinterrupt()
2266d6d73de3 - commit work done on splitting bt/hg
Teemu Piippo <crimsondusk64@gmail.com>
parents: 67
diff changeset
117 quit()
73
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
118 except Irc.RestartError as e:
d67cc4fbc3f1 - modularization complete!!
Teemu Piippo <crimsondusk64@gmail.com>
parents: 72
diff changeset
119 excepterm (e.message)
0
4904744b40eb - initial commit
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
120
132
a22c50f52a23 lots of new stuff
Teemu Piippo <crimsondusk64@gmail.com>
parents: 124
diff changeset
121 main()

mercurial