From 0332ec718fc0d91acb713753331edc32f94e9f6a Mon Sep 17 00:00:00 2001 From: pwwang Date: Fri, 11 Aug 2017 00:34:06 -0500 Subject: [PATCH] Make suffix of proc consistent for python2 and python3. --- pyppl/helpers/proc.py | 13 +++++++------ pyppl/helpers/utils.py | 14 +++++++++++--- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/pyppl/helpers/proc.py b/pyppl/helpers/proc.py index 2b2265b6..8e2cd823 100644 --- a/pyppl/helpers/proc.py +++ b/pyppl/helpers/proc.py @@ -3,12 +3,13 @@ """ import copy as pycopy import os -import pickle import sys import threading +import json from random import randint from subprocess import PIPE, Popen from time import sleep, time +from collections import OrderedDict try: from Queue import Queue except ImportError: @@ -393,7 +394,7 @@ def _suffix (self): for key, val in config['input'].items(): config['input'][key] = utils.funcsig(val) if callable(val) else val - signature = pickle.dumps(str(config)) + signature = json.dumps(config, sort_keys = True) self.props['suffix'] = utils.uid(signature) return self.suffix @@ -534,7 +535,7 @@ def _saveSettings (self): if key == 'input': f.write('\n[input]\n') if not isinstance(val, dict): - f.write('key: ' + str(val) + '\n') + f.write('value: ' + str(val) + '\n') else: for k in sorted(val.keys()): v = val[k] @@ -557,19 +558,19 @@ def _saveSettings (self): f.write (k + '.type: ' + str(v['type']) + '\n') f.write (k + '.data: \n') for _ in v['data']: - f.write (' ' + str(_) + '\n') + f.write (' ' + json.dumps(_) + '\n') elif key in ['lognline', 'args'] or key.endswith('Runner'): f.write('\n['+ key +']\n') for k in sorted(val.keys()): v = val[k] - f.write ((k if k else "''") + ': ' + str(v) + '\n') + f.write ((k if k else "''") + ': ' + json.dumps(v, sort_keys = True) + '\n') elif key == 'script': f.write('\n['+ key +']\n') f.write('value:\n') f.write(' ' + val.replace('\n', '\n ') + '\n') else: f.write('\n['+ key +']\n') - f.write('value: ' + str(val) + '\n') + f.write('value: ' + json.dumps(val, sort_keys = True) + '\n') self.log ('Settings saved to: %s' % settingsfile, 'debug') diff --git a/pyppl/helpers/utils.py b/pyppl/helpers/utils.py index 03890a6e..feecc80a 100644 --- a/pyppl/helpers/utils.py +++ b/pyppl/helpers/utils.py @@ -173,6 +173,8 @@ def format (tpl, args): s = tpl m = re.findall ("{{.+?}}", s) + keys = sorted(args.keys()) + nkeyPerLine = 8 for n in m: #nneat = n.strip("{}") nneat = n[2:-2] @@ -181,8 +183,12 @@ def format (tpl, args): if key.startswith('import ') or key.startswith('from '): exec (key) key = parts.pop(0).strip() - if not key in args: - raise KeyError ("No key '%s' found in the data!\nAvailable keys are: %s" % (key, str(args.keys()))) + if not key in keys: + stderr.write('No key "%s" found in data.\n' % key) + stderr.write('Available keys are: \n') + for i in range(0, len(keys), nkeyPerLine): + stderr.write (' ' + ', '.join(keys[i:i+nkeyPerLine]) + '\n') + raise KeyError value = args[key] while parts: @@ -205,7 +211,9 @@ def format (tpl, args): stderr.write("Failed to evaluate: %s\n" % expstr) stderr.write("- Key/Func: %s\n" % func) stderr.write("- Expression: %s\n" % n) - stderr.write("- Avail keys: %s\n" % args.keys()) + stderr.write("- Avail keys:\n") + for i in range(0, len(keys), nkeyPerLine): + stderr.write (' ' + ', '.join(keys[i:i+nkeyPerLine]) + '\n') raise s = s.replace (n, str(value))