[Erp5-report] r9295 - in /erp5/trunk/products/ERP5Type: Document/ PropertySheet/
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Aug 21 16:35:25 CEST 2006
Author: vincent
Date: Mon Aug 21 16:35:23 2006
New Revision: 9295
URL: http://svn.erp5.org?rev=9295&view=rev
Log:
Import randint function.
Define _generateRandomId and _generateNextId which are id generation functions.
Remove extraneous Xs. 3 is enough.
Add a string property to Folder named id_generator.
Modify generateNewId to use the new property.
Modified:
erp5/trunk/products/ERP5Type/Document/Folder.py
erp5/trunk/products/ERP5Type/PropertySheet/Folder.py
Modified: erp5/trunk/products/ERP5Type/Document/Folder.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Document/Folder.py?rev=9295&r1=9294&r2=9295&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Document/Folder.py (original)
+++ erp5/trunk/products/ERP5Type/Document/Folder.py Mon Aug 21 16:35:23 2006
@@ -45,6 +45,7 @@
from Products.BTreeFolder2.CMFBTreeFolder import CMFBTreeFolder
from AccessControl import getSecurityManager
from Products.ERP5Type import Permissions
+from random import randint
import os
@@ -113,6 +114,30 @@
raise TypeError, 'deleteContent only accepts string or list, '\
'not %s' % type(id)
+ def _generateRandomId(self):
+ """
+ Generate a random Id.
+ 10000 factor makes the odd to generate an already existing Id of 1 out
+ of 10000, not depending on the number of objects present in this folder.
+ len(self)+1 to make sure generation works on an empty Folder.
+ """
+ return '%X' % (randint(1, 10000 * (len(self) + 1)), )
+
+ def _generateNextId(self):
+ """
+ Get the last generated Id, increment it until no object with generated
+ Id exist, then save the Id.
+ """
+ try:
+ my_id = int(self.getLastId())
+ except TypeError:
+ my_id = 1
+ while self.hasContent(str(my_id)):
+ my_id = my_id + 1
+ my_id = str(my_id)
+ self._setLastId(my_id) # Make sure no reindexing happens
+ return my_id
+
# Automatic ID Generation method
security.declareProtected(Permissions.View, 'generateNewId')
def generateNewId(self,id_group=None,default=None,method=None):
@@ -122,24 +147,23 @@
can be found
Permission is view because we may want to add content to a folder
- without changing the folder content itself. XXXXXXXXXXX
- XXXXXXXXXXXX
+ without changing the folder content itself.
+ XXX
"""
my_id = None
if id_group is None:
id_group = self.getIdGroup()
- if id_group is None or id_group=='None':
- try:
- my_id = int(self.getLastId())
- except TypeError:
- my_id = 1
- while self.hasContent(str(my_id)):
- my_id = my_id + 1
- self._setLastId(str(my_id)) # Make sure no reindexing happens
+ if id_group in (None, 'None'):
+ idGenerator = getattr(self, self.getIdGenerator(), None)
+ if idGenerator is None:
+ idGenerator = self._generateNextId
+ my_id = idGenerator()
+ while self.hasContent(my_id):
+ my_id = _generateNextId()
else:
- my_id = self.portal_ids.generateNewId(id_group=id_group,default=default,method=method)
-
- return str(my_id)
+ my_id = str(self.portal_ids.generateNewId(id_group=id_group,default=default,method=method))
+
+ return my_id
security.declareProtected(Permissions.View, 'hasContent')
def hasContent(self,id):
Modified: erp5/trunk/products/ERP5Type/PropertySheet/Folder.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/PropertySheet/Folder.py?rev=9295&r1=9294&r2=9295&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/PropertySheet/Folder.py (original)
+++ erp5/trunk/products/ERP5Type/PropertySheet/Folder.py Mon Aug 21 16:35:23 2006
@@ -44,5 +44,10 @@
'type' : 'string',
'default' : '1',
'mode' : 'w'},
+ { 'id' : 'id_generator',
+ 'description' : 'The name of the function to use to generate the Id of a new contained object. Default behaviour (when this value is not set or the function cannot be found) is to increment last_id and update it.',
+ 'type' : 'string',
+ 'default' : '',
+ 'mode' : 'w'},
)
More information about the Erp5-report
mailing list