0

I am trying to get documentation to build on a ReadTheDocs installation via Sphinx. The classes I am documenting inherit from a larger Framework, which I cannot easily install and thus would like to mock. However, Mock seems to be overly greedy in mocking also the classes I would actually like to document. The code in question is as follows:

# 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
    """

I hit the point where I make sure I don't blindly mock the decorator, but am instead explicit in my Sphinx conf.py. Otherwise, I follow RTD suggestions for mocking modules:

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()

Now I would expect that for the printout I get something referring to my to be documented class, e.g. <ToDocument ...>.

However, I always get a Mock for that class as well, <MagicMock spec='str' id='139887652701072'>, which of course does not have any of the documentation I am trying to build. Any ideas?

barryhunter
  • 20,886
  • 3
  • 30
  • 43

1 Answers1

0

Turns out the problem was inheritance from a mocked class. Begin explicit about the base class and creating an empty class

class SomeBaseClass:
    pass

to patch in in the conf.py solved the problem