[Zope] type(sql_search())?
Terry Hancock
hancock@anansispaceworks.com
Mon, 9 Dec 2002 16:15:17 -0800
Thanks Chris!
On Saturday 07 December 2002 10:39 pm, Chris McDonough wrote:
> It's likely an instance of a "record" object (as defined in
> lib/Components/ExtensionClass/src/Record.c). I believe the idea for it
> not having a __dict__ (snicker) was that there can be many, many of
> these generated for a single SQL query and thus it saved memory at some
> point in time. I'm not sure how true that is now. It may still be
> eminently so. They don't have a __dict__ but they are enumerable.
> Something like this might work (or something along these lines, I have
> not tested it):
Okay -- that makes the code a little easier to understand.
> class my_wrapper:
> def __init__(self, sqlres):
> d = {}
> for k in sqlres.__record_schema__.keys():
> d[k] = getattr(sqlres, k)
> self.__dict__.update(d)
> my_form = DTMLFile('www/my_form', globals())
>
> def some_method(self, foo):
> return self.sql_stuff + foo
>
> wrapped_results = [my_wrapper(r) for r in sql_search()]
This works, though I actually coded it like:
for k in sqlres.__record_schema__.keys():
self.setattr(k, getattr(sqlres, k))
which is a little more streamlined in code but I have no idea how efficient
it is.
> In any case, I'm not sure what you mean about type() not working against
> them [...]
> If you mean that this is from "trusted"
> code like a Product, and its repr just doesn't render in your browser,
> it's because you're viewing the rendering of the error as an HTML page,
> the repr is between pointy brackets, and your browser just won't show it
> to you because it thinks it's part of the HTML. View the source of the
> page instead, or use Zope 2.6 and learn to use the error_log feature.
Duh. Yeah, that was the problem -- thank you for pointing this out!
Cheers,
Terry
--
Terry Hancock ( hancock at anansispaceworks.com )
Anansi Spaceworks http://www.anansispaceworks.com