Skip to content

Commit c027b50

Browse files
Allow filtering resources by status
We're adding a "status" search option that can be specified when listing the following resources: * deployments * status -> last_execution_status db field * transfers * transfer executions The filtering will be performed on the service side.
1 parent d6c7fc1 commit c027b50

12 files changed

Lines changed: 43 additions & 5 deletions

coriolisclient/cli/deployments.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,14 +284,21 @@ def get_parser(self, prog_name):
284284
help='Comma-separated list of sort keys and directions in the '
285285
'form of <key>[:<asc|desc>]. The direction defaults to '
286286
'descending if not specified.')
287+
parser.add_argument(
288+
'--status',
289+
help='Search by deployment status.')
287290
return parser
288291

289292
def take_action(self, args):
293+
filters = {}
294+
if args.status:
295+
filters["status"] = args.status
290296
sort_keys, sort_dirs = cli_utils.parse_sort_arg(args.sort)
291297
obj_list = self.app.client_manager.coriolis.deployments.list(
292298
marker=args.marker,
293299
limit=args.limit,
294300
sort_keys=sort_keys,
295301
sort_dirs=sort_dirs,
302+
filters=filters,
296303
)
297304
return DeploymentFormatter().list_objects(obj_list)

coriolisclient/cli/transfer_executions.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,14 +192,22 @@ def get_parser(self, prog_name):
192192
help='Comma-separated list of sort keys and directions in the '
193193
'form of <key>[:<asc|desc>]. The direction defaults to '
194194
'descending if not specified.')
195+
parser.add_argument(
196+
'--status',
197+
help='Search by execution status.')
195198
return parser
196199

197200
def take_action(self, args):
201+
filters = {}
202+
if args.status:
203+
filters["status"] = args.status
198204
sort_keys, sort_dirs = cli_utils.parse_sort_arg(args.sort)
199205
obj_list = self.app.client_manager.coriolis.transfer_executions.list(
200206
args.transfer,
201207
marker=args.marker,
202208
limit=args.limit,
203209
sort_keys=sort_keys,
204-
sort_dirs=sort_dirs)
210+
sort_dirs=sort_dirs,
211+
filters=filters,
212+
)
205213
return TransferExecutionFormatter().list_objects(obj_list)

coriolisclient/cli/transfers.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,15 +331,22 @@ def get_parser(self, prog_name):
331331
help='Comma-separated list of sort keys and directions in the '
332332
'form of <key>[:<asc|desc>]. The direction defaults to '
333333
'descending if not specified.')
334+
parser.add_argument(
335+
'--status',
336+
help='Search by transfer status.')
334337
return parser
335338

336339
def take_action(self, args):
340+
filters = {}
341+
if args.status:
342+
filters["status"] = args.status
337343
sort_keys, sort_dirs = cli_utils.parse_sort_arg(args.sort)
338344
obj_list = self.app.client_manager.coriolis.transfers.list(
339345
marker=args.marker,
340346
limit=args.limit,
341347
sort_keys=sort_keys,
342348
sort_dirs=sort_dirs,
349+
filters=filters,
343350
)
344351
return TransferFormatter().list_objects(obj_list)
345352

coriolisclient/tests/cli/test_deployments.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,4 +348,5 @@ def test_take_action(self, mock_parse_sort_arg):
348348
limit=mock_args.limit,
349349
sort_keys=mock.sentinel.sort_keys,
350350
sort_dirs=mock.sentinel.sort_dirs,
351+
filters={'status': mock_args.status},
351352
)

coriolisclient/tests/cli/test_transfer_executions.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ def test_take_action(
446446
limit=args.limit,
447447
sort_keys=mock.sentinel.sort_keys,
448448
sort_dirs=mock.sentinel.sort_dirs,
449+
filters={'status': args.status},
449450
)
450451
mock_list_objects.assert_called_once_with(
451452
mock_transfer_list.return_value)

