from __pyjamas__ import JS
# TODO: implement safe
def quote(s, safe=''):
    """
    This function is equivalent to urllib.quote().

    Example:

    >>> quote("hey")
    'hey'
    >>> quote("$%&/?/+ s")
    '%24%25%26%2F%3F%2F%2B%20s'

    """
    from __javascript__ import encodeURIComponent
    return encodeURIComponent(s)

def urlencode(d):
    """
    Equivalent of urllib.urlencode().

    Examples:
    >>> urlencode({"a": 34, "bbb": "ccc"})
    'a=34&bbb=ccc'
    >>> urlencode({"a": 34, "bbb": "$%&/?/+ s"})
    'a=34&bbb=%24%25%26%2F%3F%2F%2B%20s'
    >>> urlencode({"a": 34})
    'a=34'
    >>> urlencode({})
    ''

    """
    s = ""
    for i, v in d.iteritems():
        s += "%s=%s&" % (i, quote(str(v)))
    if s != "":
        s = s[:-1]
    return s

from __pyjamas__ import JS
# TODO: implement safe
def quote(s, safe=''):
    """
    This function is equivalent to urllib.quote().

    Example:

    >>> quote("hey")
    'hey'
    >>> quote("$%&/?/+ s")
    '%24%25%26%2F%3F%2F%2B%20s'

    """
    from __javascript__ import encodeURIComponent
    return encodeURIComponent(s)

def unquote_plus(s):
    """
    This function is equivalent to urllib.unquote_plus

    Example:

    >>> unquote("hey")
    'hey'
    >>> unquote('%24%25%26%2F%3F%2F%2B%20s')
    "$%&/?/+ s"

    """
    from __javascript__ import decodeURIComponent
    return decodeURIComponent(s)

def urlencode(d):
    """
    Equivalent of urllib.urlencode().

    Examples:
    >>> urlencode({"a": 34, "bbb": "ccc"})
    'a=34&bbb=ccc'
    >>> urlencode({"a": 34, "bbb": "$%&/?/+ s"})
    'a=34&bbb=%24%25%26%2F%3F%2F%2B%20s'
    >>> urlencode({"a": 34})
    'a=34'
    >>> urlencode({})
    ''

    """
    s = ""
    for i, v in d.iteritems():
        s += "%s=%s&" % (i, quote(str(v)))
    if s != "":
        s = s[:-1]
    return s

add urllib.unquote_plus