Beispiel #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)
Beispiel #2
0
    def test_dashboard_hook(self):
        """Testing dashboard sidebar extension hooks"""
        entry = {
            'label': 'My Hook',
            'url': 'foo-url',
        }

        hook = DashboardHook(extension=self.extension, entries=[entry])
        context = Context({
            'dashboard_hook': hook,
        })

        entries = hook.entries
        self.assertEqual(len(entries), 1)
        self.assertEqual(entries[0], entry)

        t = Template("{% load rb_extensions %}"
                     "{% for hook in dashboard_hook.entries %}"
                     "{{hook.label}} - {{hook.url}}"
                     "{% endfor %}")

        self.assertEqual(
            t.render(context).strip(), '%(label)s - %(url)s' % entry)
Beispiel #3
0
from django.conf import settings
from django.conf.urls.defaults import patterns, include
from reviewboard.extensions.base import Extension
{%- if dashboard_link is not none %}
from reviewboard.extensions.hooks import DashboardHook, URLHook
{% endif %}

{%- if dashboard_link is not none %}
class {{class_name}}URLHook(URLHook):
    def __init__(self, extension, *args, **kwargs):
        pattern = patterns('', (r'^{{package_name}}/',
                            include('{{package_name}}.urls')))
        super({{class_name}}URLHook, self).__init__(extension, pattern)


class {{class_name}}DashboardHook(DashboardHook):
    def __init__(self, extension, *args, **kwargs):
        entries = [{
            'label': '{{dashboard_link}}',
            'url': settings.SITE_ROOT + '{{package_name}}/',
        }]
        super({{class_name}}DashboardHook, self).__init__(extension,
                entries=entries, *args, **kwargs)
{%- endif %}

class {{class_name}}(Extension):
{%- if is_configurable %}
    is_configurable = True

{%- endif %}
    def __init__(self, *args, **kwargs):
Beispiel #4
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)