Могу ли я определить, была ли команда click вызвана напрямую или вызвана другой командой? - PullRequest
0 голосов
/ 10 июня 2019

Я создал небольшой CLI, который позволяет пользователю добавлять один элемент за раз в мою систему через API.Это работает, но раздражает, если пользователь хочет добавить несколько вещей в быстрой последовательности.

Мой текущий план состоит в том, чтобы добавить новую команду, которая принимает файл JSON с соответствующими атрибутами для объекта.Каждый объект в файле JSON будет зациклен, и CLI вызовет существующую команду с соответствующими значениями из файла JSON.

Теперь, поскольку API может работать медленно, я включил индикатор выполнения, который показываеткак долго, пока продукт полностью не настроен в системе.Этот индикатор запускается после каждого вызова, чтобы добавить элемент.Я не хочу нескольких индикаторов, когда я массово добавляю элементы.Хотя один индикатор выполнения в конце отлично бы работал.

Моя текущая мысль заключалась в том, чтобы в существующей команде добавления элемента определить, была ли команда вызвана напрямую или она была вызвана командой массового добавления.Это возможно с Click?

Некоторый псевдо-код, помогающий немного визуализировать:

@click.command()
@click.option('--attribute1')
@click.option('--attribute2')
def additem(attribute1, attribute2):
    add_via_api(attribute1, attribute2)
    # This is going to take 10-15 seconds for everything to set up
    # so show a progressbar here normally, just sleep for this example
    # I want to detect right here though, so I can not sleep if this is a 
    # bulk insert
    sleep(15)

@click.command()
@click.arugment('f', type=click.File(exists=True))
def bulkadditems(ctx, f):
    with open(f) as items_file:
        items = json.load(items_file)
    for item in items:
        ctx.invoke(additem, attribute1=item['attribute1'], attribute2=item['attribute2'])

    # Once all items have invoked the other command, this is where I want 
    # a progress bar
...