- Files:
-
- 3 added
- 14 modified
-
ClueMapperThemer/trunk/setup.py (modified) (1 diff)
-
ClueMapperThemer/trunk/src/clue/themer/tests.py (modified) (2 diffs)
-
ClueMapperThemer/trunk/src/clue/themer/theme.py (modified) (7 diffs)
-
ClueMapperSecure/trunk/src/clue/secure/tests.py (modified) (2 diffs)
-
buildout/trunk (modified) (1 prop)
-
buildout/trunk/bootstrap.py (added)
-
buildout/trunk/buildout.cfg (added)
-
ClueMapper/trunk/HISTORY.txt (modified) (1 diff)
-
ClueMapper/trunk/setup.py (modified) (1 diff)
-
ClueMapper/trunk/src/clue/app/utils.py (modified) (4 diffs)
-
ClueMapper/trunk/src/clue/app/redirect.py (modified) (2 diffs)
-
ClueMapper/trunk/src/clue/app/controller.py (modified) (4 diffs)
-
ClueMapper/trunk/src/clue/app/environinit.py (modified) (3 diffs)
-
ClueMapper/trunk/src/clue/app/config.py (modified) (5 diffs)
-
ClueMapper/trunk/src/clue/app/templates/error-404.html (added)
-
ClueMapperTools/trunk/src/clue/tools/testing.py (modified) (1 diff)
-
ClueMapperTools/trunk/src/clue/tools/tests.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
/ClueMapperThemer/trunk/setup.py
r10 r26 37 37 'setuptools', 38 38 'deliverance', 39 'lxml >= 2.0. 1, <= 2.0.9999',39 'lxml >= 2.0.4, <= 2.0.9999', 40 40 'Paste >= 1.6, <= 1.6.9999', 41 41 ], -
/ClueMapperThemer/trunk/src/clue/themer/tests.py
r10 r24 1 1 import unittest 2 2 import doctest 3 3 4 4 5 def test_suite(): … … 13 14 return suite 14 15 16 15 17 def main(): 16 18 runner = unittest.TextTestRunner() -
/ClueMapperThemer/trunk/src/clue/themer/theme.py
r10 r24 6 6 WORKINGDIR = 'cluemapper.workingdir' 7 7 8 8 9 class Theme(object): 9 10 """A Theme.""" 10 11 11 def __init__(self, themeid, name, path=None, rule_uri=None, theme_uri=None): 12 def __init__(self, themeid, name, path=None, 13 rule_uri=None, theme_uri=None): 12 14 self.themeid = themeid 13 15 self.name = name … … 24 26 rule_uri='/.defaulttheme/rules/rules.xml', 25 27 theme_uri='/.defaulttheme/static/theme.html') 28 26 29 27 30 class ThemeManager(object): … … 63 66 return self._cached_themes.get(themeid, None) 64 67 68 65 69 class ThemeFilter(object): 66 70 """Middleware for vhost handling for deliverance theming. … … 81 85 82 86 def _fix_vhost(self, environ): 83 # this is a fix for Deliverance since it doesn't deal with virtual hosts84 # v ery well87 # this is a fix for Deliverance since it doesn't deal with 88 # virtual hosts very well 85 89 forwarded = environ.get('HTTP_X_FORWARDED_HOST', None) 86 90 if forwarded: … … 94 98 return newthemeid 95 99 return None 96 100 97 101 def __call__(self, environ, start_response): 98 102 self._act_on_theme(environ) 99 103 self._fix_vhost(environ) 100 104 return self._app(environ, start_response) 105 101 106 102 107 def make_filter(app, global_conf, *args, **kwargs): … … 117 122 return ThemeFilter(deliver, workingdir) 118 123 124 119 125 def switch_theme(environ, themeid): 120 126 """Update deliverance-required environ entries to let it know which theme … … 122 128 123 129 >>> switch_theme({}, 'foo') 124 ('/.userthemes/foo/rules/rules.xml', '/.userthemes/foo/static/theme.html')130 ('/.userthemes/foo/rules/rules.xml', ...) 125 131 >>> switch_theme({}, DEFAULT_THEME.themeid) 126 132 ('/.defaulttheme/rules/rules.xml', '/.defaulttheme/static/theme.html') -
/ClueMapperSecure/trunk/src/clue/secure/tests.py
r11 r24 1 1 import unittest 2 2 import doctest 3 3 4 4 5 def test_suite(): … … 10 11 return suite 11 12 13 12 14 def main(): 13 15 runner = unittest.TextTestRunner() -
/buildout/trunk
-
Property
svn:ignore set
to
.installed.cfg
bin
develop-eggs
etc
parts
coverage
-
Property
svn:ignore set
to
-
/ClueMapper/trunk/HISTORY.txt
r12 r30 9 9 ================ 10 10 11 * unreleased11 * Added 404 handling for when an invalid project is requested. -
/ClueMapper/trunk/setup.py
r12 r27 39 39 'repoze.trac >= 0.5, <= 0.5.9999', 40 40 'Genshi >= 0.5dev', 41 'Pygments >= 0.9, <= 0.9.9999', 42 'pytz == 2007k', 43 'docutils >= 0.4, <= 0.4.9999', 44 'pysqlite >= 2.4.1, <= 2.4.9999', 45 'Paste >= 1.6, <= 1.6.9999', 41 46 ], 42 47 test_suite="clue.app.tests.test_suite", -
/ClueMapper/trunk/src/clue/app/utils.py
r12 r25 3 3 import logging 4 4 logger = logging.getLogger('cluemapper') 5 5 6 6 7 class Sleeper(object): … … 39 40 self.event.set() 40 41 42 41 43 def get_prjid(environ): 42 44 """Get the active project id from environ. … … 62 64 return None 63 65 64 class AccessError(Exception): pass 66 67 class AccessError(Exception): 68 pass 69 65 70 66 71 def build_path(workingdir, p): … … 69 74 return os.path.abspath(p) 70 75 76 71 77 class PathBuilder(object): 78 72 79 def __init__(self, basepath): 73 80 self.basepath = basepath -
/ClueMapper/trunk/src/clue/app/redirect.py
r12 r25 1 1 2 2 3 class RedirectApp(object): … … 30 31 return '' 31 32 33 32 34 def make_app(global_config, main_redirect, relative_redirect=None): 33 35 '''Factory for redirect app. -
/ClueMapper/trunk/src/clue/app/controller.py
r12 r30 21 21 22 22 return cmp(prj1.name, prj2.name) 23 24 25 class ControllerException(Exception): 26 pass 27 28 29 class NoSuchProjectError(ControllerException): 30 31 def __init__(self, prjid, msg=None): 32 self.prjid = prjid 33 msg = msg or 'No such project: ' + prjid 34 super(NoSuchProjectError, self).__init__(msg) 23 35 24 36 … … 49 61 50 62 def __call__(self, environ, start_response): 63 try: 64 return self._call(environ, start_response) 65 except NoSuchProjectError, err: 66 kwargs = {'error_message': str(err), 67 'error_extended': None} 68 start_response('404 NOT FOUND', [('Content-Type', 'text/html')]) 69 loader = self.global_config['cluemapper.templateloader'] 70 return loader.load('error-404.html').generate(**kwargs).render() 71 72 def _call(self, environ, start_response): 51 73 path = environ.get('PATH_INFO', None) 52 74 if not path or path == '/': … … 75 97 % prjid) 76 98 else: 77 raise ValueError('No project with that id')99 raise NoSuchProjectError(prjid) 78 100 newenv = dict(environ) 79 101 newenv['SCRIPT_NAME'] = '%s/%s/%s' % (script, here, prjid) … … 109 131 cluemapperconfig = self.global_config['cluemapper.config'] 110 132 pmanager = project.ProjectManager(environ, self.global_config) 111 tmanager = theme.ThemeManager(self.global_config['cluemapper.workingdir']) 133 wd = self.global_config['cluemapper.workingdir'] 134 tmanager = theme.ThemeManager(wd) 112 135 loader = self.global_config['cluemapper.templateloader'] 113 136 prjs = sorted(pmanager.projects, name_sort) 114 137 115 username = environ.get('REMOTE_USER', ' anonymous')138 username = environ.get('REMOTE_USER', '') 116 139 logout = '' 117 140 if username != 'anonymous': -
/ClueMapper/trunk/src/clue/app/environinit.py
r12 r25 1 1 2 2 3 class EnvironInitFilter(object): … … 4 5 from global_conf. 5 6 6 >>> f = EnvironInitFilter(lambda x,y: None, {'cluemapper.templateloader': None, 7 ... 'cluemapper.config': None, 8 ... 'cluemapper.workingdir': None}) 7 >>> gf = {'cluemapper.templateloader': None, 8 ... 'cluemapper.config': None, 9 ... 'cluemapper.workingdir': None} 10 >>> f = EnvironInitFilter(lambda x,y: None, gf) 9 11 >>> f({}, None) 10 12 """ … … 13 15 self.app = app 14 16 self.global_conf = global_conf 15 17 16 18 def _sync_environ(self, environ): 17 19 for x in ('templateloader', 'config', 'workingdir'): -
/ClueMapper/trunk/src/clue/app/config.py
r12 r25 147 147 def save(self): 148 148 if not self.filename: 149 raise ConfigError('Cannot save file since filename was never specified') 150 149 raise ConfigError('Cannot save file since filename was ' 150 'never specified') 151 151 152 if os.path.exists(self.filename) and self._file_changed: 152 153 raise ConfigError('Configuration data on the filesystem has ' … … 239 240 projects = ','.join([prjid for prjid, p in self.projects]) 240 241 managers = ','.join([x for x in self.managers]) 241 return '<ClueMapperConfig projects=%s; managers=%s>' % (projects, managers) 242 return '<ClueMapperConfig projects=%s; managers=%s>' \ 243 % (projects, managers) 242 244 243 245 __str__ = __repr__ … … 254 256 } 255 257 258 256 259 def ensure_cm_config(filename): 257 260 config = ClueMapperConfig(filename) … … 261 264 262 265 return config 266 263 267 264 268 def load_config(workingdir): … … 273 277 changed = True 274 278 if not config['base'].get('auth_file', None): 275 af = config['base']['auth_file'] = pb(os.path.join('etc',276 'cluemapper.passwd'))279 rel = os.path.join('etc', 'cluemapper.passwd') 280 af = config['base']['auth_file'] = pb(rel) 277 281 changed = True 278 282 if not os.path.exists(af): -
/ClueMapperTools/trunk/src/clue/tools/testing.py
r9 r24 1 1 from clue.tools import fileio 2 2 import atexit 3 3 4 4 5 class Mock(object): -
/ClueMapperTools/trunk/src/clue/tools/tests.py
r9 r24 1 1 import unittest 2 2 import doctest 3 3 4 4 5 def test_suite(): … … 12 13 return suite 13 14 15 14 16 def main(): 15 17 runner = unittest.TextTestRunner()
