# coding: utf-8 ''' Created on 2012-03-28 @author: Tomasz 'Doppler' Najdek Updated 2012-04-01 Bernard 'berni' Kobos ''' import urllib import types def build(item, encoding=None): def recursion(item, base=None): pairs = list() if(hasattr(item, 'values')): for key, value in item.items(): if encoding: quoted_key = urllib.quote(unicode(key).encode(encoding)) else: quoted_key = urllib.quote(unicode(key)) if(base): new_base = "%s[%s]" % (base, quoted_key) pairs += recursion(value, new_base) else: new_base = quoted_key pairs += recursion(value, new_base) elif(isinstance(item, types.ListType)): for (index, value) in enumerate(item): if(base): new_base = "%s" % (base) pairs += recursion(value, new_base) else: pairs += recursion(value) else: if encoding: quoted_item = urllib.quote(unicode(item).encode(encoding)) else: quoted_item = urllib.quote(unicode(item)) if(base): pairs.append("%s=%s" % (base, quoted_item)) else: pairs.append(quoted_item) return pairs return '&'.join(recursion(item))