File: //opt/alt/python27/lib/python2.7/site-packages/paste/exceptions/serial_number_generator.pyc
�
a�Nc @ s� d Z y d d l m Z Wn! e k
r= d d l m Z n Xd Z e e � Z d � Z e e d d e
d � Z i d d 6d d
6Z e
d k r� d d l Z e j � n d S(
s�
Creates a human-readable identifier, using numbers and digits,
avoiding ambiguous numbers and letters. hash_identifier can be used
to create compact representations that are unique for a certain string
(or concatenation of strings)
i����( t md5t 23456789abcdefghjkmnpqrtuvwxyzc C s� t | t t f � s( t d | � � n | d k rG t d | � � n g } x/ | r~ | t } | j t | � | t } qP Wd j | � S( s,
Encodes a number as an identifier.
s6 You can only make identifiers out of integers (not %r)i s7 You cannot make identifiers out of negative numbers: %rt ( t
isinstancet intt longt
ValueErrort baset appendt good_characterst join( t numbert resultt next( ( sY /opt/alt/python27/lib/python2.7/site-packages/paste/exceptions/serial_number_generator.pyt make_identifier s
R c C sW t | � s | j } n | d k r@ | t k r@ t d | � n t | t � ra | j d � } n | t | � � } | j � } t | } d }
x, t
| � D] } |
d t | � | }
q� Wt |
� } | r� t
d | t | � | } n | r:g }
x* | r'|
j d | | � | | } q� Wd j |
� } n | rO| j � } n | | S( s�
Hashes the string (with the given hashing module), then turns that
hash into an identifier of the given length (using modulo to
reduce the length of the identifier). If ``pad`` is False, then
the minimum-length identifier will be used; otherwise the
identifier will be padded with 0's as necessary.
``prefix`` will be added last, and does not count towards the
target length. ``group`` will group the characters with ``-`` in
the given lengths, and also does not count towards the target
length. E.g., ``group=4`` will cause a identifier like
``a5f3-hgk3-asdf``. Grouping occurs before the prefix.
i sJ md5 cannot create hashes longer than 26 characters in length (you gave %s)s utf-8i i t -( t callablet newR R R t unicodet encodet strt digestR t listt ordR R t lent insertR
t upper( t st lengtht padt hashert prefixt groupR t ht bin_hasht moduloR t ct identt parts( ( sY /opt/alt/python27/lib/python2.7/site-packages/paste/exceptions/serial_number_generator.pyt hash_identifier( s4
s�
>>> make_identifier(0)
''
>>> make_identifier(1000)
'c53'
>>> make_identifier(-100)
Traceback (most recent call last):
...
ValueError: You cannot make identifiers out of negative numbers: -100
>>> make_identifier('test')
Traceback (most recent call last):
...
ValueError: You can only make identifiers out of integers (not 'test')
>>> make_identifier(1000000000000)
'c53x9rqh3'
R s'
>>> hash_identifier(0, 5)
'cy2dr'
>>> hash_identifier(0, 10)
'cy2dr6rg46'
>>> hash_identifier('this is a test of a long string', 5)
'awatu'
>>> hash_identifier(0, 26)
'cy2dr6rg46cx8t4w2f3nfexzk4'
>>> hash_identifier(0, 30)
Traceback (most recent call last):
...
ValueError: md5 cannot create hashes longer than 26 characters in length (you gave 30)
>>> hash_identifier(0, 10, group=4)
'cy-2dr6-rg46'
>>> hash_identifier(0, 10, group=4, upper=True, prefix='M-')
'M-CY-2DR6-RG46'
R'