]> jfr.im git - irc/rizon/acid.git/blame - pyva/src/main/python/pseudoclient/sys_base.py
Import acidictive 4 and pyva plugin
[irc/rizon/acid.git] / pyva / src / main / python / pseudoclient / sys_base.py
CommitLineData
685e346e
A
1import threading\r
2import MySQLdb as db\r
3\r
4class Subsystem(object):\r
5 #--------------------------------------------------------------#\r
6 # i'm not entirely sure if this functionality is still\r
7 # required, but it seems it was removed from this module\r
8 # but not from cmd_admin, so I can only assume the removal\r
9 # was not intentional.\r
10\r
11 db_up = True\r
12\r
13 @classmethod\r
14 def set_db_up(cls, up):\r
15 cls.db_up = up\r
16\r
17 @classmethod\r
18 def get_db_up(cls):\r
19 return cls.db_up\r
20\r
21 #--------------------------------------------------------------#\r
22\r
23 def __init__(self, module, options, name):\r
24 self.module = module\r
25 self.__options = options\r
26 self.__lock = threading.Lock()\r
27 self.name = name\r
28 self.__timer = None\r
29 self.conn = None\r
30 self.cursor = None\r
31 self.reload()\r
32\r
33 def db_open(self):\r
34 self.conn = db.connect(\r
35 host=self.module.config.get('database', 'host'),\r
36 user=self.module.config.get('database', 'user'),\r
37 passwd=self.module.config.get('database', 'passwd'),\r
38 db=self.module.config.get('database', 'db'),\r
39 unix_socket=self.module.config.get('database','sock')\r
40 )\r
41 self.conn.ping(True)\r
42 self.conn.autocommit(True)\r
43 self.cursor = self.conn.cursor()\r
44\r
45 def db_close(self):\r
46 if self.cursor != None:\r
47 self.cursor.close()\r
48 self.cursor = None\r
49 \r
50 if self.conn != None:\r
51 self.conn.close()\r
52 self.conn = None\r
53\r
54 def reload(self):\r
55 self.__delay = self.get_option('update_period', int, 120)\r
56\r
57 if self.__timer != None:\r
58 self.stop()\r
59 self.on_reload()\r
60 self.start()\r
61 else:\r
62 self.on_reload()\r
63\r
64 def on_reload(self):\r
65 pass\r
66\r
67 def get_option(self, name, type, default):\r
68 return self.__options.get('%s_%s' % (self.name, name), type, default)\r
69\r
70 def set_option(self, name, value):\r
71 return self.__options.set('%s_%s' % (self.name, name), value)\r
72\r
73 def start(self):\r
74 self.__timer = threading.Timer(self.__delay, self.worker)\r
75 self.__timer.daemon = True\r
76 self.__timer.start()\r
77\r
78 def stop(self):\r
79 self.__lock.acquire()\r
80\r
81 try:\r
82 if self.__timer != None:\r
83 self.__timer.cancel()\r
84 self.__timer = None\r
85 finally:\r
86 self.__lock.release()\r
87\r
88 def update(self):\r
89 self.__lock.acquire()\r
90\r
91 try:\r
92 self.commit()\r
93 finally:\r
94 self.__lock.release()\r
95\r
96 def force(self):\r
97 self.update()\r
98\r
99 def commit(self):\r
100 pass\r
101\r
102 def worker(self):\r
103 try:\r
104 if self.conn != None:\r
105 self.conn.ping(True)\r
106 finally:\r
107 pass\r
108\r
109 if self.__class__.db_up:\r
110 self.update()\r
111\r
112 self.__timer = threading.Timer(self.__delay, self.worker)\r
113 self.__timer.daemon = True\r
114 self.__timer.start()\r
115\r