Как программно сгенерировать документацию из словаря Python и вставить ее в .rst-файл с помощью Sphinx

Я пишу инструмент настройки, который автоматизирует развертывание некоторых панелей мониторинга. Каждая панель мониторинга имеет письменное описание, доступное в инструменте, и его можно найти на развернутой панели мониторинга. Но у нас также есть некоторая функциональная документация, которая повторяет это описание, чтобы конечные пользователи могли прочитать ее вне кода. Итак, в основном мы имеем следующее:

  1. описание_mapping.py
dashboard_description_mapping = {"dashboard_1": "This dashboard achieves xyz"}
  1. README.rst
Templates
=========

Descriptions
------------

* **dashboard_1**
    
    This dashboard achieves xyz

Я упростил подход, в реальном случае у нас есть множество дашбордов и описаний, которые все дублируются в файлеdescription_mapping.py и в README.rst.

Я хотел бы иметь возможность выполнять какую-то команду, которая дает мне следующее:

Templates
=========

Descriptions
------------

* **dashboard_1**
   
   .. magic_command: description_mapping.dashboard_description_mapping.get("dashboard_1")

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

Это возможно? Я искал некоторое время и наткнулся на этот предыдущий вопрос, но, похоже, это не дает того, что мне нужно:

  1. Как использовать Python для программного создания части документации Sphinx?
  2. Отображение словарных данных в документации Sphinx

Я хотел бы получить строку, а не просто распечатать весь словарь.

Я пытался использовать существующие функции ..autodoc, но это не дало желаемого результата, а просто распечатал словарь.

Пожалуйста, объясните, что в autodoc не удовлетворило ваши требования. Кроме того, можете ли вы более подробно описать ваши требования?

itprorh66 12.07.2024 16:06

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

PEREZje 12.07.2024 16:19

Так какая часть autodoc этого не сделала?

itprorh66 12.07.2024 16:27

Например, я пытался использовать .. autodata, но это не распечатывало так, как я хочу. Я хочу иметь возможность напрямую обращаться к значениям в словаре сопоставления, чтобы иметь возможность распечатать их там, где захочу. А не просто распечатать весь словарь в уродливом формате.

PEREZje 15.07.2024 09:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я действительно понял, как это сделать, я использовал пользовательскую директиву ..exec из: https://stackoverflow.com/a/10146415/8580574 и просто напечатал то, как я хотел:

.. exec::
    from title_desc_mappings import dashboard_description_mapping
    
    for key, value in dashboard_description_mapping.items():
        if key.startswith('dashboard'):
            print(f"* **{key}**\n\n")
  
            if value == '':
                print("  No description available.\n")
            else:
                print(f"  {value}\n")

надеюсь, это поможет кому-то еще

Другие вопросы по теме