]> git.openstreetmap.org Git - osqa.git/blob - forum/modules.py
deleting the test file
[osqa.git] / forum / modules.py
1 import os\r
2 import types\r
3 import re\r
4 \r
5 from django.template import Template, TemplateDoesNotExist\r
6 \r
7 MODULES_PACKAGE = 'forum_modules'\r
8 \r
9 MODULES_FOLDER = os.path.join(os.path.dirname(__file__), '../' + MODULES_PACKAGE)\r
10 \r
11 MODULE_LIST = [\r
12         __import__('forum_modules.%s' % f, globals(), locals(), ['forum_modules'])\r
13         for f in os.listdir(MODULES_FOLDER)\r
14         if os.path.isdir(os.path.join(MODULES_FOLDER, f)) and\r
15            os.path.exists(os.path.join(MODULES_FOLDER, "%s/__init__.py" % f)) and\r
16            not os.path.exists(os.path.join(MODULES_FOLDER, "%s/DISABLED" % f))\r
17 ]\r
18 \r
19 def get_modules_script(script_name):\r
20     all = []\r
21 \r
22     for m in MODULE_LIST:\r
23         try:\r
24             all.append(__import__('%s.%s' % (m.__name__, script_name), globals(), locals(), [m.__name__]))\r
25         except Exception, e:\r
26             #print script_name + ":" + str(e)\r
27             pass\r
28 \r
29     return all\r
30 \r
31 def get_modules_script_classes(script_name, base_class):\r
32     scripts = get_modules_script(script_name)\r
33     all_classes = {}\r
34 \r
35     for script in scripts:\r
36         all_classes.update(dict([\r
37             (n, c) for (n, c) in [(n, getattr(script, n)) for n in dir(script)]\r
38             if isinstance(c, (type, types.ClassType)) and issubclass(c, base_class)\r
39         ]))\r
40 \r
41     return all_classes\r
42 \r
43 def get_all_handlers(name):\r
44      handler_files = get_modules_script('handlers')\r
45 \r
46      return [\r
47         h for h in [\r
48             getattr(f, name) for f in handler_files\r
49             if hasattr(f, name)\r
50         ]\r
51 \r
52         if callable(h)\r
53      ]\r
54 \r
55 def get_handler(name, default):\r
56     all = get_all_handlers(name)\r
57     print(len(all))\r
58     return len(all) and all[0] or default\r
59 \r
60 module_template_re = re.compile('^modules\/(\w+)\/(.*)$')\r
61 \r
62 def module_templates_loader(name, dirs=None):\r
63     result = module_template_re.search(name)\r
64 \r
65     if result is not None:\r
66         file_name = os.path.join(MODULES_FOLDER, result.group(1), 'templates', result.group(2))\r
67 \r
68         if os.path.exists(file_name):\r
69             try:\r
70                 f = open(file_name, 'r')\r
71                 source = f.read()\r
72                 f.close()\r
73                 return (source, file_name)\r
74             except:\r
75                 pass\r
76 \r
77     raise TemplateDoesNotExist, name \r
78 \r
79 module_templates_loader.is_usable = True