2013-12-13 4 views
9

मैं ऑटोसमरी एक्सटेंशन कैसे बता सकता हूं कि न केवल एक वर्ग की सूची बल्कि सभी वर्ग के सदस्यों को भी सूचीबद्ध किया जाए?पायथन स्फिंक्स ऑटोसमैरी: सदस्य फ़ंक्शंस की स्वचालित सूची

अगर मैं का उपयोग करें:

.. autosummary:: 

    MyClass 

जिसके परिणामस्वरूप html फ़ाइल में, वहाँ केवल हो जाएगा एक संक्षिप्त सारांश की तरह:

MyClass (var1, var2, ....) मेरा कस्टम करने के लिए वर्ग फैंसी बातें ...

क्या मैं वास्तव में चाहता हूँ की तरह कुछ:

MyClass (var1, var2, ....) मेरा कस्टम फैंसी काम करने के लिए वर्ग ...

MyClass.doA (var1, var2, ...) करता है एक बहुत अच्छी तरह

MyClass.doB (var1, var2, ...) क्या बी और भी बेहतर

मैं कैसे कॉन्फ़िगर करने के लिए है यह प्राप्त करने के लिए स्वत: अनुमोदन निर्देश (ऑटोमोमरी निर्देश में सभी कार्यों को कड़ाई से नाम देने के अलावा)? धन्यवाद!

उत्तर

14

आप ऑटोसमुमा का विस्तार कर सकते हैं नीचे और इसे इस तरह फोन की तरह ry निर्देश:

.. autoclass:: your.fully.qualified.path.to.the.Class 
    :members: 
    :undoc-members: 

    .. rubric:: Methods 

    .. autoautosummary:: your.fully.qualified.path.to.the.Class 
     :methods: 

    .. rubric:: Attributes 

    .. autoautosummary:: your.fully.qualified.path.to.the.Class 
     :attributes: 

कोड:

from sphinx.ext.autosummary import Autosummary 
from sphinx.ext.autosummary import get_documenter 
from docutils.parsers.rst import directives 
from sphinx.util.inspect import safe_getattr 
import re 

class AutoAutoSummary(Autosummary): 

    option_spec = { 
     'methods': directives.unchanged, 
     'attributes': directives.unchanged 
    } 

    required_arguments = 1 

    @staticmethod 
    def get_members(obj, typ, include_public=None): 
     if not include_public: 
      include_public = [] 
     items = [] 
     for name in dir(obj): 
      try: 
       documenter = get_documenter(safe_getattr(obj, name), obj) 
      except AttributeError: 
       continue 
      if documenter.objtype == typ: 
       items.append(name) 
     public = [x for x in items if x in include_public or not x.startswith('_')] 
     return public, items 

    def run(self): 
     clazz = str(self.arguments[0]) 
     try: 
      (module_name, class_name) = clazz.rsplit('.', 1) 
      m = __import__(module_name, globals(), locals(), [class_name]) 
      c = getattr(m, class_name) 
      if 'methods' in self.options: 
       _, methods = self.get_members(c, 'method', ['__init__']) 

       self.content = ["~%s.%s" % (clazz, method) for method in methods if not method.startswith('_')] 
      if 'attributes' in self.options: 
       _, attribs = self.get_members(c, 'attribute') 
       self.content = ["~%s.%s" % (clazz, attrib) for attrib in attribs if not attrib.startswith('_')] 
     finally: 
      return super(AutoAutoSummary, self).run() 

app.add_directive('autoautosummary', AutoAutoSummary) 
+0

यह कमाल है! पृष्ठ से तरीकों और गुणों को टक्ट्री में कैसे प्राप्त किया जाए? ऐसा लगता है कि autosummary: toctree: विकल्प इसे तोड़ते हैं? –

+0

धन्यवाद! कभी भी टक्ट्री विकल्प को लागू करने की कोशिश नहीं की, लेकिन जहां तक ​​मुझे पता है कि आपको 'toctree': directives.unchanged' शामिल करने के लिए विकल्प_एसपीसी शब्दकोश का विस्तार करना होगा। – clonker

+1

बेहद उपयोगी लगता है, लेकिन किसी के लिए sphinx एक्सटेंशन लिखने के व्यवसाय में नहीं, मुझे यह कोड कहां रखना है? और 'ऐप' चर कहाँ से आ रहा है? (और हाँ, मैंने ट्यूटोरियल को देखा है और यह मुझे भी नहीं बताता है।) – Raik

0

शायद तुम autoclass स्फिंक्स द्वारा प्रदान का उपयोग करना चाहिए, आप उस संपर्क कर सकते हैं autosummary की जगह:

.. autoclass:: MyClass 
    :members: 
+4

ठीक है, स्पष्ट करने के लिए है कि, मैं पहले से ही autoclass कार्यक्षमता का उपयोग। मैं जो चाहता हूं वह HTML पृष्ठ की शुरुआत में एक सिंहावलोकन तालिका है जिसके बाद ऑटोोडोक्यूशनेशन होता है। ताकि आप सभी वर्ग कार्यों को सीधे एक बार और नीचे दिए गए विवरण देख सकें। – SmCaterpillar

+2

ऑटोसैमरी के स्रोत कोड की जांच के बाद, अब इसे पूरा करना असंभव लगता है। https://bitbucket.org/birkenfeld/sphinx/src/c411c343dd216f41d263b5f5a14ad14d3ff5dad7/sphinx/ext/autosummary/__init__.py?at=default#cl-198 – iMom0

2

साथ ही आप वर्ग के सदस्यों को बाहर टाइप करने के लिए

.. autosummary:: 

    MyClass 
    MyClass.doA 
    MyClass.doB 

है मैं इसे विभाजित करना चाहते शीर्षक या रूब्रिक जैसे

.. rubric:: Classes 

.. autosummary:: 

    MyClass 


.. rubric:: MyClass Members 

.. autosummary:: 

    MyClass.doA 
    MyClass.doB 
संबंधित मुद्दे