import jinja2
import logging
from datazen import GLOBAL_KEY as GLOBAL_KEY, to_private as to_private
from datazen.environment.base import TaskResult as TaskResult, dep_slug_unwrap as dep_slug_unwrap
from datazen.environment.task import TaskEnvironment as TaskEnvironment, get_path as get_path
from datazen.fingerprinting import build_fingerprint as build_fingerprint
from datazen.load import data_added as data_added
from datazen.paths import get_file_ext as get_file_ext
from datazen.targets import resolve_dep_data as resolve_dep_data
from typing import Any, Dict, List, Optional

LOG: Any

def render_name_to_key(name: str) -> str: ...
def indent_str(data: str, indent: int, sep: str = ...) -> str: ...
def get_render_str(template: jinja2.Template, name: str, indent: int, data: dict = ..., out_data: dict = ...) -> str: ...
def get_render_children(children: dict, dep_data: dict, default_op: str, indent: int, delimeter: str = ...) -> None: ...

class RenderEnvironment(TaskEnvironment):
    def __init__(self) -> None: ...
    def perform_render(self, template: jinja2.Template, all_templates: Dict[str, jinja2.Template], path: Optional[str], entry: dict, data: dict = ..., logger: logging.Logger = ...) -> TaskResult: ...
    def store_render(self, entry: dict, data: dict) -> None: ...
    def valid_render(self, entry: dict, namespace: str, dep_data: dict = ..., deps_changed: List[str] = ..., logger: logging.Logger = ...) -> TaskResult: ...
