Jephte CLAIN wrote:
mike wrote:
Jephte CLAIN wrote:
Rack.createItem (low level method) first calls Rack.getItem (higher level method) to check the existence of the item. This causes infinite loop in certain cases. It should (IMHO) call Rack.retrieveItem instead Could you provide an example please? My data is located in an SQL database. I want to have some associated data in ZODB. ZPatterns is a perfect fit for this. When I first access a SQL record, the corresponding data is created in ZODB:
def getItem(self, key): if self.sql_get(key=key): # ok it exists in the SQL database item = Rack.getItem(self, key) if item is None: # it does not exist in ZODB, create it item = Rack.newItem(self, key) else: item = None return item
This causes infinite loop because Rack.newItem calls Rack.createItem which calls my (modified) getItem
1. Leave getItem untouched. Move all that SQL-related stuff into the retrieveItem method which *is intended* to be overriden. 2. Move newItem stuff into Specialist. You have mixed 'Restaurant' and the 'FoodStore' in this snippet :-) Do this instead: Specialist: def getItem( self, key) : item = self._src().getItem( key) if item is None : item = self._src().newItem( key) return item def _src( self) : return self.rackList[0].__of__( self) Rack: def retrieveItem( self, key) : item = self.sql_get( key) blah blah blah ... return item Mike