Skip to content

CLI: человекочитаемый вывод справочных команд (а не сырой JSON по умолчанию) #578

@axisrow

Description

@axisrow

Проблема

Почти весь вывод CLI по умолчанию печатается «голым» JSON через format_output(..., "json", ...). Для машинной обработки это правильно, но для справочных / информационных команд (которые показывают человеку список значений, а не данные API) JSON-дамп читается плохо.

Пример уже существующей справочной команды, которая печатает сырой JSON:

  • direct dictionaries list-namesformat_output(DICTIONARY_NAMES, "json", None) (direct_cli/commands/dictionaries.py:82-85) — жёстко зашит json, даже без --format.

Повод: обсуждали добавление справки по «динамическим параметрам» Яндекс Директа (подстановочные переменные {campaign_id}, {keyword}, {source_type}, … для UTM-меток/ссылок). Такую справку логично выводить человекочитаемо, а не одним JSON-блоком.

Что хочется

Для информационных/справочных команд (перечисления значений, справочники, шаблоны параметров) сделать человекочитаемый вывод по умолчанию, сохранив машинные форматы как опцию.

Варианты (обсудить при реализации):

  1. Дефолт --format table для справочных команд (json/table/csv/tsv уже поддержаны в format_output, direct_cli/output.py:24; format_table через tabulateoutput.py:160).
  2. Либо отдельный «pretty»-вывод (выровненный список «параметр — описание — пример»), а --format json — для скриптов.

Объём / границы

  • НЕ трогаем формат вывода команд, которые возвращают данные API (там json по умолчанию — правильно и ожидаемо для пайплайнов).
  • Касается только справочных команд: текущая dictionaries list-names и будущие (tracking-params и т.п.).
  • Все справочные команды должны поддерживать --format {json,table,csv,tsv} единообразно (сейчас list-names не поддерживает вовсе).

Затрагиваемые места

  • direct_cli/output.pyformat_output / format_table (переиспользовать, не дублировать).
  • direct_cli/commands/dictionaries.py:82list-names привести к общему виду с --format.
  • Конвенция для новых справочных команд.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationenhancementFeature addition

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions