From ad2a9b00a8ead23e4728cb86814a99ec1d74d1c9 Mon Sep 17 00:00:00 2001 From: Pavel Kholkin Date: Wed, 6 Jul 2016 14:45:35 +0300 Subject: [PATCH] 'limit' and 'marker' support for db_api and keypair_obj keypair object and db_api supports 'limit' and 'marker' parameters, these changes are required for keypairs pagination for Nova API. Part of blueprint keypairs-pagination Change-Id: I9776efc609f01d053824b31f64126cfcd6dadc18 --- nova/db/api.py | 5 +++-- nova/db/sqlalchemy/api.py | 19 +++++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/nova/db/api.py b/nova/db/api.py index a664be73c..42ae51998 100644 --- a/nova/db/api.py +++ b/nova/db/api.py @@ -964,9 +964,10 @@ def key_pair_get(context, user_id, name): return IMPL.key_pair_get(context, user_id, name) -def key_pair_get_all_by_user(context, user_id): +def key_pair_get_all_by_user(context, user_id, limit=None, marker=None): """Get all key_pairs by user.""" - return IMPL.key_pair_get_all_by_user(context, user_id) + return IMPL.key_pair_get_all_by_user( + context, user_id, limit=limit, marker=marker) def key_pair_count_by_user(context, user_id): diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 1ab419023..5a978c8c3 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -2929,10 +2929,21 @@ def key_pair_get(context, user_id, name): @require_context @main_context_manager.reader -def key_pair_get_all_by_user(context, user_id): - return model_query(context, models.KeyPair, read_deleted="no").\ - filter_by(user_id=user_id).\ - all() +def key_pair_get_all_by_user(context, user_id, limit=None, marker=None): + marker_row = None + if marker is not None: + marker_row = model_query(context, models.KeyPair, read_deleted="no").\ + filter_by(name=marker).filter_by(user_id=user_id).first() + if not marker_row: + raise exception.MarkerNotFound(marker=marker) + + query = model_query(context, models.KeyPair, read_deleted="no").\ + filter_by(user_id=user_id) + + query = sqlalchemyutils.paginate_query( + query, models.KeyPair, limit, ['name'], marker=marker_row) + + return query.all() @require_context