def __getattribute__(self, name): """ Get Attribute from module At this point, Reviewboard extensions dont provide a way to get Request object during every page load. The Dashboard hook gets its entries when its loaded and uses it for all pages. This method uses a (ugly) hack to get the stacktrace from the current page and get the request object(and hence the user object) so I can do user specific things. This will change in the future when RB provides per-page hooks (as in NavigationBarHook) """ if name == 'entries': import sys f = sys._getframe() username = None while f: request = f.f_locals.get('request') if isinstance(request, HttpRequest): username = request.user.username break f = f.f_back site_root = settings.SITE_ROOT entries = [ { 'label': 'My Feeds', 'url': '#', 'subitems': [ { 'label': 'RSS', 'url': "%sfeeds/feed/%s" % (site_root, username) }, { 'label': 'Atom 1', 'url': "%sfeeds/feed/%s?type=atom" % (site_root, username) } ] }, { 'label': 'All Review Feeds', 'url': "%sfeeds/r/" % (site_root,) } ] return entries else: return DashboardHook.__getattribute__(self, name)
def __getattribute__(self, name): """ Get Attribute from module At this point, Reviewboard extensions dont provide a way to get Request object during every page load. The Dashboard hook gets its entries when its loaded and uses it for all pages. This method uses a (ugly) hack to get the stacktrace from the current page and get the request object(and hence the user object) so I can do user specific things. This will change in the future when RB provides per-page hooks (as in NavigationBarHook) """ if name == 'entries': import sys f = sys._getframe() username = None while f: request = f.f_locals.get('request') if isinstance(request, HttpRequest): username = request.user.username break f = f.f_back if len(self.extension.settings['selected_reports']) == 0: return # Set the basic details for the hooks (minus subitems) entries = [ { 'label': 'Reports', 'url': '#', 'subitems': [] } ] # Populate the subitems with what reports have been configured for report in self.extension.settings['selected_reports']: if report in self.report_details: entries[0]['subitems'].append(self.report_details[report]) user = User.objects.filter(username=username) repositories = Repository.objects.filter(Q(public=1) | Q(users__in=user) | Q(review_groups__users__in=user)) if len(repositories) == 0: return entries else: if 'filter_by_repo' in \ self.extension.settings['selected_reports']: filter_entries = { 'label': 'Filter by Repository', 'url': '#', } subitems = [] for repo in repositories: subitem = {'label': str(repo.name), 'url': settings.SITE_ROOT + "customreports/?name=filter_by_repo&object=" + str(repo.id) } subitems.append(subitem) filter_entries['subitems'] = subitems entries.append(filter_entries) return entries else: return DashboardHook.__getattribute__(self, name)