## Revision 4a105ce2 snf-pithos-backend/pithos/backends/random_word.py

b/snf-pithos-backend/pithos/backends/random_word.py
31 31
```# interpreted as representing official policies, either expressed
```
32 32
```# or implied, of GRNET S.A.
```
33 33

34
```DEFAULT_ALPHABET = ('0123456789'
```
35
```                    'abcdefghijklmnopqrstuvwxyz'
```
36
```                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
```
37
```DEFAULT_MIN_LENGTH = 8
```
34
```import random
```
38 35

39
```from  random import randrange
```
40
```from math import log
```
36
```getrandbits = random.SystemRandom().getrandbits
```
41 37

42
```def get_random_word(length=DEFAULT_MIN_LENGTH, alphabet=DEFAULT_ALPHABET):
```
43
```    alphabet_length = len(alphabet)
```
44
```    word = ''.join(alphabet[randrange(alphabet_length)]
```
45
```        for _ in xrange(length))
```
46
```    return word
```
38
```DEFAULT_ALPHABET = ("0123456789"
```
39
```                    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
```
40
```                    "abcdefghijklmnopqrstuvwxyz")
```
47 41

48
```def encode_serial(serial, alphabet=DEFAULT_ALPHABET):
```
49
```    i = 0
```
42
```def get_random_word(length, alphabet=DEFAULT_ALPHABET):
```
43
```    remainder = getrandbits(length * 8)
```
44
```    return encode_word(remainder, alphabet=alphabet)
```
45

46
```def encode_word(number, alphabet=DEFAULT_ALPHABET):
```
50 47
```    base = len(alphabet)
```
51
```    quotient = int(serial)
```
52 48
```    digits = []
```
53 49
```    append = digits.append
```
54
```    while quotient > 0:
```
50
```    quotient = number
```
51
```    while True:
```
55 52
```        quotient, remainder = divmod(quotient, base)
```
56 53
```        append(alphabet[remainder])
```
57
```    word = ''.join(reversed(digits))
```
58
```    return word
```
54
```        if quotient <= 0:
```
55
```            break
```
59 56

60
```def get_word(serial, length=DEFAULT_MIN_LENGTH, alphabet=DEFAULT_ALPHABET):
```
61
```    word = encode_serial(serial, alphabet)
```
62
```    word += get_random_word(length, alphabet)
```
63
```    return word
```
57
```    return ''.join(digits)
```

Also available in: Unified diff