2017-12-20 5 views
0

私はこの非常に複雑な問題に対して、ここで解決策を見つけることを願っています。autodoc:インポートを尊重するのではなく、フルネームで基本クラスが表示されます

私はプロジェクトを文書化するためにsphinxとintersphinxを使用します。

私はmongoengine.Documentから継承するクラスを持っています。

sphinx-apidocとsphinx-build(sphinx-quickstartで自動生成されたMakefile経由)を使ってsphinxドキュメントを構築すると、mongoengine.Documentクラスへの参照は実際には完全に正しい修飾された名前ですが、これは問題です。mongoengineプロジェクトではクラスがmengoengine.Documentというラベルが付けられているため、intersphinxはまったくリンクしていません。

sphinxにインポートしたときに基底クラスの情報を生成する方法はありますか(私のコードでは、mongoengine import Documentから取得しています)。

次のコード:

from mongoengine import Document, EmbeddedDocumentListField 

class MyDocument(Document): 
""" my docstring """ 

それはのような一部のHTMLを生成します。

class myproj.models.MyDocument(*args, **values) Bases: 
mongoengine.document.Document <-- intersphinx does not find the link to external doc! 

代わりの

class myproj.models.MyDocument(*args, **values) 
Bases: mongoengine.Document <-- here intersphinx will properly link 
+0

トリッキーな問題を。私はそれを解決する方法を知らない。クラスの基底は '__bases__'変数から決定されます。 'MyDocument .__ bases__'は'(、) 'を返します。 – mzjn

+1

回避方法が見つかりました。あなたのコードに 'Document .__ module__ =" mongoengine "を追加してください。 – mzjn

+0

@mzjn働いてくれてありがとう!私はあなたがそれから答えを出すことができると思う。 – BangTheBank

答えて

1

__module__属性が内のクラスモジュールの名前を保持していますが定義された。 Document.__module__の値は "mongoengine.document"です。

属性が書き込み可能なので、この問題を回避するには、コードに次の行を追加することです:

Document.__module__ = "mongoengine" 
関連する問題