Source code for wheezy.core.uuid
""" ``uuid`` module.
"""
from base64 import b64decode
from base64 import b64encode
from binascii import Error
from wheezy.core.comp import bton
from wheezy.core.comp import ntob
from wheezy.core.introspection import import_name
BASE64_ALTCHARS = ntob('-_', 'latin1')
BASE64_SUFFIX = ntob('==', 'latin1')
UUID = import_name('uuid.UUID')
UUID_EMPTY = UUID('00000000-0000-0000-0000-000000000000')
def shrink_uuid(uuid):
[docs] """ Returns base64 representation of ``uuid``.
>>> shrink_uuid(UUID('a4af2f54-e988-4f5c-bfd6-351c79299b74'))
'pK8vVOmIT1y_1jUceSmbdA'
>>> shrink_uuid(UUID('d17aba88-19c3-400e-adee-3ecf935db272'))
'0Xq6iBnDQA6t7j7Pk12ycg'
>>> shrink_uuid(UUID('39ae13ee-202a-42d1-9117-6fb6fdd169a4'))
'Oa4T7iAqQtGRF2-2_dFppA'
>>> shrink_uuid(UUID_EMPTY)
'AAAAAAAAAAAAAAAAAAAAAA'
"""
assert isinstance(uuid, UUID)
return bton(b64encode(uuid.bytes, BASE64_ALTCHARS)[:22], 'latin1')
def parse_uuid(s):
[docs] """
>>> parse_uuid('pK8vVOmIT1y_1jUceSmbdA')
UUID('a4af2f54-e988-4f5c-bfd6-351c79299b74')
>>> parse_uuid('0Xq6iBnDQA6t7j7Pk12ycg')
UUID('d17aba88-19c3-400e-adee-3ecf935db272')
>>> parse_uuid('Oa4T7iAqQtGRF2-2_dFppA')
UUID('39ae13ee-202a-42d1-9117-6fb6fdd169a4')
>>> parse_uuid('AAAAAAAAAAAAAAAAAAAAAA')
UUID('00000000-0000-0000-0000-000000000000')
Return an empty uuid in case the string is empty or length
not equal to 22.
>>> parse_uuid('')
UUID('00000000-0000-0000-0000-000000000000')
>>> parse_uuid('x')
UUID('00000000-0000-0000-0000-000000000000')
Incorrect base64 padding.
>>> parse_uuid('AAAAAAAAAA*AAAAAAAAAAA')
UUID('00000000-0000-0000-0000-000000000000')
"""
if not s or len(s) != 22:
return UUID_EMPTY
try:
raw = b64decode(ntob(s, 'latin1') + BASE64_SUFFIX, BASE64_ALTCHARS)
except (TypeError, Error): # Incorrect padding
return UUID_EMPTY
assert len(raw) == 16
return UUID(bytes=raw)