Skip to content

MkCallable

Show source on GitHub

Node carrying a callable. Can be either page, nav or node.

Description

The callable is called each time the virtual files are requested or when a Markdown conversion is requested.

Experimental node. I do not really know yet what this should be good for. :)

Example: Regular

Jinja

{{ mk.MkAdmonition | partial("Nested!") | MkCallable }}

Python

MkContainer([...])

Info

Nested!

Info

Nested!

!!! info
    Nested!


!!! info
    Nested!
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>Nested!</p>
</div>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>Nested!</p>
</div>
MkContainer
├── MkCallable(functools.partial(<class 'mknodes.basenodes.mkadmonition.<locals>.MkAdmonition'>, 'Nested!'), args=[], kw_args={})
╰── MkAdmonition('Nested!')
    ╰── MkText('Nested!')

Bases: MkNode

__init__

__init__(
    fn: Callable[..., mk.MkNode] | str,
    *,
    args: list | tuple | None = None,
    kw_args: dict | None = None,
    **kwargs: Any
)

Parameters:

Name Type Description Default
fn Callable[..., MkNode] | str

Callable (must return a MkNode).

required
args list | tuple | None

Arguments to use for callable

None
kw_args dict | None

Keyword arguments to use for callable

None
kwargs Any

Keyword arguments passed to parent

{}
Name Children Inherits
MkNode
mknodes.basenodes.mknode
Base class for everything which can be expressed as Markup.
graph TD
  94854583243728["mkcallable.MkCallable"]
  94854582916880["mknode.MkNode"]
  94854582838576["node.Node"]
  140544995341632["builtins.object"]
  94854582916880 --> 94854583243728
  94854582838576 --> 94854582916880
  140544995341632 --> 94854582838576
/home/runner/work/mknodes/mknodes/mknodes/templatenodes/mkcallable/metadata.toml
[metadata]
icon = "mdi:function"
status = "new"
name = "MkCallable"

[examples.regular]
title = "Regular"
jinja = """
{{ mk.MkAdmonition | partial("Nested!") | MkCallable }}
"""
python = """
import mknodes as mk

mk.MkCallable(lambda: mk.MkAdmonition("Nested!"))
"""
mknodes.templatenodes.mkcallable.MkCallable
class MkCallable(mknode.MkNode):
    """Node carrying a callable. Can be either page, nav or node.

    The callable is called each time the virtual files are requested or when
    a Markdown conversion is requested.

    Experimental node. I do not really know yet what this should be good for. :)
    """

    ICON = "material/function"
    STATUS = "new"

    def __init__(
        self,
        fn: Callable[..., mk.MkNode] | str,
        *,
        args: list | tuple | None = None,
        kw_args: dict | None = None,
        **kwargs: Any,
    ):
        """Constructor.

        Arguments:
            fn: Callable (must return a MkNode).
            args: Arguments to use for callable
            kw_args: Keyword arguments to use for callable
            kwargs: Keyword arguments passed to parent
        """
        super().__init__(**kwargs)
        self.fn = fn
        self.args = args or []
        self.kw_args = kw_args or {}

    def __call__(self) -> mk.MkNode:
        fn = classhelpers.to_callable(self.fn)
        node = fn(*self.args, **self.kw_args)
        node.parent = self.parent
        return node

    def children(self):
        node = self.__call__()
        return node.children

    def get_node_resources(self) -> resources.Resources:
        node = self.__call__()
        return node.get_node_resources()

    def to_markdown(self) -> str:
        node = self.__call__()
        return node.to_markdown()