pylibmc icon indicating copy to clipboard operation
pylibmc copied to clipboard

Stop accessing None as a dictionary

Open hroncok opened this issue 1 year ago • 0 comments

PyMapping_HasKeyString does not work on None Accidentally, it used to return false result on silent errors.

Since Python 3.13, this is what happens instead:

>>> import pylibmc
>>> m = pylibmc.Client(["10.0.0.1"], binary=True)
Exception ignored in PyMapping_HasKeyString(); consider using PyMapping_HasKeyStringWithError(), PyMapping_GetOptionalItemString() or PyMapping_GetItemString():
Traceback (most recent call last):
  File "/usr/lib64/python3.13/site-packages/pylibmc/client.py", line 142, in __init__
    super().__init__(servers=translate_server_specs(servers),
TypeError: 'NoneType' object is not subscriptable
...
Exception ignored in PyMapping_HasKeyString(); consider using PyMapping_HasKeyStringWithError(), PyMapping_GetOptionalItemString() or PyMapping_GetItemString():
Traceback (most recent call last):
  File "/usr/lib64/python3.13/site-packages/pylibmc/client.py", line 142, in __init__
    super().__init__(servers=translate_server_specs(servers),
TypeError: 'NoneType' object is not subscriptable

When this is run via pytest, it leads to:

pytest.PytestUnraisableExceptionWarning: Exception ignored in PyMapping_HasKeyString(); consider using PyMapping_HasKeyStringWithError(), PyMapping_GetOptionalItemString() or PyMapping_GetItemString(): None

Fixes https://github.com/pallets-eco/cachelib/issues/400

hroncok avatar Jul 03 '24 11:07 hroncok