Fix next link in get resource list rest API
Fix the issue where `next` link in the response of the REST API, when used with pagination, gets corrupted and makes it unusable. After this fix, next link should be readily usable. Change-Id: Idf45a59e0b07d8306cc82391679fe30a9cd2f0c1 Closes-Bug: #1793344
This commit is contained in:
parent
9be7e928d6
commit
08ba20c8d2
@ -115,9 +115,14 @@ class ResourceList(Resource):
|
|||||||
if not self.has_next(limit):
|
if not self.has_next(limit):
|
||||||
return wtypes.Unset
|
return wtypes.Unset
|
||||||
|
|
||||||
q_args = ''.join(
|
q_args = ''
|
||||||
['%s=%s&' % (key, value) for key, value in kwargs.items()]
|
|
||||||
)
|
for key, value in kwargs.items():
|
||||||
|
if isinstance(value, dict):
|
||||||
|
q_args += '%s=%s:%s&' % \
|
||||||
|
(key, list(value.keys())[0], list(value.values())[0])
|
||||||
|
else:
|
||||||
|
q_args += '%s=%s&' % (key, value)
|
||||||
|
|
||||||
resource_args = (
|
resource_args = (
|
||||||
'?%(args)slimit=%(limit)d&marker=%(marker)s' %
|
'?%(args)slimit=%(limit)d&marker=%(marker)s' %
|
||||||
|
38
mistral/tests/unit/api/test_resource_list.py
Normal file
38
mistral/tests/unit/api/test_resource_list.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# Copyright 2018 Nokia Networks. All rights reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from oslotest import base
|
||||||
|
|
||||||
|
from mistral.api.controllers.v2 import resources
|
||||||
|
|
||||||
|
|
||||||
|
class TestResourceList(base.BaseTestCase):
|
||||||
|
|
||||||
|
def test_next_link_correctness(self):
|
||||||
|
task = resources.Task.sample()
|
||||||
|
|
||||||
|
result = resources.Tasks.convert_with_links(
|
||||||
|
resources=[task],
|
||||||
|
limit=1,
|
||||||
|
url='https://localhost:8080',
|
||||||
|
sort_keys='created_at,id',
|
||||||
|
sort_dirs='asc,asc',
|
||||||
|
fields='',
|
||||||
|
state='eq:RUNNING'
|
||||||
|
)
|
||||||
|
|
||||||
|
next_link = result.next
|
||||||
|
|
||||||
|
self.assertIn('state=eq:RUNNING', next_link)
|
||||||
|
self.assertIn('sort_keys=created_at,id', next_link)
|
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fix issue where next link in some list APIs,
|
||||||
|
when invoked with pagination and filter(s),
|
||||||
|
contained JSON string. This made next link
|
||||||
|
an invalid URL. This issue impacted all REST
|
||||||
|
APIs where filters can be used.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user