Skip to content
Snippets Groups Projects
Select Git revision
  • 65adf4a51162b835d48f21e839b3e9b500f16c17
  • main default protected
  • Kelvinrr-patch-3
  • radius_update
  • revert-616-apollo_pan
  • vims
  • 0.10
  • Kelvinrr-patch-2
  • revert-563-minirf_fix
  • Kelvinrr-patch-1
  • 0.9
  • acpaquette-patch-3
  • acpaquette-patch-2
  • acpaquette-patch-1
  • spiceql
  • ci-coverage
  • 0.10.0
  • 0.9.1
  • 0.9.0
  • 0.8.7
  • 0.8.8
  • 0.8.6
  • 0.8.3
  • 0.8.4
  • 0.8.5
  • 0.8.2
  • 0.8.1
  • 0.8.0
  • 0.7.3
  • 0.7.2
  • 0.7.1
  • 0.7.0
  • 0.6.5
  • 0.6.4
  • 0.6.3
  • 0.6.2
36 results

isd.rst

Blame
  • dic2table.py 1.83 KiB
    from rich.table import Table
    from rich.align import Align
    from re import sub
    from functools import wraps
    from rich.console import Console
    
    console=Console()
    
    def snake_case(s: str) -> str:
        """Convert a string to snake_case"""
        return "_".join(
            sub(
                "([A-Z][a-z]+)", r" \1", sub("([A-Z]+)", r" \1", s.replace("-", " "))
            ).split()
        ).lower()
    
    
    def sentence_case(s: str) -> str:
        """Convert a string to Sentence case"""
        return sub(r"(_|-)+", " ", snake_case(s)).title()
    
    def get_style(value)->str:
        """
        Get the style for the value
        """
        if isinstance(value, (int, float)):
            return "cyan"
        return "green"
    
    def counter(f):
        @wraps(f)
        def wrapper(*args, **kwargs):
            if not 'cnt' in globals():
                global cnt
                cnt = 0
            else:
                cnt += 1
            return f(*args, **kwargs)
        return wrapper
    
    styles_array=['yellow','magenta','green','blue', 'red']
    
    @counter
    def dict2table(my_data:dict, grid:bool=True, title:str=None,reset:bool =False)->Table:
        """
        Convert a dictionary to a table
        """
        if reset:
                global cnt
                cnt=0
        if grid:
            external=Table.grid()
            if title:
                external.add_row(Align(f"{title}\n", style="italic", align="center"))
            tb=Table.grid()
            tb.padding=(0,3)
        else:  
            tb=Table()
            tb.title=title
        console.log(f"cnt: {cnt}")
        tb.add_column('Key',style=f"{styles_array[cnt]} bold")
        tb.add_column('Value',style="")
        for item in my_data.items():
            if isinstance(item[1], dict):
                elem=dict2table(item[1],grid=True)
            else:
                st=get_style(item[1])
                elem=f"[{st}]{item[1]}[/]"
            tb.add_row(sentence_case(item[0]),elem)
        if grid:
            external.add_row(tb)
            return external
        
        return tb