GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

SearchView.get_context_data()   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 9
rs 9.6666
cc 2
1
from django.core.exceptions import PermissionDenied
2
from django.http import HttpResponseRedirect
3
from django.shortcuts import get_object_or_404, render
4
from django.views import generic
5
6
from simple_forums import forms, models
7
from simple_forums.backends.search import get_search_class
8
from simple_forums.mixins import LoginRequiredMixin
9
from simple_forums.utils import thread_detail_url
10
11
12
class SearchView(generic.View):
13
    """ View for searching """
14
15
    template_name = 'simple_forums/search.html'
16
    query_kwarg = 'q'
17
18
    def get(self, request, *args, **kwargs):
19
        """ Show the search form and results if applicable """
20
        self.args = args
21
        self.kwargs = kwargs
22
        self.request = request
23
24
        return render(request, self.template_name, self.get_context_data())
25
26
    def get_context_data(self, **kwargs):
27
        context = dict()
28
29
        query = self.get_query()
30
        if query is not None:
31
            context['query'] = query
32
            context['results'] = self.get_queryset()
33
34
        return context
35
36
    def get_query(self):
37
        """ Return the query passed as a GET parameter """
38
        return self.request.GET.get(self.query_kwarg, None)
39
40
    def get_queryset(self):
41
        """ Return the list of threads that match the query """
42
        backend = get_search_class()()
43
44
        results = backend.search(self.get_query())
45
46
        return [result for result, _ in results]
47
48
49
class ThreadCreateView(LoginRequiredMixin, generic.edit.FormView):
50
    """ View for creating new threads """
51
52
    template_name = 'simple_forums/thread_create.html'
53
    form_class = forms.ThreadCreationForm
54
55
    def form_valid(self, form):
56
        """ Save form if it is valid """
57
        thread = form.save(self.request.user)
58
59
        return HttpResponseRedirect(thread_detail_url(thread=thread))
60
61
62
class ThreadDetailView(generic.DetailView):
63
    """ View for getting a thread's details """
64
65
    model = models.Thread
66
    pk_url_kwarg = 'thread_pk'
67
68
    def get_context_data(self, **kwargs):
69
        context = super(ThreadDetailView, self).get_context_data(**kwargs)
70
71
        if self.request.user.is_authenticated():
72
            context['reply_form'] = forms.ThreadReplyForm()
73
74
        return context
75
76
    def post(self, request, *args, **kwargs):
77
        """ Create a new reply to the current thread """
78
        if not request.user.is_authenticated():
79
            raise PermissionDenied()
80
81
        self.object = self.get_object()
82
83
        form = forms.ThreadReplyForm(request.POST)
84
85
        if form.is_valid():
86
            message = form.save(request.user, self.object)
87
88
            return HttpResponseRedirect(message.get_absolute_url())
89
90
        context = self.get_context_data()
91
        context['reply_form'] = form
92
93
        return render(request, self.get_template_names(), context)
94
95
96
class ThreadListView(generic.ListView):
97
    """ View for listing threads """
98
99
    model = models.Thread
100
    reverse_kwarg = 'rev'
101
    sort_default = 'activity'
102
    sort_default_reverse = True
103
    sort_mapping = {
104
        'activity': 'time_last_activity',
105
        'title': 'title',
106
    }
107
    sort_kwarg = 'sort'
108
109
    def get_context_data(self, **kwargs):
110
        context = super(ThreadListView, self).get_context_data(**kwargs)
111
112
        context['sort_current'] = self.sort_name
113
        context['sort_options'] = [item for item in self.sort_mapping]
114
        context['sort_reversed'] = self.sort_reversed
115
116
        sticky_threads = self._get_base_queryset().filter(sticky=True)
117
        context['sticky_thread_list'] = sticky_threads
118
119
        topic = get_object_or_404(
120
            models.Topic,
121
            pk=self.kwargs.get('topic_pk'))
122
        context['topic'] = topic
123
124
        return context
125
126
    def _get_base_queryset(self):
127
        """ Retrieve all threads associated with the given topic """
128
        topic = get_object_or_404(
129
            models.Topic,
130
            pk=self.kwargs.get('topic_pk'))
131
132
        return self.model.objects.filter(topic=topic)
133
134
    def get_queryset(self):
135
        """ Return all non-sticky threads """
136
        self.sort_name = self.request.GET.get(
137
            self.sort_kwarg,
138
            None)
139
140
        if self.sort_name not in self.sort_mapping:
141
            self.sort_name = 'activity'
142
            self.sort_reversed = True
143
        else:
144
            self.sort_reversed = self.request.GET.get(
145
                self.reverse_kwarg, None) == 'true'
146
147
        self.sort_field = self.sort_mapping.get(self.sort_name)
148
149
        if self.sort_reversed:
150
            self.sort_field = '-%s' % self.sort_field
151
152
        queryset = self._get_base_queryset()
153
        # exclude sticky posts
154
        queryset = queryset.exclude(sticky=True)
155
        # apply sorting
156
        queryset = queryset.order_by(self.sort_field)
157
158
        return queryset
159
160
161
class TopicListView(generic.ListView):
162
    """ View for listing topics """
163
164
    model = models.Topic
165