Commit 55cd90e7d66923158e1abd8b66f6b392833615dd

Authored by Alexandre Barbosa
1 parent b5a489a0

Update test settings and settings module import

Signed-off-by: Alexandre Barbosa <alexandreab@live.com>
Signed-off-by: Gustavo Jaruga <darksshades@gmail.com>
colab/utils/conf.py
... ... @@ -38,7 +38,7 @@ def _load_yaml_file(yaml_path):
38 38  
39 39 def load_yaml_settings():
40 40 settings_dir = '/etc/colab/settings.d'
41   - yaml_path = os.getenv('COLAB_SETTINGS', '/etc/colab/settings.yaml')
  41 + yaml_path = os.getenv('COLAB_YAML_SETTINGS', '/etc/colab/settings.yaml')
42 42  
43 43 if os.path.exists(yaml_path):
44 44 global USING_YAML_SETTINGS
... ... @@ -71,24 +71,37 @@ class InaccessiblePySettings(ImproperlyConfigured):
71 71 Check if the file exists and if you have read permissions."""
72 72  
73 73  
74   -def _load_py_file(py_path):
  74 +def _load_py_file(py_path, path):
  75 + original_path = sys.path
  76 +
  77 + sys.path = [path]
75 78 try:
76 79 py_settings = importlib.import_module(py_path)
77 80  
78   - except:
  81 + except IOError:
79 82 msg = ('Could not open settings file {}. Please '
80 83 'check if the file exists and if user '
81 84 'has read rights.').format(py_path)
82 85 raise InaccessiblePySettings(msg)
83 86  
84   - return py_settings
  87 + except SyntaxError as excpt:
  88 + msg = ('Syntax Error: {}'.format(excpt))
  89 + raise InaccessiblePySettings(msg)
  90 +
  91 + finally:
  92 + sys.path = original_path
  93 +
  94 + py_setting = {var: getattr(py_settings, var) for var in dir(py_settings)
  95 + if not var.startswith('__')}
  96 +
  97 + return py_setting
85 98  
86 99  
87 100 def load_py_settings():
88 101 settings_dir = '/etc/colab/settings.d'
89   - settings_module = 'settings'
90   - py_path = os.getenv('COLAB_SETTINGS',
91   - "/etc/colab/{}.py".format(settings_module))
  102 + settings_file = os.getenv('COLAB_SETTINGS', '/etc/colab/settings.py')
  103 + settings_module = settings_file.split('.')[-2].split('/')[-1]
  104 + py_path = "/".join(settings_file.split('/')[:-1])
92 105  
93 106 global USING_YAML_SETTINGS
94 107 if not os.path.exists(py_path) and not USING_YAML_SETTINGS:
... ... @@ -97,34 +110,28 @@ def load_py_settings():
97 110 elif USING_YAML_SETTINGS:
98 111 return {}
99 112  
100   - sys.path.insert(0, '/etc/colab/')
101   - sys.path.insert(0, settings_dir)
102   -
103   - py_settings = _load_py_file(settings_module).__dict__
  113 + py_settings = _load_py_file(settings_module, py_path)
104 114  
105 115 # Try to read settings from settings.d
  116 +
106 117 if os.path.exists(settings_dir):
  118 + return py_settings
107 119 for file_name in os.listdir(settings_dir):
108 120 if file_name.endswith('.py'):
109 121 file_module = file_name.split('.')[0]
110   - py_settings_d = _load_py_file(file_module).__dict__
  122 + py_settings_d = _load_py_file(file_module, settings_dir)
111 123 py_settings.update(py_settings_d)
112 124  
113   - sys.path.remove('/etc/colab/')
114   - sys.path.remove(settings_dir)
115   -
116   - return py_settings or {}
  125 + return py_settings
117 126  
118 127  
119 128 def load_colab_apps():
120   - plugins_dir = '/etc/colab/plugins.d/'
  129 + plugins_dir = os.getenv('COLAB_PLUGINS', '/etc/colab/plugins.d/')
121 130  
122 131 global USING_YAML_SETTINGS
123 132 if USING_YAML_SETTINGS:
124 133 return {}
125 134  
126   - sys.path.insert(0, plugins_dir)
127   -
128 135 COLAB_APPS = {}
129 136  
130 137 # Try to read settings from plugins.d
... ... @@ -132,7 +139,7 @@ def load_colab_apps():
132 139 for file_name in os.listdir(plugins_dir):
133 140 if file_name.endswith('.py'):
134 141 file_module = file_name.split('.')[0]
135   - py_settings_d = _load_py_file(file_module)
  142 + py_settings_d = _load_py_file(file_module, plugins_dir)
136 143 fields = ['urls', 'menu', 'upstream', 'middlewares',
137 144 'dependencies', 'context_processors']
138 145  
... ... @@ -147,8 +154,6 @@ def load_colab_apps():
147 154 if value:
148 155 COLAB_APPS[app_name][key] = value
149 156  
150   - sys.path.remove(plugins_dir)
151   -
152 157 return {'COLAB_APPS': COLAB_APPS}
153 158  
154 159  
... ...
tests/config_settings.py 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +SECRET_KEY = 'ddddddddddddddddddddddddddddddddddddddddddddddddddddddaddddddddd'
  2 +
  3 +DATABASES = {
  4 + 'default': {
  5 + 'ENGINE': 'django.db.backends.postgresql_psycopg2',
  6 + 'HOST': 'localhost',
  7 + 'NAME': 'colab',
  8 + 'USER': 'colab',
  9 + 'PASSWORD': 'colab',
  10 + }
  11 +}
... ...
tests/plugins.d/gitlab.py 0 → 100644
... ... @@ -0,0 +1,39 @@
  1 +from django.utils.translation import ugettext_lazy as _
  2 +
  3 +name = 'colab.plugins.gitlab'
  4 +verbose_name = 'Gitlab Proxy'
  5 +
  6 +upstream = 'localhost'
  7 +#middlewares = []
  8 +
  9 +menu = {
  10 +'title': _('Code'),
  11 +'links': (
  12 + (_('Public Projects'), 'public/projects'),
  13 +),
  14 +'auth_links': (
  15 + (_('Profile'), 'profile'),
  16 + (_('New Project'), 'projects/new'),
  17 + (_('Projects'), 'dashboard/projects'),
  18 + (_('Groups'), 'profile/groups'),
  19 + (_('Issues'), 'dashboard/issues'),
  20 + (_('Merge Requests'), 'dashboard/merge_requests'),
  21 +
  22 +),
  23 +}
  24 +
  25 +
  26 +# dpaste:
  27 +# dependencies:
  28 +# - 'mptt'
  29 +# urls:
  30 +# include: 'dpaste.urls.dpaste'
  31 +# prefix: '^paste/'
  32 +# namespace: 'dpaste'
  33 +# menu:
  34 +# title: 'Dpaste'
  35 +# links:
  36 +# Public Projects: '/paste'
  37 +# auth_links:
  38 +# Profile: '/projects'
  39 +# New Project: '/projects/new'
... ...
tests/run.py
... ... @@ -4,7 +4,8 @@ import os
4 4 import sys
5 5  
6 6 os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.settings'
7   -os.environ['COLAB_SETTINGS'] = 'tests/settings.yaml'
  7 +os.environ['COLAB_SETTINGS'] = 'tests/config_settings.py'
  8 +os.environ['PLUGINS_SETTINGS'] = 'tests/plugins.d'
8 9 os.environ['COVERAGE_PROCESS_START'] = '.coveragerc'
9 10 os.environ['REUSE_DB'] = '0'
10 11  
... ...