From e7711bc6f341054e585b258ef0fa1d6065fe0c3c Mon Sep 17 00:00:00 2001 From: erickson Date: Tue, 16 Nov 2010 03:36:49 +0000 Subject: [PATCH] rely on logic, not failure through try/catch, to determine of an object is a registered network object; if an object is unregistered, do not treat it as an __unknown network object (which obfuscates and provides no value). git-svn-id: svn://svn.open-ils.org/OpenSRF/trunk@2084 9efc2488-bf62-4759-914b-345cdb29e865 --- src/python/osrf/net_obj.py | 59 +++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/src/python/osrf/net_obj.py b/src/python/osrf/net_obj.py index beed013..71bfeaa 100644 --- a/src/python/osrf/net_obj.py +++ b/src/python/osrf/net_obj.py @@ -146,45 +146,40 @@ register_hint('__unknown', [], 'hash') # Define the custom object parsing behavior # ------------------------------------------------------------------- def parse_net_object(obj): - - try: - hint = obj[OSRF_JSON_CLASS_KEY] - sub_object = obj[OSRF_JSON_PAYLOAD_KEY] - reg = NetworkRegistry.get_registry(hint) - obj = {} + if isinstance(obj, dict): + if OSRF_JSON_CLASS_KEY in obj and OSRF_JSON_PAYLOAD_KEY in obj: - if reg.protocol == 'array': - for entry in range(len(reg.keys)): - if len(sub_object) > entry: - obj[reg.keys[entry]] = parse_net_object(sub_object[entry]) - else: - obj[reg.keys[entry]] = None - else: - for key in reg.keys: - obj[key] = parse_net_object(sub_object.get(key)) + hint = obj[OSRF_JSON_CLASS_KEY] + sub_object = obj[OSRF_JSON_PAYLOAD_KEY] + reg = NetworkRegistry.get_registry(hint) + + if reg: - estr = 'obj = NetworkObject.%s(obj)' % hint - try: - exec(estr) - except: - # this object has not been registered, shove it into the default container - obj = NetworkObject.__unknown(obj) + obj = {} - return obj + if reg.protocol == 'array': + for entry in range(len(reg.keys)): + if len(sub_object) > entry: + obj[reg.keys[entry]] = parse_net_object(sub_object[entry]) + else: + obj[reg.keys[entry]] = None + else: + for key in reg.keys: + obj[key] = parse_net_object(sub_object.get(key)) - except: - pass + # vivicate the network object + estr = 'obj = NetworkObject.%s(obj)' % hint + exec(estr) + return obj - # the current object does not have a class hint - if isinstance(obj, list): - for entry in range(len(obj)): - obj[entry] = parse_net_object(obj[entry]) + # dict, but not a registered NetworObject + for key, value in obj.iteritems(): + obj[key] = parse_net_object(value) - else: - if isinstance(obj, dict): - for key, value in obj.iteritems(): - obj[key] = parse_net_object(value) + elif isinstance(obj, list): + for idx, value in enumerate(obj): + obj[idx] = parse_net_object(value) return obj -- 2.43.2