Source code for mendevi.plot.printer

#!/usr/bin/env python3

"""Generate a Python code that allows you to plot the graph."""

import datetime
import itertools
import logging
import re

from mendevi import __version__
from mendevi.database.extract import SqlLinker
from mendevi.database.meta import get_extractor, merge_extractors


[docs] def printer(**kwargs) -> str: """Create an excecutable python code. Parameters ---------- database : pathlib.Path The database path. x, y : tuple[str] The name of the var along each axis. """ # create code code: list[str] = [] code.extend(print_header()) code.extend(print_import()) code.extend(print_cst(**kwargs)) code.extend(print_read_sql(**kwargs)) code.extend(print_fill_axe(**kwargs)) code.extend(print_main(**kwargs)) code.extend(print_entry()) code = "\n".join(code) # format code try: import black except ImportError: logging.warning("failed to import black, please install it (uv pip install black)") else: try: code = black.format_str(code, mode=black.FileMode(line_length=100)) except black.parsing.InvalidInput as err: logging.warning(err) return code
[docs] def print_entry() -> list[str]: """Return the code of the entry point.""" return [ 'if __name__ == "__main__":', " values: dict[str] = read_sql(DATABASE)", " main(values)", "", ]
[docs] def safe_lbl(lbl: str) -> str: """Convert the label into a valid lowercase variable.""" assert isinstance(lbl, str), lbl.__class__.__name__ for symb, rep in [("+", "plus"), ("-", "minus"), ("*", "times"), ("/", "per")]: lbl = lbl.replace(symb, f"_{rep}_") return re.sub(r"[^0-9a-zA-Z]+", "_", lbl.lower())