Hi,

I try to setup a little application but have a probably little problem
with a ForbiddenAttribute exception on "location.locate" method.
Here is my setup :

        class IPhoto(IContainer,IContained):
            """Photo handling interface"""
            ...
            image = Bytes(...)
            ...
        
        class Photo(Folder):
            """Photo handling class"""
            ...
            image = None
            def __init__(self, image=None):
                super(Photo,self).__init__()
                self.__parent__ = self.__name__ = None
                if image:
                    self.image = image
            ...
        
        class IEvent(IContained):
            """Event handling interface"""
            ...
        
        class Event(Persistent):
            """Event handling class"""
            ...
            def __init__(self):
                super(Event,self).__init__()
                self.__parent__ = self.__name__ = None

In my event creation form (derived from formlib.AddForm), I put
something like this, without a problem :

        def create(self, data):
            event = Event()
            if data.has_key('image'):
                event.image = Photo(image=data['image'])
                location.locate(event.image, event, 'image')
            form.applyChanges(event, self.form_fields, data)
            return event

"event.image" access can then be granted easily in an URL through a
"z3c.traverser" plug-in and everything works fine... until now !
Because when I'm trying to make the same thing in an edit form to update
an existing event, an exception is raised :

        def edit(self, action, data):
            changed = False
            event = self.context
            if data.has_key('image'):
                event.image = Photo(image=data['image'])
                location.locate(event.image, event, 'image')
                changed = True
            return super(EventEditForm,self).edit(action, data) or
        changed

Here is the traceback :

Traceback (most recent call last):
  File "/usr/local/zope/3.3.0/lib/python/zope/publisher/publish.py", line 133, 
in publish
        result = publication.callObject(request, obj)
  File 
"/usr/local/zope/3.3.0/lib/python/zope/app/publication/zopepublication.py", 
line 161, in callObject
    return mapply(ob, request.getPositionalArguments(), request)
  File "/usr/local/zope/3.3.0/lib/python/zope/publisher/publish.py", line 108, 
in mapply
    return debug_call(obj, args)
   - __traceback_info__: <security proxied 
zope.app.publisher.browser.viewmeta.NewsEventEditForm instance at 0xa677e20c>
  File "/usr/local/zope/3.3.0/lib/python/zope/publisher/publish.py", line 114, 
in debug_call
    return obj(*args)
  File "/usr/local/zope/3.3/lib/python/zope/formlib/form.py", line 751, in 
__call__
    self.update()
  File "/usr/local/zope/3.3/lib/python/zope/formlib/form.py", line 732, in 
update
    result = action.success(data)
  File "/usr/local/zope/3.3/lib/python/zope/formlib/form.py", line 582, in 
success
    return self.success_handler(self.form, self, data)
  File "/var/local/zope/3.3/lib/python/ulthar/forms/forms.py", line 104, in 
handle_edit_action
    self.edit_action(action,data)
  File "/var/local/zope/3.3/lib/python/ulthar/forms/forms.py", line 107, in 
edit_action
    if not self.edit(action, data):
  File "/var/local/zope/3.3/lib/python/usf/news/browser/event.py", line 85, in 
edit
    location.locate(event.image, event, 'image')
  File "/usr/local/zope/3.3.0/lib/python/zope/location/location.py", line 71, 
in locate
    object.__parent__ = parent
ForbiddenAttribute: ('__parent__', <gallery.photo.Photo object at 0xa678f62c>)


I've tried to setup different permissions and access rights, but without 
success.
So any help would be great !

Thanks,
Thierry



-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to