[Zope3-Users] Re: RFC 4122 UUIDs

Jürgen Kartnaller juergen at kartnaller.at
Thu Apr 5 15:28:25 EDT 2007



Derek Richardson wrote:
> Martin Aspeli wrote:
>>
>>
>> Derek Richardson-2 wrote:
>>> Martin Aspeli wrote:
>>>>
>>>> Stephan Richter-2 wrote:
>>>>> On Wednesday 04 April 2007 13:06, Derek Richardson wrote:
>>>>>> I am hoping that Zope 3 assigns an RFC 4122 UUID to each content 
>>>>>> item.
>>>>>> If not, I am hoping there is a third-party product to do this.
>>>>> No there is neither. We have an intid utility that guarantees
>>>>> System-wide unique ids. This utility is used at several places most 
>>>>> notably the
>>>>> catalog.
>>>>>
>>>>>> I would like RFC 4122 UUIDs to provide standard Atom feeds of Zope
>>>>>> content [1].
>>>>>>
>>>>>> It will be better if Zope itself assigns UUIDs, so that there is a
>>>>>> single source and not a possibility of multiple packages assigning
>>>>>> different UUIDs to the same content item.
>>>>> You have to write your own utility to generate the UUID. I checked the
>>>>> RFC quickly and our IntIds are certainly not of the format 
>>>>> requested by RFC
>>>>> 4122.
>>>>>
>>>> Presumably, the intid implementation would be a useful reference for 
>>>> such
>>>> a
>>>> utility, and this would a good canidate for a general, re-usable 
>>>> package.
>>>>
>>>> Martin
>>> Good. I would like to write it as a general, re-usable package.
>>>
>>> Generating RFC 4122 UUIDs is easy - there's a routine for it in the 
>>> python 2.5 standard libraries and a python 2.3+ version here:
>>>
>>> http://zesty.ca/python/uuid.html
>>>
>>> What seems more difficult is how to plug the routine in so that all 
>>> content items receive one and only one UUID upon creation. Maybe 
>>> listen for IObjectCreatedEvent and annotate then? Or is there a 
>>> potential race condition that means events are not the way to go?
>>>
>>> (Unsure of the depths of Zope 3's architecture)
>>>
>>
>> Look at zope.intid; it should be IObjectCreatedEvent or 
>> IObjectAddedEvent.
>>
>> Martin
>>
> 
> I have started coding a uuid package for Zope. zope.intid uses 
> IObjectAddedEvent; I plan to as well.
> 
> However, the uuid differs from the intid in that I want to store the 
> uuid on the object, rather than in a utility. This will ensure that 
> uuids travel with their objects without having to modify import/export 
> or other code. My initial idea is to use an annotation, but I'm not sure 
> this is right. I'll have to annotate all the content classes in the 
> system, which seems to be a *huge* zcml pain. Any advice for avoiding this?
> 

Please do not use an annotation!

This is a performance issue. Your data is very small so do not create a 
new object in the database store it directly as a property on the 
instance. Every object lookup is expensive, especially if you use ZEO!

Jürgen



More information about the Zope3-users mailing list