Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/galaxy/containers/docker_decorators.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/galaxy/containers/docker_decorators.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,54 @@ +""" +Decorators for docker +""" +import json +from functools import wraps + + +def docker_columns(f): + @wraps(f) + def parse_docker_column_output(*args, **kwargs): + """Many docker commands do not provide an option to format the output + or output in a machine-readily-parseable format (e.g. json). In order + to deal with such output and hopefully stay compatible with future + column order changes, key returned rows based on column headers. + + An assumption is made that a single space in the header row does not + separate columns - column names can have spaces in them, and columns + are separated by at least 2 spaces. This seems to be true as of Docker + 1.13.1. + """ + output = f(*args, **kwargs) + parsed = [] + output = output.splitlines() + header = output[0] + colstarts = [0] + colidx = 0 + spacect = 0 + if not output: + return parsed + for i, c in enumerate(header): + if c != ' ' and spacect > 1: + colidx += 1 + colstarts.append(i) + spacect = 0 + elif c == ' ': + spacect += 1 + colstarts.append(None) + colheadings = [] + for i in range(0, len(colstarts) - 1): + colheadings.append(header[colstarts[i]:colstarts[i + 1]].strip()) + for line in output[1:]: + row = {} + for i, key in enumerate(colheadings): + row[key] = line[colstarts[i]:colstarts[i + 1]].strip() + parsed.append(row) + return parsed + return parse_docker_column_output + + +def docker_json(f): + @wraps(f) + def json_loads(*args, **kwargs): + return json.loads(f(*args, **kwargs)) + return json_loads