nova/vendor/carrot/utils.py

57 lines
1.6 KiB
Python

from uuid import UUID, uuid4, _uuid_generate_random
try:
import ctypes
except ImportError:
ctypes = None
def gen_unique_id():
"""Generate a unique id, having - hopefully - a very small chance of
collission.
For now this is provided by :func:`uuid.uuid4`.
"""
# Workaround for http://bugs.python.org/issue4607
if ctypes and _uuid_generate_random:
buffer = ctypes.create_string_buffer(16)
_uuid_generate_random(buffer)
return str(UUID(bytes=buffer.raw))
return str(uuid4())
def _compat_rl_partition(S, sep, direction=str.split):
items = direction(S, sep, 1)
if len(items) == 1:
return items[0], sep, ''
return items[0], sep, items[1]
def _compat_partition(S, sep):
"""``partition(S, sep) -> (head, sep, tail)``
Search for the separator ``sep`` in ``S``, and return the part before
it, the separator itself, and the part after it. If the separator is not
found, return ``S`` and two empty strings.
"""
return _compat_rl_partition(S, sep, direction=str.split)
def _compat_rpartition(S, sep):
"""``rpartition(S, sep) -> (tail, sep, head)``
Search for the separator ``sep`` in ``S``, starting at the end of ``S``,
and return the part before it, the separator itself, and the part
after it. If the separator is not found, return two empty
strings and ``S``.
"""
return _compat_rl_partition(S, sep, direction=str.rsplit)
try:
partition = str.partition
rpartition = str.rpartition
except AttributeError: # Python <= 2.4
partition = _compat_partition
rpartition = _compat_rpartition