kkonganti@105: #!/usr/bin/env python
kkonganti@105:
kkonganti@105: import sys
kkonganti@105: import yaml
kkonganti@105: from textwrap import dedent
kkonganti@105:
kkonganti@105: def main() :
kkonganti@105: """
kkonganti@105: Takes a tab-delimited text file with a mandatory header
kkonganti@105: column and generates an HTML table.
kkonganti@105: """
kkonganti@105:
kkonganti@105: args = sys.argv
kkonganti@105: if (len(args) < 2 or len(args) > 3):
kkonganti@105: print(f"\nTwo CL arguments are required!\n")
kkonganti@105: exit(1)
kkonganti@105:
kkonganti@105: table_sum_on = args[1].lower()
kkonganti@105: workflow_name = args[2].lower()
kkonganti@105:
kkonganti@105: with open(f"{table_sum_on}.tblsum.txt", "r") as tbl:
kkonganti@105: header = tbl.readline()
kkonganti@105: header_cols = header.strip().split('\t')
kkonganti@105:
kkonganti@105: html = [
kkonganti@105: dedent(
kkonganti@105: f"""
kkonganti@105:
kkonganti@105:
kkonganti@105:
kkonganti@105:
kkonganti@105: """
kkonganti@105: )
kkonganti@105: ]
kkonganti@105:
kkonganti@105: for header_col in header_cols:
kkonganti@105: html.append(
kkonganti@105: dedent(
kkonganti@105: f"""
kkonganti@105: {header_col} | """
kkonganti@105: )
kkonganti@105: )
kkonganti@105:
kkonganti@105: html.append(
kkonganti@105: dedent(
kkonganti@105: """
kkonganti@105:
kkonganti@105:
kkonganti@105: """
kkonganti@105: )
kkonganti@105: )
kkonganti@105:
kkonganti@105: for row in tbl:
kkonganti@105: html.append("\n")
kkonganti@105: data_cols = row.strip().split('\t')
kkonganti@105: if ( len(header_cols) != len(data_cols) ):
kkonganti@105: print(f"\nWARN: Number of header columns ({len(header_cols)}) and data " +
kkonganti@105: f"columns ({len(data_cols)}) are not equal!\nWill append empty columns!\n")
kkonganti@105: if ( len(header_cols) > len(data_cols) ):
kkonganti@105: data_cols += (( len(header_cols) - len(data_cols) ) * ' ' )
kkonganti@105: print(len(data_cols))
kkonganti@105: else:
kkonganti@105: header_cols += (( len(data_cols) - len(header_cols) ) * ' ')
kkonganti@105:
kkonganti@105: html.append(
kkonganti@105: dedent(
kkonganti@105: f"""
kkonganti@105: {data_cols[0]} |
kkonganti@105: """
kkonganti@105: )
kkonganti@105: )
kkonganti@105:
kkonganti@105: for data_col in data_cols[1:]:
kkonganti@105: html.append(
kkonganti@105: dedent(
kkonganti@105: f"""{data_col} |
kkonganti@105: """
kkonganti@105: )
kkonganti@105: )
kkonganti@105: html.append("
\n")
kkonganti@105: html.append("\n")
kkonganti@105: html.append("
\n")
kkonganti@105: html.append("
\n")
kkonganti@105:
kkonganti@105: mqc_yaml = {
kkonganti@105: "id": f"{table_sum_on.upper()}_collated_table",
kkonganti@105: "section_name": f"{table_sum_on.upper()}",
kkonganti@105: "section_href": f"https://cfsan-git.fda.gov/Kranti.Konganti/{workflow_name}",
kkonganti@105: "plot_type": "html",
kkonganti@105: "description": "The results table shown here is a collection from all samples.",
kkonganti@105: "data": ('').join(html),
kkonganti@105: }
kkonganti@105:
kkonganti@105: with open(f"{table_sum_on.lower()}_mqc.yml", "w") as html_mqc:
kkonganti@105: yaml.dump(mqc_yaml, html_mqc, default_flow_style=False)
kkonganti@105:
kkonganti@105: if __name__ == "__main__":
kkonganti@105: main()