Projet

Général

Profil

0002-WIP-add-timewindow-filter-for-profile-journal-20695.patch

Paul Marillonnet, 27 novembre 2018 17:53

Télécharger (3,42 ko)

Voir les différences:

Subject: [PATCH 2/2] WIP add timewindow filter for profile journal (#20695)

 src/authentic2/forms/__init__.py               |  6 ++++++
 .../authentic2/user_profile_journal.html       |  5 +++++
 src/authentic2/views.py                        | 18 ++++++++++++++++--
 3 files changed, 27 insertions(+), 2 deletions(-)
src/authentic2/forms/__init__.py
8 8

  
9 9
from authentic2.compat import get_user_model
10 10
from authentic2.forms.fields import PasswordField
11
from authentic2.forms.widgets import DateTimeWidget
11 12

  
12 13
from .. import app_settings
13 14
from ..exponential_retry_timeout import ExponentialRetryTimeout
......
220 221

  
221 222
class SiteImportForm(forms.Form):
222 223
    site_json = forms.FileField(label=_('Site Export File'))
224

  
225

  
226
class EventTimewindowForm(forms.Form):
227
    after = forms.DateTimeField(label=_('After'), widget=DateTimeWidget)
228
    before = forms.DateTimeField(label=_('Before'), widget=DateTimeWidget)
src/authentic2/templates/authentic2/user_profile_journal.html
11 11
      <li>{% trans "No journal entry yet." %}</li>
12 12
  {% endfor %}
13 13
  </ul>
14
  <form action="{% url 'user-profile-journal' %}" method="get">
15
    {% csrf_token %}
16
    {{ form }}
17
    <input type="submit" value="Submit">
18
  </form>
14 19
{% endblock %}
src/authentic2/views.py
7 7
import collections
8 8

  
9 9

  
10
from datetime import datetime
10 11
from django.conf import settings
11 12
from django.shortcuts import render_to_response, render
12 13
from django.template.loader import render_to_string, select_template
......
616 617
logged_in = never_cache(LoggedInView.as_view())
617 618

  
618 619

  
619
class UserProfileJournal(ListView):
620
class UserProfileJournal(ListView, FormView):
620 621
    model = Reference
622
    form_class = forms.EventTimewindowForm
621 623

  
622 624
    def get_queryset(self):
625
        timewindow = {}
626
        for qs_param, qs_suffix in {'after': 'gte', 'before': 'lte'}.items():
627
            delimiter = self.request.GET.get(qs_param)
628
            if delimiter:
629
                try:
630
                    dt = datetime.strptime(delimiter, '%d/%m/%Y %H:%M:%S')
631
                except:
632
                    logger.info('UserProfileJournal wrong %s timestamp query '
633
                            'string parameter: %s' % (qs_param, delimiter))
634
                else:
635
                    timewindow.update({'timestamp__%s' % qs_suffix: dt})
623 636
        return self.model.objects.filter(
624 637
            target_id=self.request.user.pk,
625
            target_ct=ContentType.objects.get_for_model(get_user_model()))
638
            target_ct=ContentType.objects.get_for_model(get_user_model()),
639
            **timewindow)
626 640

  
627 641
    def get_template_names(self):
628 642
        return [
629
-