Я создал небольшой 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