src/streamlink/utils/url.py
def update_qsd(url, qsd=None, remove=None):
    """
    Update or remove keys from a query string in a URL

    :param url: URL to update
    :param qsd: dict of keys to update, a None value leaves it unchanged
    :param remove: list of keys to remove, or "*" to remove all
                   note: updated keys are never removed, even if unchanged
    :return: updated URL
    """
    qsd = qsd or {}
    remove = remove or []

    # parse current query string
    parsed = urlparse(url)
    current_qsd = OrderedDict(parse_qsl(parsed.query))

    # * removes all possible keys
    if remove == "*":
        remove = list(current_qsd.keys())

    # remove keys before updating, but leave updated keys untouched
    for key in remove:
        if key not in qsd:
            del current_qsd[key]

    # and update the query string
    for key, value in qsd.items():
        if value:
            current_qsd[key] = value

    return parsed._replace(query=urlencode(current_qsd)).geturl()
def update_qsd(url, qsd=None, remove=None):
    qsd = qsd or {}
    remove = remove or []

    # parse current query string
    parsed = urlparse(url)
    current_qsd = OrderedDict(parse_qsl(parsed.query))

    # * removes all possible keys
    if remove == "*":
        remove = list(current_qsd.keys())

    # remove keys before updating, but leave updated keys untouched
    for key in remove:
        if key not in qsd:
            del current_qsd[key]

    # and update the query string
    for key, value in qsd.items():
        if value:
            current_qsd[key] = value

    return parsed._replace(query=urlencode(current_qsd)).geturl()
def update_qsd ( url , qsd = None , remove = None ) : qsd = qsd or { } remove = remove or [ ] # parse current query string parsed = urlparse ( url ) current_qsd = OrderedDict ( parse_qsl ( parsed . query ) ) # * removes all possible keys if remove == "*" : remove = list ( current_qsd . keys ( ) ) # remove keys before updating, but leave updated keys untouched for key in remove : if key not in qsd : del current_qsd [ key ] # and update the query string for key , value in qsd . items ( ) : if value : current_qsd [ key ] = value return parsed . _replace ( query = urlencode ( current_qsd ) ) . geturl ( )
Update or remove keys from a query string in a URL

    :param url: URL to update
    :param qsd: dict of keys to update, a None value leaves it unchanged
    :param remove: list of keys to remove, or "*" to remove all
                   note: updated keys are never removed, even if unchanged
    :return: updated URL
Update or remove keys from a query string in a URL