[Zope] Invalidate RAM cahce manager programatically

Jim Kutter jim at ebizq.net
Wed Oct 15 09:53:34 EDT 2003


Ok. What I am doing is rather than get data from the DB directly, I
"cache" it in a Zcatalog. This give me the added side benefit of using
the ZCTextIndex's search capability for all content on my site as well. 

How I do this is this: certain SQL methods use classes to massage the
result set into a loose class (there are no or few methods on these
classes). Then that class is passed to the Zcatalog with it's row_id as
the object identifier. 

Here's the code sample that adds "feature" objects to the catalog (the
metadata_ids are unique and constant).

Python script catalogItem(metadata_id=0) exists in my feature ZCatalog

if metadata_id is not 0: <-- whoops. Just saw this funny, the code seems
to work though
  features = context.sql.feature.getMetadata(metadata_id=metadata_id)
else:
  features = context.sql.feature.getMetadata()

for feature in features:
    print "Cataloging metadata_id: %s<br>" % feature.metadata_id
    # get my authors and their companies
    for author in
context.sql.feature.getAuthors(metadata_id=feature.metadata_id):
      print "Adding author: %s<br>" % author.name
      feature.addAuthor(author)

 
feature.setPreferredTopic(context.sql.feature.getPreferredTopic(feature.
metadata_id))

    uid = '%s' % feature.metadata_id
    print "Added to catalog with ID: %s<br>" % uid
    container.catalog_object(feature, uid)

return printed

I do this for almost all other "content types" we have here with little
or no change. Could that goof with the "is not 0" be the cause for the
uncatalog issue?

-jim

-----Original Message-----
From: Chris Withers [mailto:chrisw at nipltd.com] 
Sent: Wednesday, October 15, 2003 8:47 AM
To: Jim Kutter
Cc: zope at zope.org
Subject: Re: [Zope] Invalidate RAM cahce manager programatically


Jim Kutter wrote:
> What I discovered was that calling catalog_object doesn't re-catalog
the
> SQL results like I thought it would. I had to uncatalog_object first,
> then catalog_object to have the changes from the database kick in. I
> presumed that multiple calls to catalog_object would overwrite the
> ZCatalog's entry with new data.

They do, you must be doing something pretty weird for this not to work.

What does your code which calls catalog_object look like?

Chris




More information about the Zope mailing list