100 """The URL arguments are normalized and cleaned of tracker parameters.
102 Returns bool ``True`` to use URL unchanged (``False`` to ignore URL).
103 If URL should be modified, the returned string is the new URL to use.
107 parsed_new_url = urlparse(url=new_url)
109 for rule
in self.
rules():
111 if not re.match(rule[self.
Fields.url_regexp], new_url):
116 for pattern
in rule[self.
Fields.url_ignore]:
117 if re.match(pattern, new_url):
129 query_args: list[tuple[str, str]] = list(parse_qsl(parsed_new_url.query))
131 for name, val
in query_args.copy():
133 for pattern
in rule[self.
Fields.del_args]:
134 if re.match(pattern, name):
135 log.debug(
"TRACKER_PATTERNS: %s remove tracker arg: %s='%s'", parsed_new_url.netloc, name, val)
136 query_args.remove((name, val))
138 parsed_new_url = parsed_new_url._replace(query=urlencode(query_args))
139 new_url = urlunparse(parsed_new_url)