OSDN Git Service

8e1cd734c96a907fd286b9c7566139345dc3af78
[fukui-no-namari/fukui-no-namari.git] / src / FukuiNoNamari / board_plugins.py
1 # Copyright (C) 2006 by Aiwota Programmer
2 # aiwotaprog@tetteke.tk
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
18 import os.path
19 from glob import glob
20 import imp
21 import traceback
22 import itertools
23
24 import config
25
26 base_path = os.path.join(config.get_config_dir_path(), "scripts")
27 version = (0, 1)
28
29 def generate_board_plugin():
30     plugin_list = []
31     for module_path in glob(os.path.join(base_path, "board_*.py")):
32         module_name, ext = os.path.splitext(os.path.basename(module_path))
33         try:
34             try:
35                 file, filename, description = imp.find_module(
36                     module_name, [base_path])
37                 module = imp.load_module(
38                     module_name, file, filename, description)
39             finally:
40                 if file:
41                     file.close()
42         except ImportError:
43             traceback.print_exc()
44         else:
45             yield module
46
47 def check_compatible(plugin_version):
48     if version[0] > plugin_version[0]:
49         return False
50     elif version[0] < plugin_version[0]:
51         return True
52     else:
53         return version[1] <= plugin_version[1]
54
55 def load_plugin(plugin_module, treeview, menuitem):
56     try:
57         if check_compatible(plugin_module.version):
58             plugin_module.BoardPlugin(treeview, menuitem)
59         else:
60             print plugin_module.__file__, "not compatible", \
61                   plugin_module.version
62     except:
63         traceback.print_exc()
64     
65 def load(treeview, menuitem):
66     for i in itertools.imap(lambda e: load_plugin(e, treeview, menuitem),
67                             generate_board_plugin()): -1