]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/modules/__init__.py
q may not be there
[osqa.git] / forum / modules / __init__.py
index cd59875d65c3f0cc1b1acfc7fc6c767666f69464..6942c9115e491886b5bcf6a6f104ec7aaaa07bd3 100644 (file)
@@ -1,41 +1,29 @@
-import os
 import types
 import types
-import re
+import logging
 
 
-from django.template import Template, TemplateDoesNotExist
 from django.conf import settings
 
 from django.conf import settings
 
-MODULES_PACKAGE = 'forum_modules'
-
-MODULES_FOLDER = os.path.join(os.path.dirname(__file__), '../../' + MODULES_PACKAGE)
-
-DISABLED_MODULES = getattr(settings, 'DISABLED_MODULES', [])
-
-MODULE_LIST = filter(lambda m: getattr(m, 'CAN_USE', True), [
-        __import__('forum_modules.%s' % f, globals(), locals(), ['forum_modules'])
-        for f in os.listdir(MODULES_FOLDER)
-        if os.path.isdir(os.path.join(MODULES_FOLDER, f)) and
-           os.path.exists(os.path.join(MODULES_FOLDER, "%s/__init__.py" % f)) and
-           not f in DISABLED_MODULES
-])
+def get_modules_folder():
+    return get_modules_folder.value
 
 def get_modules_script(script_name):
     all = []
 
 
 def get_modules_script(script_name):
     all = []
 
-    for m in MODULE_LIST:
+    for m in settings.MODULE_LIST:
+        if hasattr(m, script_name):
+            all.append(getattr(m, script_name))
+            continue
+
         try:
             all.append(__import__('%s.%s' % (m.__name__, script_name), globals(), locals(), [m.__name__]))
         try:
             all.append(__import__('%s.%s' % (m.__name__, script_name), globals(), locals(), [m.__name__]))
-        except ImportError, e:
-            #repr(type(e)) + m.__name__ + ":" + str(e)
-            pass
-        except:
-            pass
-            #import sys, traceback
-            #traceback.print_exc(file=sys.stdout)
+        except Exception, e:
+            if isinstance(e, ImportError) and str(e).endswith(script_name):
+                continue
+            logging.exception("Error importing %s from module %s", script_name, m)
 
     return all
 
 
     return all
 
-def get_modules_scipt_implementations(script_name, impl_class):
+def get_modules_script_implementations(script_name, impl_class):
     scripts = get_modules_script(script_name)
     all_impls = {}
 
     scripts = get_modules_script(script_name)
     all_impls = {}
 
@@ -85,23 +73,4 @@ def get_handler(name, default):
     all = get_all_handlers(name)
     return len(all) and all[0] or default
 
     all = get_all_handlers(name)
     return len(all) and all[0] or default
 
-module_template_re = re.compile('^modules\/(\w+)\/(.*)$')
-
-def module_templates_loader(name, dirs=None):
-    result = module_template_re.search(name)
-
-    if result is not None:
-        file_name = os.path.join(MODULES_FOLDER, result.group(1), 'templates', result.group(2))
-
-        if os.path.exists(file_name):
-            try:
-                f = open(file_name, 'r')
-                source = f.read()
-                f.close()
-                return (source, file_name)
-            except:
-                pass
-
-    raise TemplateDoesNotExist, name 
-
-module_templates_loader.is_usable = True
+from decorators import decorate, ReturnImediatelyException