Source code for streng.common.io.output

'''
Classes for managing output results
'''

import pandas as pd
from dataclasses import dataclass, field
from typing import List, Dict
from tabulate import tabulate
from .lists_and_dicts_and_pandas_etc import *


[docs]@dataclass class OutputString: """ An output given as a list of strings .. uml:: class OutputString { .. members .. + data: List[str] = field(default_factory=list) } Attributes: data (List[str]): A list of strings """ data: List[str] = field(default_factory=list) # name: str = None def __str__(self): return '\n'.join(self.data)
[docs]@dataclass class OutputTable: """ An output table given as a list of dictionaries. .. uml:: class OutputTable { .. members .. + data: List[dict] = field(default_factory=list) .. properties .. + to_markdown() + to_panda_dataframe() .. methods .. + retrieve() + retrieve_column_to_list() + to_quantity_value() } It can be converted for presentation (or usage) as a pandas dataframe or a markdown table Attributes: data (List[dict]): A list of dictionaries """ data: List[dict] = field(default_factory=list) @property def to_markdown(self): """ Converts data (list of dicts) to a markdown table using tabulate. Returns: str: a markdown table """ return convert_lod_to_md_table(self.data) @property def to_panda_dataframe(self): """ Converts data to a pandas dataframe Returns: pd.DataFrame: a pandas dataframe """ return convert_lod_to_pddf(self.data)
[docs] def retrieve(self, search_field, search_value, find_field): res = [d[find_field] for d in self.data if d[search_field] == search_value] return res[0]
[docs] def retrieve_column_to_list(self, column_name): return [k[column_name] for k in self.data]
[docs] def to_quantity_value(self, selected_row=0): out = OutputTable() out.data = convert_dict_to_quantity_value(self.data[selected_row]) return out
def __str__(self): return self.to_markdown
[docs]@dataclass class OutputExtended: """ A class for multiple outputs .. uml:: class OutputExtended { .. members .. + outputTables: Dict[str, OutputTable] = field(default_factory=dict) + outputStrings: Dict[str, OutputString] = field(default_factory=dict) .. properties .. + print_all_outputStrings() .. methods .. + save_tofile_all_outputStrings() } Attributes: outputTables (dict[str, OutputTable]): A dictionary of OutputTables with a string key outputStrings (dict[str, OutputString]): A dictionary of OutputStrings with a string key """ outputTables: Dict[str, OutputTable] = field(default_factory=dict) outputStrings: Dict[str, OutputString] = field(default_factory=dict) @property def print_all_outputStrings(self): all = [] for key, value in self.outputStrings.items(): all.extend(value.data) return '\n'.join(all)
[docs] def save_tofile_all_outputStrings(self, pathfilename): file = open(pathfilename, 'w', encoding='utf8') file.write(self.print_all_outputStrings) file.close()