from cocluto.inventory import Inventory from cocluto.SimpaDbUtil import SqlDatabaseReader, SqlFile from urllib.parse import urlparse def get_md_table_separator_line(columns_width): sep_line = '|' for col_width in columns_width: sep_line += '-' * col_width sep_line += '|' return sep_line def render_table_md(columns_data, labels): assert len(labels) == len(columns_data) num_cols = len(columns_data) num_rows = len(columns_data[0]) cols_width = [0 for col in range(num_cols)] for icol in range(num_cols): cols_width[icol] = max(cols_width[icol], len(labels[icol])) for irow in range(num_rows): cols_width[icol] = max(cols_width[icol], len(columns_data[icol][irow])) sep_line = 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]) print(sep_line) print(line_format % tuple(labels)) print(sep_line) for irow in range(num_rows): row = [] for icol in range(num_cols): row.append(columns_data[icol][irow]) print(line_format % tuple(row)) print(sep_line) def render_table_wiki(columns_data, labels): assert len(labels) == len(columns_data) num_cols = len(columns_data) num_rows = len(columns_data[0]) cols_width = [0 for col in range(num_cols)] for icol in range(num_cols): cols_width[icol] = max(cols_width[icol], len(labels[icol])) for irow in range(num_rows): cols_width[icol] = max(cols_width[icol], len(columns_data[icol][irow])) cols_width = [col_width + 1 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]) print(header_line_format % tuple(labels)) for irow in range(num_rows): row = [] for icol in range(num_cols): row.append(columns_data[icol][irow]) print(line_format % tuple(row)) def print_machine_table(machines_fqdn): itinv_db_url = "file:///home/graffy/work/simpaweb/itinv.git/itinv.sql" url_parts = urlparse(itinv_db_url) sql_source = SqlFile(url_parts.path) sql_reader = SqlDatabaseReader(sql_source) inventory = Inventory(sql_reader) machines_name = [] machines_spec_id = [] machines_serial_number = [] for machine_fqdn in machines_fqdn: machine_name = machine_fqdn.split('.')[0] machine_spec_id = inventory.machine_name_to_machine_spec_id(machine_name) serial_number = inventory.get_machine_serial_number(machine_name) machines_name.append(machine_name) machines_spec_id.append(machine_spec_id) machines_serial_number.append(serial_number) name_label = 'Nom' model_label = 'Modèle' serial_label = 'Numéro de Série' render_table_md([machines_name, machines_spec_id, machines_serial_number], [name_label, model_label, serial_label]) render_table_wiki([machines_name, machines_spec_id, machines_serial_number], [name_label, model_label, serial_label]) if __name__ == '__main__': machines_fqdn = [ 'physix49.ipr.univ-rennes1.fr', 'physix50.ipr.univ-rennes1.fr', 'physix51.ipr.univ-rennes1.fr', 'physix52.ipr.univ-rennes1.fr', 'physix53.ipr.univ-rennes1.fr', 'physix54.ipr.univ-rennes1.fr', 'physix55.ipr.univ-rennes1.fr', 'physix56.ipr.univ-rennes1.fr', 'physix57.ipr.univ-rennes1.fr', 'physix58.ipr.univ-rennes1.fr', 'simpatix59.ipr.univ-rennes1.fr', 'physix72.ipr.univ-rennes1.fr', 'physix73.ipr.univ-rennes1.fr', 'physix74.ipr.univ-rennes1.fr', 'physix75.ipr.univ-rennes1.fr', 'physix90.ipr.univ-rennes1.fr', 'physix91.ipr.univ-rennes1.fr', 'alambix103.ipr.univ-rennes1.fr', 'alambix104.ipr.univ-rennes1.fr' ] print_machine_table(machines_fqdn)