Автокласс Сфинкса с метаклассом не работает

#python #python-sphinx #metaclass #autodoc

Вопрос:

Метакласс:

 class RequestMeta(type):
    def __new__(mcs, what, bases, attrs):
        _attrs = {name: decimal_to_string(attr) if callable(attr) else attr for name, attr in attrs.items()}
        return super().__new__(mcs, what, bases, _attrs)
 

Когда мы импортируем RequestMeta для метакласса, Sphinx не может генерировать участников:

 Class_name(metaclass=RequestMeta)
    def test
        """
        Get test
        :return:
        .. code-block:: json

            [
                {
                "message":"test",
                "timestamp": 123
                }
            ]
        """
 

тест.первый:

 Test
____

.. autoclass:: my_prog.a.Class_name
   :members:
 

Комментарии:

1. Попробуйте вставить пустую строку между возвращением и блоком кода.

2. «пустая строка» никогда не будет иметь никакого значения в любом коде Python, кроме предупреждений линтера. (и не в этом случае)

Ответ №1:

Проблема, скорее всего, кроется в вашем decimal_to_string декораторе. Сфинксу будет наплевать на метакласс, но если при оформлении функции вы лишите ее атрибутов, он ничего не сможет сделать.

Проверьте, включает ли decimal_to_string он свою целевую функцию functools.wraps — это, скорее всего, решит вашу проблему.

Комментарии:

1. функции. обертывания — работают!!! Спасибо! Проблема была с @декоратором в метаклассе