From 6735152ee0cafaccafd85548f05b2d10c29d6b41 Mon Sep 17 00:00:00 2001 From: "ahernandez.miralles@gmail.com" Date: Tue, 24 Jun 2014 02:58:27 +0000 Subject: Docserver: Separate models for apps and extensions. BUG=322094 Review URL: https://codereview.chromium.org/344453003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@279278 0039d316-1c4b-4281-b951-d872f2087c98 --- tools/json_schema_compiler/json_schema.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'tools/json_schema_compiler/json_schema.py') diff --git a/tools/json_schema_compiler/json_schema.py b/tools/json_schema_compiler/json_schema.py index ae126c2..bb4e9c4 100644 --- a/tools/json_schema_compiler/json_schema.py +++ b/tools/json_schema_compiler/json_schema.py @@ -6,25 +6,32 @@ import copy import json_parse -def DeleteNodes(item, delete_key): - """Deletes the given nodes in item, recursively, that have |delete_key| as - an attribute. + +def DeleteNodes(item, delete_key=None, matcher=None): + """Deletes certain nodes in item, recursively. If |delete_key| is set, all + dicts with |delete_key| as an attribute are deleted. If a callback is passed + as |matcher|, |DeleteNodes| will delete all dicts for which matcher(dict) + returns True. """ - def HasKey(thing): - return json_parse.IsDict(thing) and thing.get(delete_key, False) + assert (delete_key is not None) != (matcher is not None) + + def ShouldDelete(thing): + return json_parse.IsDict(thing) and ( + delete_key is not None and delete_key in thing or + matcher is not None and matcher(thing)) if json_parse.IsDict(item): toDelete = [] for key, value in item.items(): - if HasKey(value): + if ShouldDelete(value): toDelete.append(key) else: - DeleteNodes(value, delete_key) + DeleteNodes(value, delete_key, matcher) for key in toDelete: del item[key] elif type(item) == list: - item[:] = [DeleteNodes(thing, delete_key) - for thing in item if not HasKey(thing)] + item[:] = [DeleteNodes(thing, delete_key, matcher) + for thing in item if not ShouldDelete(thing)] return item -- cgit v1.1