[Grok-dev] Upgrade problem "type object 'IRole' has no attribute '__iro__'"

Sebastian Ware sebastian at urbantalk.se
Wed May 28 09:32:14 EDT 2008

This is the code where the problem occurs:

     def init_extendors(self):
         self._extendors = {}
         for p in self._registry._provided:

     def add_extendor(self, provided):
         _extendors = self._extendors
         for i in provided.__iro__:   <======= THIS IS WHERE THE ERROR  
             extendors = _extendors.get(i, ())
             _extendors[i] = (
                 [e for e in extendors if provided.isOrExtends(e)]
                 [e for e in extendors if not provided.isOrExtends(e)]

     def remove_extendor(self, provided):
         _extendors = self._extendors
         for i in provided.__iro__:
             _extendors[i] = [e for e in _extendors.get(i, ())
                              if e != provided]

I have tracked down the code that should set this in [class  
Specification] (zope/interface/interface.py). Maybe I could solve this  
problem if I somehow could tell all the offending objects that they  
have changed (I am guessing the problem is related to more than one  
object). But how?

class Specification(SpecificationBase):


     def changed(self, originally_changed):
         """We, or something we depend on, have changed

         implied = self._implied

         ancestors = ro(self)

             if Interface not in ancestors:
         except NameError:
             pass # defining Interface itself

         self.__sro__ = tuple(ancestors)
         self.__iro__ = tuple([ancestor for ancestor in ancestors
                               if isinstance(ancestor, InterfaceClass)

         for ancestor in ancestors:
             # We directly imply our ancestors:
             implied[ancestor] = ()

         # Now, advise our dependents of change:
         for dependent in self.dependents.keys():

Mvh Sebastian

28 maj 2008 kl. 12.43 skrev Sebastian Ware:

> My problem is that this prevents me from updating my customers  
> project without exporting and importing all the data, something that  
> isn't very easy at the current state of Grok.
> I hope someone can give me some hints on this.
> Mvh Sebastian
> 28 maj 2008 kl. 12.02 skrev Wichert Akkerman:
>> Previously Sebastian Ware wrote:
>>> When upgrading a live grok-0.10 app to grok-0.12 I get the following
>>> error:
>>> AttributeError: type object 'IRole' has no attribute '__iro__'
>>> I am guessing it has to do with the move of zope.securitypolicy, but
>>> how do I resolve this?
>> The last few times I've seen that __iro__ error it apparently had
>> something to do with persisted interface. I've never been able to  
>> find a
>> fix for it, or reliably reproduce it.
>> Wichert.
>> -- 
>> Wichert Akkerman <wichert at wiggy.net>    It is simple to make things.
>> http://www.wiggy.net/                   It is hard to make things  
>> simple.
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> http://mail.zope.org/mailman/listinfo/grok-dev

More information about the Grok-dev mailing list