Projet

Général

Profil

0005-misc-fix-super-with-arguments-pylint-error-55505.patch

Lauréline Guérin, 12 juillet 2021 11:23

Télécharger (25,6 ko)

Voir les différences:

Subject: [PATCH 05/23] misc: fix super-with-arguments pylint error (#55505)

 chrono/agendas/models.py         | 14 ++---
 chrono/api/utils.py              |  4 +-
 chrono/api/views.py              |  2 +-
 chrono/manager/forms.py          |  8 +--
 chrono/manager/views.py          | 88 ++++++++++++++++----------------
 chrono/manager/widgets.py        |  2 +-
 chrono/urls_utils.py             |  2 +-
 chrono/utils/requests_wrapper.py |  2 +-
 chrono/views.py                  |  4 +-
 9 files changed, 63 insertions(+), 63 deletions(-)
chrono/agendas/models.py
275 275
                self.default_view = 'month'
276 276
            else:
277 277
                self.default_view = 'day'
278
        super(Agenda, self).save(*args, **kwargs)
278
        super().save(*args, **kwargs)
279 279

  
280 280
    @property
281 281
    def base_slug(self):
......
1042 1042
    def save(self, *args, **kwargs):
1043 1043
        if self.agenda:
1044 1044
            assert self.agenda.kind == 'virtual', "a time period can only reference a virtual agenda"
1045
        super(TimePeriod, self).save(*args, **kwargs)
1045
        super().save(*args, **kwargs)
1046 1046

  
1047 1047
    @property
1048 1048
    def weekday_str(self):
......
1229 1229
        assert self.agenda.kind != 'virtual', "a meetingtype can't reference a virtual agenda"
1230 1230
        if not self.slug:
1231 1231
            self.slug = generate_slug(self, agenda=self.agenda)
1232
        super(MeetingType, self).save(*args, **kwargs)
1232
        super().save(*args, **kwargs)
1233 1233

  
1234 1234
    @property
1235 1235
    def base_slug(self):
......
1340 1340
        self.check_full()
1341 1341
        if not self.slug:
1342 1342
            self.slug = generate_slug(self, seen_slugs=seen_slugs, agenda=self.agenda)
1343
        return super(Event, self).save(*args, **kwargs)
1343
        return super().save(*args, **kwargs)
1344 1344

  
1345 1345
    @property
1346 1346
    def base_slug(self):
......
1803 1803

  
1804 1804
    def save(self, *args, **kwargs):
1805 1805
        with transaction.atomic():
1806
            super(Booking, self).save(*args, **kwargs)
1806
            super().save(*args, **kwargs)
1807 1807
            initial_values = self.event.full, self.event.almost_full
1808 1808
            self.event.check_full()
1809 1809
            if (self.event.full, self.event.almost_full) != initial_values:
......
1931 1931
        assert self.agenda.kind != 'virtual', "a desk can't reference a virtual agenda"
1932 1932
        if not self.slug:
1933 1933
            self.slug = generate_slug(self, agenda=self.agenda)
1934
        super(Desk, self).save(*args, **kwargs)
1934
        super().save(*args, **kwargs)
1935 1935

  
1936 1936
    @property
1937 1937
    def base_slug(self):
......
2382 2382
    def save(self, *args, **kwargs):
2383 2383
        if not self.slug:
2384 2384
            self.slug = generate_slug(self)
2385
        super(UnavailabilityCalendar, self).save(*args, **kwargs)
2385
        super().save(*args, **kwargs)
2386 2386

  
2387 2387
    def can_be_managed(self, user):
2388 2388
        if user.is_staff:
chrono/api/utils.py
26 26
        # add reason for compatibility (https://dev.entrouvert.org/issues/24025)
27 27
        if data is not None and 'err_class' in data:
28 28
            data['reason'] = data['err_class']
29
        super(Response, self).__init__(data=data, *args, **kwargs)
29
        super().__init__(data=data, *args, **kwargs)
30 30

  
31 31

  
32 32
class APIError(Exception):
......
35 35

  
36 36
    def __init__(self, *args, **kwargs):
37 37
        self.__dict__.update(kwargs)
38
        super(APIError, self).__init__(*args)
38
        super().__init__(*args)
39 39

  
40 40
    def to_response(self):
41 41
        data = {
chrono/api/views.py
1103 1103
    def to_internal_value(self, data):
1104 1104
        if isinstance(data, str):
1105 1105
            data = [s.strip() for s in data.split(',')]
1106
        return super(StringOrListField, self).to_internal_value(data)
1106
        return super().to_internal_value(data)
1107 1107

  
1108 1108

  
1109 1109
class SlotsSerializer(SlotSerializer):
chrono/manager/forms.py
107 107
        ]
108 108

  
109 109
    def __init__(self, *args, **kwargs):
110
        super(AgendaEditForm, self).__init__(*args, **kwargs)
110
        super().__init__(*args, **kwargs)
111 111
        if kwargs['instance'].kind != 'events':
112 112
            del self.fields['booking_form_url']
113 113
            del self.fields['event_display_template']
......
126 126
        ]
