have planet orders request take in a series of item descriptions to create an order
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 42/100
Research direction
Start at the planet orders request CLI entry point and inspect cli/types.py, especially the existing JSON parameter handling. Use the shown planet data search pipeline as the input case and verify that IDs and newline-delimited item descriptions are accepted, while mixed item types fail and item type remains required for ID input.】【。
Written by the indexing model from the issue text.
Description
To support the common use case of creating an order from a search, have planet orders request take in a series of item descriptions to create an order.
Usage:
planet data search --limit 5 PSScene | planet orders request - --name test --clip aoi.geojson --bundle analytic
Implementation notes: ids and item type are taken from the input. There is a check for more than one item type, which at this point results in a failure (the ability to order multiple types could come in a future improvement)
Changes required:
- planet order requests must now allow multiline input where each line is json in addition to ids as the argument
- item-type is only required if the input is IDs
Below is a working example of extracting item type and id from the output of planet data search.
$> planet data search --limit 5 PSScene | python ml.py --items -
PSScene: 20230504_155548_86_24b9
PSScene: 20230504_134550_99_2251
PSScene: 20230504_052537_02_2465
PSScene: 20230504_043314_80_248b
PSScene: 20230504_161301_74_2405
Note: MultiJSON is a hacked up version of JSON, which is in the cli/types.py module. There is more work here in defining a type that can handle both comma separated strings and multiple lines of json.
ml.py
import json
import click
class MultiJSON(click.ParamType):
name = 'MultiJSON'
def convert(self, value, param, ctx) -> list:
if isinstance(value, list):
conv = value
else:
# read from raw json
# skip this if value is a Path object or something else
if isinstance(value, str) and (value.startswith('{')
or value.startswith('[')):
print('hereh')
try:
conv = json.loads(value)
if isinstance(conv, dict):
conv = [conv]
except json.decoder.JSONDecodeError:
self.fail(
'JSON string is not valid JSON. Make sure the entire '
'JSON string is single-quoted and string entries are '
'double-quoted.')
# read from stdin or file
else:
try:
with click.open_file(value) as f:
conv = [json.loads(line) for line in f if line]
except FileNotFoundError:
self.fail('File not found.')
except json.decoder.JSONDecodeError:
stream = 'stdin' if value == '-' else 'JSON file'
self.fail(f'{stream} does not contain valid JSON.')
if not len(conv):
self.fail('JSON cannot be empty.')
return conv
@click.command()
@click.option('--items', type=MultiJSON(), required=True)
def hello(items):
for i in items:
click.echo(f"{i['properties']['item_type']}: {i['id']}")
if __name__ == '__main__':
hello()
- Dominant language
- Python
- Stars
- 300
- Forks
- 100
- Avg merge
- 9d 22h
- Merged PRs (30d)
- 3
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from planetlabs/planet-client-python
-
better-testing
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
planetlabs/planet-client-python#1110 ·
-
proposal
Difficulty 3/5 1-2 days Newbie friendliness 65/100
planetlabs/planet-client-python#1221 ·
-
proposal
Difficulty 3/5 1-2 days Newbie friendliness 57/100
planetlabs/planet-client-python#1214 ·
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 48/100
planetlabs/planet-client-python#1197 · 1 comment · 1 reaction ·
-
Quota APIMay be free again @asonnenschein claimed this 415 days ago, and no pull request is open. Openai-claude
planetlabs/planet-client-python#1191 · 1 comment · 1 assignee ·
All issues in planetlabs/planet-client-python
Similar issues
-
#bug
Difficulty 1/5 Under an hour Newbie friendliness 92/100
apache/superset#44923 · 1 comment ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
lawndoc/stack-back#123 ·
-
Add: EntuneOpen
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
AbdelStark/awesome-typesafe-jev#187 ·
Maintainers usually reply within 1 day
-
bug good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
repowise-dev/repowise#2966 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
Maintainers usually reply within 2 days