mkdocs: использование пользовательского модуля python для дополнения плагина - PullRequest
0 голосов
/ 24 июня 2018

Я хотел бы написать плагин для mkdocs, который позволяет добавить файл пользовательского кода Python. Вот пример плагина .

Я хотел бы поместить модуль в основной каталог веб-сайта вместе с файлом mkdocs.yml и объявить этот модуль там, например ::

.
python_module=mycode.py

Тогда я бы использовал в коде плагина что-то вроде:

from mkdocs.plugins import BasePlugin

from jinja2 import Template
import importlib

class MarkdownExtraDataPlugin(BasePlugin):
    "Execute piece of code"

    def on_page_markdown(self, markdown, page, config, site_navigation, **kwargs):

        python_module = config.get('python_module')

        if python_module:
            # Add path, here is the question:
            python_module = os.path.join(*?????*, python_module)

            # do import here:
            importlib.import_module(python_module)

        ....
        return result

Проблема, с которой я столкнулся на данный момент, заключается в том, что я не знаю, как код модуля мог узнать местоположение файла yaml или местоположение файла уценки. Случайно ли это будет частью словаря config?

Обновление

Я написал плагин и сделал его доступным на github . Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 25 июня 2018

Ответ зависит от того, какую версию MkDocs вы используете. В # 1376 путь был добавлен к объекту конфигурации в качестве атрибута config.config_file_path. Однако это не будет доступно до следующего выпуска ( 1.0 ). Несмотря на это, более ранние версии включают недокументированный параметр конфигурации config['config_file_path'], в котором хранится местоположение файла. Однако будьте осторожны, так как любые недокументированные функции могут быть изменены без предварительного уведомления.

Что касается расположения файла Markdown, который доступен в различных атрибутах объекта page , переданного в событие плагина. У вас есть выбор page.input_path, page.output_path, page.abs_input_path и page.abs_output_path. Опять же, они недокументированы и могут быть изменены в будущем выпуске без предварительного уведомления. Фактически, # 1504 предлагает изменить их на page.file.src_path, page.file.dest_path, page.file.abs_src_path и page.file.abs_dest_path для версии 1.0. Но это риск при работе с программным обеспечением до 1.0. Все меняется, когда разработчики пытаются сделать это правильно. Хорошая новость заключается в том, что версия 1.0 заблокирует эти вещи в будущем.

Полное раскрытие: я являюсь членом команды разработчиков MkDocs.

...