columns+=('pipenick'); columndefs+=('pipelines[job["job_data"]["pipeline_id"]] if job["job_data"]["pipeline_id"] in pipelines else "unknown"'); columnattributes+=('');
sortColumns = tuple(column[1:] if column.startswith("-") else column for column in sortColumnsRaw)
sortColumns = tuple((column[1:] if column.startswith("-") else column).lower() for column in sortColumnsRaw)
sortColumnAsc = tuple(not column.startswith("-") for column in sortColumnsRaw)
assert all(column.upper() in columns for column in sortColumns)
sortColumnIdxs = tuple(columns.index(column.upper()) for column in sortColumns)
assert all(column in columns for column in sortColumns)
if not "'${dates}'":
sortColumnAsc = tuple(not columnAsc if 4 <= columnIdx <= 6 else columnAsc for columnAsc, columnIdx in zip(sortColumnAsc, sortColumnIdxs))
jobs = sorted(jobs, key = lambda job: tuple(job[columnIdx] if columnAsc else reversor(job[columnIdx]) for column, columnAsc, columnIdx in zip(sortColumns, sortColumnAsc, sortColumnIdxs)))
# Reverse sorting order for columns which have a date attribute since the column will have elapsed time
sortColumnAttrs = tuple(columnAttr for column, columnAttr in columnAttributes.items() if column in sortColumns)
sortColumnAsc = tuple(not columnAsc if "date" in columnAttr else columnAsc for columnAsc, column, columnAttr in zip(sortColumnAsc, sortColumns, sortColumnAttrs))
jobs = sorted(jobs, key = lambda job: tuple(job[column] if columnAsc else reversor(job[column]) for column, columnAsc in zip(sortColumns, sortColumnAsc)))
# Renderers
renderers = {}
for column, columnAttr in columnAttributes.items():
if "date" in columnAttr:
if "coloured" in columnAttr:
renderers[column] = lambda x: render_date(x, coloured = not "'${nocolours}'")
else:
renderers[column] = render_date
# Print
print("\t".join(columns))
print("\t".join(column.upper() for column in columns))
for job in jobs:
job[4] = render_date(job[4])
job[5] = render_date(job[5])
job[6] = render_date(job[6], coloured = not "'${nocolours}'")
print("\t".join(job))
for column in renderers:
job[column] = renderers[column](job[column])
print("\t".join(job[column] for column in columns))