57 lines
1.6 KiB
Python
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
|