added tsv table renderer
for easy import in excel also added the ability to choose a file as output
This commit is contained in:
parent
66058120b2
commit
16268289ba
|
@ -1,8 +1,9 @@
|
||||||
from typing import List
|
from typing import List, IO
|
||||||
from cocluto.inventory import Inventory
|
from cocluto.inventory import Inventory
|
||||||
from cocluto.SimpaDbUtil import SqlDatabaseReader, SqlFile
|
from cocluto.SimpaDbUtil import SqlDatabaseReader, SqlFile
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
from sys import stdout
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,11 +19,25 @@ class Table():
|
||||||
class TableRenderer(ABC):
|
class TableRenderer(ABC):
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def render_table(self, table: Table):
|
def render_table(self, table: Table, file: IO):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class MarkdownTableRenderer():
|
class TsvTableRenderer(TableRenderer):
|
||||||
|
|
||||||
|
def render_table(self, table: Table, file: IO):
|
||||||
|
assert len(table.column_labels) == len(table.columns_data)
|
||||||
|
num_cols = len(table.columns_data)
|
||||||
|
num_rows = len(table.columns_data[0])
|
||||||
|
file.write('#%s\n' % '\t'.join(table.column_labels))
|
||||||
|
for irow in range(num_rows):
|
||||||
|
row = []
|
||||||
|
for icol in range(num_cols):
|
||||||
|
row.append(table.columns_data[icol][irow])
|
||||||
|
file.write('%s\n' % '\t'.join(row))
|
||||||
|
|
||||||
|
|
||||||
|
class MarkdownTableRenderer(TableRenderer):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_md_table_separator_line(columns_width):
|
def get_md_table_separator_line(columns_width):
|
||||||
|
@ -32,7 +47,7 @@ class MarkdownTableRenderer():
|
||||||
sep_line += '|'
|
sep_line += '|'
|
||||||
return sep_line
|
return sep_line
|
||||||
|
|
||||||
def render_table(self, table: Table):
|
def render_table(self, table: Table, file: IO):
|
||||||
assert len(table.column_labels) == len(table.columns_data)
|
assert len(table.column_labels) == len(table.columns_data)
|
||||||
num_cols = len(table.columns_data)
|
num_cols = len(table.columns_data)
|
||||||
num_rows = len(table.columns_data[0])
|
num_rows = len(table.columns_data[0])
|
||||||
|
@ -43,21 +58,21 @@ class MarkdownTableRenderer():
|
||||||
cols_width[icol] = max(cols_width[icol], len(table.columns_data[icol][irow]))
|
cols_width[icol] = max(cols_width[icol], len(table.columns_data[icol][irow]))
|
||||||
sep_line = MarkdownTableRenderer.get_md_table_separator_line([col_width + 2 for col_width in cols_width])
|
sep_line = MarkdownTableRenderer.get_md_table_separator_line([col_width + 2 for col_width in cols_width])
|
||||||
line_format = "|" + ''.join([" %%%ds |" % col_width for col_width in cols_width])
|
line_format = "|" + ''.join([" %%%ds |" % col_width for col_width in cols_width])
|
||||||
print(sep_line)
|
file.write('%s\n' % sep_line)
|
||||||
print(line_format % tuple(table.column_labels))
|
file.write('%s\n' % (line_format % tuple(table.column_labels)))
|
||||||
print(sep_line)
|
file.write('%s\n' % sep_line)
|
||||||
for irow in range(num_rows):
|
for irow in range(num_rows):
|
||||||
row = []
|
row = []
|
||||||
for icol in range(num_cols):
|
for icol in range(num_cols):
|
||||||
row.append(table.columns_data[icol][irow])
|
row.append(table.columns_data[icol][irow])
|
||||||
|
|
||||||
print(line_format % tuple(row))
|
file.write('%s\n' % (line_format % tuple(row)))
|
||||||
print(sep_line)
|
file.write('%s\n' % sep_line)
|
||||||
|
|
||||||
|
|
||||||
class WikiTableRenderer():
|
class WikiTableRenderer(TableRenderer):
|
||||||
|
|
||||||
def render_table(self, table: Table):
|
def render_table(self, table: Table, file: IO):
|
||||||
assert len(table.column_labels) == len(table.columns_data)
|
assert len(table.column_labels) == len(table.columns_data)
|
||||||
num_cols = len(table.columns_data)
|
num_cols = len(table.columns_data)
|
||||||
num_rows = len(table.columns_data[0])
|
num_rows = len(table.columns_data[0])
|
||||||
|
@ -69,16 +84,16 @@ class WikiTableRenderer():
|
||||||
cols_width = [col_width + 1 for col_width in cols_width]
|
cols_width = [col_width + 1 for col_width in cols_width]
|
||||||
header_line_format = "^" + ''.join([" %%%ds ^" % col_width for col_width in cols_width])
|
header_line_format = "^" + ''.join([" %%%ds ^" % col_width for col_width in cols_width])
|
||||||
line_format = "|" + ''.join([" %%%ds |" % col_width for col_width in cols_width])
|
line_format = "|" + ''.join([" %%%ds |" % col_width for col_width in cols_width])
|
||||||
print(header_line_format % tuple(table.column_labels))
|
file.write('%s\n' % (header_line_format % tuple(table.column_labels)))
|
||||||
for irow in range(num_rows):
|
for irow in range(num_rows):
|
||||||
row = []
|
row = []
|
||||||
for icol in range(num_cols):
|
for icol in range(num_cols):
|
||||||
row.append(table.columns_data[icol][irow])
|
row.append(table.columns_data[icol][irow])
|
||||||
|
|
||||||
print(line_format % tuple(row))
|
file.write('%s\n' % (line_format % tuple(row)))
|
||||||
|
|
||||||
|
|
||||||
def print_machine_table(machines_fqdn: List[str], inventory: Inventory):
|
def print_machine_table(machines_fqdn: List[str], inventory: Inventory, out_file: IO, table_renderer: Table):
|
||||||
|
|
||||||
table = Table()
|
table = Table()
|
||||||
machines_name = []
|
machines_name = []
|
||||||
|
@ -99,11 +114,7 @@ def print_machine_table(machines_fqdn: List[str], inventory: Inventory):
|
||||||
]
|
]
|
||||||
table.columns_data = [machines_name, machines_spec_id, machines_serial_number]
|
table.columns_data = [machines_name, machines_spec_id, machines_serial_number]
|
||||||
|
|
||||||
table_renderer = MarkdownTableRenderer()
|
table_renderer.render_table(table, out_file)
|
||||||
table_renderer.render_table(table)
|
|
||||||
|
|
||||||
table_renderer = WikiTableRenderer()
|
|
||||||
table_renderer.render_table(table)
|
|
||||||
|
|
||||||
|
|
||||||
# get the list of machines hosted at the dsi
|
# get the list of machines hosted at the dsi
|
||||||
|
@ -146,7 +157,9 @@ def main():
|
||||||
machines_fqdn = get_hosted_machines_fqdn(inventory)
|
machines_fqdn = get_hosted_machines_fqdn(inventory)
|
||||||
print('ipr machines hosted at the dsi (%d):' % len(machines_fqdn))
|
print('ipr machines hosted at the dsi (%d):' % len(machines_fqdn))
|
||||||
|
|
||||||
print_machine_table(machines_fqdn, inventory)
|
table_renderer = MarkdownTableRenderer()
|
||||||
|
|
||||||
|
print_machine_table(machines_fqdn, inventory, stdout, table_renderer)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
Loading…
Reference in New Issue