Metadata API#
mmodel provides a metadata API to fully customize the __str__ output
of the node, graph, model, and modelgroup object outputs.
Here is an example to define a custom formatter for the node object:
from mmodel.metadata import MetaDataFormatter, wrapper80
from mmodel import Node
nodeformatter = MetaDataFormatter(
formatter_dict={
"name": format_value,
"node_func": format_func,
"output": lambda key, value: [f"return: {value}"],
"doc": format_shortdocstring,
},
meta_order=["name", "_", "node_func", "output", "_", "doc"],
text_wrapper=wrapper80,
shorten_list=["doc"],
shorten_placeholder="...",
)
The MetaDataFormatter class takes several parameters.
formatter_dict: a dictionary that specifies the formatter function for each metadata key.meta_order: a list that specifies the order of the metadata keys. “_” is used to add a blank line.text_wrapper: a textwrapper class that is used to wrap the text to the desired width for the whole output.shorten_list: a list of metadata keys that should be shortened if the text is too long. The shortening is done by thetext_wrapper.shorten_placeholder: a string that is used to replace the shortened text.
The formatter function is defined with “key” and “value” arguments, and returns a list of strings
that will be formatted to lines. The “key” is the metadata key,
and the value is the content of the metadata. If the key is in meta_order, but the formatter function
is not defined, the value of the key will be used as the string representation.
An example of the formatter function is shown below:
def format_list(key, value):
"""Format the metadata value that is a list."""
if not value:
return []
elements = [f"\t- {v}" for v in value]
return [f"{key}:"] + elements
This function formats the list content with a tab and a hyphen. If the value is empty, then the metadata is not included in the output.
The formatter can be directly applied to a node object, or a custom node class can be defined:
class CustomNode(Node):
def __str__(self):
return nodeformatter(self)
Metadata Formatter. |
See Metadata for the full list of metadata formatter functions.