예제 #1
0
    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)
예제 #2
0
    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)