lots of changes
diff --git a/bin/inventory_items.py b/bin/inventory_items.py
index d337d95..d27abd3 100755
--- a/bin/inventory_items.py
+++ b/bin/inventory_items.py
@@ -18,6 +18,7 @@
INTF_NAME = 'org.openbmc.InventoryItem'
DBUS_NAME = 'org.openbmc.managers.Inventory'
+ENUM_INTF = 'org.openbmc.Object.Enumerate'
FRUS = System.FRU_INSTANCES
FRU_PATH = System.FRU_PATH
@@ -35,74 +36,70 @@
def addItem(self,item):
self.objects.append(item)
- @dbus.service.method("org.openbmc.managers.Inventory",
+ @dbus.service.method(ENUM_INTF,
in_signature='', out_signature='a{sa{sv}}')
- def getItems(self):
+ def enumerate(self):
tmp_obj = {}
for item in self.objects:
- tmp_obj[str(item.item['name'])]=item.getItemDict()
+ tmp_obj[str(item.name)]=item.GetAll(INTF_NAME)
return tmp_obj
-class InventoryItem(dbus.service.Object):
- def __init__(self,bus,name):
+class InventoryItem(Openbmc.DbusProperties):
+ def __init__(self,bus,name):
+ Openbmc.DbusProperties.__init__(self)
dbus.service.Object.__init__(self,bus,name)
- ## store all properties in a dict so can easily
- ## send on dbus
- self.item = {
- 'name' : name,
- 'is_fru' : False,
- 'fru_type' : 0,
- 'state' : 0,
- 'manufacturer' : "",
- }
+ self.name = name
self.cache = True
-
- def getItemDict(self):
- return self.item
-
- @dbus.service.method('org.openbmc.InventoryItem',
+ self.Set(INTF_NAME,'is_fru',False)
+ self.Set(INTF_NAME,'fru_type',0)
+ self.Set(INTF_NAME,'present',"INACTIVE")
+ self.Set(INTF_NAME,'fault',"NONE")
+
+
+
+ @dbus.service.method(INTF_NAME,
in_signature='a{sv}', out_signature='')
def update(self,data):
## translate dbus data into basic data types
for k in data.keys():
- d = Openbmc.DbusProperty(k,data[k])
- self.item[str(k)] = d.getBaseValue()
+ self.setField(k,data[k])
+
self.saveToCache()
- @dbus.service.method("org.openbmc.InventoryItem",
+ @dbus.service.method(INTF_NAME,
in_signature='s', out_signature='')
def setPresent(self,present):
- self.item['present'] = present
- print "Set Present: "+str(present)
+ self.setField('present',present)
- @dbus.service.method("org.openbmc.InventoryItem",
+ @dbus.service.method(INTF_NAME,
in_signature='s', out_signature='')
def setFault(self,fault):
- self.item['fault_state'] = fault
- print "Set Fault: "+str(fault)
+ self.setField('fault',fault)
def setField(self,field,value):
- self.item[field] = value
+ f = str(field)
+ d = Openbmc.DbusVariable(f,value)
+ self.Set(INTF_NAME,f,d.getBaseValue())
def isCached(self):
return self.cache
def getCacheFilename(self):
global FRU_PATH
- name = self.item['name'].replace('/','.')
+ name = self.name.replace('/','.')
filename = FRU_PATH+name[1:]+".fru"
return filename
def saveToCache(self):
if (self.isCached() == False):
return
- print "Caching: "+self.item['name']
+ print "Caching: "+self.name
try:
output = open(self.getCacheFilename(), 'wb')
- ## just pickle dict not whole object
- cPickle.dump(self.item,output)
+ ## save properties
+ cPickle.dump(self.properties[INTF_NAME],output)
except Exception as e:
print "ERROR: "+str(e)
finally:
@@ -119,7 +116,7 @@
p = open(filename, 'rb')
data2 = cPickle.load(p)
for k in data2.keys():
- self.item[k] = data2[k]
+ self.setField(k,data2[k])
except Exception as e:
print "No cache file found: " +str(e)
finally:
@@ -131,7 +128,7 @@
bus = Openbmc.getDBus()
name = dbus.service.BusName(DBUS_NAME,bus)
mainloop = gobject.MainLoop()
- obj_parent = Inventory(bus, '/org/openbmc/managers/Inventory')
+ obj_parent = Inventory(bus, '/org/openbmc/inventory')
for f in FRUS.keys():
obj_path=f.replace("<inventory_root>",System.INVENTORY_ROOT)