Commit fb7c8350fab4672e63f445ac7fd50d8bc0e3b8d9

Authored by Alexandre Barbosa
1 parent 8b4dd611

Add plugins.d

Signed-off-by: Alexandre Barbosa <alexandreab@live.com>
Signed-off-by: Gustavo Jaruga <darksshades@gmail.com>
colab/plugins/templatetags/plugins.py
... ... @@ -29,9 +29,9 @@ def plugins_menu(context):
29 29  
30 30 menu = app.get('menu')
31 31 title = menu.get('title', app_name)
32   - links = menu.get('links', tuple()).items()
  32 + links = menu.get('links', tuple())
33 33 if context['user'].is_active:
34   - links += menu.get('auth_links', tuple()).items()
  34 + links += menu.get('auth_links', tuple())
35 35  
36 36 if not links:
37 37 continue
... ...
colab/settings.py
... ... @@ -281,6 +281,7 @@ TASTYPIE_DEFAULT_FORMATS = [&#39;json&#39;, ]
281 281  
282 282 from .utils.conf import load_yaml_settings
283 283 from .utils.conf import load_py_settings
  284 +from .utils.conf import load_colab_apps
284 285  
285 286 locals().update(load_yaml_settings())
286 287  
... ... @@ -295,6 +296,8 @@ if locals().get(&#39;RAVEN_DSN&#39;, False):
295 296 BROWSERID_ENABLED = locals().get('BROWSERID_ENABLED') or False
296 297 SOCIAL_NETWORK_ENABLED = locals().get('SOCIAL_NETWORK_ENABLED') or False
297 298  
  299 +locals().update(load_colab_apps())
  300 +
298 301 COLAB_APPS = locals().get('COLAB_APPS') or {}
299 302 PROXIED_APPS = {}
300 303  
... ...
colab/utils/conf.py
... ... @@ -76,7 +76,7 @@ def _load_py_file(py_path):
76 76 'has read rights.').format(py_path)
77 77 raise InaccessiblePySettings(msg)
78 78  
79   - return py_settings.__dict__
  79 + return py_settings
80 80  
81 81  
82 82 def load_py_settings():
... ... @@ -95,17 +95,53 @@ def load_py_settings():
95 95 sys.path.insert(0, '/etc/colab/')
96 96 sys.path.insert(0, settings_dir)
97 97  
98   - py_settings = _load_py_file(settings_module)
  98 + py_settings = _load_py_file(settings_module).__dict__
99 99  
100 100 # Try to read settings from settings.d
101 101 if os.path.exists(settings_dir):
102 102 for file_name in os.listdir(settings_dir):
103 103 if file_name.endswith('.py'):
104 104 file_module = file_name.split('.')[0]
105   - py_settings_d = _load_py_file(file_module)
  105 + py_settings_d = _load_py_file(file_module).__dict__
106 106 py_settings.update(py_settings_d)
107 107  
108 108 sys.path.remove('/etc/colab/')
109 109 sys.path.remove(settings_dir)
110 110  
111 111 return py_settings or {}
  112 +
  113 +
  114 +def load_colab_apps():
  115 + plugins_dir = '/etc/colab/plugins.d/'
  116 +
  117 + global USING_YAML_SETTINGS
  118 + if USING_YAML_SETTINGS:
  119 + return {}
  120 +
  121 + sys.path.insert(0, plugins_dir)
  122 +
  123 + COLAB_APPS = {}
  124 +
  125 + # Try to read settings from plugins.d
  126 + if os.path.exists(plugins_dir):
  127 + for file_name in os.listdir(plugins_dir):
  128 + if file_name.endswith('.py'):
  129 + file_module = file_name.split('.')[0]
  130 + py_settings_d = _load_py_file(file_module)
  131 + fields = ['urls', 'menu', 'upstream', 'middlewares',
  132 + 'dependencies', 'context_processors']
  133 +
  134 + app_name = getattr(py_settings_d, 'name', None)
  135 + if not app_name:
  136 + warnings.warn("Plugin missing name variable")
  137 + continue
  138 +
  139 + COLAB_APPS[app_name] = {}
  140 + for key in fields:
  141 + value = getattr(py_settings_d, key, None)
  142 + if value:
  143 + COLAB_APPS[app_name][key] = value
  144 +
  145 + sys.path.remove(plugins_dir)
  146 +
  147 + return {'COLAB_APPS': COLAB_APPS}
... ...