2017-12-20 1 views
0

Ich hoffe, ich finde hier eine Lösung für dieses ziemlich komplizierte Problem.autodoc: Basisklassen werden mit vollem Namen angezeigt, anstatt den Import zu respektieren

Ich benutze sphinx und intersphinx, um mein Projekt zu dokumentieren.

Ich habe eine Klasse, die von mongoengine.Document erbt.

Wenn ich sphinx docs mit sphinx-apidoc und der sphinx-build (über das automatisch generierte Makefile von sphinx-quickstart) baue, werden Verweise auf mongoengine.Document-Klassen als mongoengine.document.Document angezeigt, was eigentlich die richtige ist qualifizierter Name, aber das ist ein Problem, weil auf Mongoengine-Projekt diese Klasse als Mongoengine.Document bezeichnet wird, so dass Intersphinx überhaupt nicht verknüpft.

Gibt es eine Möglichkeit, Sphinx zu informieren, um Informationen über Basisklassen zu erzeugen, wie sie importiert werden (in meinem Code habe ich von Mongoengine importieren Dokument) anstelle von seinem vollständigen Modulpfad?

Der folgende Code:

from mongoengine import Document, EmbeddedDocumentListField 

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

es produziert einige html wie:

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

statt

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

Tricky Problem. Ich weiß nicht, wie ich es lösen soll. Die Basen einer Klasse werden aus der Variablen "__bases__" bestimmt. 'MyDocument .__ base__' gibt' (,) 'zurück. – mzjn

+1

Eine Problemumgehung gefunden. Fügen Sie 'Document .__ module__ =" mongoengine "' zu Ihrem Code hinzu. – mzjn

+0

@mzjn danke es hat funktioniert! Ich denke, du kannst eine Antwort darauf geben. – BangTheBank

Antwort

1

Das __module__ Attribut den Namen des Moduls hält, in der die Klasse wurde definiert. Der Wert Document.__module__ ist "mongoengine.document".

Das Attribut ist beschreibbar, so dass eine Abhilfe ist, die folgende Zeile in den Code hinzuzufügen:

Document.__module__ = "mongoengine" 
Verwandte Themen