127 127

  
128 128
    def __init__(self, *args, **kwargs):
129
        super(AgendaBookingDelaysForm, self).__init__(*args, **kwargs)
129
        super().__init__(*args, **kwargs)
130 130
        if kwargs['instance'].kind != 'virtual':
131 131
            self.fields['minimal_booking_delay'].required = True
132 132
            self.fields['maximal_booking_delay'].required = True
......
583 583
        fields = ['real_agenda']
584 584

  
585 585
    def __init__(self, *args, **kwargs):
586
        super(VirtualMemberForm, self).__init__(*args, **kwargs)
586
        super().__init__(*args, **kwargs)
587 587
        self.fields['real_agenda'].queryset = Agenda.objects.filter(kind='meetings').exclude(
588 588
            virtual_agendas=self.instance.virtual_agenda
589 589
        )
......
604 604

  
605 605
    def __init__(self, agenda_pk, **kwargs):
606 606
        self.agenda_pk = agenda_pk
607
        super(ImportEventsForm, self).__init__(**kwargs)
607
        super().__init__(**kwargs)
608 608

  
609 609
    def clean_events_csv_file(self):
610 610
        content = self.cleaned_data['events_csv_file'].read()
chrono/manager/views.py
119 119
    model = Agenda
120 120

  
121 121
    def get_queryset(self):
122
        queryset = super(HomepageView, self).get_queryset()
122
        queryset = super().get_queryset()
123 123
        if not self.request.user.is_staff:
124 124
            group_ids = [x.id for x in self.request.user.groups.all()]
125 125
            queryset = queryset.filter(Q(view_role_id__in=group_ids) | Q(edit_role_id__in=group_ids))
......
749 749
    def dispatch(self, request, *args, **kwargs):
750 750
        if not request.user.is_staff:
751 751
            raise PermissionDenied()
752
        return super(AgendaAddView, self).dispatch(request, *args, **kwargs)
752
        return super().dispatch(request, *args, **kwargs)
753 753

  
754 754
    def get_success_url(self):
755 755
        return reverse('chrono-manager-agenda-settings', kwargs={'pk': self.object.id})
......
773 773
    def dispatch(self, request, *args, **kwargs):
774 774
        if not request.user.is_staff:
775 775
            raise PermissionDenied()
776
        return super(AgendasImportView, self).dispatch(request, *args, **kwargs)
776
        return super().dispatch(request, *args, **kwargs)
777 777

  
778 778
    def form_valid(self, form):
779 779
        try:
......
849 849
        if global_noop:
850 850
            messages.info(self.request, _('No data found.'))
851 851

  
852
        return super(AgendasImportView, self).form_valid(form)
852
        return super().form_valid(form)
853 853

  
854 854

  
855 855
agendas_import = AgendasImportView.as_view()
......
865 865
        self.set_agenda(**kwargs)
866 866
        if not self.check_permissions(request.user):
867 867
            raise PermissionDenied()
868
        return super(ViewableAgendaMixin, self).dispatch(request, *args, **kwargs)
868
        return super().dispatch(request, *args, **kwargs)
869 869

  
870 870
    def check_permissions(self, user):
871 871
        return self.agenda.can_be_viewed(user)
872 872

  
873 873
    def get_context_data(self, **kwargs):
874
        context = super(ViewableAgendaMixin, self).get_context_data(**kwargs)
874
        context = super().get_context_data(**kwargs)
875 875
        context['agenda'] = self.agenda
876 876
        return context
877 877

  
......
944 944
    def dispatch(self, request, *args, **kwargs):
945 945
        if not request.user.is_staff:
