[Opensrf-commits] r2088 - trunk/src/python/osrf (erickson)

svn at svn.open-ils.org svn at svn.open-ils.org
Tue Nov 16 09:08:31 EST 2010


Author: erickson
Date: 2010-11-16 09:08:29 -0500 (Tue, 16 Nov 2010)
New Revision: 2088

Modified:
   trunk/src/python/osrf/net_obj.py
Log:
repaired logic in the as-yet-unused import_array_data; use the more efficient enumerate func; capture array length outside of loop for efficiency; avoid calls to set/get_field and access _data directly inside of the NetworkObject class for faster accessor/mutator's

Modified: trunk/src/python/osrf/net_obj.py
===================================================================
--- trunk/src/python/osrf/net_obj.py	2010-11-16 14:06:02 UTC (rev 2087)
+++ trunk/src/python/osrf/net_obj.py	2010-11-16 14:08:29 UTC (rev 2088)
@@ -44,7 +44,7 @@
         self._data = data
         if not data: self._data = {}
         if isinstance(data, list):
-            self.import_array_data(list)
+            self.import_array_data(data)
 
     def import_array_data(self, data):
         ''' If an array-based object is created with an array
@@ -56,10 +56,8 @@
 
         reg = self.get_registry()
         if reg.protocol == 'array':
-            for entry in range(len(reg.keys)):
-                if len(data) > entry:
-                    break
-                self.set_field(reg.keys[entry], data[entry])
+            for idx, key in enumerate(reg.keys):
+                self._data[key] = data[idx]
 
     def get_data(self):
         ''' Returns the full dataset for this object as a dict '''
@@ -80,7 +78,7 @@
         reg = self.get_registry()
         obj = new_object_from_hint(reg.hint)
         for field in reg.keys:
-            obj.set_field(field, self.get_field(field))
+            obj._data[field] = self._data[field]
         return obj
             
 
@@ -102,8 +100,8 @@
         the field on the object whose data we are accessing ''' 
     def accessor(self, *args):
         if len(args) != 0:
-            self.set_field(key, args[0])
-        return self.get_field(key)
+            self._data[key] = args[0]
+        return self._data[key]
     setattr(cls, key, accessor)
 
 
@@ -159,11 +157,16 @@
                 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])
+                    subobj_len = len(sub_object)
+
+                    for idx, key in enumerate(reg.keys):
+                        if idx < subobj_len: 
+                            # don't attempt acces past the end of the data list
+                            obj[key] = parse_net_object(sub_object[idx])
                         else:
-                            obj[reg.keys[entry]] = None
+                            # make sure all keys are accounted for, even if there 
+                            # is no data for the key in the parsed object
+                            obj[key] = None 
                 else:
                     for key in reg.keys:
                         obj[key] = parse_net_object(sub_object.get(key))



More information about the opensrf-commits mailing list