Skip to content

Commit

Permalink
Fix setting the idna_encode_size (#1357)
Browse files Browse the repository at this point in the history
  • Loading branch information
bdraco authored Oct 21, 2024
1 parent fff1f15 commit 16de8e2
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGES/1357.breaking.rst
3 changes: 3 additions & 0 deletions tests/test_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ def test_cache_configure_explicit() -> None:
idna_encode_size=128,
encode_host_size=128,
)
assert yarl.cache_info()["idna_decode"].maxsize == 128
assert yarl.cache_info()["idna_encode"].maxsize == 128
assert yarl.cache_info()["encode_host"].maxsize == 128


def test_cache_configure_waring() -> None:
Expand Down
13 changes: 8 additions & 5 deletions yarl/_url.py
Original file line number Diff line number Diff line change
Expand Up @@ -1763,17 +1763,18 @@ def cache_info() -> CacheInfo:
@rewrite_module
def cache_configure(
*,
idna_encode_size: Union[int, None, object] = _DEFAULT_IDNA_SIZE,
idna_encode_size: Union[int, None] = _DEFAULT_IDNA_SIZE,
idna_decode_size: Union[int, None] = _DEFAULT_IDNA_SIZE,
ip_address_size: Union[int, None, object] = _SENTINEL,
host_validate_size: Union[int, None, object] = _SENTINEL,
encode_host_size: Union[int, None] = _DEFAULT_ENCODE_SIZE,
encode_host_size: Union[int, None, object] = _SENTINEL,
) -> None:
"""Configure LRU cache sizes."""
global _idna_decode, _idna_encode, _encode_host
# ip_address_size, host_validate_size are no longer
# used, but are kept for backwards compatibility.
if encode_host_size is not None:
if encode_host_size is _SENTINEL:
encode_host_size = _DEFAULT_ENCODE_SIZE
for size in (ip_address_size, host_validate_size):
if size is not _SENTINEL:
warnings.warn(
Expand All @@ -1790,10 +1791,12 @@ def cache_configure(
elif size is _SENTINEL:
size = _DEFAULT_ENCODE_SIZE
if TYPE_CHECKING:
assert isinstance(size, int)
assert not isinstance(size, object)
if size > encode_host_size:
encode_host_size = size

if TYPE_CHECKING:
assert not isinstance(encode_host_size, object)
_encode_host = lru_cache(encode_host_size)(_encode_host.__wrapped__)
_idna_decode = lru_cache(idna_decode_size)(_idna_decode.__wrapped__)
_idna_encode = lru_cache(idna_decode_size)(_idna_encode.__wrapped__)
_idna_encode = lru_cache(idna_encode_size)(_idna_encode.__wrapped__)

0 comments on commit 16de8e2

Please sign in to comment.