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