py-libp2p/libp2p/kademlia/utils.py

58 lines
1.2 KiB
Python
Raw Normal View History

2018-10-14 22:32:27 +08:00
"""
General catchall for functions that don't make sense as methods.
"""
import hashlib
import operator
import asyncio
2019-01-16 01:41:41 +08:00
async def gather_dict(dic):
cors = list(dic.values())
2018-10-14 22:32:27 +08:00
results = await asyncio.gather(*cors)
2019-01-16 01:41:41 +08:00
return dict(zip(dic.keys(), results))
2018-10-14 22:32:27 +08:00
2019-01-16 01:41:41 +08:00
def digest(string):
if not isinstance(string, bytes):
string = str(string).encode('utf8')
return hashlib.sha1(string).digest()
2018-10-14 22:32:27 +08:00
class OrderedSet(list):
"""
Acts like a list in all ways, except in the behavior of the
:meth:`push` method.
"""
def push(self, thing):
"""
1. If the item exists in the list, it's removed
2. The item is pushed to the end of the list
"""
if thing in self:
self.remove(thing)
self.append(thing)
2019-01-16 01:41:41 +08:00
def shared_prefix(args):
2018-10-14 22:32:27 +08:00
"""
Find the shared prefix between the strings.
For instance:
sharedPrefix(['blahblah', 'blahwhat'])
returns 'blah'.
"""
i = 0
while i < min(map(len, args)):
if len(set(map(operator.itemgetter(i), args))) != 1:
break
i += 1
return args[0][:i]
2019-01-16 01:41:41 +08:00
def bytes_to_bit_string(bites):
2018-10-14 22:32:27 +08:00
bits = [bin(bite)[2:].rjust(8, '0') for bite in bites]
return "".join(bits)