Make pagination tunable through the settings panel

This patch set expands on the fine work done in https://review.openstack.org/26022

It makes the number of items displayed a per-user tunable through
the "Settings" panel and a session cookie, with the default/max
values being the values set in django.conf.settings

Fixes Bug: 1046915
Change-Id: I38ef4845d46bce62e44209865885aff8eb0bac83
This commit is contained in:
Nicolas Simonds 2013-05-07 18:58:53 -07:00
parent ff573dae88
commit 9172a7ba0b
3 changed files with 20 additions and 2 deletions

View File

@ -362,7 +362,9 @@ def server_get(request, instance_id):
def server_list(request, search_opts=None, all_tenants=False):
page_size = getattr(settings, 'API_RESULT_PAGE_SIZE', 20)
page_size = request.session.get('horizon_pagesize',
getattr(settings, 'API_RESULT_PAGE_SIZE',
20))
paginate = False
if search_opts is None:
search_opts = {}
@ -382,6 +384,9 @@ def server_list(request, search_opts=None, all_tenants=False):
if paginate and len(servers) > page_size:
servers.pop(-1)
has_more_data = True
elif paginate and len(servers) == getattr(settings, 'API_RESULT_LIMIT',
1000):
has_more_data = True
return (servers, has_more_data)

View File

@ -28,6 +28,13 @@ from horizon import messages
class UserSettingsForm(forms.SelfHandlingForm):
language = forms.ChoiceField()
timezone = forms.ChoiceField()
pagesize = forms.IntegerField(label=translation.ugettext("Items Per Page"),
min_value=1,
max_value=getattr(settings,
'API_RESULT_LIMIT',
1000),
help_text=translation.ugettext(
"Number of items to show per page"))
def __init__(self, *args, **kwargs):
super(UserSettingsForm, self).__init__(*args, **kwargs)
@ -70,6 +77,8 @@ class UserSettingsForm(forms.SelfHandlingForm):
request.session['django_timezone'] = pytz.timezone(
data['timezone']).zone
request.session['horizon_pagesize'] = data['pagesize']
messages.success(request, translation.ugettext("Settings saved."))
return response

View File

@ -14,6 +14,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.conf import settings
from horizon import forms
from .forms import UserSettingsForm
@ -25,7 +26,10 @@ class UserSettingsView(forms.ModalFormView):
def get_initial(self):
return {'language': self.request.LANGUAGE_CODE,
'timezone': self.request.session.get('django_timezone', 'UTC')}
'timezone': self.request.session.get('django_timezone', 'UTC'),
'pagesize': self.request.session.get(
'horizon_pagesize',
getattr(settings, 'API_RESULT_PAGE_SIZE', 20))}
def form_valid(self, form):
return form.handle(self.request, form.cleaned_data)