Have Sphinx replace docstring text

2024/9/20 15:29:54

I am documenting code in Sphinx that resembles this:

class ParentClass(object):def __init__(self):passdef generic_fun(self):"""Call this function using /run/ParentClass/generic_fun()"""do_stuff()class ChildClass(ParentClass):def specific_fun(self):"""Call this function using /run/ChildClass/specific_fun()"""do_other_stuff()

I added the :inherited-members to the ChildClass documentation, so I have statements in there like "Call this function using /run/ParentClass/generic_fun()".

Is there a way I can put something in the docstrings like <class_name> that Sphinx will replace with the actual class that it's documenting?

I would like to have the code look like:

class ParentClass(object):def __init__(self):passdef generic_fun(self):"""Call this function using /run/<class_name>/generic_fun()"""do_stuff()

So in the ChildClass section, the Sphinx documentation would read "(...) using /run/ChildClass/generic_fun()(...)" and the ParentClass section would read "(...) using /run/ParentClass/generic_fun()(...)"?

Ideally I'd like to have the documentation on the same page, so the replacement string would be different for different sections.

Answer

I figured out a way to do this while looking at something else.

There are functions autodoc will call before printing the message. I added this code to my conf.py file:

def get_class_name(full_module_name):"""Pull out the class name from the full_module_name"""#split the full_module_name by "."'sreturn full_module_name.split('.')[-1]def process_docstring(app, what, name, obj, options, lines):classname = get_class_name(name)# loop through each line in the docstring and replace |class| with# the classnamefor i in xrange(len(lines)):lines[i] = lines[i].replace('|class|', classname)def setup(app):app.connect('autodoc-process-docstring', process_docstring)

I want to use the | token, but they are reserved for global substitutions. I got around that by putting the following line my rst file (so the code substitutes |class| for |class|):

.. |class| replace:: `|class|`
https://en.xdnf.cn/q/72488.html

Related Q&A

exit is not a keyword in Python, but no error occurs while using it

I learn that exit is not a keyword in Python by,import keyword print(exit in keyword.kwlist) # Output: FalseBut there is no reminder of NameError: name exit is not defined while using it. The outpu…

Tensorflow Datasets Reshape Images

I want to build a data pipeline using tensorflow dataset. Because each data has different shapes, I cant build a data pipeline.import tensorflow_datasets as tfds import tensorflow as tfdataset_builder …

Why is the python client not receiving SSE events?

I am have a python client listening to SSE events from a server with node.js APIThe flow is I sent an event to the node.js API through call_notification.py and run seevents.py in loop using run.sh(see …

sklearn Pipeline: argument of type ColumnTransformer is not iterable

I am attempting to use a pipeline to feed an ensemble voting classifier as I want the ensemble learner to use models that train on different feature sets. For this purpose, I followed the tutorial avai…

PyQT Window: I want to remember the location it was closed at

I have a QDialog, and when the user closes the QDialog, and reopens it later, I want to remember the location and open the window at the exact same spot. How would I exactly remember that location?

Django Reusable Application Configuration

I have some Django middleware code that connects to a database. I want to turn the middleware into a reusable application ("app") so I can package it for distribution into many other project…

executable made with py2exe doesnt run on windows xp 32bit

I created an executable with py2exe on a 64bit windows 7 machine, and distributed the program.On a windows xp 32bit machine the program refuses to run exhibiting the following behavior:a popup window s…

Pandas reading NULL as a NaN float instead of str [duplicate]

This question already has answers here:How to treat NULL as a normal string with pandas?(4 answers)Closed 5 years ago.Given the file:$ cat test.csv a,b,c,NULL,d e,f,g,h,i j,k,l,m,nWhere the 3rd colum…

How to invert differencing in a Python statsmodels ARIMA forecast?

Im trying to wrap my head around ARIMA forecasting using Python and Statsmodels. Specifically, for the ARIMA algorithm to work, the data needs to be made stationary via differencing (or similar method)…

how to see the content of a particular file in .tar.gz archive without unzipping the contents?

for ex abc.tar.gz has abc/file1.txt abc/file2.txt abc/abc1/file3.txt abc/abc2/file4.txt i need to read/display the contents of file3.txt without extracting the file.Thanks for any input.