58 lines
1.2 KiB
Python
58 lines
1.2 KiB
Python
|
"""
|
||
|
General catchall for functions that don't make sense as methods.
|
||
|
"""
|
||
|
import hashlib
|
||
|
import operator
|
||
|
import asyncio
|
||
|
|
||
|
|
||
|
async def gather_dict(d):
|
||
|
cors = list(d.values())
|
||
|
results = await asyncio.gather(*cors)
|
||
|
return dict(zip(d.keys(), results))
|
||
|
|
||
|
|
||
|
def digest(s):
|
||
|
if not isinstance(s, bytes):
|
||
|
s = str(s).encode('utf8')
|
||
|
return hashlib.sha1(s).digest()
|
||
|
|
||
|
|
||
|
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)
|
||
|
|
||
|
|
||
|
def sharedPrefix(args):
|
||
|
"""
|
||
|
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]
|
||
|
|
||
|
|
||
|
def bytesToBitString(bites):
|
||
|
bits = [bin(bite)[2:].rjust(8, '0') for bite in bites]
|
||
|
return "".join(bits)
|