[Zope-CMF] Re: CMFUid

Charlie Clark charlie at begeistert.org
Tue Feb 12 13:30:05 EST 2008


Am 12.02.2008 um 17:55 schrieb Miles Waller:

> Hi,
>
> The subscribers are already wired up for anything IContentish in  
> CMFUid's event.zcml, provided the uid tools are also in your portal.
>
> I think there are two things going on:
>
> 1. The events are only fired when the object is put into place in a  
> container, rather than when instantiated.  For example (very roughly):
>
> class a(PortalContent):
>  pass
>
> newob = a(id='fooid')
>
> this won't cause any events to fire.  putting the object in place via:
>
> somecontainer._setObject('fooid', newob)
>
> will make the events fire.  I don't know if aFactory does the  
> setting in place, but in your code snippet you don't give it a  
> container so I am guessing not.  Where are you running the code  
> snippet that you pasted?

I was running it in zopectl debug. aFactory is currently pretty much  
as plain as your example.

> 2. a.getId() will return the id of the object, not its uid.  To get  
> its uid use a.cmf_uid(), or more correctly something like  
> portal_uidhandler.getUid(a) - this will return the uid values.

ah, so an object's id is not (necessarily) the same as it's uid? So  
when adding an object to a container I always need an id? If I needed  
to generate the id's automatically how would I go about this? Call  
portal_uidgenerator() directly? Presumably in my __init__

class aContentObject(PortalContent):
	def __init__(self)
	self.id = portal_uidhandler.register(self)

I realise now (and perhaps for the first time) the difference between  
an object's id in it's container and the possibility it has a UID for  
direct access from other contexts. I guess the question then is it  
advisable to rely on the UID like this? or would it be preferable to  
generate a different kind of id? or whether it's a moot point if  
access to the object is always mediated?

> Hope that helps,


Yes, it does. Thank you very much!

Charlie

--
Charlie Clark
Helmholtzstr. 20
Düsseldorf
D- 40215
Tel: +49-211-938-5360
GSM: +49-178-782-6226





More information about the Zope-CMF mailing list