""" ``uuid`` module.
"""
from base64 import b64decode, b64encode
from binascii import Error
from uuid import UUID
BASE64_ALTCHARS = "-_".encode("latin1")
BASE64_SUFFIX = "==".encode("latin1")
UUID_EMPTY = UUID("00000000-0000-0000-0000-000000000000")
[docs]def shrink_uuid(uuid):
"""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 (b64encode(uuid.bytes, BASE64_ALTCHARS)[:22]).decode("latin1")
[docs]def parse_uuid(s):
"""
>>> 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(s.encode("latin1") + BASE64_SUFFIX, BASE64_ALTCHARS)
except (TypeError, Error): # Incorrect padding
return UUID_EMPTY
assert len(raw) == 16
return UUID(bytes=raw)