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.
Completed
Push — master ( 531f41...661b81 )
by Chathan
01:10
created

ThreadCreateView.form_valid()   A

Complexity

Conditions 1

Size

Total Lines 5

Duplication

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