Source code for ngsildclient.utils.uuid
#!/usr/bin/env python3
# Software Name: ngsildclient
# SPDX-FileCopyrightText: Copyright (c) 2021 Orange
# SPDX-License-Identifier: Apache 2.0
#
# This software is distributed under the Apache 2.0;
# see the NOTICE file for more details.
#
# Author: Fabien BATTELLO <fabien.battello@orange.com> et al.
"""
This module contains a few helper functions to deal with UUIDs.
"""
import uuid
from base64 import b64encode
[docs]def uuidshortener(uuid: uuid.UUID) -> str:
"""Returns a "short" string representation of the UUID object.
The string will be 22 characters long, base64-encoded, with padding characters removed.
The encoding uses the urlsafe alphabet with a slightly difference.
The dash character (sometimes used as a field separator) is replaced by the tilde character.
Parameters
----------
uuid : uuid.UUID
The input UUID object
Returns
-------
str
Its string representation, 22 characters
Example
-------
>>> from uuid import uuid4
>>> from ngsildclient.utils.uuid import uuidshortener
>>> uuid = uuid4()
>>> print(uuid)
632dd95d-55bf-4f4e-9dd1-05f02531756f
>>> shortid: str = uuidshortener(uuid)
>>> print(shortid)
Yy3ZXVW_T06d0QXwJTF1bw
"""
# like in urlsafe_base64encode() but ~ replaces -
return b64encode(uuid.bytes, altchars=b"~_").decode().rstrip("=")
[docs]def shortuuid(random: bool = False) -> str:
"""Returns a unique identifier, 22 characters long.
May be useful in some cases to create a unique Entity identifier.
The string will be 22 characters long, base64-encoded, with padding characters removed.
The encoding uses the urlsafe alphabet with a slightly difference.
The dash character (sometimes used as a field separator) is replaced by the tilde character.
Parameters
----------
random : bool, optional
if set uses UUID1 else UUID4, by default False
Returns
-------
str
A short unique identifier, 22 characters longs.
Example
-------
>>> from ngsildclient import *
>>> crop = Entity("AgriCrop", shortuuid())
>>> crop.pprint()
{
"@context": [
"https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context.jsonld"
],
"id": "urn:ngsi-ld:AgriCrop:SQiKZZRYRnOYgeojIVz5lA",
"type": "AgriCrop"
}
"""
uid = uuid.uuid1() if random else uuid.uuid4()
return uuidshortener(uid)