[Grok-dev] Re: Iterativly emptying a grok.container shows weird
behavior
Philipp von Weitershausen
philipp at weitershausen.de
Tue Jun 12 11:05:36 EDT 2007
Dr. Volker Jaenisch wrote:
> class Sample(grok.Application, grok.Container):
> def emptyContainer( self ):
> keys = []
> for key in self._SampleContainer__data.keys():
> keys.append( key )
>
> for key in keys :
> print key.__class__
> del self._SampleContainer__data[ key ]
You could've simply done
keys = list(container.keys())
to obtain an actual list and a permanent copy of the keys in the
container. Then mutating the container won't mutate that list.
> Resume:
> If you explain a CAVEMAN in the tutorial he may access a
> grok.container the way he would use a python dict and
> * learns he can ADD items as to a dict with [] notation.
> * learns he can ADDRESS items as from a dict with [] notation.
> * learns he can GET .keys() as from a dict.
> * learns he may ITERATE over the .keys() to ACCESS the items in the
> container.
> * FAILS iterativly DELETING all elements from a Container via the .keys().
> then the CAVEMAN will get very FRUSTRATED! ME ANGRY!! ME SMASH GROK!
> SMASH!!!
To our defence, we nowhere say that containers *are*
> I am sure that someone will now point me to a ZODB-API-Function
> that will empty such a container flawlessly.
As Tres pointed out, mappings have a clear() method.
> I do not write this posting in search of such a function.
> As a CAVEMAN (addressed by GROK) myself also likes to have a container
> that behaves not 80% like a python dict, but 100%.
If it were simply possible to use a dict, we wouldn't have to use those
funky BTrees. Actually, it *is* possible to persist dicts, but it's
vastly inefficient once the number of contained items exceeds a
two-digit number.
BTrees are very efficient when you have tons of things in a container.
Also, the size of those things doesn't matter at all if you just want to
get a keys() listing. For a detailed discussion of persistency with the
ZODB and storing mappings with BTrees, please refer to chapter 6 of my
Zope book (http://worldcookery.com).
> I talked to lots of other CAVEMAN/CAVEWOMEN in Potsdam that are more
> afraid of Zope3 than of the monolitic monster Zope2. The most heard
> question at the conference (implicitly raised by the first keynote)
> was "Should I use Zope3(GROK) or stay by Zope2 or change to Turbo-Gears
> or whatever?"
>
> We should build a Zope3 or GROK that is truly intuitivly usable by the
> newby.
Yes, but I don't think this counts as a violation of that principle.
--
http://worldcookery.com -- Professional Zope documentation and training
More information about the Grok-dev
mailing list