2012-08-09 10 views
10

私はReadTheDocsを使って自分のドキュメントをコンパイルできるように、問題のあるMatplotlibを作成しようとしています。`from x import *`がうまく動作するようにする方法

私のコードでは、from matplotlib.pyplot import *を使用してmatplotlibをインポートします。

私は(ReadTheDocs FAQにより示唆されるように)私のモックのために、次のコードを使用しています:

class Mock(object): 
    def __init__(self, *args, **kwargs): 
     pass 

    def __call__(self, *args, **kwargs): 
     return Mock() 

    @classmethod 
    def __getattr__(cls, name): 
     if name in ('__file__', '__path__'): 
      return '/dev/null' 
     elif name[0] == name[0].upper(): 
      return type(name,(), {}) 
     else: 
      return Mock() 

MOCK_MODULES = ['numpy', 'scipy', 'matplotlib', 'matplotlib.pyplot'] 
for mod_name in MOCK_MODULES: 
    sys.modules[mod_name] = Mock() 

from matplotlib.pyplot import *を実行している場合しかし、私はそのTypeError: 'type' object does not support indexingを言って、エラーを取得します。

from x import *スタイルを使用してmatplotlibをインポートできるようにモックを変更できる方法はありますか?私はReadTheDocsがコードを適切にインポートできるように、特定の機能を使用する必要はありません。

+3

サイドノート:独自の汎用モックをロールバックしないでください。 3.3の優れた 'mock'ライブラリを使いましょう。それは標準ライブラリでさえあります。 – delnan

+0

コメントをありがとう - 私は 'mock'ライブラリを読み込み、ReadTheDocsで提案されているクラスの代わりに' mock.Mock'クラスを使用するとすべて正常に動作することが分かりました。 – robintw

答えて

7

*でインポートする場合、モジュールに__all__リストを定義する必要があります。同じことが、あなたのクラスに行く:ちょうどクラスに__all__属性を追加し、それが正常に動作する必要があります:

class Mock(object): 
    __all__ = [] 
+0

ReadTheDocsのFAQはMagicMockを示唆している:unittest.mockインポートMagicMockから クラスモック(MagicMock): __all__ = [] @classmethod DEF __getattr __(CLS、名):モックを返す () MOCK_MODULES = [ 'tkinter'、 'tkinter.ttk'] MOCK_MODULESのmod_nameのsys.modules.update((mod_name、Mock()) しかし、tkinter.ttkでは動作しません。 – LRMAAX

関連する問題