Sphinx-doc :automodule: with Mock imports

前端 未结 1 1735
没有蜡笔的小新
没有蜡笔的小新 2021-01-01 04:42

I\'m attempting to use sphinx-doc :automodule: in conjunction with Mock-ed out modules as per this answer. Specifically I\'m using Mock for PyQt5 module imports which are no

相关标签:
1条回答
  • 2021-01-01 05:15

    I resolved this in the end by not using Mock for Qt objects. In my application there is a qt.py wrapper file that handles differences between PyQt4 and PyQt5 and allows them to be subsequently imported for use (while ignoring the Qt namespace rearrangement).

    In this file I wrapped the actual import code in a test for ReadTheDocs and then if detected returned a series of dummy classes inheriting directly from object. Additions were required where objects have attributes, but this is only used once in the code base. It'll need to be kept up to date, but it solves the problem.

    # ReadTheDocs
    ON_RTD = os.environ.get('READTHEDOCS', None) == 'True'
    if not ON_RTD:
    
        #... do the normal import here ...
    
    else:
    
        class QMockObject(object):
            def __init__(self, *args, **kwargs):
                super(QMockObject, self).__init__()
    
            def __call__(self, *args, **kwargs):
                return None
    
        class QApplication(QMockObject):
            pass
    
        class pyqtSignal(QMockObject):
            pass
    
        class pyqtSlot(QMockObject):
            pass
    
        class QObject(QMockObject):
            pass
    
        class QAbstractItemModel(QMockObject):
            pass
    
        class QModelIndex(QMockObject):
            pass
    
        class QTabWidget(QMockObject):
            pass
    
        class QWebPage(QMockObject):
            pass
    
        class QTableView(QMockObject):
            pass
    
        class QWebView(QMockObject):
            pass
    
        class QAbstractTableModel(QMockObject):
            pass
    
        class Qt(QMockObject):
            DisplayRole = None
    
        class QWidget(QMockObject):
            pass
    
        class QPushButton(QMockObject):
            pass
    
        class QDoubleSpinBox(QMockObject):
            pass
    
        class QListWidget(QMockObject):
            pass
    
        class QDialog(QMockObject):
            pass
    
        class QSize(QMockObject):
            pass
    
        class QTableWidget(QMockObject):
            pass
    
        class QMainWindow(QMockObject):
            pass
    
        class QTreeWidget(QMockObject):
            pass
    
        class QAbstractItemDelegate(QMockObject):
            pass
    
        class QColor(QMockObject):
            pass
    
        class QGraphicsItemGroup(QMockObject):
            pass
    
        class QGraphicsItem(QMockObject):
            pass
    
        class QGraphicsPathItem(QMockObject):
            pass
    
        class QGraphicsTextItem(QMockObject):
            pass
    
        class QGraphicsRectItem(QMockObject):
            pass
    
        class QGraphicsScene(QMockObject):
            pass
    
        class QGraphicsView(QMockObject):
            pass
    
        app = None
    
    0 讨论(0)
提交回复
热议问题