inventory.py.bak
1 """The Inventory""" 2 3 # TODO make this dynamic, and watch out for frozen, like with messagetypes 4 import storage.filesystem 5 import storage.sqlite 6 from bmconfigparser import config 7 8 9 def create_inventory_instance(backend="sqlite"): 10 """ 11 Create an instance of the inventory class 12 defined in `storage.<backend>`. 13 """ 14 return getattr( 15 getattr(storage, backend), 16 "{}Inventory".format(backend.title()))() 17 18 19 class Inventory: 20 """ 21 Inventory class which uses storage backends 22 to manage the inventory. 23 """ 24 def __init__(self): 25 self._moduleName = config.safeGet("inventory", "storage") 26 self._realInventory = create_inventory_instance(self._moduleName) 27 self.numberOfInventoryLookupsPerformed = 0 28 29 # cheap inheritance copied from asyncore 30 def __getattr__(self, attr): 31 if attr == "__contains__": 32 self.numberOfInventoryLookupsPerformed += 1 33 try: 34 realRet = getattr(self._realInventory, attr) 35 except AttributeError: 36 raise AttributeError( 37 "%s instance has no attribute '%s'" % 38 (self.__class__.__name__, attr) 39 ) 40 else: 41 return realRet 42 43 # hint for pylint: this is dictionary like object 44 def __getitem__(self, key): 45 return self._realInventory[key] 46 47 def __setitem__(self, key, value): 48 self._realInventory[key] = value