Python Sphinx autodoc и декорированные элементы

Вот рабочий пример для swift 4

public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
    // Allow Backspace
    if string.count == 0 {
        return true
    }

    // Allow Only Valid Decimal Numbers
    if let textFieldText = textField.text   {

        let finalText = (textFieldText as NSString).replacingCharacters(in: range, with: string)
        if Double(finalText) != nil {
            return true
        }
    }
    return false
}
26
задан Chris Morgan 18 July 2011 в 13:12
поделиться

2 ответа

У меня была такая же проблема с декоратором сельдерея @task.

Вы также можете исправить это в вашем случае, добавив правильную сигнатуру функции в ваш первый файл, например:

.. autoclass:: Bus
    :members:

    .. automethod:: open(self)
    .. automethod:: some_other_method(self, param1, param2)

Он все равно будет автоматически документировать элементы, не являющиеся декораторами.

Это упомянуто в документации sphinx на http://www.sphinx-doc.org/en/master/ext/autodoc.html#directive-automodule - поиск «Это полезно если подпись метода скрыта декоратором. "

В моем случае мне пришлось использовать автофункцию, чтобы указать сигнатуру моих задач с сельдереем в модуле tasks.py приложения django:

.. automodule:: django_app.tasks
    :members:
    :undoc-members:
    :show-inheritance:

    .. autofunction:: funct1(user_id)
    .. autofunction:: func2(iterations)
13
ответ дан 28 November 2019 в 07:51
поделиться

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

# inject the wrapped functions signature at the top of a docstring
args, varargs, varkw, defaults = inspect.getargspec(method)
defaults = () if defaults is None else defaults
defaults = ["\"{}\"".format(a) if type(a) == str else a for a in defaults]
l = ["{}={}".format(arg, defaults[(idx+1)*-1]) if len(defaults)-1 >= idx else arg for idx, arg in enumerate(reversed(list(args)))]
if varargs: allargs.append('*' + varargs)
if varkw: allargs.append('**' + varkw)
doc = "{}({})\n{}".format(method.__name__, ', '.join(reversed(l)), method.__doc__)
wrapper.__doc__ = doc
0
ответ дан 28 November 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: