Skip to content

kiara.doc.mkdocs_macros_kiara

define_env(env)

This is the hook for defining variables, macros and filters

  • variables: the dictionary that contains the environment variables
  • macro: a decorator function, to declare a macro.
Source code in kiara/doc/mkdocs_macros_kiara.py
def define_env(env):
    """
    This is the hook for defining variables, macros and filters

    - variables: the dictionary that contains the environment variables
    - macro: a decorator function, to declare a macro.
    """

    # env.variables["baz"] = "John Doe"

    @env.macro
    def get_schema_for_model(model_class: typing.Union[str, typing.Type[BaseModel]]):

        if isinstance(model_class, str):
            _class: typing.Type[BaseModel] = locate(model_class)  # type: ignore
        else:
            _class = model_class

        schema_json = _class.schema_json(indent=2)

        return schema_json

    @env.macro
    def get_src_of_object(obj: typing.Union[str, typing.Any]):

        try:
            if isinstance(obj, str):
                _obj: typing.Type[BaseModel] = locate(obj)  # type: ignore
            else:
                _obj = obj

            src = inspect.getsource(_obj)
            return src
        except Exception as e:
            return f"Can't render object source: {str(e)}"

    @env.macro
    def get_pipeline_config(pipeline_name: str):

        pmm = PipelineModuleManager()
        desc = pmm.pipeline_descs[pipeline_name]["data"]

        desc_str = yaml.dump(desc)
        return desc_str

    @env.macro
    def get_module_info(module_type: str):

        try:

            m_cls = Kiara.instance().get_module_class(module_type)
            info = KiaraModuleTypeMetadata.from_module_class(m_cls)

            from rich.console import Console

            console = Console(record=True)
            console.print(info)

            html = console.export_text()
            return html
        except Exception as e:
            return f"Can't render module info: {str(e)}"

    @env.macro
    def get_module_list_for_package(
        package_name: str,
        include_core_modules: bool = True,
        include_pipelines: bool = True,
    ):

        modules = kiara_obj.module_mgmt.find_modules_for_package(
            package_name,
            include_core_modules=include_core_modules,
            include_pipelines=include_pipelines,
        )

        result = []
        for name, info in modules.items():
            type_md = info.get_type_metadata()
            result.append(
                f"  - [``{name}``]({type_md.context.get_url_for_reference('module_doc')}): {type_md.documentation.description}"
            )

        print(result)
        return "\n".join(result)

    @env.macro
    def get_value_types_for_package(package_name: str):

        value_types = kiara_obj.type_mgmt.find_value_types_for_package(package_name)
        result = []
        for name, info in value_types.items():
            type_md = info.get_type_metadata()
            result.append(f"  - ``{name}``: {type_md.documentation.description}")

        return "\n".join(result)

    @env.macro
    def get_metadata_models_for_package(package_name: str):

        metadata_schemas = kiara_obj.metadata_mgmt.find_all_models_for_package(
            package_name
        )
        result = []
        for name, info in metadata_schemas.items():
            type_md = info.get_type_metadata()
            result.append(f"  - ``{name}``: {type_md.documentation.description}")

        return "\n".join(result)

    @env.macro
    def get_kiara_context() -> KiaraContext:
        return kiara_context

on_post_build(env)

Post-build actions

Source code in kiara/doc/mkdocs_macros_kiara.py
def on_post_build(env):
    "Post-build actions"

    site_dir = env.conf["site_dir"]

    for category, classes in KIARA_MODEL_CLASSES.items():

        for cls in classes:
            schema_json = cls.schema_json(indent=2)

            file_path = os.path.join(
                site_dir, "development", "entities", category, f"{cls.__name__}.json"
            )
            os.makedirs(os.path.dirname(file_path), exist_ok=True)
            with open(file_path, "w") as f:
                f.write(schema_json)