[storm] Announcement: nva.stromcontainer

Bernd Dorn bernd.dorn at lovelysystems.com
Mon Jan 28 20:16:12 GMT 2008


On 28.01.2008, at 13:39, Christian Klinger wrote:

> My next tasks is working on a megrok.storm package which
> makes the usage of storm.zope and nva.stormcontainer more
> "grokkish".
>
> If you have any suggestions please comment.


hi chris

thx for the work ... some suggestions ...

in container.py you implemented contained, actually  
zope.app.container.contained.contained does only instantiate the  
events but does not fire them so i think it is save to just use the  
orignial implementaion

actually it would be nice to have a special contained class that knows  
about its parent class, so you dont have to use contained and could  
just return resultsets. then you could nearly implement the most  
methods by using values() as a base method.

one drawback is that the container needs to be registered as a utility  
to make this possible. but this should not be a functional drawback  
because you dedicated the container to a specific table anyway.

the contained class would implement self.__name__ and self.__parent__  
as properties

@property
def __parent__(self):
     return component.getUtility(IStormContainer, 'mytablename')

@property
def __name__(self):
     return myPKAsString(self.pkattr)

you can then do the following for example:

def values(self):
     return store.find(self._class)

with the above you could do someContainer.values()[20:30] (storm does  
then offset limit queries)

def __len__(self):
     return self.values().count()

def keys(self):
     for k in self.values().values('keycol'):
          yield makeIdentifier(k)

also it would be nice to use an exists query or some equivalent in  
__contains__, below just an example that selects the first pk

def __contains__(self, name):
     pk = makePrimaryKey(name)
     for pk in self.values().config(limit=1).values('pkcol'):
	return True
     return False

in __delitem__ you don't have to fetch the object, if you use the form  
below, only a delete statement gets executed

def __delitem__(self, name):
     pk = makePrimaryKey(name)
     self.values().find(pkcol=pk).remove()


additionally you do a lot of utility lookups for the storm utility,  
take a look at zope.cachedescriptors.property, there is an  
implementation that lets you implement self.store efficiently

regards, bernd

-- 
Lovely Systems, senior developer

phone: +43 5572 908060, fax: +43 5572 908060-77
Schmelzhütterstraße 26a, 6850 Dornbirn, Austria
skype: bernd.dorn



-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2548 bytes
Desc: not available
Url : https://lists.ubuntu.com/archives/storm/attachments/20080128/470d4150/attachment.bin 


More information about the storm mailing list