946 946
            raise PermissionDenied()
947
        return super(AgendaDeleteView, self).dispatch(request, *args, **kwargs)
947
        return super().dispatch(request, *args, **kwargs)
948 948

  
949 949
    def get_context_data(self, **kwargs):
950
        context = super(AgendaDeleteView, self).get_context_data(**kwargs)
950
        context = super().get_context_data(**kwargs)
951 951
        context['cannot_delete'] = Booking.objects.filter(
952 952
            event__agenda=self.get_object(),
953 953
            event__start_datetime__gt=now(),
......
961 961
        context = self.get_context_data()
962 962
        if context['cannot_delete']:
963 963
            raise PermissionDenied()
964
        return super(AgendaDeleteView, self).delete(request, *args, **kwargs)
964
        return super().delete(request, *args, **kwargs)
965 965

  
966 966

  
967 967
agenda_delete = AgendaDeleteView.as_view()
......
1043 1043
                    kwargs={'pk': kwargs['pk'], 'year': date.year, 'month': date.month, 'day': date.day},
1044 1044
                )
1045 1045
            )
1046
        return super(AgendaDateView, self).dispatch(request, *args, **kwargs)
1046
        return super().dispatch(request, *args, **kwargs)
1047 1047

  
1048 1048
    def get_context_data(self, **kwargs):
1049
        context = super(AgendaDateView, self).get_context_data(**kwargs)
1049
        context = super().get_context_data(**kwargs)
1050 1050
        context['agenda'] = self.agenda
1051 1051
        if self.agenda.kind != 'events':
1052 1052
            try:
......
1209 1209

  
1210 1210
class AgendaMonthView(AgendaDateView, MonthArchiveView):
1211 1211
    def get_queryset(self):
1212
        qs = super(AgendaMonthView, self).get_queryset()
1212
        qs = super().get_queryset()
1213 1213
        if self.agenda.kind != 'events':
1214 1214
            return qs
1215 1215
        return Event.annotate_queryset(qs).order_by('start_datetime', 'label')
......
1236 1236
        return ['chrono/manager_%s_agenda_month_view.html' % self.agenda.kind]
1237 1237

  
1238 1238
    def get_context_data(self, **kwargs):
1239
        context = super(AgendaMonthView, self).get_context_data(**kwargs)
1239
        context = super().get_context_data(**kwargs)
1240 1240
        if self.agenda.kind == 'events':
