Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

have planet orders request take in a series of item descriptions to create an order

Abierto
#944 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
42/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python
Área
cli

Línea de trabajo

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.】【。

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

2024-revisit CLI/SDK Interface proposal

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()
Lenguaje dominante
Python
Estrellas
300
Forks
99
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de planetlabs/planet-client-python

Todos los issues de planetlabs/planet-client-python

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.