[Zope3-Users] Re: zope.intid and UUIDs

Philipp von Weitershausen philipp at weitershausen.de
Thu Apr 19 01:21:08 EDT 2007


Derek Richardson wrote:
> *Using* an int id utility, though, doesn't seem to cleanly solve the 
> problem,

Why?

> which makes me wonder if I'm understanding you. If you mean use 
> the intid utility to map keyrefs to int ids and then map int ids to 
> uuids, this has a few problems.

Which ones?

> What I want to vary is the 
> implementation - I want to keep the same interface.

Your UUID utility should be able to keep the same interface. But instead 
of doing a keyref -> UUID mapping, it refers to the intid utility for 
keyref -> intid and itself only does intid -> UUID. This would be 
completely transparent to the outsider.

> This would be 
> keeping, and adding another layer to, the implementation and I'll still 
> have to re-implement the interface on top of it. That's more work than 
> just copying and doesn't reduce the copying at all, as I see it. Plus, 
> it'll be (perhaps marginally) slower.

Perhaps. That's something to profile.

> If you mean use the intid utility by instantiating one and then changing 
> the data structures and _generateId() and the events at runtime, this 
> would indeed solve the need to copy and paste. However, this seems like 
> an obfuscating solution - who would guess that what is masquerading as 
> an intid utility is really a uuid utility? Perhaps that's my 
> static-typing background speaking, but it seems cleaner to have an 
> "abstract" id utility and then write 10 lines of code to subclass and 
> turn it into an int id utility and then another 10 lines for uuids.
> 
> I sense that I'm missing the point here. Perhaps you can elaborate on 
> what you mean when you say "use" and "collaboration." I usually know 
> what those terms mean, but I'm not sure I am getting it in this context.


The paragraph definitely seems to miss the point, so let me speak code::


   class UUIDUtility(Contained, Persistent):

       def __init__(self):
           self.uuids = IOBTree.IOBTree()
           self.intids = OIBTree.OIBTree()

       def getObject(self, uuid):
           intid = self.intids[uuid]
           return getUtility(IIntIds).getObject(intid)

       def getUUID(self, object):
           intid = getUtility(IIntIds).getId(object)
           return self.uuids[intid]


I'm omitting several seatbelts and various functions to add/remove 
objects from the UUID utility, but I hope you'll get the idea.


-- 
http://worldcookery.com -- Professional Zope documentation and training



More information about the Zope3-users mailing list