1241 1241
            context['cancellation_reports'] = EventCancellationReport.objects.filter(
1242 1242
                event__agenda=self.agenda,
......
1439 1439
        self.agenda = self.get_object().agenda
1440 1440
        if not self.agenda.can_be_managed(request.user):
1441 1441
            raise PermissionDenied()
1442
        return super(ManagedAgendaSubobjectMixin, self).dispatch(request, *args, **kwargs)
1442
        return super().dispatch(request, *args, **kwargs)
1443 1443

  
1444 1444
    def get_context_data(self, **kwargs):
1445
        context = super(ManagedAgendaSubobjectMixin, self).get_context_data(**kwargs)
1445
        context = super().get_context_data(**kwargs)
1446 1446
        context['agenda'] = self.object.agenda
1447 1447
        return context
1448 1448

  
......
1460 1460
            raise Http404()
1461 1461
        if not self.desk.agenda.can_be_managed(request.user):
1462 1462
            raise PermissionDenied()
1463
        return super(ManagedDeskMixin, self).dispatch(request, *args, **kwargs)
1463
        return super().dispatch(request, *args, **kwargs)
1464 1464

  
1465 1465
    def get_form_kwargs(self):
1466 1466
        kwargs = super().get_form_kwargs()
......
1470 1470
        return kwargs
1471 1471

  
1472 1472
    def get_context_data(self, **kwargs):
1473
        context = super(ManagedDeskMixin, self).get_context_data(**kwargs)
1473
        context = super().get_context_data(**kwargs)
1474 1474
        context['desk'] = self.desk
1475 1475
        context['agenda'] = self.desk.agenda
1476 1476
        return context
......
1486 1486
        self.desk = self.get_object().desk
1487 1487
        if not self.desk.agenda.can_be_managed(request.user):
1488 1488
            raise PermissionDenied()
1489
        return super(ManagedDeskSubobjectMixin, self).dispatch(request, *args, **kwargs)
1489
        return super().dispatch(request, *args, **kwargs)
1490 1490

  
1491 1491
    def get_context_data(self, **kwargs):
1492
        context = super(ManagedDeskSubobjectMixin, self).get_context_data(**kwargs)
1492
        context = super().get_context_data(**kwargs)
1493 1493
        context['desk'] = self.object.desk
1494 1494
        context['agenda'] = self.object.desk.agenda
1495 1495
        return context
......
1509 1509

  
1510 1510
        if not self.agenda.can_be_managed(request.user):
1511 1511
            raise PermissionDenied()
1512
        return super(ManagedTimePeriodMixin, self).dispatch(request, *args, **kwargs)
1512
        return super().dispatch(request, *args, **kwargs)
1513 1513

  
1514 1514
    def get_context_data(self, **kwargs):
1515
        context = super(ManagedTimePeriodMixin, self).get_context_data(**kwargs)
1515
        context = super().get_context_data(**kwargs)
1516 1516
        context['agenda'] = self.agenda
1517 1517
        return context
1518 1518

  
......
1571 1571
        return self.agenda
1572 1572

  
1573 1573
    def get_context_data(self, **kwargs):
1574
        context = super(AgendaSettings, self).get_context_data(**kwargs)
1574
        context = super().get_context_data(**kwargs)
1575 1575
        if self.agenda.accept_meetings():
1576 1576
            context['meeting_types'] = self.object.iter_meetingtypes()
1577 1577
        if self.agenda.kind == 'virtual':
......
1661 1661
    content_type = 'text/csv'
1662 1662

  
1663 1663
    def get_context_data(self, **kwargs):
1664
        context = super(AgendaImportEventsSampleView, self).get_context_data(**kwargs)
1664
        context = super().get_context_data(**kwargs)
1665 1665
        some_future_date = datetime.datetime.now() + datetime.timedelta(days=10)
1666 1666
        some_future_date = some_future_date.replace(hour=14, minute=0, second=0)
1667 1667
        context['some_future_date'] = some_future_date
......
1697 1697
                    _('Event "%s" start date has changed. Do not forget to notify the registrants.')
1698 1698
                    % (event.label or event.slug),
1699 1699
                )
1700
        return super(AgendaImportEventsView, self).form_valid(form)
1700
        return super().form_valid(form)
1701 1701

  
1702 1702

  
1703 1703
agenda_import_events = AgendaImportEventsView.as_view()
......
1884 1884
        return ['chrono/manager_event_detail.html']
1885 1885

  
1886 1886
    def get_context_data(self, **kwargs):
1887
        context = super(EventDetailView, self).get_context_data(**kwargs)
1887
        context = super().get_context_data(**kwargs)
1888 1888
        context['user_can_manage'] = self.agenda.can_be_managed(self.request.user)
1889 1889
        event = self.get_object()
