Fix Keystone RC and parser
Change-Id: I0b4657bcbd46917e355916aa62cbd1578563ee67
diff --git a/src/com/mirantis/mk/python.groovy b/src/com/mirantis/mk/python.groovy
index c832cb3..b8ea694 100644
--- a/src/com/mirantis/mk/python.groovy
+++ b/src/com/mirantis/mk/python.groovy
@@ -55,11 +55,132 @@
* @param format Format of the table
*/
def parseTextTable(tableStr, type = 'item', format = 'rest') {
- parserScript = "${env.WORKSPACE}/scripts/parse_text_table.py"
+ parserFile = "${env.WORKSPACE}/textTableParser.py"
+ parserScript = """import json
+import argparse
+from docutils.parsers.rst import tableparser
+from docutils import statemachine
+
+def parse_item_table(raw_data):
+ i = 1
+ pretty_raw_data = []
+ for datum in raw_data:
+ if datum != "":
+ if datum[3] != ' ' and i > 4:
+ pretty_raw_data.append(raw_data[0])
+ if i == 3:
+ pretty_raw_data.append(datum.replace('-', '='))
+ else:
+ pretty_raw_data.append(datum)
+ i += 1
+ parser = tableparser.GridTableParser()
+ block = statemachine.StringList(pretty_raw_data)
+ docutils_data = parser.parse(block)
+ final_data = {}
+ for line in docutils_data[2]:
+ key = ' '.join(line[0][3]).strip()
+ value = ' '.join(line[1][3]).strip()
+ if key != "":
+ try:
+ value = json.loads(value)
+ except:
+ pass
+ final_data[key] = value
+ i+=1
+ return final_data
+
+def parse_list_table(raw_data):
+ i = 1
+ pretty_raw_data = []
+ for datum in raw_data:
+ if datum != "":
+ if datum[3] != ' ' and i > 4:
+ pretty_raw_data.append(raw_data[0])
+ if i == 3:
+ pretty_raw_data.append(datum.replace('-', '='))
+ else:
+ pretty_raw_data.append(datum)
+ i += 1
+ parser = tableparser.GridTableParser()
+ block = statemachine.StringList(pretty_raw_data)
+ docutils_data = parser.parse(block)
+ final_data = []
+ keys = []
+ for line in docutils_data[1]:
+ for item in line:
+ keys.append(' '.join(item[3]).strip())
+ for line in docutils_data[2]:
+ final_line = {}
+ key = ' '.join(line[0][3]).strip()
+ value = ' '.join(line[1][3]).strip()
+ if key != "":
+ try:
+ value = json.loads(value)
+ except:
+ pass
+ final_data[key] = value
+ i+=1
+ return final_data
+
+def parse_list_table(raw_data):
+ i = 1
+ pretty_raw_data = []
+ for datum in raw_data:
+ if datum != "":
+ if datum[3] != ' ' and i > 4:
+ pretty_raw_data.append(raw_data[0])
+ if i == 3:
+ pretty_raw_data.append(datum.replace('-', '='))
+ else:
+ pretty_raw_data.append(datum)
+ i += 1
+ parser = tableparser.GridTableParser()
+ block = statemachine.StringList(pretty_raw_data)
+ docutils_data = parser.parse(block)
+ final_data = []
+ keys = []
+ for line in docutils_data[1]:
+ for item in line:
+ keys.append(' '.join(item[3]).strip())
+ for line in docutils_data[2]:
+ final_line = {}
+ i = 0
+ for item in line:
+ value = ' '.join(item[3]).strip()
+ try:
+ value = json.loads(value)
+ except:
+ pass
+ final_line[keys[i]] = value
+ i += 1
+ final_data.append(final_line)
+ return final_data
+
+def read_table_file(file):
+ table_file = open(file, 'r')
+ raw_data = table_file.read().split('\n')
+ table_file.close()
+ return raw_data
+
+parser = argparse.ArgumentParser()
+parser.add_argument('-f','--file', help='File with table data', required=True)
+parser.add_argument('-t','--type', help='Type of table (list/item)', required=True)
+args = vars(parser.parse_args())
+
+raw_data = read_table_file(args['file'])
+
+if args['type'] == 'list':
+ final_data = parse_list_table(raw_data)
+else:
+ final_data = parse_item_table(raw_data)
+
+print json.dumps(final_data)
+"""
+ writeFile file: parserFile, text: parserScript
tableFile = "${env.WORKSPACE}/prettytable.txt"
writeFile file: tableFile, text: tableStr
rawData = sh (
- script: "python ${parserScript} --file '${tableFile}' --type ${type}",
+ script: "python ${parserFile} --file '${tableFile}' --type ${type}",
returnStdout: true
).trim()
data = loadJson(rawData)