You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.2 KiB

14 years ago
import hashlib
import os.path
14 years ago
import re
14 years ago
def isDict(object):
14 years ago
return isinstance(object, dict)
def mergeDicts(a, b):
assert isDict(a), isDict(b)
14 years ago
dst = a.copy()
stack = [(dst, b)]
while stack:
current_dst, current_src = stack.pop()
for key in current_src:
if key not in current_dst:
current_dst[key] = current_src[key]
else:
if isDict(current_src[key]) and isDict(current_dst[key]):
14 years ago
stack.append((current_dst[key], current_src[key]))
else:
current_dst[key] = current_src[key]
return dst
def flattenList(l):
if isinstance(l, list):
return sum(map(flattenList, l))
else:
return l
14 years ago
def md5(text):
return hashlib.md5(text).hexdigest()
def getExt(filename):
return os.path.splitext(filename)[1][1:]
def cleanHost(host):
if not host.startswith(('http://', 'https://')):
host = 'http://' + host
if not host.endswith('/'):
host += '/'
return host
14 years ago
def tryInt(s):
try: return int(s)
except: return s
def natsortKey(s):
return map(tryInt, re.findall(r'(\d+|\D+)', s))
def natcmp(a, b):
return cmp(natsortKey(a), natsortKey(b))