Changeset 3377
- Timestamp:
- 03/17/08 14:23:11 (9 months ago)
- Files:
-
- tracforgeplugin/0.11/setup.py (modified) (2 diffs)
- tracforgeplugin/0.11/tracforge/admin/admin.py (modified) (3 diffs)
- tracforgeplugin/0.11/tracforge/admin/db_default.py (modified) (1 diff)
- tracforgeplugin/0.11/tracforge/admin/__init__.py (modified) (1 diff)
- tracforgeplugin/0.11/tracforge/admin/model.py (modified) (11 diffs)
- tracforgeplugin/0.11/tracforge/linker/auth.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
tracforgeplugin/0.11/setup.py
r3248 r3377 14 14 version = '1.1', 15 15 packages = ['tracforge', 16 'tracforge/subscriptions',17 16 'tracforge/admin', 18 17 'tracforge/linker', … … 39 38 'tracforge.linker = tracforge.linker', 40 39 ], 40 'console_scripts': [ 41 'tracforge-helper = tracforge.admin.constructor:main', 42 ], 41 43 }, 42 44 43 install_requires = [ 'TracWebAdmin'],45 install_requires = ['Trac'], 44 46 ) tracforgeplugin/0.11/tracforge/admin/admin.py
r1572 r3377 1 # Created by Noah Kantrowitz on 2008-02-19. 2 # Copyright (c) 2008 Noah Kantrowitz. All rights reserved. 3 import os.path 4 1 5 from trac.core import * 2 3 from webadmin.web_ui import IAdminPageProvider 6 from trac.admin.api import IAdminPanelProvider 7 from trac.web.chrome import add_script 8 from trac.util.compat import sorted 4 9 5 10 from model import Project, Prototype … … 8 13 """A module to manage projects in TracForge.""" 9 14 10 implements(IAdminPa geProvider)15 implements(IAdminPanelProvider) 11 16 12 17 # IAdminPageProvider methods 13 def get_admin_pa ges(self, req):18 def get_admin_panels(self, req): 14 19 if req.perm.has_permission('TRACFORGE_ADMIN'): 15 20 yield ('tracforge', 'TracForge', 'admin', 'Project Admin') 16 21 17 def process_admin_request(self, req, cat, page, path_info): 22 def render_admin_panel(self, req, cat, page, path_info): 23 data = {} 24 18 25 if req.method == 'POST': 19 26 if 'create' in req.args.keys(): # Project creation … … 59 66 elif 'delete' in req.args.keys(): # Project deleteion 60 67 raise TracError, 'Not implemented yet. Sorry.' 61 62 #self.log.debug('TracForge: Starting data grab') 63 projects = [Project(self.env, n) for n in Project.select(self.env)] 64 #self.log.debug('TracForge: Done with data grab') 65 66 #self.log.debug('TracForge: Starting data grab') 67 project_data = {} 68 for proj in projects: 69 #self.log.debug('TracForge: Getting data for %s', proj.name) 70 project_data[proj.name] = { 71 'fullname': proj.valid and proj.env.project_name or '', 72 'env_path': proj.env_path, 73 } 74 #self.log.debug('TracForge: Done with data grab') 75 76 req.hdf['tracforge.projects'] = project_data 77 req.hdf['tracforge.prototypes'] = Prototype.select(self.env) 78 79 return 'admin_tracforge.cs', None 68 69 data['projects'] = sorted([Project(self.env, n) for n in Project.select(self.env)], key=lambda p: p.name) 70 data['prototypes'] = Prototype.select(self.env) 71 data['env_base_path'] = os.path.join(os.path.dirname(self.env.path), '') 72 73 add_script(req, 'tracforge/js/typewatch1.1.js') 74 return 'admin_tracforge_projects.html', data 80 75 tracforgeplugin/0.11/tracforge/admin/db_default.py
r2635 r3377 17 17 Column('stderr'), 18 18 ], 19 #Table('tracforge_project_output', key=('ts'19 # Table('tracforge_project_output', key=('ts' 20 20 Table('tracforge_members', key=('project', 'username'))[ 21 21 Column('project'), tracforgeplugin/0.11/tracforge/admin/__init__.py
r2163 r3377 1 import api1 #import api 2 2 import admin 3 import membership4 import perm5 import perm_admin6 import prototypes7 import prototypes_admin8 import dispatch3 #import membership 4 #import perm 5 #import perm_admin 6 #import prototypes 7 #import prototypes_admin 8 #import dispatch tracforgeplugin/0.11/tracforge/admin/model.py
r2635 r3377 1 from trac.env import Environment 2 from trac.web.main import _open_environment 1 from trac.env import open_environment 3 2 from trac.config import Configuration, Section 4 3 … … 70 69 yield row[0] 71 70 71 72 72 class Project(object): 73 73 """Model object for TracForge projects.""" … … 92 92 93 93 exists = property(lambda self: self.env_path is not None) 94 94 95 95 def _get_env(self): 96 96 if not self._env: 97 97 assert self.exists, "Can't use a non-existant project" 98 98 try: 99 self._env = _open_environment(self.env_path)99 self._env = open_environment(self.env_path, use_cache=True) 100 100 self._valid = True 101 101 except Exception, e: … … 103 103 return self._env 104 104 env = property(_get_env) 105 105 106 106 def _get_valid(self): 107 unused = self.env# This will make sure that we have tried loading the env at least once107 self._get_env() # This will make sure that we have tried loading the env at least once 108 108 return self._valid 109 109 valid = property(_get_valid) 110 110 111 full_name = property(lambda self: self.valid and self.env.project_name or '') 112 111 113 def save(self, db=None): 112 114 handle_commit = False … … 120 122 if not cursor.rowcount: 121 123 cursor.execute('INSERT INTO tracforge_projects (name, env_path) VALUES (%s, %s)',(self.name, self.env_path or '')) 122 123 if handle_commit: 124 db.commit() 125 124 125 if handle_commit: 126 db.commit() 127 126 128 def delete(self, db=None): 127 129 assert self.exists … … 136 138 if handle_commit: 137 139 db.commit() 138 139 140 140 141 def __contains__(self, key): … … 151 152 select = classmethod(select) 152 153 154 # XXX: Should be from_env_path <NPK> 153 155 def by_env_path(cls, env, env_path, db=None): 154 156 """Find a Project based on its env_path.""" … … 163 165 name = row[0] 164 166 return Project(env, name, db) 165 by_env_path = classmethod(by_env_path) 167 by_env_path = classmethod(by_env_path) 168 166 169 167 170 class Prototype(list): … … 169 172 170 173 def __init__(self, env, tag, db=None): 171 """Initialize a new Prototype. `env inthe master environment."""174 """Initialize a new Prototype. `env` is the master environment.""" 172 175 self.env = env 173 176 self.tag = tag … … 189 192 190 193 cursor.execute('DELETE FROM tracforge_prototypes WHERE tag=%s', (self.tag,)) 191 for data, i in zip(self, xrange(len(self))): 192 action = args = None 193 if isinstance(data, dict): 194 action = data['action'] 195 args = data['args'] 196 elif isinstance(data, (tuple, list)): 197 action = data[0] 198 args = data[1] 199 else: 200 raise TypeError('Invalid type %s in prototype'%type(data)) 201 cursor.execute('INSERT INTO tracforge_prototypes (tag, step, action, args) VALUES (%s, %s, %s, %s)', (self.tag, i, action, args)) 194 for i, data in enumerate(self): 195 cursor.execute('INSERT INTO tracforge_prototypes (tag, step, action, args) VALUES (%s, %s, %s, %s)', (self.tag, i, data[0], data[1])) 202 196 203 197 if handle_commit: … … 215 209 216 210 if handle_commit: 217 db.commit() 211 db.commit() 218 212 219 213 def __contains__(self, other): 220 fn = None 221 if isinstance(other, (str, unicode)): 214 if isinstance(other, basestring): 222 215 fn = lambda a,b: a == b[0] # Check if the string is an action in this prototype 223 el if isinstance(other, (tuple, list)):216 else: 224 217 fn = lambda a,b: a[0] == b[0] and a[1] == b[1] 225 elif isinstance(other, dict):226 fn = lambda a,b: a['action'] == b[0] and a['args'] == b[1]227 218 228 219 for x in self: 229 if isinstance(x, dict):230 x = (x['action'], x['args'])231 220 if fn(other, x): 232 221 return True tracforgeplugin/0.11/tracforge/linker/auth.py
r2798 r3377 58 58 def pre_process_request(self, req, handler): 59 59 if req.path_info.startswith('/login') or req.path_info.startswith('/logout'): 60 old_redirect = req.redirect 60 61 def my_redirect(*args, **kwords): 61 62 # Munge the cookie path … … 73 74 Request.redirect(req, referer) 74 75 75 Request.redirect(req, *args, **kwords)76 old_redirect(req, *args, **kwords) 76 77 77 assert repr(req.redirect).startswith('<bound method'), 'Someone else changed req.redirect first'78 78 req.redirect = my_redirect 79 79
