-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

In my last email, I said "Also, is there a reason why Item_w__name__ doesn't define getId() when it does define _setId()?" This question doesn't really capture the essence of the problem. In a nutshell, the following happened...

PageTemplateFile (via Script and SimpleItem) inherits Item. This class has an attribute "id" set to '' by default. PageTemplateFiles don't use "id" though, they use __name__. The getId implementation that PageTemplateFiles use has some mention of __name__ in it, but it'll never get used because:

    id = ''
    def getId(self):
        name=getattr(self, 'id', None)
        if callable(name):
            return name()
        if name is not None:
            return name
        if hasattr(self, '__name__'):
            return self.__name__
        raise AttributeError, 'This object has no id'

Note the default value of "None" in the getattr at the start, and then the test for None later on. Oh, hang on, except we've got a *class* level default value for "id" of ''. Ehem. I suspect that the "if name is not None" test *should* read
"if name". And there doesn't need to be the default value for the getattr.


I have no idea how much code that assumes that objects will at least have an id of '' will break.

My proposed new getId() method:

    def getId(self):
        name = self.id
        if callable(name):
            return name()
        if name:
            return name
        if hasattr(self, '__name__'):
            return self.__name__
        raise AttributeError, 'This object has no id'


Richard -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (Darwin)

iD8DBQE/AOvurGisBEHG6TARAsXQAJsGEri4RIIWpjrSTbjQUZKU37hfLgCfVZTp
jax496YYNjtVosNZHpv8VGc=
=lzBT
-----END PGP SIGNATURE-----


_______________________________________________
Zope-Dev maillist - [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )

Reply via email to