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):
|
||||
return wtypes.Unset
|
||||
|
||||
q_args = ''.join(
|
||||
['%s=%s&' % (key, value) for key, value in kwargs.items()]
|
||||
)
|
||||
q_args = ''
|
||||
|
||||
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 = (
|
||||
'?%(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