import jinja2
import logging
from datazen import CACHE_SUFFIX as CACHE_SUFFIX, DEFAULT_MANIFEST as DEFAULT_MANIFEST, ROOT_NAMESPACE as ROOT_NAMESPACE
from datazen.classes.file_info_cache import FileInfoCache as FileInfoCache, cmp_total_loaded as cmp_total_loaded
from datazen.environment.manifest import ManifestEnvironment as ManifestEnvironment
from datazen.paths import get_file_name as get_file_name
from typing import Any, Dict, List

LOG: Any

def manifest_cache_dir(path: str, manifest: dict) -> str: ...

class ManifestCacheEnvironment(ManifestEnvironment):
    cache: Any
    aggregate_cache: Any
    initial_cache: Any
    manifest_changed: bool
    def __init__(self) -> None: ...
    def load_manifest_with_cache(self, path: str = ..., logger: logging.Logger = ...) -> bool: ...
    def clean_cache(self, purge_data: bool = ...) -> None: ...
    def write_cache(self) -> None: ...
    def describe_cache(self) -> None: ...
    def restore_cache(self) -> None: ...
    def get_new_loaded(self, types: List[str], load_checks: Dict[str, List[str]] = ...) -> int: ...
    def cached_load_variables(self, name: str = ...) -> dict: ...
    def cached_load_schemas(self, require_all: bool = ..., name: str = ...) -> dict: ...
    def cached_enforce_schemas(self, data: dict, require_all: bool = ..., name: str = ...) -> bool: ...
    def cached_load_configs(self, name: str = ...) -> dict: ...
    def cached_load_templates(self, name: str = ...) -> Dict[str, jinja2.Template]: ...
