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