Exemple #1
0
    def decorator(fn):
        def params(request, id, slug=None):
            user = get_object_or_404(User, id=id)
            if private and not (user == request.user
                                or request.user.is_superuser):
                raise ReturnImediatelyException(
                    HttpResponseUnauthorized(request))

            if render_to and (not render_to(user)):
                raise ReturnImediatelyException(
                    HttpResponseRedirect(user.get_profile_url()))

            return [request, user], {}

        decorated = decorate.params.withfn(params)(fn)

        def result(context, request, user):
            try:
                user.username = user.username.decode("utf8")
            except Exception:
                pass
            rev_page_title = user.username + " - " + tab_description

            context.update({
                "tab":
                "users",
                "active_tab":
                tab_name,
                "tab_description":
                tab_description,
                "page_title":
                rev_page_title,
                "can_view_private": (user == request.user)
                or request.user.is_superuser
            })
            return render_to_response(template,
                                      context,
                                      context_instance=RequestContext(request))

        decorated = decorate.result.withfn(result,
                                           needs_params=True)(decorated)

        if tabbed:

            def url_getter(vu):
                try:
                    return reverse(fn.__name__,
                                   kwargs={
                                       'id': vu.id,
                                       'slug': slugify(vu.username)
                                   })
                except NoReverseMatch:
                    return reverse(fn.__name__, kwargs={'id': vu.id})

            ui.register(
                ui.PROFILE_TABS,
                ui.ProfileTab(tab_name, tab_title, tab_description, url_getter,
                              private, render_to, weight))

        return decorated
Exemple #2
0
    def decorator(fn):
        def params(request, id=None, slug=None):
            # Get the user object by id if the id parameter has been passed
            if id is not None:
                user = get_object_or_404(User, id=id)
            # ...or by slug if the slug has been given
            elif slug is not None:
                try:
                    user = User.objects.get(username__iexact=slug)
                except User.DoesNotExist:
                    raise Http404

            if private and not (user == request.user
                                or request.user.is_superuser):
                raise ReturnImediatelyException(
                    HttpResponseUnauthorized(request))

            if render_to and (not render_to(user)):
                raise ReturnImediatelyException(
                    HttpResponseRedirect(user.get_profile_url()))

            return [request, user], {
                'slug': slug,
            }

        decorated = decorate.params.withfn(params)(fn)

        def result(context_or_response, request, user, **kwargs):
            rev_page_title = smart_unicode(
                user.username) + " - " + tab_description

            # Check whether the return type of the decorated function is a context or Http Response
            if isinstance(context_or_response, HttpResponse):
                response = context_or_response

                # If it is a response -- show it
                return response
            else:
                # ...if it is a context move forward, update it and render it to response
                context = context_or_response

            context.update({
                "tab":
                "users",
                "active_tab":
                tab_name,
                "tab_description":
                tab_description,
                "page_title":
                rev_page_title,
                "can_view_private": (user == request.user)
                or request.user.is_superuser
            })
            return render_to_response(template,
                                      context,
                                      context_instance=RequestContext(request))

        decorated = decorate.result.withfn(result,
                                           needs_params=True)(decorated)

        if tabbed:

            def url_getter(vu):
                try:
                    return reverse(fn.__name__,
                                   kwargs={
                                       'id': vu.id,
                                       'slug':
                                       slugify(smart_unicode(vu.username))
                                   })
                except NoReverseMatch:
                    try:
                        return reverse(fn.__name__, kwargs={'id': vu.id})
                    except NoReverseMatch:
                        return reverse(fn.__name__,
                                       kwargs={
                                           'slug':
                                           slugify(smart_unicode(vu.username))
                                       })

            ui.register(
                ui.PROFILE_TABS,
                ui.ProfileTab(tab_name, tab_title, tab_description, url_getter,
                              private, render_to, weight))

        return decorated