Hello,

While I was reading the _get_id function, I felt it was really strange :

####
    def _get_id(self, id):
        # Allow containers to override the generation of
        # object copy id by attempting to call its _get_id
        # method, if it exists.
        n=0
        if (len(id) > 8) and (id[8:]=='copy_of_'):
            n=1
        orig_id=id
        while 1:
            if self._getOb(id, None) is None:
                return id
            id='copy%s_of_%s' % (n and n+1 or '', orig_id)
            n=n+1
####

currently, when copying and pasting an object, 'copy[0-9]*_of_' will be 
prepended to the id (if the id is already in use in the current 
folder). Thus, copying 'x' will create 'copy_of_x', 'copy2_of_x', etc. 
and copying 'copy_of_x' will create 'copy_of_copy_of_x', 
'copy2_of_copy_of_x', etc.

What I don't get, is what the two lines between 'n=0' and 'orig_id=id' 
are supposed to do. What they do is this : if an object id is 16 chars 
long, and it ends with 'copy_of_' (like 'XXXXXXXXcopy_of_'), its first 
copy will be called 'copy2_of_XXXXXXXXcopy_of_' instead of 
'copy_of_XXXXXXXXcopy_of_'...

What I think the author intended to do, is that, when you copy an object 
called 'copy_of_x', the copy will be named 'copy2_of_x' instead of 
'copy_of_copy_of_x'.

Thus, here's a function that does the job :

####
  import re
  copy_re=re.compile('^copy[0-9]*_of_')

  def _get_id(self, id):
      # Allow containers to override the generation of
      # object copy id by attempting to call its _get_id
      # method, if it exists.
      copy_match=self.copy_re.match(id)
      if (copy_match) and (copy_match.end() < len(id)):
          n=1
          orig_id=self.copy_re.sub('', id)
      else:
          n=0
          orig_id=id
      while 1:
          if self._getOb(id, None) is None:
              return id
          id='copy%s_of_%s' % (n and n+1 or '', orig_id)
          n=n+1
####

Then, I don't know what is the preferred naming for new objects, but I 
fear that 'copy_of_copy_of_copy_of_copy_of_copy_of_copy_of_object' will 
quickly be too long, if objects are copied by an automated process that 
doesn't show the Ids to the user or don't allow their modification.

What are your feelings about this ?

Regards,
Alexandre Boeglin
_______________________________________________
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )

Reply via email to