Skip to content

URLs

QueryStringTransformer

A utility class to manipulate query strings.

Instantiation

Flask

from tna_utilities.url import QueryStringTransformer

# ?a=1&b=2&b=3
print(request.args)
# ImmutableMultiDict([('a', '1'), ('b', '2'), ('b', '3')])

normalised_args = list(request.args.lists())
print(normalised_args)
# [('a', ['1']), ('b', ['2', '3'])]

qs = QueryStringTransformer(normalised_args)

Django

from tna_utilities.url import QueryStringTransformer

# ?a=1&b=2&b=3
print(request.GET)
# <QueryDict: {'a': ['1'], 'b': ['2', '3']}>

normalised_args = list(request.GET.lists())
print(normalised_args)
# [('a', ['1']), ('b', ['2', '3'])]

qs = QueryStringTransformer(normalised_args)

Bespoke

from tna_utilities.url import QueryStringTransformer

qs = QueryStringTransformer([("a", ["1"]), ("b", ["2", "3"])])

Check and get values

from tna_utilities.url import QueryStringTransformer

# ?a=1&b=2&b=3
qs = QueryStringTransformer([("a", ["1"]), ("b", ["2", "3"])])

qs.parameter_exists("a")
# True
qs.parameter_exists("c")
# False

qs.parameter_values("a")
# ["1"]
qs.parameter_values("b")
# ["2", "3"]
qs.parameter_values("c")
# Raises AttributeError

qs.is_value_in_parameter("b", "2")
# True
qs.is_value_in_parameter("b", "4")
# False

Add and remove parameters

from tna_utilities.url import QueryStringTransformer

# ?a=1&b=2&b=3
qs = QueryStringTransformer([("a", ["1"]), ("b", ["2", "3"])])

qs.add_parameter("c", "4")
qs.update_parameter("b", ["5", "6"])
qs.remove_parameter("a")

print(qs.get_query_string())
# ?b=5&b=6&c=4

# Chainable (as of v1.1.0)
print(qs.add_parameter(
    "c", "4"
).update_parameter(
    "b", ["5", "6"]
).remove_parameter(
    "a"
).get_query_string())

Update parameter values

from tna_utilities.url import QueryStringTransformer

# ?a=1&b=2&b=3
qs = QueryStringTransformer([("a", ["1"]), ("b", ["2", "3"])])

qs.add_parameter_value("a", "4")
qs.toggle_parameter_value("b", "3")
qs.remove_parameter_value("a", "1")

print(qs.get_query_string())
# ?a=4&b=2

# Chainable (as of v1.1.0)
print(qs.add_parameter_value(
    "a", "4"
).toggle_parameter_value(
    "b", "3"
).remove_parameter_value(
    "a", "1"
).get_query_string())