1890 1890
        context['booked'] = event.booking_set.filter(
......
1924 1924
    pk_url_kwarg = 'event_pk'
1925 1925

  
1926 1926
    def get_context_data(self, **kwargs):
1927
        context = super(EventDeleteView, self).get_context_data(**kwargs)
1927
        context = super().get_context_data(**kwargs)
1928 1928
        context['cannot_delete'] = bool(
1929 1929
            self.object.booking_set.filter(cancellation_datetime__isnull=True).exists()
1930 1930
            and self.object.start_datetime > now()
......
1937 1937
        context = self.get_context_data()
1938 1938
        if context['cannot_delete']:
1939 1939
            raise PermissionDenied()
1940
        return super(EventDeleteView, self).delete(request, *args, **kwargs)
1940
        return super().delete(request, *args, **kwargs)
1941 1941

  
1942 1942
    def get_success_url(self):
1943 1943
        if self.request.GET.get('next') == 'settings' or self.request.POST.get('next') == 'settings':
......
2189 2189
    model = MeetingType
2190 2190

  
2191 2191
    def get_context_data(self, **kwargs):
2192
        context = super(MeetingTypeDeleteView, self).get_context_data(**kwargs)
2192
        context = super().get_context_data(**kwargs)
2193 2193
        meeting_type = self.get_object()
2194 2194
        context['cannot_delete'] = False
2195 2195

  
......
2257 2257
                process_time_period_add_form(form, desk=desk)
2258 2258
        else:
2259 2259
            process_time_period_add_form(form, desk=self.desk)
2260
        return super(AgendaAddTimePeriodView, self).form_valid(form)
2260
        return super().form_valid(form)
2261 2261

  
2262 2262

  
2263 2263
agenda_add_time_period = AgendaAddTimePeriodView.as_view()
......
2272 2272

  
2273 2273
    def form_valid(self, form):
2274 2274
        process_time_period_add_form(form, agenda=self.agenda)
2275
        return super(VirtualAgendaAddTimePeriodView, self).form_valid(form)
2275
        return super().form_valid(form)
2276 2276

  
2277 2277

  
2278 2278
virtual_agenda_add_time_period = VirtualAgendaAddTimePeriodView.as_view()
......
2353 2353
        return super().get_queryset().filter(agenda__kind='meetings')
2354 2354

  
2355 2355
    def get_context_data(self, **kwargs):
2356
        context = super(DeskDeleteView, self).get_context_data(**kwargs)
2356
        context = super().get_context_data(**kwargs)
2357 2357
        context['cannot_delete'] = Booking.objects.filter(
2358 2358
            event__desk=self.get_object(), event__start_datetime__gt=now(), cancellation_datetime__isnull=True
2359 2359
        ).exists()
......
2365 2365
        context = self.get_context_data()
2366 2366
        if context['cannot_delete']:
2367 2367
            raise PermissionDenied()
2368
        return super(DeskDeleteView, self).delete(request, *args, **kwargs)
2368
        return super().delete(request, *args, **kwargs)
2369 2369

  
2370 2370

  
2371 2371
desk_delete = DeskDeleteView.as_view()
......
2393 2393
        self.agenda = self.get_object().virtual_agenda
2394 2394
        if not self.agenda.can_be_managed(request.user):
2395 2395
            raise PermissionDenied()
2396
        return super(VirtualMemberDeleteView, self).dispatch(request, *args, **kwargs)
2396
        return super().dispatch(request, *args, **kwargs)
2397 2397

  
2398 2398
    def get_context_data(self, **kwargs):
2399
        context = super(VirtualMemberDeleteView, self).get_context_data(**kwargs)
2399
        context = super().get_context_data(**kwargs)
2400 2400
        context['agenda'] = self.agenda
2401 2401
        return context
2402 2402

  
......
2481 2481
        )
2482 2482

  
2483 2483
    def get_context_data(self, **kwargs):
2484
        context = super(TimePeriodExceptionListView, self).get_context_data(**kwargs)
2484
        context = super().get_context_data(**kwargs)
2485 2485
        context['user_can_manage'] = self.desk.agenda.can_be_managed(self.request.user)
2486 2486
        return context
2487 2487

  
......
2494 2494

  
2495 2495
    def get_queryset(self):
2496 2496
        # but limit queryset
2497
        return super(TimePeriodExceptionExtractListView, self).get_queryset()[:10]
2497
        return super().get_queryset()[:10]
2498 2498

  
2499 2499

  
2500 2500
time_period_exception_extract_list = TimePeriodExceptionExtractListView.as_view()
......
2511 2511
            if success_url in referer:
2512 2512
                return success_url
2513 2513

  
2514
        success_url = super(TimePeriodExceptionDeleteView, self).get_success_url()
2514
        success_url = super().get_success_url()
2515 2515
        if self.desk and 'from_popup' in self.request.GET:
2516 2516
            success_url = '{}?display_exceptions={}'.format(success_url, self.desk.pk)
2517 2517
        return success_url
......
2551 2551
    template_name = 'chrono/manager_import_exceptions.html'
2552 2552

  
2553 2553
    def get_context_data(self, **kwargs):
2554
        context = super(DeskImportTimePeriodExceptionsView, self).get_context_data(**kwargs)
2554
        context = super().get_context_data(**kwargs)
2555 2555
        desk = self.get_object()
2556 2556
        context['exception_sources'] = desk.timeperiodexceptionsource_set.all()
2557 2557
        context['desk'] = desk
......
2599 2599
            return self.form_invalid(form)
2600 2600

  
2601 2601
        messages.info(self.request, _('Exceptions will be imported in a few minutes.'))
2602
        return super(DeskImportTimePeriodExceptionsView, self).form_valid(form)
2602
        return super().form_valid(form)
2603 2603

  
2604 2604

  
2605 2605
desk_import_time_period_exceptions = DeskImportTimePeriodExceptionsView.as_view()
......
2640 2640
    template_name = 'chrono/manager_replace_exceptions.html'
2641 2641

  
2642 2642
    def get_queryset(self):
2643
        queryset = super(TimePeriodExceptionSourceReplaceView, self).get_queryset()
2643
        queryset = super().get_queryset()
2644 2644
        return queryset.filter(ics_filename__isnull=False)
2645 2645

  
2646 2646
    def import_file(self, desk, form):
......
2663 2663
            return self.form_invalid(form)
2664 2664

  
2665 2665
        messages.info(self.request, _('Exceptions will be synchronized in a few minutes.'))
2666
        return super(TimePeriodExceptionSourceReplaceView, self).form_valid(form)
2666
        return super().form_valid(form)
2667 2667

  
2668 2668

  
2669 2669
time_period_exception_source_replace = TimePeriodExceptionSourceReplaceView.as_view()
......
2673 2673
    model = TimePeriodExceptionSource
2674 2674

  
2675 2675
    def get_queryset(self):
2676
        queryset = super(TimePeriodExceptionSourceRefreshView, self).get_queryset()
2676
        queryset = super().get_queryset()
2677 2677
        return queryset.filter(ics_url__isnull=False)
2678 2678

  
2679 2679
    def import_file(self, desk):
......
3062 3062
    model = UnavailabilityCalendar
3063 3063

  
3064 3064
    def get_context_data(self, **kwargs):
3065
        context = super(UnavailabilityCalendarSettings, self).get_context_data(**kwargs)
3065
        context = super().get_context_data(**kwargs)
3066 3066
        context['unavailability_calendar'] = self.object
3067 3067
        return context
3068 3068

  
......
3101 3101
        return kwargs
3102 3102

  
3103 3103
    def get_context_data(self, **kwargs):
3104
        context = super(UnavailabilityCalendarAddUnavailabilityView, self).get_context_data(**kwargs)
3104
        context = super().get_context_data(**kwargs)
3105 3105
        context['base_template'] = 'chrono/manager_unavailability_calendar_settings.html'
3106 3106
        context['cancel_url'] = reverse(
3107 3107
            'chrono-manager-unavailability-calendar-settings', kwargs={'pk': self.unavailability_calendar.pk}
chrono/manager/widgets.py
55 55
    input_type = 'time'
56 56

  
57 57
    def __init__(self, **kwargs):
58
        super(TimeWidget, self).__init__(**kwargs)
58
        super().__init__(**kwargs)
59 59
        self.attrs['step'] = '300'  # 5 minutes
60 60
        self.attrs['pattern'] = '[0-9]{2}:[0-9]{2}'
61 61

  
chrono/urls_utils.py
26 26

  
27 27
class DecoratedURLPattern(URLPattern):
28 28
    def resolve(self, *args, **kwargs):
29
        result = super(DecoratedURLPattern, self).resolve(*args, **kwargs)
29
        result = super().resolve(*args, **kwargs)
30 30
        if result:
31 31
            result.func = self._decorate_with(result.func)
32 32
        return result
chrono/utils/requests_wrapper.py
130 130

  
131 131
        kwargs['timeout'] = kwargs.get('timeout') or settings.REQUESTS_TIMEOUT
132 132

  
133
        response = super(Requests, self).request(method, url, **kwargs)
133
        response = super().request(method, url, **kwargs)
134 134
        if log_errors and (response.status_code // 100 != 2):
135 135
            extra = {}
136 136
            if django_request:
chrono/views.py
37 37
            return HttpResponseRedirect(
38 38
                resolve_url('mellon_login') + '?next=' + quote(request.GET.get('next'))
39 39
            )
40
        return super(LoginView, self).get(request, *args, **kwargs)
40
        return super().get(request, *args, **kwargs)
41 41

  
42 42

  
43 43
class LogoutView(auth_views.LogoutView):
......
45 45
    def dispatch(self, request, *args, **kwargs):
46 46
        if any(get_idps()):
47 47
            return HttpResponseRedirect(resolve_url('mellon_logout'))
48
        return super(LogoutView, self).dispatch(request, *args, **kwargs)
48
        return super().dispatch(request, *args, **kwargs)
49 49

  
50 50

  
51 51
def homepage(request, *args, **kwargs):
52
-