Skip to content

Commit 7aa43b6

Browse files
authored
Merge pull request #894 from planetlabs/data-stats-887
move planet data stats interval and filter args to required options
2 parents c28285b + 7a536e5 commit 7aa43b6

File tree

2 files changed

+29
-15
lines changed

2 files changed

+29
-15
lines changed

planet/cli/data.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -418,19 +418,27 @@ async def search_run(ctx, search_id, sort, limit, pretty):
418418
@click.argument("item_types",
419419
type=types.CommaSeparatedString(),
420420
callback=check_item_types)
421-
@click.argument('interval', type=click.Choice(STATS_INTERVAL))
422-
@click.argument("filter", type=types.JSON())
423-
async def stats(ctx, item_types, interval, filter):
421+
@click.option(
422+
'--filter',
423+
type=types.JSON(),
424+
required=True,
425+
help="""Filter to apply to search. Can be a json string, filename,
426+
or '-' for stdin.""")
427+
@click.option('--interval',
428+
type=click.Choice(STATS_INTERVAL),
429+
required=True,
430+
help='The size of the histogram date buckets.')
431+
async def stats(ctx, item_types, filter, interval):
424432
"""Get a bucketed histogram of items matching the filter.
425433
426434
This function returns a bucketed histogram of results based on the
427-
item_types, interval, and json filter specified (using file or stdin).
435+
item_types, interval, and filter specified.
428436
429437
"""
430438
async with data_client(ctx) as cl:
431439
items = await cl.get_stats(item_types=item_types,
432-
interval=interval,
433-
search_filter=filter)
440+
search_filter=filter,
441+
interval=interval)
434442
echo_json(items)
435443

436444

tests/integration/test_data_cli.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -771,16 +771,18 @@ def test_data_stats_invalid_filter(invoke, filter):
771771
interval = "hour"
772772
item_type = 'PSScene'
773773
runner = CliRunner()
774-
result = invoke(["stats", item_type, interval, filter], runner=runner)
774+
result = invoke(
775+
["stats", item_type, f'--interval={interval}', f'--filter={filter}'],
776+
runner=runner)
775777
assert result.exit_code == 2
776778

777779

778780
@respx.mock
779781
@pytest.mark.parametrize("item_types",
780782
['PSScene', 'SkySatScene', 'PSScene, SkySatScene'])
781-
@pytest.mark.parametrize("interval, exit_code", [(None, 1), ('hou', 2),
783+
@pytest.mark.parametrize("interval, exit_code", [(None, 2), ('hou', 2),
782784
('hour', 0)])
783-
def test_data_stats_invalid_interval(invoke, item_types, interval, exit_code):
785+
def test_data_stats_interval(invoke, item_types, interval, exit_code):
784786
"""Test for planet data stats. Test with multiple item_types.
785787
Test should succeed with valid interval, and fail with invalid interval."""
786788
filter = {
@@ -797,10 +799,11 @@ def test_data_stats_invalid_interval(invoke, item_types, interval, exit_code):
797799
}]})
798800
respx.post(TEST_STATS_URL).return_value = mock_resp
799801

800-
runner = CliRunner()
801-
result = invoke(["stats", item_types, interval, json.dumps(filter)],
802-
runner=runner)
802+
args = ["stats", item_types, f'--filter={json.dumps(filter)}']
803+
if interval:
804+
args.append(f'--interval={interval}')
803805

806+
result = invoke(args)
804807
assert result.exit_code == exit_code
805808

806809

@@ -828,9 +831,12 @@ def test_data_stats_success(invoke, item_types, interval):
828831
}]})
829832
respx.post(TEST_STATS_URL).return_value = mock_resp
830833

831-
runner = CliRunner()
832-
result = invoke(["stats", item_types, interval, json.dumps(filter)],
833-
runner=runner)
834+
result = invoke([
835+
"stats",
836+
item_types,
837+
f'--interval={interval}',
838+
f'--filter={json.dumps(filter)}'
839+
])
834840
assert result.exit_code == 0
835841

836842

0 commit comments

Comments
 (0)