Skip to content

Commit 04d33fa

Browse files
authored
Merge branch 'main' into data-asset-reporter
2 parents ed0be25 + 150f438 commit 04d33fa

File tree

3 files changed

+57
-38
lines changed

3 files changed

+57
-38
lines changed

planet/cli/data.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ def assets_to_filter(ctx, param, assets: List[str]) -> Optional[dict]:
7171

7272

7373
def check_item_types(ctx, param, item_types) -> Optional[List[dict]]:
74-
'''Validates the item type by comparing the inputted item type to all
75-
supported item types.'''
74+
'''Validates each item types provided by comparing them to all supported
75+
item types.'''
7676
try:
7777
for item_type in item_types:
7878
validate_item_type(item_type)
@@ -81,6 +81,17 @@ def check_item_types(ctx, param, item_types) -> Optional[List[dict]]:
8181
raise click.BadParameter(str(e))
8282

8383

84+
def check_item_type(ctx, param, item_type) -> Optional[List[dict]]:
85+
'''Validates the item type provided by comparing it to all supported
86+
item types.'''
87+
try:
88+
validate_item_type(item_type)
89+
except SpecificationException as e:
90+
raise click.BadParameter(str(e))
91+
92+
return item_type
93+
94+
8495
def check_search_id(ctx, param, search_id) -> str:
8596
'''Ensure search id is a valix hex string'''
8697
try:
@@ -487,11 +498,9 @@ async def search_update(ctx,
487498
@click.pass_context
488499
@translate_exceptions
489500
@coro
490-
@click.argument("item_type",
491-
type=types.CommaSeparatedString(),
492-
callback=check_item_types)
501+
@click.argument("item_type", type=str, callback=check_item_type)
493502
@click.argument("item_id")
494-
@click.argument("asset_type_id")
503+
@click.argument("asset_type")
495504
@click.option('--directory',
496505
default='.',
497506
help=('Base directory for file download.'),
@@ -514,7 +523,7 @@ async def search_update(ctx,
514523
async def asset_download(ctx,
515524
item_type,
516525
item_id,
517-
asset_type_id,
526+
asset_type,
518527
directory,
519528
filename,
520529
overwrite,
@@ -537,7 +546,7 @@ async def asset_download(ctx,
537546
"""
538547
quiet = ctx.obj['QUIET']
539548
async with data_client(ctx) as cl:
540-
asset = await cl.get_asset(item_type.pop(), item_id, asset_type_id)
549+
asset = await cl.get_asset(item_type, item_id, asset_type)
541550
path = await cl.download_asset(asset=asset,
542551
filename=filename,
543552
directory=Path(directory),
@@ -551,27 +560,23 @@ async def asset_download(ctx,
551560
@click.pass_context
552561
@translate_exceptions
553562
@coro
554-
@click.argument("item_type",
555-
type=types.CommaSeparatedString(),
556-
callback=check_item_types)
563+
@click.argument("item_type", type=str, callback=check_item_type)
557564
@click.argument("item_id")
558-
@click.argument("asset_type_id")
559-
async def asset_activate(ctx, item_type, item_id, asset_type_id):
565+
@click.argument("asset_type")
566+
async def asset_activate(ctx, item_type, item_id, asset_type):
560567
'''Activate an asset.'''
561568
async with data_client(ctx) as cl:
562-
asset = await cl.get_asset(item_type.pop(), item_id, asset_type_id)
569+
asset = await cl.get_asset(item_type, item_id, asset_type)
563570
await cl.activate_asset(asset)
564571

565572

566573
@data.command()
567574
@click.pass_context
568575
@translate_exceptions
569576
@coro
570-
@click.argument("item_type",
571-
type=types.CommaSeparatedString(),
572-
callback=check_item_types)
577+
@click.argument("item_type", type=str, callback=check_item_type)
573578
@click.argument("item_id")
574-
@click.argument("asset_type_id")
579+
@click.argument("asset_type")
575580
@click.option('--delay',
576581
type=int,
577582
default=5,
@@ -581,21 +586,16 @@ async def asset_activate(ctx, item_type, item_id, asset_type_id):
581586
default=200,
582587
show_default=True,
583588
help='Maximum number of polls. Set to zero for no limit.')
584-
async def asset_wait(ctx,
585-
item_type,
586-
item_id,
587-
asset_type_id,
588-
delay,
589-
max_attempts):
589+
async def asset_wait(ctx, item_type, item_id, asset_type, delay, max_attempts):
590590
'''Wait for an asset to be activated.
591591
592592
Returns when the asset status has reached "activated" and the asset is
593593
available.
594594
'''
595595
quiet = ctx.obj['QUIET']
596596
async with data_client(ctx) as cl:
597-
asset = await cl.get_asset(item_type.pop(), item_id, asset_type_id)
598-
with AssetStatusBar(item_type, item_id, asset_type_id,
597+
asset = await cl.get_asset(item_type, item_id, asset_type)
598+
with AssetStatusBar(item_type, item_id, asset_type,
599599
disable=quiet) as bar:
600600
status = await cl.wait_asset(asset,
601601
delay,

tests/integration/test_data_cli.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def item_id():
6262

6363

6464
@pytest.fixture
65-
def asset_type_id():
65+
def asset_type():
6666
return 'basic_udm2'
6767

6868

@@ -72,7 +72,7 @@ def dl_url():
7272

7373

7474
@pytest.fixture
75-
def mock_asset_get_response(item_type, item_id, asset_type_id, dl_url):
75+
def mock_asset_get_response(item_type, item_id, asset_type, dl_url):
7676

7777
def _func():
7878
basic_udm2_asset = {
@@ -85,7 +85,7 @@ def _func():
8585
"md5_digest": None,
8686
"status": 'active',
8787
"location": dl_url,
88-
"type": asset_type_id
88+
"type": asset_type
8989
}
9090

9191
page_response = {
@@ -951,7 +951,7 @@ def test_asset_download_default(invoke,
951951
mock_asset_get_response,
952952
item_type,
953953
item_id,
954-
asset_type_id,
954+
asset_type,
955955
dl_url):
956956

957957
mock_asset_get_response()
@@ -986,7 +986,7 @@ async def _stream_img():
986986
'asset-download',
987987
item_type,
988988
item_id,
989-
asset_type_id,
989+
asset_type,
990990
f'--directory={Path(folder)}',
991991
'--filename',
992992
'img.tif'
@@ -1015,7 +1015,7 @@ def test_asset_activate(invoke,
10151015
mock_asset_get_response,
10161016
item_type,
10171017
item_id,
1018-
asset_type_id,
1018+
asset_type,
10191019
dl_url):
10201020

10211021
mock_asset_get_response()
@@ -1025,7 +1025,7 @@ def test_asset_activate(invoke,
10251025
respx.get(dl_url).return_value = mock_resp_activate
10261026

10271027
runner = CliRunner()
1028-
result = invoke(['asset-activate', item_type, item_id, asset_type_id],
1028+
result = invoke(['asset-activate', item_type, item_id, asset_type],
10291029
runner=runner)
10301030

10311031
assert not result.exception
@@ -1036,7 +1036,7 @@ def test_asset_wait(invoke,
10361036
mock_asset_get_response,
10371037
item_type,
10381038
item_id,
1039-
asset_type_id,
1039+
asset_type,
10401040
dl_url):
10411041

10421042
mock_asset_get_response()
@@ -1047,7 +1047,7 @@ def test_asset_wait(invoke,
10471047

10481048
runner = CliRunner()
10491049
result = invoke(
1050-
['asset-wait', item_type, item_id, asset_type_id, '--delay', '0'],
1050+
['asset-wait', item_type, item_id, asset_type, '--delay', '0'],
10511051
runner=runner)
10521052

10531053
assert not result.exception

tests/unit/test_data_callbacks.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import logging
1515
import pytest
1616
import click
17-
from planet.cli.data import check_item_types
17+
from planet.cli.data import check_item_types, check_item_type
1818

1919
LOGGER = logging.getLogger(__name__)
2020

@@ -43,13 +43,32 @@ def __init__(self):
4343
'PSScene4Band',
4444
'REScene'
4545
])
46-
def test_item_type_success(item_types):
46+
def test_item_types_success(item_types):
4747
ctx = MockContext()
4848
result = check_item_types(ctx, 'item_types', [item_types])
4949
assert result == [item_types]
5050

5151

52+
def test_item_types_fail():
53+
ctx = MockContext()
54+
with pytest.raises(click.BadParameter):
55+
check_item_types(ctx, 'item_types', "bad_item_type")
56+
57+
58+
def test_item_type_success():
59+
ctx = MockContext()
60+
item_type = "PSScene"
61+
result = check_item_type(ctx, 'item_type', item_type)
62+
assert result == item_type
63+
64+
5265
def test_item_type_fail():
5366
ctx = MockContext()
5467
with pytest.raises(click.BadParameter):
55-
check_item_types(ctx, 'item_type', "bad_item_type")
68+
check_item_type(ctx, 'item_type', "bad_item_type")
69+
70+
71+
def test_item_type_too_many_item_types():
72+
ctx = MockContext()
73+
with pytest.raises(click.BadParameter):
74+
check_item_types(ctx, 'item_type', "PSScene,SkySatScene")

0 commit comments

Comments
 (0)