import md5, pickle, random, urllib def urlencode(arg): return urllib.quote(arg, ',-_.~') urldecode = urllib.unquote def serialize(args): #return pickle.dumps(args).encode('base64').replace('\n', '') return ':'.join(map(urlencode, args)) def unserialize(arg): #return pickle.loads(arg.decode('base64')) return map(urldecode, arg.split(':')) def sign(arg, salt): m = md5.new(salt) m.update(':') m.update(arg) digest = m.digest() sig = digest.encode('hex') return sig def validsig(sig, arg, salt): return sig == sign(arg, salt) def genpass(len=8, chars="abcdefghijklmnopqrstuvwxyz0123456789"): newpass = [] for _ in range(len): newpass.append(random.choice(chars)) return ''.join(newpass) def validnick(name, validchars="abcdefghijklmnopqrstuvwxyz0123456789_-+"): if not name: return False for char in name: if not char in validchars: return False return True #def cached(fn): # cache = [False, ([],{}), None] # called?, (args, kwargs), result # def newfunc(*a, **kw): # if not (cache[0] and cache[1] == (a, kw)): # cache[0] = True # cache[1] = (a, kw) # cache[2] = fn(*a, **kw) # return cache[2] # return newfunc