Skip to content

Commit

Permalink
#46 Retain ordering, view style and limit (#614)
Browse files Browse the repository at this point in the history
* #46 Retain ordering, view style and limit

* Add more coverage for RequestsView().post
  • Loading branch information
SebCorbin committed Oct 29, 2022
1 parent 0409a82 commit 93970eb
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 19 deletions.
27 changes: 21 additions & 6 deletions project/tests/test_view_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from django.test import TestCase

from silk.middleware import silky_reverse
from silk.views.requests import RequestsView

from .test_lib.assertion import dict_contains
Expand Down Expand Up @@ -42,15 +43,15 @@ def test_default(self):
self.assertIn('results', context)

def test_get(self):
request = Mock(spec_set=['GET', 'session'])
request.session = {}
show = 10
path = '/path/to/somewhere/'
order_by = 'path'
request.GET = {'show': show,
'path': path,
'order_by': order_by}
context = RequestsView()._create_context(request)
response = self.client.get(silky_reverse('requests'), {
'show': show,
'path': path,
'order_by': order_by,
})
context = response.context
self.assertTrue(dict_contains({
'show': show,
'order_by': order_by,
Expand All @@ -62,6 +63,20 @@ def test_get(self):
self.assertQuerysetEqual(context['options_paths'], RequestsView()._get_paths())
self.assertIn('results', context)

def test_post(self):
response = self.client.post(silky_reverse('requests'), {
'filter-overalltime-value': 100,
'filter-overalltime-typ': 'TimeSpentOnQueriesFilter',
})
context = response.context
self.assertTrue(dict_contains({
'filters': {
'overalltime': {'typ': 'TimeSpentOnQueriesFilter', 'value': 100, 'str': 'DB Time >= 100'}
},
}, context))
self.assertQuerysetEqual(context['options_paths'], RequestsView()._get_paths())
self.assertIn('results', context)


class TestGetObjects(TestCase):
def assertSorted(self, objects, sort_field):
Expand Down
11 changes: 5 additions & 6 deletions silk/templates/silk/base/root_base.html
Original file line number Diff line number Diff line change
Expand Up @@ -307,12 +307,11 @@
<nav class="cbp-spmenu cbp-spmenu-vertical cbp-spmenu-right" id="cbp-spmenu-s2">
<h3>Filters</h3>

<form id="filter-form2" action="." method="post">{% csrf_token %}</form>


{% block filters %}

{% endblock %}
<form id="filter-form2" action="" method="post">
{% csrf_token %}
{% block filters %}{% endblock %}
<input type="submit" style="display: none">
</form>

<div class="button-div">
<div class="apply-div" onclick="submitEmptyFilters()">Clear all filters</div>
Expand Down
29 changes: 22 additions & 7 deletions silk/views/requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,15 +130,15 @@ def _get_objects(self, show=None, order_by=None, order_dir=None, path=None, filt
return query_set[:show]

def _create_context(self, request):
show = request.GET.get('show', self.default_show)
order_by = request.GET.get('order_by', self.default_order_by)
order_dir = request.GET.get('order_dir', self.default_order_dir)
view_style = request.GET.get('view_style', self.default_view_style)
raw_filters = request.session.get(self.session_key_request_filters, {}).copy()
show = raw_filters.pop('show', self.default_show)
order_by = raw_filters.pop('order_by', self.default_order_by)
order_dir = raw_filters.pop('order_dir', self.default_order_dir)
view_style = raw_filters.pop('view_style', self.default_view_style)

if show:
show = int(show)
path = request.GET.get('path', None)
raw_filters = request.session.get(self.session_key_request_filters, {})
context = {
'show': show,
'order_by': order_by,
Expand All @@ -153,7 +153,7 @@ def _create_context(self, request):
'options_status_codes': self._get_status_codes(),
'options_methods': self._get_methods(),
'view_names': self._get_views(),
'filters': raw_filters
'filters': raw_filters,
}
context.update(csrf(request))
if path:
Expand All @@ -165,11 +165,26 @@ def _create_context(self, request):
@method_decorator(login_possibly_required)
@method_decorator(permissions_possibly_required)
def get(self, request):
# Retain filters and ordering if they were modified by GET params
if request.GET:
filters = {
# filters from previous session
**request.session.get(self.session_key_request_filters, {}),
# new filters from GET, overriding old
**{k: v for k, v in request.GET.items() if k in ['show', 'order_by', 'order_dir', 'view_style']},
}
request.session[self.session_key_request_filters] = filters
return render(request, 'silk/requests.html', self._create_context(request))

@method_decorator(login_possibly_required)
@method_decorator(permissions_possibly_required)
def post(self, request):
previous_session = request.session.get(self.session_key_request_filters, {})
filters = filters_from_request(request)
request.session[self.session_key_request_filters] = {ident: f.as_dict() for ident, f in filters.items()}
request.session[self.session_key_request_filters] = {
# filters from previous session but only GET values
**{k: v for k, v in previous_session.items() if k in ['show', 'order_by', 'order_dir', 'view_style']},
# new filters from POST, overriding old
**{ident: f.as_dict() for ident, f in filters.items()},
}
return render(request, 'silk/requests.html', self._create_context(request))

0 comments on commit 93970eb

Please sign in to comment.