pallets-eco/cachelib

python-cachelib-0.13.0 fails to build with Python 3.13: pytest.PytestUnraisableExceptionWarning: Exception ignored in PyMapping_HasKeyString(); consider using PyMapping_HasKeyStringWithError(), PyMapping_GetOptionalItemString() or PyMapping_GetItemString(): None

Opened this issue · 1 comments

Some pytest output
+ /usr/bin/pytest -v -r s -k 'not Uwsgi and not DynamoDb and not MongoDb'
============================= test session starts ==============================
platform linux -- Python 3.13.0b2, pytest-7.4.3, pluggy-1.3.0 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /builddir/build/BUILD/python-cachelib-0.13.0-build/cachelib-0.13.0
configfile: setup.cfg
testpaths: tests
plugins: xprocess-1.0.2
collecting ... collected 160 items / 22 deselected / 1 skipped / 138 selected

tests/test_base_cache.py::TestBaseCache::test_get PASSED                 [  0%]
tests/test_base_cache.py::TestBaseCache::test_delete PASSED              [  1%]
tests/test_base_cache.py::TestBaseCache::test_get_many PASSED            [  2%]
tests/test_base_cache.py::TestBaseCache::test_get_dict PASSED            [  2%]
tests/test_base_cache.py::TestBaseCache::test_set PASSED                 [  3%]
tests/test_base_cache.py::TestBaseCache::test_add PASSED                 [  4%]
tests/test_base_cache.py::TestBaseCache::test_set_many PASSED            [  5%]
tests/test_base_cache.py::TestBaseCache::test_delete_many PASSED         [  5%]
tests/test_base_cache.py::TestBaseCache::test_has PASSED                 [  6%]
tests/test_base_cache.py::TestBaseCache::test_clear PASSED               [  7%]
tests/test_base_cache.py::TestBaseCache::test_inc PASSED                 [  7%]
tests/test_base_cache.py::TestBaseCache::test_dec PASSED                 [  8%]
tests/test_file_system_cache.py::TestFileSystemCache::test_has[FileSystemCache] PASSED [  9%]
tests/test_file_system_cache.py::TestFileSystemCache::test_has[CustomSerializerCache] PASSED [ 10%]
tests/test_file_system_cache.py::TestFileSystemCache::test_has[CustomHashingMethodCache] PASSED [ 10%]
tests/test_file_system_cache.py::TestFileSystemCache::test_has[CustomDefaultHashingMethodCache] PASSED [ 11%]
tests/test_file_system_cache.py::TestFileSystemCache::test_clear[FileSystemCache] PASSED [ 12%]
tests/test_file_system_cache.py::TestFileSystemCache::test_clear[CustomSerializerCache] PASSED [ 13%]
tests/test_file_system_cache.py::TestFileSystemCache::test_clear[CustomHashingMethodCache] PASSED [ 13%]
tests/test_file_system_cache.py::TestFileSystemCache::test_clear[CustomDefaultHashingMethodCache] PASSED [ 14%]
tests/test_file_system_cache.py::TestFileSystemCache::test_set_get[FileSystemCache] PASSED [ 15%]
tests/test_file_system_cache.py::TestFileSystemCache::test_set_get[CustomSerializerCache] PASSED [ 15%]
tests/test_file_system_cache.py::TestFileSystemCache::test_set_get[CustomHashingMethodCache] PASSED [ 16%]
tests/test_file_system_cache.py::TestFileSystemCache::test_set_get[CustomDefaultHashingMethodCache] PASSED [ 17%]
tests/test_file_system_cache.py::TestFileSystemCache::test_set_get_many[FileSystemCache] PASSED [ 18%]
tests/test_file_system_cache.py::TestFileSystemCache::test_set_get_many[CustomSerializerCache] PASSED [ 18%]
tests/test_file_system_cache.py::TestFileSystemCache::test_set_get_many[CustomHashingMethodCache] PASSED [ 19%]
tests/test_file_system_cache.py::TestFileSystemCache::test_set_get_many[CustomDefaultHashingMethodCache] PASSED [ 20%]
tests/test_file_system_cache.py::TestFileSystemCache::test_get_dict[FileSystemCache] PASSED [ 21%]
tests/test_file_system_cache.py::TestFileSystemCache::test_get_dict[CustomSerializerCache] PASSED [ 21%]
tests/test_file_system_cache.py::TestFileSystemCache::test_get_dict[CustomHashingMethodCache] PASSED [ 22%]
tests/test_file_system_cache.py::TestFileSystemCache::test_get_dict[CustomDefaultHashingMethodCache] PASSED [ 23%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete[FileSystemCache] PASSED [ 23%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete[CustomSerializerCache] PASSED [ 24%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete[CustomHashingMethodCache] PASSED [ 25%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete[CustomDefaultHashingMethodCache] PASSED [ 26%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete_many[FileSystemCache] PASSED [ 26%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete_many[CustomSerializerCache] PASSED [ 27%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete_many[CustomHashingMethodCache] PASSED [ 28%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete_many[CustomDefaultHashingMethodCache] PASSED [ 28%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete_many_ignore_errors[FileSystemCache] PASSED [ 29%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete_many_ignore_errors[CustomSerializerCache] PASSED [ 30%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete_many_ignore_errors[CustomHashingMethodCache] PASSED [ 31%]
tests/test_file_system_cache.py::TestFileSystemCache::test_delete_many_ignore_errors[CustomDefaultHashingMethodCache] PASSED [ 31%]
tests/test_file_system_cache.py::TestFileSystemCache::test_add[FileSystemCache] PASSED [ 32%]
tests/test_file_system_cache.py::TestFileSystemCache::test_add[CustomSerializerCache] PASSED [ 33%]
tests/test_file_system_cache.py::TestFileSystemCache::test_add[CustomHashingMethodCache] PASSED [ 34%]
tests/test_file_system_cache.py::TestFileSystemCache::test_add[CustomDefaultHashingMethodCache] PASSED [ 34%]
tests/test_file_system_cache.py::TestFileSystemCache::test_inc_dec[FileSystemCache] PASSED [ 35%]
tests/test_file_system_cache.py::TestFileSystemCache::test_inc_dec[CustomSerializerCache] PASSED [ 36%]
tests/test_file_system_cache.py::TestFileSystemCache::test_inc_dec[CustomHashingMethodCache] PASSED [ 36%]
tests/test_file_system_cache.py::TestFileSystemCache::test_inc_dec[CustomDefaultHashingMethodCache] PASSED [ 37%]
tests/test_file_system_cache.py::TestFileSystemCache::test_expiration[FileSystemCache] PASSED [ 38%]
tests/test_file_system_cache.py::TestFileSystemCache::test_expiration[CustomSerializerCache] PASSED [ 39%]
tests/test_file_system_cache.py::TestFileSystemCache::test_expiration[CustomHashingMethodCache] PASSED [ 39%]
tests/test_file_system_cache.py::TestFileSystemCache::test_expiration[CustomDefaultHashingMethodCache] PASSED [ 40%]
tests/test_file_system_cache.py::TestFileSystemCache::test_EOFError[FileSystemCache] PASSED [ 41%]
tests/test_file_system_cache.py::TestFileSystemCache::test_EOFError[CustomSerializerCache] PASSED [ 42%]
tests/test_file_system_cache.py::TestFileSystemCache::test_EOFError[CustomHashingMethodCache] PASSED [ 42%]
tests/test_file_system_cache.py::TestFileSystemCache::test_EOFError[CustomDefaultHashingMethodCache] PASSED [ 43%]
tests/test_file_system_cache.py::TestFileSystemCache::test_threshold[FileSystemCache] PASSED [ 44%]
tests/test_file_system_cache.py::TestFileSystemCache::test_threshold[CustomSerializerCache] PASSED [ 44%]
tests/test_file_system_cache.py::TestFileSystemCache::test_threshold[CustomHashingMethodCache] PASSED [ 45%]
tests/test_file_system_cache.py::TestFileSystemCache::test_threshold[CustomDefaultHashingMethodCache] PASSED [ 46%]
tests/test_file_system_cache.py::TestFileSystemCache::test_file_counting[FileSystemCache] PASSED [ 47%]
tests/test_file_system_cache.py::TestFileSystemCache::test_file_counting[CustomSerializerCache] PASSED [ 47%]
tests/test_file_system_cache.py::TestFileSystemCache::test_file_counting[CustomHashingMethodCache] PASSED [ 48%]
tests/test_file_system_cache.py::TestFileSystemCache::test_file_counting[CustomDefaultHashingMethodCache] PASSED [ 49%]
tests/test_file_system_cache.py::TestFileSystemCache::test_file_counting_on_override[FileSystemCache] PASSED [ 50%]
tests/test_file_system_cache.py::TestFileSystemCache::test_file_counting_on_override[CustomSerializerCache] PASSED [ 50%]
tests/test_file_system_cache.py::TestFileSystemCache::test_file_counting_on_override[CustomHashingMethodCache] PASSED [ 51%]
tests/test_file_system_cache.py::TestFileSystemCache::test_file_counting_on_override[CustomDefaultHashingMethodCache] PASSED [ 52%]
tests/test_file_system_cache.py::TestFileSystemCache::test_prune_old_entries[FileSystemCache] PASSED [ 52%]
tests/test_file_system_cache.py::TestFileSystemCache::test_prune_old_entries[CustomSerializerCache] PASSED [ 53%]
tests/test_file_system_cache.py::TestFileSystemCache::test_prune_old_entries[CustomHashingMethodCache] PASSED [ 54%]
tests/test_file_system_cache.py::TestFileSystemCache::test_prune_old_entries[CustomDefaultHashingMethodCache] PASSED [ 55%]
tests/test_interface_uniformity.py::TestInterfaceUniformity::test_types_have_all_base_methods ERROR [ 55%]
tests/test_memcached_cache.py::TestMemcachedCache::test_has FAILED       [ 56%]
tests/test_memcached_cache.py::TestMemcachedCache::test_clear FAILED     [ 57%]
tests/test_memcached_cache.py::TestMemcachedCache::test_set_get FAILED   [ 57%]
tests/test_memcached_cache.py::TestMemcachedCache::test_set_get_many FAILED [ 58%]
tests/test_memcached_cache.py::TestMemcachedCache::test_get_dict FAILED  [ 59%]
tests/test_memcached_cache.py::TestMemcachedCache::test_delete FAILED    [ 60%]
tests/test_memcached_cache.py::TestMemcachedCache::test_delete_many FAILED [ 60%]
tests/test_memcached_cache.py::TestMemcachedCache::test_delete_many_ignore_errors FAILED [ 61%]
tests/test_memcached_cache.py::TestMemcachedCache::test_add FAILED       [ 62%]
tests/test_memcached_cache.py::TestMemcachedCache::test_inc_dec FAILED   [ 63%]
tests/test_memcached_cache.py::TestMemcachedCache::test_expiration FAILED [ 63%]
tests/test_redis_cache.py::TestRedisCache::test_has[RedisCache] PASSED   [ 64%]
tests/test_redis_cache.py::TestRedisCache::test_has[CustomCache] PASSED  [ 65%]
tests/test_redis_cache.py::TestRedisCache::test_clear[RedisCache] PASSED [ 65%]
tests/test_redis_cache.py::TestRedisCache::test_clear[CustomCache] PASSED [ 66%]
tests/test_redis_cache.py::TestRedisCache::test_set_get[RedisCache] PASSED [ 67%]
tests/test_redis_cache.py::TestRedisCache::test_set_get[CustomCache] PASSED [ 68%]
tests/test_redis_cache.py::TestRedisCache::test_set_get_many[RedisCache] PASSED [ 68%]
tests/test_redis_cache.py::TestRedisCache::test_set_get_many[CustomCache] PASSED [ 69%]
tests/test_redis_cache.py::TestRedisCache::test_get_dict[RedisCache] PASSED [ 70%]
tests/test_redis_cache.py::TestRedisCache::test_get_dict[CustomCache] PASSED [ 71%]
tests/test_redis_cache.py::TestRedisCache::test_delete[RedisCache] PASSED [ 71%]
tests/test_redis_cache.py::TestRedisCache::test_delete[CustomCache] PASSED [ 72%]
tests/test_redis_cache.py::TestRedisCache::test_delete_many[RedisCache] PASSED [ 73%]
tests/test_redis_cache.py::TestRedisCache::test_delete_many[CustomCache] PASSED [ 73%]
tests/test_redis_cache.py::TestRedisCache::test_delete_many_ignore_errors[RedisCache] PASSED [ 74%]
tests/test_redis_cache.py::TestRedisCache::test_delete_many_ignore_errors[CustomCache] PASSED [ 75%]
tests/test_redis_cache.py::TestRedisCache::test_add[RedisCache] PASSED   [ 76%]
tests/test_redis_cache.py::TestRedisCache::test_add[CustomCache] PASSED  [ 76%]
tests/test_redis_cache.py::TestRedisCache::test_inc_dec[RedisCache] PASSED [ 77%]
tests/test_redis_cache.py::TestRedisCache::test_inc_dec[CustomCache] PASSED [ 78%]
tests/test_redis_cache.py::TestRedisCache::test_expiration[RedisCache] PASSED [ 78%]
tests/test_redis_cache.py::TestRedisCache::test_expiration[CustomCache] PASSED [ 79%]
tests/test_redis_cache.py::TestRedisCache::test_callable_key[RedisCache] PASSED [ 80%]
tests/test_redis_cache.py::TestRedisCache::test_callable_key[CustomCache] PASSED [ 81%]
tests/test_simple_cache.py::TestSimpleCache::test_clear[SimpleCache] PASSED [ 81%]
tests/test_simple_cache.py::TestSimpleCache::test_clear[CustomCache] PASSED [ 82%]
tests/test_simple_cache.py::TestSimpleCache::test_has[SimpleCache] PASSED [ 83%]
tests/test_simple_cache.py::TestSimpleCache::test_has[CustomCache] PASSED [ 84%]
tests/test_simple_cache.py::TestSimpleCache::test_set_get[SimpleCache] PASSED [ 84%]
tests/test_simple_cache.py::TestSimpleCache::test_set_get[CustomCache] PASSED [ 85%]
tests/test_simple_cache.py::TestSimpleCache::test_set_get_many[SimpleCache] PASSED [ 86%]
tests/test_simple_cache.py::TestSimpleCache::test_set_get_many[CustomCache] PASSED [ 86%]
tests/test_simple_cache.py::TestSimpleCache::test_get_dict[SimpleCache] PASSED [ 87%]
tests/test_simple_cache.py::TestSimpleCache::test_get_dict[CustomCache] PASSED [ 88%]
tests/test_simple_cache.py::TestSimpleCache::test_delete[SimpleCache] PASSED [ 89%]
tests/test_simple_cache.py::TestSimpleCache::test_delete[CustomCache] PASSED [ 89%]
tests/test_simple_cache.py::TestSimpleCache::test_delete_many[SimpleCache] PASSED [ 90%]
tests/test_simple_cache.py::TestSimpleCache::test_delete_many[CustomCache] PASSED [ 91%]
tests/test_simple_cache.py::TestSimpleCache::test_delete_many_ignore_errors[SimpleCache] PASSED [ 92%]
tests/test_simple_cache.py::TestSimpleCache::test_delete_many_ignore_errors[CustomCache] PASSED [ 92%]
tests/test_simple_cache.py::TestSimpleCache::test_add[SimpleCache] PASSED [ 93%]
tests/test_simple_cache.py::TestSimpleCache::test_add[CustomCache] PASSED [ 94%]
tests/test_simple_cache.py::TestSimpleCache::test_inc_dec[SimpleCache] PASSED [ 94%]
tests/test_simple_cache.py::TestSimpleCache::test_inc_dec[CustomCache] PASSED [ 95%]
tests/test_simple_cache.py::TestSimpleCache::test_expiration[SimpleCache] PASSED [ 96%]
tests/test_simple_cache.py::TestSimpleCache::test_expiration[CustomCache] PASSED [ 97%]
tests/test_simple_cache.py::TestSimpleCache::test_threshold[SimpleCache] PASSED [ 97%]
tests/test_simple_cache.py::TestSimpleCache::test_threshold[CustomCache] PASSED [ 98%]
tests/test_simple_cache.py::TestSimpleCache::test_prune_old_entries[SimpleCache] PASSED [ 99%]
tests/test_simple_cache.py::TestSimpleCache::test_prune_old_entries[CustomCache] PASSED [100%]

==================================== ERRORS ====================================
__ ERROR at setup of TestInterfaceUniformity.test_types_have_all_base_methods __

cls = <class '_pytest.runner.CallInfo'>
func = <function call_runtest_hook.<locals>.<lambda> at 0x7fb3569d1e40>
when = 'setup'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    @classmethod
    def from_call(
        cls,
        func: "Callable[[], TResult]",
        when: "Literal['collect', 'setup', 'call', 'teardown']",
        reraise: Optional[
            Union[Type[BaseException], Tuple[Type[BaseException], ...]]
        ] = None,
    ) -> "CallInfo[TResult]":
        """Call func, wrapping the result in a CallInfo.
    
        :param func:
            The function to call. Called without arguments.
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        """
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result: Optional[TResult] = func()

/usr/lib/python3.13/site-packages/_pytest/runner.py:341: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.13/site-packages/_pytest/runner.py:262: in <lambda>
    lambda: ihook(item=item, **kwds), when=when, reraise=reraise
/usr/lib/python3.13/site-packages/pluggy/_hooks.py:493: in __call__
    return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
/usr/lib/python3.13/site-packages/pluggy/_manager.py:115: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.13/site-packages/_pytest/unraisableexception.py:83: in pytest_runtest_setup
    yield from unraisable_exception_runtest_hook()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

    def unraisable_exception_runtest_hook() -> Generator[None, None, None]:
        with catch_unraisable_exception() as cm:
            yield
            if cm.unraisable:
                if cm.unraisable.err_msg is not None:
                    err_msg = cm.unraisable.err_msg
                else:
                    err_msg = "Exception ignored in"
                msg = f"{err_msg}: {cm.unraisable.object!r}\n\n"
                msg += "".join(
                    traceback.format_exception(
                        cm.unraisable.exc_type,
                        cm.unraisable.exc_value,
                        cm.unraisable.exc_traceback,
                    )
                )
>               warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
E               pytest.PytestUnraisableExceptionWarning: Exception ignored in PyMapping_HasKeyString(); consider using PyMapping_HasKeyStringWithError(), PyMapping_GetOptionalItemString() or PyMapping_GetItemString(): None
E               
E               Traceback (most recent call last):
E                 File "/usr/lib64/python3.13/site-packages/pylibmc/client.py", line 142, in __init__
E                   super().__init__(servers=translate_server_specs(servers),
E                   ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E                                    binary=binary,
E                                    ^^^^^^^^^^^^^^
E                                    username=username, password=password,
E                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E                                    behaviors=_behaviors_numeric(behaviors))
E                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E               TypeError: 'NoneType' object is not subscriptable

/usr/lib/python3.13/site-packages/_pytest/unraisableexception.py:78: PytestUnraisableExceptionWarning
---------------------------- Captured stdout setup -----------------------------
/builddir/build/BUILD/python-cachelib-0.13.0-build/cachelib-0.13.0/.pytest_cache/d/.xprocess/redis$ redis-server --port 6360
process 'redis' started pid=292
292:C 06 Jun 2024 21:25:21.994 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

292:C 06 Jun 2024 21:25:21.994 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

292:C 06 Jun 2024 21:25:21.994 * Redis version=7.2.5, bits=64, commit=00000000, modified=0, pid=292, just started

292:C 06 Jun 2024 21:25:21.994 * Configuration loaded

292:M 06 Jun 2024 21:25:21.995 * monotonic clock: POSIX clock_gettime

292:M 06 Jun 2024 21:25:21.995 * Running mode=standalone, port=6360.

292:M 06 Jun 2024 21:25:21.995 * Server initialized

292:M 06 Jun 2024 21:25:21.995 * Ready to accept connections tcp

redis process startup detected
/builddir/build/BUILD/python-cachelib-0.13.0-build/cachelib-0.13.0/.pytest_cache/d/.xprocess/pylibmc$ memcached -vv
process 'pylibmc' started pid=298
slab class   1: chunk size        96 perslab   10922

slab class   2: chunk size       120 perslab    8738

slab class   3: chunk size       152 perslab    6898

slab class   4: chunk size       192 perslab    5461

slab class   5: chunk size       240 perslab    4369

slab class   6: chunk size       304 perslab    3449

slab class   7: chunk size       384 perslab    2730

slab class   8: chunk size       480 perslab    2184

slab class   9: chunk size       600 perslab    1747

slab class  10: chunk size       752 perslab    1394

slab class  11: chunk size       944 perslab    1110

slab class  12: chunk size      1184 perslab     885

slab class  13: chunk size      1480 perslab     708

slab class  14: chunk size      1856 perslab     564

slab class  15: chunk size      2320 perslab     451

slab class  16: chunk size      2904 perslab     361

slab class  17: chunk size      3632 perslab     288

slab class  18: chunk size      4544 perslab     230

slab class  19: chunk size      5680 perslab     184

slab class  20: chunk size      7104 perslab     147

slab class  21: chunk size      8880 perslab     118

slab class  22: chunk size     11104 perslab      94

slab class  23: chunk size     13880 perslab      75

slab class  24: chunk size     17352 perslab      60

slab class  25: chunk size     21696 perslab      48

slab class  26: chunk size     27120 perslab      38

slab class  27: chunk size     33904 perslab      30

slab class  28: chunk size     42384 perslab      24

slab class  29: chunk size     52984 perslab      19

slab class  30: chunk size     66232 perslab      15

slab class  31: chunk size     82792 perslab      12

slab class  32: chunk size    103496 perslab      10

slab class  33: chunk size    129376 perslab       8

slab class  34: chunk size    161720 perslab       6

slab class  35: chunk size    202152 perslab       5

slab class  36: chunk size    252696 perslab       4

slab class  37: chunk size    315872 perslab       3

slab class  38: chunk size    394840 perslab       2

slab class  39: chunk size    524288 perslab       2

<26 server listening (auto-negotiate)

pylibmc process startup detected
=================================== FAILURES ===================================
_________________________ TestMemcachedCache.test_has __________________________

cls = <class '_pytest.runner.CallInfo'>
func = <function call_runtest_hook.<locals>.<lambda> at 0x7fb35634b920>
when = 'call'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    @classmethod
    def from_call(
        cls,
        func: "Callable[[], TResult]",
        when: "Literal['collect', 'setup', 'call', 'teardown']",
        reraise: Optional[
            Union[Type[BaseException], Tuple[Type[BaseException], ...]]
        ] = None,
    ) -> "CallInfo[TResult]":
        """Call func, wrapping the result in a CallInfo.
    
        :param func:
            The function to call. Called without arguments.
        :param when:
            The phase in which the function is called.
        :param reraise:
            Exception or exceptions that shall propagate if raised by the
            function, instead of being wrapped in the CallInfo.
        """
        excinfo = None
        start = timing.time()
        precise_start = timing.perf_counter()
        try:
>           result: Optional[TResult] = func()

/usr/lib/python3.13/site-packages/_pytest/runner.py:341: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.13/site-packages/_pytest/runner.py:262: in <lambda>
    lambda: ihook(item=item, **kwds), when=when, reraise=reraise
/usr/lib/python3.13/site-packages/pluggy/_hooks.py:493: in __call__
    return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
/usr/lib/python3.13/site-packages/pluggy/_manager.py:115: in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
/usr/lib/python3.13/site-packages/_pytest/unraisableexception.py:88: in pytest_runtest_call
    yield from unraisable_exception_runtest_hook()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

    def unraisable_exception_runtest_hook() -> Generator[None, None, None]:
        with catch_unraisable_exception() as cm:
            yield
            if cm.unraisable:
                if cm.unraisable.err_msg is not None:
                    err_msg = cm.unraisable.err_msg
                else:
                    err_msg = "Exception ignored in"
                msg = f"{err_msg}: {cm.unraisable.object!r}\n\n"
                msg += "".join(
                    traceback.format_exception(
                        cm.unraisable.exc_type,
                        cm.unraisable.exc_value,
                        cm.unraisable.exc_traceback,
                    )
                )
>               warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
E               pytest.PytestUnraisableExceptionWarning: Exception ignored in PyMapping_HasKeyString(); consider using PyMapping_HasKeyStringWithError(), PyMapping_GetOptionalItemString() or PyMapping_GetItemString(): None
E               
E               Traceback (most recent call last):
E                 File "/usr/lib64/python3.13/site-packages/pylibmc/client.py", line 142, in __init__
E                   super().__init__(servers=translate_server_specs(servers),
E                   ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E                                    binary=binary,
E                                    ^^^^^^^^^^^^^^
E                                    username=username, password=password,
E                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E                                    behaviors=_behaviors_numeric(behaviors))
E                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E               TypeError: 'NoneType' object is not subscriptable

/usr/lib/python3.13/site-packages/_pytest/unraisableexception.py:78: PytestUnraisableExceptionWarning
---------------------------- Captured stdout setup -----------------------------
/builddir/build/BUILD/python-cachelib-0.13.0-build/cachelib-0.13.0/.pytest_cache/d/.xprocess/pylibmc$ memcached -vv
process 'pylibmc' started pid=318
slab class   1: chunk size        96 perslab   10922

slab class   2: chunk size       120 perslab    8738

slab class   3: chunk size       152 perslab    6898

slab class   4: chunk size       192 perslab    5461

slab class   5: chunk size       240 perslab    4369

slab class   6: chunk size       304 perslab    3449

slab class   7: chunk size       384 perslab    2730

slab class   8: chunk size       480 perslab    2184

slab class   9: chunk size       600 perslab    1747

slab class  10: chunk size       752 perslab    1394

slab class  11: chunk size       944 perslab    1110

slab class  12: chunk size      1184 perslab     885

slab class  13: chunk size      1480 perslab     708

slab class  14: chunk size      1856 perslab     564

slab class  15: chunk size      2320 perslab     451

slab class  16: chunk size      2904 perslab     361

slab class  17: chunk size      3632 perslab     288

slab class  18: chunk size      4544 perslab     230

slab class  19: chunk size      5680 perslab     184

slab class  20: chunk size      7104 perslab     147

slab class  21: chunk size      8880 perslab     118

slab class  22: chunk size     11104 perslab      94

slab class  23: chunk size     13880 perslab      75

slab class  24: chunk size     17352 perslab      60

slab class  25: chunk size     21696 perslab      48

slab class  26: chunk size     27120 perslab      38

slab class  27: chunk size     33904 perslab      30

slab class  28: chunk size     42384 perslab      24

slab class  29: chunk size     52984 perslab      19

slab class  30: chunk size     66232 perslab      15

slab class  31: chunk size     82792 perslab      12

slab class  32: chunk size    103496 perslab      10

slab class  33: chunk size    129376 perslab       8

slab class  34: chunk size    161720 perslab       6

slab class  35: chunk size    202152 perslab       5

slab class  36: chunk size    252696 perslab       4

slab class  37: chunk size    315872 perslab       3

slab class  38: chunk size    394840 perslab       2

slab class  39: chunk size    524288 perslab       2

<26 server listening (auto-negotiate)

pylibmc process startup detected

detailed build log: https://copr-be.cloud.fedoraproject.org/results/%40python/python3.13/fedora-rawhide-x86_64/07545359-python-cachelib/builder-live.log.gz

https://bugzilla.redhat.com/show_bug.cgi?id=2251780

Environment:

  • Python version: Python 3.13
  • CacheLib version: 0.13.0

I belive this should fix it: lericson/pylibmc#292