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('defer.txt', optionflags=flags),
 | 
				
			||||||
        doctest.DocFileSuite('property.txt', optionflags=flags),
 | 
					        doctest.DocFileSuite('property.txt', optionflags=flags),
 | 
				
			||||||
        doctest.DocFileSuite('jeep.txt', optionflags=flags),
 | 
					        doctest.DocFileSuite('jeep.txt', optionflags=flags),
 | 
				
			||||||
 | 
					        doctest.DocFileSuite('uid.txt', optionflags=flags),
 | 
				
			||||||
        ))
 | 
					        ))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					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