[Zope-dev] Why is TemplateDict so opaque? -and- Have you seen this problem?

Anthony Baxter Anthony Baxter <anthony@interlink.com.au>
Fri, 17 Dec 1999 00:04:37 +1100


>>> Dave Parker wrote
> [sorry folks, I'm tired, so this is halfway to a rant :-( ]

it's ok. I was wandering around the office kicking things and looking
dazed a couple of weeks ago when I finally delved into this stuff.

> I'm not happy that I now know what TemplateDict is - I really wish I
> hadn't had to go there, but now that I'm there I have a much better
> understanding of why it is impossible to get information out of it; it
> has "do you have this key" and "get the value of this key" and
> absolutely nothing else.
 
The problem is that it's implemented as a multimapping. To do keys(),
items(), &c you'd have to walk the multimapping and search each object.

I guess you could simply do something like this (untested, written from
just looking at the MultiMapping.c code. Probably could be implemented
far more easily...)

  t = templatedictobj
  l = []
  while 1:
      try:
	  l.append(t.pop())
      except IndexError:
	  break
  # l now has the dictionaries from the namespace stack
  l.reverse()
  d = {}
  for i in l:
      d.update(i)
      t.push(i)
  print d.items(), d.keys(), d.values()

this code just pops all the namespace objects off the multimapping,
stores them in a list, merges them together and pushes them back onto
the multimapping. it's horribly inefficient. and probably buggy. :)

Anthony