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