new for internal caching of properties
diff --git a/bin/PropertyCacher.py b/bin/PropertyCacher.py
new file mode 100644
index 0000000..3b0002f
--- /dev/null
+++ b/bin/PropertyCacher.py
@@ -0,0 +1,47 @@
+import os
+import cPickle
+import Openbmc
+
+CACHE_PATH = '/var/cache/obmc/'
+
+def getCacheFilename(obj_path, iface_name):
+ name = obj_path.replace('/','.')
+ filename = CACHE_PATH+name[1:]+"@"+iface_name+".props"
+ return filename
+
+def save(obj_path, iface_name, properties):
+ print "Caching: "+obj_path
+ try:
+ output = open(getCacheFilename(obj_path, iface_name), 'wb')
+ ## save properties
+ dbus_props = {}
+
+ for p in properties[iface_name].keys():
+ dbus_prop = Openbmc.DbusVariable(p,properties[iface_name][p])
+ dbus_props[str(p)] = dbus_prop.getBaseValue()
+
+ cPickle.dump(dbus_props,output)
+ except Exception as e:
+ print "ERROR: "+str(e)
+ finally:
+ output.close()
+
+def load(obj_path, iface_name, properties):
+ ## overlay with pickled data
+ filename=getCacheFilename(obj_path, iface_name)
+ if (os.path.isfile(filename)):
+ if (properties.has_key(iface_name) == False):
+ properties[iface_name] = {}
+ print "Loading from cache: "+filename
+ try:
+ p = open(filename, 'rb')
+ data = cPickle.load(p)
+ for prop in data.keys():
+ properties[iface_name][prop] = data[prop]
+
+ except Exception as e:
+ print "ERROR: Loading cache file: " +str(e)
+ finally:
+ p.close()
+
+