Commit fb7c8350fab4672e63f445ac7fd50d8bc0e3b8d9
1 parent
8b4dd611
Exists in
master
and in
5 other branches
Add plugins.d
Signed-off-by: Alexandre Barbosa <alexandreab@live.com> Signed-off-by: Gustavo Jaruga <darksshades@gmail.com>
Showing
3 changed files
with
44 additions
and
5 deletions
Show diff stats
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 = ['json', ] |
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('RAVEN_DSN', 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} | ... | ... |