Refactor to a single request for latest apps

Latest apps section did a single request for each app
in the list.
This patch refactors it with only one request for user's
applications using 'in' operator.

Solves the TODO.

Change-Id: I76d9f48de30c7ec0299aad12e402080ea713c0d5
Closes-bug: #1559066
Depends-On: Ibd93233392552699f9fc02e7f1d92542de2597f1
This commit is contained in:
Omar Shykhkerimov 2016-06-08 19:06:01 +03:00
parent 75e8ce5650
commit 9f2f1d52e7
2 changed files with 13 additions and 19 deletions

View File

@ -182,25 +182,12 @@ def cleaned_latest_apps(request):
Verifies, that apps in the list are either public or belong to current
project.
"""
cleaned_apps, cleaned_app_ids = [], []
for app_id in request.session.get('latest_apps', []):
try:
# TODO(kzaitsev): we have to update this to 1 request per list of
# apps. Should be trivial and should remove the need to verify that
# apps are available. bug/1559066
app = api.muranoclient(request).packages.get(app_id)
except exc.HTTPNotFound:
continue
else:
if app.type != 'Application':
continue
if (app.owner_id == request.session['token'].project['id'] or
app.is_public):
cleaned_apps.append(app)
cleaned_app_ids.append(app_id)
request.session['latest_apps'] = collections.deque(cleaned_app_ids)
return cleaned_apps
id_param = "in:" + ",".join(request.session.get('latest_apps', []))
query_params = {'type': 'Application', 'catalog': True, 'id': id_param}
user_apps = list(api.muranoclient(request).packages.filter(**query_params))
request.session['latest_apps'] = collections.deque([app.id
for app in user_apps])
return user_apps
def clear_forms_data(func):

View File

@ -0,0 +1,7 @@
---
features:
- Improved the performance of 'Recent Activity' panel at the
'Browse Catalog' page.
It was done with refactoring single request for every latest app
with single for all, using new API 'in' operator.