@@ -246,8 +246,9 @@ def build_pre_encoded_url(
246246 return self
247247
248248
249- @lru_cache
250- def from_parts (scheme : str , netloc : str , path : str , query : str , fragment : str ) -> "URL" :
249+ def from_parts_uncached (
250+ scheme : str , netloc : str , path : str , query : str , fragment : str
251+ ) -> "URL" :
251252 """Create a new URL from parts."""
252253 self = object .__new__ (URL )
253254 self ._scheme = scheme
@@ -259,6 +260,9 @@ def from_parts(scheme: str, netloc: str, path: str, query: str, fragment: str) -
259260 return self
260261
261262
263+ from_parts = lru_cache (from_parts_uncached )
264+
265+
262266@rewrite_module
263267class URL :
264268 # Don't derive from str
@@ -1170,7 +1174,9 @@ def with_query(self, *args: Any, **kwargs: Any) -> "URL":
11701174 """
11711175 # N.B. doesn't cleanup query/fragment
11721176 query = get_str_query (* args , ** kwargs ) or ""
1173- return from_parts (self ._scheme , self ._netloc , self ._path , query , self ._fragment )
1177+ return from_parts_uncached (
1178+ self ._scheme , self ._netloc , self ._path , query , self ._fragment
1179+ )
11741180
11751181 @overload
11761182 def extend_query (self , query : Query ) -> "URL" : ...
@@ -1196,7 +1202,9 @@ def extend_query(self, *args: Any, **kwargs: Any) -> "URL":
11961202 query += new_query if query [- 1 ] == "&" else f"&{ new_query } "
11971203 else :
11981204 query = new_query
1199- return from_parts (self ._scheme , self ._netloc , self ._path , query , self ._fragment )
1205+ return from_parts_uncached (
1206+ self ._scheme , self ._netloc , self ._path , query , self ._fragment
1207+ )
12001208
12011209 @overload
12021210 def update_query (self , query : Query ) -> "URL" : ...
@@ -1253,7 +1261,9 @@ def update_query(self, *args: Any, **kwargs: Any) -> "URL":
12531261 "Invalid query type: only str, mapping or "
12541262 "sequence of (key, value) pairs is allowed"
12551263 )
1256- return from_parts (self ._scheme , self ._netloc , self ._path , query , self ._fragment )
1264+ return from_parts_uncached (
1265+ self ._scheme , self ._netloc , self ._path , query , self ._fragment
1266+ )
12571267
12581268 def without_query_params (self , * query_params : str ) -> "URL" :
12591269 """Remove some keys from query part and return new URL."""
0 commit comments