diff options
| author | Russ Cox <rsc@golang.org> | 2011-05-13 11:17:06 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2011-05-13 11:17:06 -0400 |
| commit | 404d49154bc61c159ae4306940cefa63233c61c7 (patch) | |
| tree | 8115f7e7d0bf7997cc8ada2c3bdf6879666fd78e /lib | |
| parent | 3b4a8ff604655b67dbda7621658fb9f66653a725 (diff) | |
| download | go-404d49154bc61c159ae4306940cefa63233c61c7.tar.xz | |
codereview: handle 'null as missing field' in rietveld json
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/4543046
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/codereview/codereview.py | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/codereview/codereview.py b/lib/codereview/codereview.py index f6e69a417f..ba2bbbaad8 100644 --- a/lib/codereview/codereview.py +++ b/lib/codereview/codereview.py @@ -2025,25 +2025,35 @@ def JSONGet(ui, path): try: data = MySend(path, force_auth=False) typecheck(data, str) - d = coerce_to_utf8(json.loads(data)) + d = fix_json(json.loads(data)) except: ui.warn("JSONGet %s: %s\n" % (path, ExceptionDetail())) return None return d -def coerce_to_utf8(x): +# Clean up json parser output to match our expectations: +# * all strings are UTF-8-encoded str, not unicode. +# * missing fields are missing, not None, +# so that d.get("foo", defaultvalue) works. +def fix_json(x): if type(x) in [str, int, float, bool, type(None)]: pass elif type(x) is unicode: x = x.encode("utf-8") elif type(x) is list: for i in range(len(x)): - x[i] = coerce_to_utf8(x[i]) + x[i] = fix_json(x[i]) elif type(x) is dict: + todel = [] for k in x: - x[k] = coerce_to_utf8(x[k]) + if x[k] is None: + todel.append(k) + else: + x[k] = fix_json(x[k]) + for k in todel: + del x[k] else: - raise util.Abort("unknown type " + str(type(x)) + " in coerce_to_utf8") + raise util.Abort("unknown type " + str(type(x)) + " in fix_json") if type(x) is str: x = x.replace('\r\n', '\n') return x |
