Pagination limit code refactor

The logic to find the pagination limit is
repeated several times and is not in one
function. This patch creates a function that
is called in various locations replacing
repetitive code.

Change-Id: I3eced6a4236e4189e57ea5a1589e8f0d411cc4e3
Closes-Bug:  #1308285
This commit is contained in:
Ishita Mandhan 2015-10-14 16:22:54 -07:00
parent 87753afeb2
commit 0746e70cb5
6 changed files with 16 additions and 12 deletions

View File

@ -22,6 +22,7 @@ from trove.common import exception
from trove.common.i18n import _
from trove.common import remote
from trove.common.strategies.cluster import strategy
from trove.common import utils
from trove.datastore import models as datastore_models
from trove.db import models as dbmodels
from trove.instance import models as inst_models
@ -96,9 +97,7 @@ class Cluster(object):
def load_all(cls, context, tenant_id):
db_infos = DBCluster.find_all(tenant_id=tenant_id,
deleted=False)
limit = int(context.limit or Cluster.DEFAULT_LIMIT)
if limit > Cluster.DEFAULT_LIMIT:
limit = Cluster.DEFAULT_LIMIT
limit = utils.pagination_limit(context.limit, Cluster.DEFAULT_LIMIT)
data_view = DBCluster.find_by_pagination('clusters', db_infos, "foo",
limit=limit,
marker=context.marker)

View File

@ -54,6 +54,11 @@ ENV = jinja2.Environment(loader=jinja2.ChoiceLoader([
]))
def pagination_limit(limit, default_limit):
limit = int(limit or default_limit)
return min(limit, default_limit)
def create_method_args_string(*args, **kwargs):
"""Returns a string representation of args and keyword args.

View File

@ -54,10 +54,8 @@ class Configurations(object):
LOG.debug("No configurations found for tenant %s"
% context.tenant)
limit = int(context.limit or Configurations.DEFAULT_LIMIT)
if limit > Configurations.DEFAULT_LIMIT:
limit = Configurations.DEFAULT_LIMIT
limit = utils.pagination_limit(context.limit,
Configurations.DEFAULT_LIMIT)
data_view = DBConfiguration.find_by_pagination('configurations',
db_info,
"foo",

View File

@ -22,6 +22,7 @@ from oslo_log import log as logging
from trove.common import cfg
from trove.common import exception
from trove.common.remote import create_guest_client
from trove.common import utils
from trove.extensions.common.models import load_and_verify
from trove.extensions.common.models import RootHistory
from trove.guestagent.db import models as guest_models
@ -166,8 +167,7 @@ class UserAccess(object):
def load_via_context(cls, context, instance_id):
"""Creates guest and fetches pagination arguments from the context."""
load_and_verify(context, instance_id)
limit = int(context.limit or cls.DEFAULT_LIMIT)
limit = cls.DEFAULT_LIMIT if limit > cls.DEFAULT_LIMIT else limit
limit = utils.pagination_limit(context.limit, cls.DEFAULT_LIMIT)
client = create_guest_client(context, instance_id)
# The REST API standard dictates that we *NEVER* include the marker.
return cls.load_with_client(client=client, limit=limit,

View File

@ -1172,9 +1172,7 @@ class Instances(object):
db_infos = DBInstance.find_all(tenant_id=context.tenant,
cluster_id=None,
deleted=False)
limit = int(context.limit or Instances.DEFAULT_LIMIT)
if limit > Instances.DEFAULT_LIMIT:
limit = Instances.DEFAULT_LIMIT
limit = utils.pagination_limit(context.limit, Instances.DEFAULT_LIMIT)
data_view = DBInstance.find_by_pagination('instances', db_infos, "foo",
limit=limit,
marker=context.marker)

View File

@ -75,3 +75,7 @@ class TestTroveExecuteWithTimeout(trove_testtools.TestCase):
self.assertEqual(1, utils.unpack_singleton([[[1]]]))
self.assertEqual([[1], [2]], utils.unpack_singleton([[1], [2]]))
self.assertEqual(['a', 'b'], utils.unpack_singleton(['a', 'b']))
def test_pagination_limit(self):
self.assertEqual(5, utils.pagination_limit(5, 9))
self.assertEqual(5, utils.pagination_limit(9, 5))