Source code for elasticai.creator.file_generation.in_memory_path
from typing import Optional
from .savable import File, Path
from .template import Template, TemplateExpander
[docs]
class InMemoryFile(File):
def __init__(self, name: str) -> None:
self.text: list[str] = []
self.name = name
[docs]
def write(self, template: Template) -> None:
expander = TemplateExpander(template)
unfilled_variables = expander.unfilled_variables()
if len(unfilled_variables) > 0:
raise KeyError(
"Template is not filled completely. The following variables are"
f" unfilled: {', '.join(unfilled_variables)}."
)
for line in expander.lines():
self.text.append(line)
[docs]
class InMemoryPath(Path):
def __init__(self, name: str, parent: Optional["InMemoryPath"]) -> None:
self.name = name
self.children: dict[str, InMemoryPath | InMemoryFile] = dict()
self.parent = parent
[docs]
def as_file(self, suffix: str) -> InMemoryFile:
file = InMemoryFile(f"{self.name}{suffix}")
if len(self.children) > 0:
raise ValueError(
f"non empty path {self.name}, "
f"present children: {', '.join(self.children)}"
)
if self.parent is not None:
self.parent.children[self.name] = file
return file
[docs]
def __getitem__(self, item: str) -> "InMemoryPath | InMemoryFile":
return self.children[item]
[docs]
def create_subpath(self, subpath_name: str) -> "InMemoryPath":
subpath = InMemoryPath(name=subpath_name, parent=self)
self.children[subpath_name] = subpath
return subpath