mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
# coding: utf-8
|
|
import os, sys
|
|
import re
|
|
from django.conf import settings
|
|
from django.conf.urls.defaults import include
|
|
|
|
def isinstalled(ext):
|
|
return "modoboa.extensions.%s" % ext in settings.INSTALLED_APPS
|
|
|
|
def get_ext_module(extname):
|
|
modname = "modoboa.extensions.%s" % extname
|
|
if not sys.modules.has_key(modname):
|
|
__import__(modname)
|
|
return sys.modules[modname]
|
|
|
|
def get_extension_infos(name):
|
|
return get_ext_module(name).infos()
|
|
|
|
def loadextensions(prefix):
|
|
# To avoid a circular import...
|
|
from modoboa.admin.models import Extension
|
|
|
|
basedir = "%s/extensions" % settings.MODOBOA_DIR
|
|
result = []
|
|
for f in os.listdir(basedir):
|
|
if not os.path.isdir("%s/%s" % (basedir, f)):
|
|
continue
|
|
if not isinstalled(f):
|
|
continue
|
|
try:
|
|
ext = Extension.objects.get(name=f)
|
|
if ext.enabled:
|
|
ext.load()
|
|
except Extension.DoesNotExist:
|
|
pass
|
|
module = get_ext_module(f)
|
|
baseurl = module.baseurl if hasattr(module, "baseurl") \
|
|
else f
|
|
result += [(r'%s%s/' % (prefix, baseurl),
|
|
include("modoboa.extensions.%s.urls" % f))]
|
|
return result
|
|
|
|
def list_extensions():
|
|
basedir = "%s/extensions" % settings.MODOBOA_DIR
|
|
result = []
|
|
for d in os.listdir(basedir):
|
|
if not os.path.isdir("%s/%s" % (basedir, d)):
|
|
continue
|
|
if not isinstalled(d):
|
|
continue
|
|
isvalid = True
|
|
for f in ['urls.py', '__init__.py', 'views.py']:
|
|
if not os.path.exists("%s/%s/%s" % (basedir, d, f)):
|
|
isvalid = False
|
|
break
|
|
if isvalid:
|
|
module = __import__(d, globals(), locals())
|
|
try:
|
|
infos = module.infos()
|
|
infos["id"] = d
|
|
if os.path.isdir("%s/%s/templates" % (basedir, d)):
|
|
infos["templates"] = True
|
|
else:
|
|
infos["templates"] = False
|
|
result += [infos]
|
|
except AttributeError:
|
|
pass
|
|
return result
|