mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-28 09:47:20 +02:00
67 lines
2 KiB
Python
67 lines
2 KiB
Python
# Sphinx extension defining the meshroom_doc directive
|
|
#
|
|
# Goal:
|
|
# create specific documentation content for meshroom objects
|
|
#
|
|
# Usage:
|
|
# .. meshroom_doc::
|
|
# :module: module_name
|
|
# :class: class_name
|
|
#
|
|
# Note:
|
|
# for now this tool focuses only on meshroom nodes
|
|
|
|
from docutils import nodes
|
|
from docutils.parsers.rst import Directive
|
|
from utils import md_to_docutils
|
|
|
|
import importlib
|
|
from meshroom.core import desc
|
|
|
|
|
|
class MeshroomDoc(Directive):
|
|
|
|
required_arguments = 4
|
|
|
|
def parse_args(self):
|
|
module_name = self.arguments[self.arguments.index(':module:')+1]
|
|
class_name = self.arguments[self.arguments.index(':class:')+1]
|
|
return (module_name, class_name)
|
|
|
|
def run(self):
|
|
result = []
|
|
# Import module and class
|
|
module_name, class_name = self.parse_args()
|
|
module = importlib.import_module(module_name)
|
|
node_class = getattr(module, class_name)
|
|
# Class inherits desc.Node
|
|
if issubclass(node_class, desc.Node):
|
|
node = node_class()
|
|
# Category
|
|
doc = md_to_docutils('**Category**: {}'.format(node.category))
|
|
result.extend(doc.children)
|
|
# Documentation
|
|
doc = md_to_docutils(node.documentation)
|
|
result.extend(doc.children)
|
|
# Inputs
|
|
text_inputs = '**Inputs**: \n'
|
|
for attr in node.inputs:
|
|
text_inputs += '- {} ({})\n'.format(attr._name, attr.__class__.__name__)
|
|
doc = md_to_docutils(text_inputs)
|
|
result.extend(doc.children)
|
|
# Outputs
|
|
text_outputs = '**Outputs**: \n'
|
|
for attr in node.outputs:
|
|
text_outputs += '- {} ({})\n'.format(attr._name, attr.__class__.__name__)
|
|
doc = md_to_docutils(text_outputs)
|
|
result.extend(doc.children)
|
|
return result
|
|
|
|
|
|
def setup(app):
|
|
app.add_directive("meshroom_doc", MeshroomDoc)
|
|
return {
|
|
'version': '0.1',
|
|
'parallel_read_safe': True,
|
|
'parallel_write_safe': True,
|
|
}
|