Я пытаюсь получить документацию на сборку ReadTheDocs через Sphinx. Классы, которые я документирую, наследуют от более обширного Framework, который я не могу легко установить и, следовательно, хотел бы высмеивать. Тем не менее, Мок, кажется, слишком жадный в издевательстве над классами, которые я действительно хотел бы задокументировать. Код, о котором идет речь, выглядит следующим образом:
# imports that need to be mocked
from big.framework import a_class_decorator, ..., SomeBaseClass
@a_class_decorator("foo", "bar")
class ToDocument(SomeBaseClass):
""" Lots of nice documentation here
which will never appear
"""
def a_function_that_is_being_documented():
""" This will show up on RTD
"""
Я дошел до того, что убедился, что не слепо издеваюсь над декоратором, а вместо этого явно указывал в своем Сфинксе conf.py
. В противном случае, я следую рекомендациям RTD для модулей-макетов:
class MyMock(MagicMock):
@classmethod
def a_class_decorator(cls, classid, version):
def real_decorator(theClass):
print(theClass)
return theClass
return real_decorator
@classmethod
def __getattr__(cls, name):
return MagicMock()
sys.modules['big.framework'] = MyMock()
Теперь я ожидаю, что для распечатки я получу что-то, относящееся к моему документируемому классу, например <ToDocument ...>
.
Однако я всегда получаю Mock для этого класса, <MagicMock spec='str' id='139887652701072'>
, который, конечно, не имеет документации, которую я пытаюсь создать. Есть идеи?