databao/executors/lighthouse/utils.py (25 lines of code) (raw):
import datetime
from pathlib import Path
import jinja2
_jinja_prompts_env: jinja2.Environment | None = None
def get_today_date_str() -> str:
return datetime.datetime.now().strftime("%A, %Y-%m-%d")
def read_prompt_template(relative_path: Path) -> jinja2.Template:
env = _get_jinja_prompts_env()
template = env.get_template(str(relative_path))
return template
def exception_to_string(e: Exception | str) -> str:
if isinstance(e, str):
return e
return f"Exception Name: {type(e).__name__}. Exception Desc: {e}"
def _get_jinja_prompts_env(prompts_dir: Path | None = None) -> jinja2.Environment:
if prompts_dir:
return jinja2.Environment(loader=jinja2.FileSystemLoader(prompts_dir))
global _jinja_prompts_env
if _jinja_prompts_env is None:
# A package loader must be used for using as a library!
# Use empty string to load from package directory itself, not from 'templates' subdirectory
_jinja_prompts_env = jinja2.Environment(
loader=jinja2.PackageLoader("databao.executors.lighthouse", ""),
trim_blocks=True, # better whitespace handling
lstrip_blocks=True,
)
return _jinja_prompts_env