Fix 'limit' and 'marker' error in provider listing

Currently, providers API's parameters like 'limit' and
'marker' are not really used, but python-karborclient
use them. This patch will add the processing of 'limit'
and 'marker' in providers API.

Change-Id: I6a6206948adc1c417177a1b9c0f54aa2c0b8ef7e
Closes-Bug: #1717827
This commit is contained in:
jiaopengju 2017-11-22 14:05:41 +08:00
parent bd1887ff44
commit 99283590e7
2 changed files with 53 additions and 4 deletions

View File

@ -197,11 +197,23 @@ class ProviderRegistry(object):
def list_providers(self, marker=None, limit=None, sort_keys=None,
sort_dirs=None, filters=None):
# TODO(wangliuan) How to use the list option
return [dict(id=provider.id, name=provider.name,
# TODO(jiaopengju) How to use sort_keys, sort_dirs and filters
provider_ids = sorted(self.providers.keys())
provider_list = sorted(
self.providers.values(), key=lambda item: item.id)
if marker is not None and marker in provider_ids:
provider_list = provider_list[provider_ids.index(marker) + 1:]
valid_providers = []
for provider in provider_list:
valid_providers.append(
dict(id=provider.id,
name=provider.name,
description=provider.description,
extended_info_schema=provider.extended_info_schema)
for provider in self.providers.values()]
extended_info_schema=provider.extended_info_schema
))
if limit is not None and len(valid_providers) == limit:
return valid_providers
return valid_providers
def show_provider(self, provider_id):
try:

View File

@ -36,6 +36,31 @@ resource_graph = {
}
def set_provider_list(provider_registry):
provider_registry.providers = {
'fake_provider_id_1': FakeProvider(
id='fake_provider_id_1',
name='fake_provider_name_1',
description='',
extended_info_schema=''
),
'fake_provider_id_2': FakeProvider(
id='fake_provider_id_2',
name='fake_provider_name_2',
description='',
extended_info_schema=''
)
}
class FakeProvider(object):
def __init__(self, id, name, description, extended_info_schema):
self.id = id
self.name = name
self.description = description
self.extended_info_schema = extended_info_schema
class ProviderRegistryTest(base.TestCase):
def setUp(self):
super(ProviderRegistryTest, self).setUp()
@ -67,6 +92,18 @@ class ProviderRegistryTest(base.TestCase):
pr = provider.ProviderRegistry()
self.assertEqual(1, len(pr.list_providers()))
def test_list_provider_with_marker(self):
pr = provider.ProviderRegistry()
set_provider_list(pr)
self.assertEqual(
1, len(pr.list_providers(marker='fake_provider_id_1')))
def test_list_provider_with_limit(self):
pr = provider.ProviderRegistry()
set_provider_list(pr)
self.assertEqual(
1, len(pr.list_providers(limit=1)))
def test_show_provider(self):
pr = provider.ProviderRegistry()
provider_list = pr.list_providers()