[Zope] ZCatalog len problem

Jonathan dev101 at magma.ca
Sat Mar 24 10:16:46 EDT 2007


I have a ZCatalog and in the ZMI 'Catalog' tab it reports:

The catalog "Catalog" contains 1,820 record(s) in the path "/".


There is a fieldIndex called 'id' and it has 1842 entries (ZMI -> Catalog -> 
Indexes tab)


The following python script:

sRes = context.Contacts.Catalog()
print 'len(sRes)= ', len(sRes)
cnt=0
for aRec in sRes:
   cnt+=1
print 'cnt= ', cnt
return printed


Returns:

len(sRes)=  1820
cnt=  1842


There are 1842 data records, so there should be 1842 entries in the 
ZCatalog.

It looks like the __len__ method in Catalog.py is not returning the correct 
value - it returns self._length() which is set by the following method (also 
in Catalog.py):

    def migrate__len__(self):
        """ migration of old __len__ magic for Zope 2.8 """
        if not hasattr(self, '_length'):
            n = self.__dict__['__len__']()
            del self.__dict__['__len__']
            self._length = BTrees.Length.Length(n)

I really don't understand this level of Zope magic, so it is possible that I 
am not looking in the right place, so any and all ideas/comments/suggestions 
are appreciated!

Jonathan


Zope 2.9.4
Python 2.4.3
Red Hat Linux 3.2.3-56 



More information about the Zope mailing list