Compare View

switch
from
...
to
 
Commits (4)
colab/accounts/views.py
... ... @@ -15,7 +15,7 @@ from colab.super_archives.models import (EmailAddress,
15 15 EmailAddressValidation)
16 16 from colab.search.utils import get_collaboration_data, get_visible_threads
17 17 from colab.accounts.models import User
18   -from colab.plugins.utils.widget_manager import WidgetManager
  18 +from colab.widgets.widget_manager import WidgetManager
19 19  
20 20 from .forms import (UserCreationForm, ListsForm, UserUpdateForm)
21 21 from .utils import mailman
... ...
colab/utils/conf.py
... ... @@ -142,30 +142,38 @@ def load_widgets_settings():
142 142 '/etc/colab/widgets_settings.py')
143 143 settings_module = settings_file.split('.')[-2].split('/')[-1]
144 144 py_path = "/".join(settings_file.split('/')[:-1])
145   -
146 145 logger.info('Widgets Settings file: %s', settings_file)
147 146  
148 147 if not os.path.exists(py_path):
149   - msg = "The py file {} does not exist".format(py_path)
150   - raise InaccessibleSettings(msg)
  148 + return
151 149  
152   - py_settings = _load_py_file(settings_module, py_path)
  150 + original_path = sys.path
  151 + sys.path.append(py_path)
  152 + importlib.import_module(settings_module)
153 153  
154   - # Read settings from settings.d
155   - settings_dir = '/etc/colab/widgets.d'
  154 + # Read settings from widgets.d
  155 + settings_dir = os.getenv('COLAB_WIDGETS',
  156 + '/etc/colab/widgets.d')
156 157 logger.info('Widgets Settings directory: %s', settings_dir)
  158 + sys.path = original_path
157 159  
158 160 if not os.path.exists(settings_dir):
159   - return py_settings
  161 + return
160 162  
161 163 for file_name in os.listdir(settings_dir):
162 164 if not file_name.endswith('.py'):
163 165 continue
164 166  
  167 + original_path = sys.path
  168 + sys.path.append(settings_dir)
  169 +
165 170 file_module = file_name.split('.')[0]
166   - _load_py_file(file_module, settings_dir)
  171 + importlib.import_module(file_module)
167 172 logger.info('Loaded %s/%s', settings_dir, file_name)
168 173  
  174 + sys.path = original_path
  175 +
  176 +
169 177 def validate_database(database_dict, default_db, debug):
170 178 db_name = database_dict.get('default', {}).get('NAME')
171 179 if not debug and db_name == default_db:
... ...
colab/widgets/__init__.py 0 → 100644
colab/widgets/admin.py 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +from django.contrib import admin
  2 +
  3 +# Register your models here.
... ...
colab/widgets/migrations/__init__.py 0 → 100644
colab/widgets/models.py 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +from django.db import models
  2 +
  3 +# Create your models here.
... ...
colab/widgets/tests/__init__.py 0 → 100644
colab/widgets/tests/test_widget_manager.py 0 → 100644
... ... @@ -0,0 +1,12 @@
  1 +from django.test import TestCase
  2 +
  3 +from colab.widgets.widget_manager import WidgetManager, Widget
  4 +
  5 +class WidgetManagerTest(TestCase):
  6 +
  7 + def test_add_widgets_to_key_area(self):
  8 + area = 'profile'
  9 + WidgetManager.register_widget(area, Widget())
  10 +
  11 + self.assertEqual(len(WidgetManager.get_widgets(area)), 1)
  12 +
... ...
colab/widgets/views.py 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +from django.shortcuts import render
  2 +
  3 +# Create your views here.
... ...
colab/widgets/widget_manager.py 0 → 100644
... ... @@ -0,0 +1,53 @@
  1 +from django.utils.safestring import mark_safe
  2 +
  3 +class Widget(object):
  4 + identifier = None
  5 + name = None
  6 + default_url = None
  7 + content = ''
  8 +
  9 + def get_body(self):
  10 + # avoiding regex in favor of performance
  11 + start = self.content.find('<body>')
  12 + end = self.content.find('</body>')
  13 +
  14 + if -1 in [start, end]:
  15 + return ''
  16 +
  17 + body = self.content[start + len('<body>'):end]
  18 + return mark_safe(body)
  19 +
  20 + def get_header(self):
  21 + # avoiding regex in favor of performance
  22 + start = self.content.find('<head>')
  23 + end = self.content.find('</head>')
  24 +
  25 + if -1 in [start, end]:
  26 + return ''
  27 +
  28 + head = self.content[start + len('<head>'):end]
  29 + return mark_safe(head)
  30 +
  31 + def generate_content(self, request=None):
  32 + self.content = ''
  33 +
  34 +
  35 +class WidgetManager(object):
  36 + widget_categories = {}
  37 +
  38 + @staticmethod
  39 + def register_widget(category, widget):
  40 + if not WidgetManager.widget_categories.has_key(category):
  41 + WidgetManager.widget_categories[category] = []
  42 +
  43 + WidgetManager.widget_categories[category].append(widget)
  44 +
  45 + @staticmethod
  46 + def get_widgets(category, request=None):
  47 + if not WidgetManager.widget_categories.has_key(category):
  48 + return []
  49 +
  50 + widgets = WidgetManager.widget_categories[category]
  51 + for widget in widgets:
  52 + widget.generate_content(request)
  53 + return widgets
... ...
tests/run.py
... ... @@ -5,7 +5,9 @@ import sys
5 5  
6 6 os.environ['DJANGO_SETTINGS_MODULE'] = 'colab.settings'
7 7 os.environ['COLAB_SETTINGS'] = 'tests/colab_settings.py'
  8 +os.environ['COLAB_WIDGETS_SETTINGS'] = 'tests/widgets_settings.py'
8 9 os.environ['COLAB_PLUGINS'] = 'tests/plugins.d'
  10 +os.environ['COLAB_WIDGETS'] = 'tests/widgets.d'
9 11 os.environ['COVERAGE_PROCESS_START'] = '.coveragerc'
10 12  
11 13  
... ...
tests/widgets_settings.py 0 → 100644