class TreeBrowser(BaseController): tree_widget = SCMTreeWidget() FileBrowserClass=None def __init__(self, commit, tree, path='', parent=None): self._commit = commit self._tree = tree self._path = path self._parent = parent @expose('jinja:allura:templates/repo/tree.html') @with_trailing_slash def index(self, **kw): c.tree_widget = self.tree_widget return dict( repo=c.app.repo, commit=self._commit, tree=self._tree, path=self._path, parent=self._parent) @expose() def _lookup(self, next, *rest): if not rest and request.response_ext: # Directory name may ends with file extension (e.g. `dir.rdf`) # dispatching system will cut extension, so we need to restore it next = "%s%s" % (next, request.response_ext) request.response_ext = None request.response_type = None next = h.really_unicode(unquote(next)) if not rest: # Might be a file rather than a dir filename = h.really_unicode( unquote( request.environ['PATH_INFO'].rsplit('/')[-1])) if filename: try: obj = self._tree[filename] except KeyError: raise exc.HTTPNotFound() if isinstance(obj, M.repo.Blob): return self.FileBrowserClass( self._commit, self._tree, filename), rest elif rest == ('index', ): rest = (request.environ['PATH_INFO'].rsplit('/')[-1],) tree = self._tree[next] if tree is None: raise exc.HTTPNotFound return self.__class__( self._commit, tree, self._path + '/' + next, self), rest
class TreeBrowser(BaseController, DispatchIndex): tree_widget = SCMTreeWidget() FileBrowserClass = None subscribe_form = SubscribeForm() def __init__(self, commit, tree, path='', parent=None): self._commit = commit self._tree = tree self._path = path self._parent = parent @expose('jinja:allura:templates/repo/tree.html') @with_trailing_slash def index(self, **kw): c.tree_widget = self.tree_widget c.subscribe_form = self.subscribe_form tool_subscribed = M.Mailbox.subscribed() tarball_url = None if asbool(tg.config.get('scm.repos.tarball.enable', False)): cutout = len('tree' + self._path) if request.path.endswith('/') and not self._path.endswith('/'): cutout += 1 tarball_url = quote('%starball' % unquote(request.path)[:-cutout]) return dict( repo=c.app.repo, commit=self._commit, tree=self._tree, path=self._path, parent=self._parent, tool_subscribed=tool_subscribed, tarball_url=tarball_url) @expose() def _lookup(self, next, *rest): next = h.really_unicode(unquote(next)) if not rest: # Might be a file rather than a dir filename = h.really_unicode( unquote( request.environ['PATH_INFO'].rsplit('/')[-1])) if filename: try: obj = self._tree[filename] except KeyError: raise exc.HTTPNotFound() if isinstance(obj, M.repository.Blob): return self.FileBrowserClass( self._commit, self._tree, filename), rest elif rest == ('index', ): rest = (request.environ['PATH_INFO'].rsplit('/')[-1],) try: tree = self._tree[next] except KeyError: raise exc.HTTPNotFound return self.__class__( self._commit, tree, self._path + '/' + next, self), rest @expose('json:') @require_post() @validate(subscribe_form) def subscribe(self, subscribe=None, unsubscribe=None, **kw): if subscribe: M.Mailbox.subscribe() elif unsubscribe: M.Mailbox.unsubscribe() return { 'status': 'ok', 'subscribed': M.Mailbox.subscribed(), }