added util.uid for generating random ids base62-encoded
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1885 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									5247eee6f6
								
							
						
					
					
						commit
						30ab26608b
					
				
					 3 changed files with 79 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -22,6 +22,7 @@ def test_suite():
 | 
			
		|||
        doctest.DocFileSuite('defer.txt', optionflags=flags),
 | 
			
		||||
        doctest.DocFileSuite('property.txt', optionflags=flags),
 | 
			
		||||
        doctest.DocFileSuite('jeep.txt', optionflags=flags),
 | 
			
		||||
        doctest.DocFileSuite('uid.txt', optionflags=flags),
 | 
			
		||||
        ))
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										52
									
								
								util/uid.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								util/uid.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,52 @@
 | 
			
		|||
#
 | 
			
		||||
#  Copyright (c) 2007 Helmut Merz helmutm@cy55.de
 | 
			
		||||
#
 | 
			
		||||
#  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
#  it under the terms of the GNU General Public License as published by
 | 
			
		||||
#  the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
#  (at your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
#  This program is distributed in the hope that it will be useful,
 | 
			
		||||
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
#  GNU General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
#  You should have received a copy of the GNU General Public License
 | 
			
		||||
#  along with this program; if not, write to the Free Software
 | 
			
		||||
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
Generate strange (not guessable) UIDs.
 | 
			
		||||
 | 
			
		||||
$Id$
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import random
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bits = 128
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def generateUid(check=None, lowerCaseOnly=False, bits=bits, seed=None, base=62):
 | 
			
		||||
    """ Generates a unique ID.
 | 
			
		||||
    """
 | 
			
		||||
    random.seed(seed)
 | 
			
		||||
    OK = False
 | 
			
		||||
    base = lowerCaseOnly and min(base, 36) or base
 | 
			
		||||
    while not OK:
 | 
			
		||||
        data = strBase(random.getrandbits(bits), base)
 | 
			
		||||
        OK = check is None or check(data)
 | 
			
		||||
    return data
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def strBase(n, base):
 | 
			
		||||
    result = []
 | 
			
		||||
    while n > 0:
 | 
			
		||||
        n, r = divmod(n, base)
 | 
			
		||||
        result.append(r)
 | 
			
		||||
    return ''.join(reversed([toChar(n) for n in (result or [0])]))
 | 
			
		||||
 | 
			
		||||
def toChar(n):
 | 
			
		||||
    return n < 10 and chr(48+n) or n < 36 and chr(87+n) or chr(29+n)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								util/uid.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								util/uid.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
===========================
 | 
			
		||||
Generate Unique Identifiers
 | 
			
		||||
===========================
 | 
			
		||||
 | 
			
		||||
$Id$
 | 
			
		||||
 | 
			
		||||
  >>> from cybertools.util.uid import generateUid
 | 
			
		||||
 | 
			
		||||
  >>> generateUid(seed=42)
 | 
			
		||||
  '5MdsLTYmogAeWfbrLDBY8l'
 | 
			
		||||
 | 
			
		||||
  >>> generateUid(seed=42)
 | 
			
		||||
  '5MdsLTYmogAeWfbrLDBY8l'
 | 
			
		||||
 | 
			
		||||
  >>> def checkIt(id):
 | 
			
		||||
  ...     return id != '5MdsLTYmogAeWfbrLDBY8l'
 | 
			
		||||
 | 
			
		||||
  >>> generateUid(check=checkIt, seed=42)
 | 
			
		||||
  '15pahuNd5rxoekvZSMGAl1'
 | 
			
		||||
 | 
			
		||||
  >>> generateUid(lowerCaseOnly=True, seed=42)
 | 
			
		||||
  'b8lhps8li07acdu7i0w01b0rh'
 | 
			
		||||
 | 
			
		||||
  >>> generateUid()
 | 
			
		||||
  '...'
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue