Repository: planetlabs/planet-client-python

Issue:
Report invalid item-types with more human-readable list
With `planet data search` if I do an improper item-type I get a response like:

```
Error: Invalid value for 'ITEM_TYPES': ['psscend'] should be one of {'PSScene', 'MOD09GA', 'MYD09GA', 'MYD09GQ', 'SkySatCollect', 'REOrthoTile', 'REScene', 'MOD09GQ', 'PSScene4Band', 'Sentinel1', 'Sentinel2L1C', 'SkySatScene', 'Landsat8L1G', 'PSOrthoTile', 'PSScene3Band'}
```

The { and ' characters make it feel like a dump of a program. It'd be better to have it look like a more natural list. 

`planet orders request` does it in a more readable way, so likely can just copy theirs: 
```
Error: Invalid value: item_type - 'skysatcollectd' is not one of 'PSScene', 'Landsat8L1G', 'SkySatScene', 'SkySatCollect', 'PSOrthoTile', 'REOrthoTile', 'PSScene3Band', 'Sentinel2L1C'.
```

Discussion:

Patch:
diff --git a/planet/cli/data.py b/planet/cli/data.py
index 1abdcde..5588c6d 100644
--- a/planet/cli/data.py
+++ b/planet/cli/data.py
@@ -19,7 +19,7 @@ import click
 
 from planet import data_filter, DataClient
 from planet.clients.data import SEARCH_SORT, SEARCH_SORT_DEFAULT, STATS_INTERVAL
-from planet.specs import get_item_types
+from planet.specs import get_item_types, SpecificationException
 
 from . import types
 from .cmds import coro, translate_exceptions
@@ -64,11 +64,12 @@ def assets_to_filter(ctx, param, assets: List[str]) -> Optional[dict]:
 
 def check_item_types(ctx, param, item_types) -> Optional[List[dict]]:
     # Set difference between given item types and all item types
-    set_diff = set([item.lower() for item in item_types]) - set(
+    invalid_item_types = set([item.lower() for item in item_types]) - set(
         [a.lower() for a in ALL_ITEM_TYPES])
-    if set_diff:
-        raise click.BadParameter(
-            f'{item_types} should be one of {ALL_ITEM_TYPES}')
+    if invalid_item_types:
+        raise SpecificationException(invalid_item_types,
+                                     ALL_ITEM_TYPES,
+                                     'item_type')
     else:
         return item_types
 


Test patch:
diff --git a/tests/unit/test_data_item_type.py b/tests/unit/test_data_item_type.py
index 41d7b78..a777609 100644
--- a/tests/unit/test_data_item_type.py
+++ b/tests/unit/test_data_item_type.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 import logging
 import pytest
-import click
+from planet.specs import SpecificationException
 from planet.cli.data import check_item_types
 
 LOGGER = logging.getLogger(__name__)
@@ -51,5 +51,5 @@ def test_item_type_success(item_types):
 
 def test_item_type_fail():
     ctx = MockContext()
-    with pytest.raises(click.BadParameter):
+    with pytest.raises(SpecificationException):
         check_item_types(ctx, 'item_type', "bad_item_type")