Source code for diva.logging.logger

import streamlit as st


[docs] class Step: def __init__(self, fun: callable, description: str, ret, *args): self.__fun = fun self.__description = description self.__ret = ret self.__args = args
[docs] def doc(self): return self.__fun.__doc__
[docs] def name(self): return self.__fun.__name__
[docs] def description(self): return self.__description
[docs] def result(self): return self._summarize(self.__ret)
[docs] def arguments(self): return [self._summarize(arg) for arg in self.__args[1:]] # Ignore `self` for methods
def _summarize(self, obj, max_length=10): """Résumé d'objets pour éviter les sorties trop longues.""" representation = repr(obj) if len(representation) > max_length: return representation[:max_length] + " [...]" return representation
[docs] class Process: def __init__(self, text_language='markdown'): self.steps = [] self.text_language = text_language self.__get_front()
[docs] def add_step(self, step: Step): self.steps.append(step)
[docs] def doc(self): return f"{self.jump_line}{self.jump_line}".join( f"• {self.start_bold}{step.name()}(){self.end_bold}: {self.jump_line}{step.description()}" for step in self.steps )
[docs] def reset_steps(self): self.steps = []
def __get_front(self): if self.text_language == 'markdown': self.start_bold = '**' self.end_bold = '**' self.jump_line = '\n' elif self.text_language == 'html': self.start_bold = '<b>' self.end_bold = '</b>' self.jump_line = '<br />'
from functools import wraps
[docs] def crossing_point(description: str): def decorator(func): @wraps(func) def wrapper(*args, **kwargs): ret = func(*args, **kwargs) st.session_state.process_logging.add_step(Step(func, description, ret, *args)) return ret return wrapper return decorator