coriolisclient/tests/cli/test_transfers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,7 @@ def test_take_action(self, mock_parse_sort_arg, mock_list_objects):
494494
limit=args.limit,
495495
sort_keys=mock.sentinel.sort_keys,
496496
sort_dirs=mock.sentinel.sort_dirs,
497+
filters={'status': args.status},
497498
)
498499

499500

coriolisclient/tests/v1/test_deployments.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ def test_list_with_pagination(self):
8585
limit=mock.sentinel.limit,
8686
sort_keys=[mock.sentinel.sort_key0, mock.sentinel.sort_key1],
8787
sort_dirs=[mock.sentinel.sort_dir0, mock.sentinel.sort_dir1],
88+
filters={"status": mock.sentinel.status},
8889
)
8990
exp_query = [
9091
("marker", mock.sentinel.marker),
@@ -93,6 +94,7 @@ def test_list_with_pagination(self):
9394
("sort_key", mock.sentinel.sort_key1),
9495
("sort_dir", mock.sentinel.sort_dir0),
9596
("sort_dir", mock.sentinel.sort_dir1),
97+
("status", mock.sentinel.status),
9698
]
9799
self.assertEqual(mock_list.return_value, result)
98100
mock_list.assert_called_once_with(

coriolisclient/tests/v1/test_transfer_executions.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ def test_list_with_pagination(self, mock_list):
6060
limit=mock.sentinel.limit,
6161
sort_keys=[mock.sentinel.sort_key0, mock.sentinel.sort_key1],
6262
sort_dirs=[mock.sentinel.sort_dir0, mock.sentinel.sort_dir1],
63+
filters={"status": mock.sentinel.status},
6364
)
6465
exp_query = [
6566
("marker", mock.sentinel.marker),
@@ -68,6 +69,7 @@ def test_list_with_pagination(self, mock_list):
6869
("sort_key", mock.sentinel.sort_key1),
6970
("sort_dir", mock.sentinel.sort_dir0),
7071
("sort_dir", mock.sentinel.sort_dir1),
72+
("status", mock.sentinel.status),
7173
]
7274
self.assertEqual(
7375
mock_list.return_value,

coriolisclient/tests/v1/test_transfers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,17 @@ def test_list_with_pagination(self, mock_list):
9494
marker=mock.sentinel.marker,
9595
limit=mock.sentinel.limit,
9696
sort_keys=[mock.sentinel.sort_key0, mock.sentinel.sort_key1],
97-
sort_dirs=[mock.sentinel.sort_dir0, mock.sentinel.sort_dir1],)
97+
sort_dirs=[mock.sentinel.sort_dir0, mock.sentinel.sort_dir1],
98+
filters={"status": mock.sentinel.status},
99+
)
98100
exp_query = [
99101
("marker", mock.sentinel.marker),
100102
("limit", mock.sentinel.limit),
101103
("sort_key", mock.sentinel.sort_key0),
102104
("sort_key", mock.sentinel.sort_key1),
103105
("sort_dir", mock.sentinel.sort_dir0),
104106
("sort_dir", mock.sentinel.sort_dir1),
107+
("status", mock.sentinel.status)
105108
]
106109
self.assertEqual(
107110
mock_list.return_value,

coriolisclient/v1/deployments.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def __init__(self, api):
5454

5555
def list(self, detail=False,
5656
marker=None, limit=None,
57-
sort_keys=None, sort_dirs=None):
57+
sort_keys=None, sort_dirs=None, filters=None):
5858
query = []
5959
if marker is not None:
6060
query.append(("marker", marker))
@@ -66,6 +66,8 @@ def list(self, detail=False,
6666
if sort_dirs is not None:
6767
query.extend(('sort_dir', sort_dir)
6868
for sort_dir in sort_dirs)
69+
if filters:
70+
query.extend((key, value) for key, value in filters.items())
6971

7072
path = "/deployments"
7173
if detail:

0 commit comments

Comments
 (0)