Hi Joseph,
I'm building s3ql on debian trixie, and I'm getting the following test failure, any advice much appreciated! […]
Is this a persistent error? Re-running the tests multiple times, do you always get the error?
We currently do not run tests with Python 3.13, and it looks like the Python 3.13 "ssl" package has changes that we need to address.
But when I run the tests with Python 3.13 (on Ubuntu 24.04 with uv, main-branch), I only get some warnings, not the error you get:
$ uv venv --python 3.13
$ source .venv/bin/activate
$ uv sync --extra dev
$ PYTHONTRACEMALLOC=20 py.test tests/t0_http.py
# […]
============== warnings summary ==============
t0_http.py::test_read_text[plain]
t0_http.py::test_read_text[ssl]
/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/unraisableexception.py:67:
PytestUnraisableExceptionWarning: Exception ignored in:
<_io.TextIOWrapper encoding='UTF-8'>
AttributeError: 'HTTPConnection' object has no attribute 'flush'
During handling of the above exception, another exception
occurred:
Traceback (most recent call last):
File "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line 157, in pytest_pyfunc_call
result = testfunction(**testargs)
AttributeError: 'HTTPConnection' object has no attribute
'close'. Did you mean: 'closed'?
Object allocated at:
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/main.py",
line 367
item.config.hook.pytest_runtest_protocol(item=item,
nextitem=nextitem)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py",
line 512
return self._hookexec(self.name, self._hookimpls.copy(),
kwargs, firstresult)
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120
return self._inner_hookexec(hook_name, methods, kwargs,
firstresult)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 117
runtestprotocol(item, nextitem=nextitem)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 136
reports.append(call_and_report(item, "call", log))
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 245
call = CallInfo.from_call(
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 344
result: TResult | None = func()
File "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line 246
lambda: runtest_hook(item=item, **kwds), when=when,
reraise=reraise
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line 512
return self._hookexec(self.name, self._hookimpls.copy(),
kwargs, firstresult)
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120
return self._inner_hookexec(hook_name, methods, kwargs,
firstresult)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 178
item.runtest()
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py",
line 1671
self.ihook.pytest_pyfunc_call(pyfuncitem=self)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py",
line 512
return self._hookexec(self.name, self._hookimpls.copy(),
kwargs, firstresult)
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120
return self._inner_hookexec(hook_name, methods, kwargs,
firstresult)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py",
line 157
result = testfunction(**testargs)
File "/s3ql-source/tests/t0_http.py", line 486
fh = TextIOWrapper(conn)
warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
t0_http.py::test_read_text2[plain]
t0_http.py::test_read_text2[ssl]
/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/unraisableexception.py:67:
PytestUnraisableExceptionWarning: Exception ignored in:
<_io.TextIOWrapper encoding='UTF-8'>
AttributeError: 'HTTPConnection' object has no attribute 'flush'
During handling of the above exception, another exception
occurred:
Traceback (most recent call last):
File "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line 157, in pytest_pyfunc_call
result = testfunction(**testargs)
AttributeError: 'HTTPConnection' object has no attribute
'close'. Did you mean: 'closed'?
Object allocated at:
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/main.py",
line 367
item.config.hook.pytest_runtest_protocol(item=item,
nextitem=nextitem)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py",
line 512
return self._hookexec(self.name, self._hookimpls.copy(),
kwargs, firstresult)
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120
return self._inner_hookexec(hook_name, methods, kwargs,
firstresult)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 117
runtestprotocol(item, nextitem=nextitem)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 136
reports.append(call_and_report(item, "call", log))
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 245
call = CallInfo.from_call(
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 344
result: TResult | None = func()
File "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line 246
lambda: runtest_hook(item=item, **kwds), when=when,
reraise=reraise
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line 512
return self._hookexec(self.name, self._hookimpls.copy(),
kwargs, firstresult)
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120
return self._inner_hookexec(hook_name, methods, kwargs,
firstresult)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 178
item.runtest()
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py",
line 1671
self.ihook.pytest_pyfunc_call(pyfuncitem=self)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py",
line 512
return self._hookexec(self.name, self._hookimpls.copy(),
kwargs, firstresult)
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120
return self._inner_hookexec(hook_name, methods, kwargs,
firstresult)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py",
line 157
result = testfunction(**testargs)
File "/s3ql-source/tests/t0_http.py", line 494
fh = TextIOWrapper(conn)
warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
t0_http.py::test_read_text3[plain]
t0_http.py::test_read_text3[ssl]
/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/unraisableexception.py:67:
PytestUnraisableExceptionWarning: Exception ignored in:
<_io.TextIOWrapper encoding='UTF-8'>
AttributeError: 'HTTPConnection' object has no attribute 'flush'
During handling of the above exception, another exception
occurred:
Traceback (most recent call last):
File "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py", line 157, in pytest_pyfunc_call
result = testfunction(**testargs)
AttributeError: 'HTTPConnection' object has no attribute
'close'. Did you mean: 'closed'?
Object allocated at:
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/main.py",
line 367
item.config.hook.pytest_runtest_protocol(item=item,
nextitem=nextitem)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py",
line 512
return self._hookexec(self.name, self._hookimpls.copy(),
kwargs, firstresult)
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120
return self._inner_hookexec(hook_name, methods, kwargs,
firstresult)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 117
runtestprotocol(item, nextitem=nextitem)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 136
reports.append(call_and_report(item, "call", log))
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 245
call = CallInfo.from_call(
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 344
result: TResult | None = func()
File "/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py", line 246
lambda: runtest_hook(item=item, **kwds), when=when,
reraise=reraise
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py", line 512
return self._hookexec(self.name, self._hookimpls.copy(),
kwargs, firstresult)
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120
return self._inner_hookexec(hook_name, methods, kwargs,
firstresult)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/runner.py",
line 178
item.runtest()
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py",
line 1671
self.ihook.pytest_pyfunc_call(pyfuncitem=self)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_hooks.py",
line 512
return self._hookexec(self.name, self._hookimpls.copy(),
kwargs, firstresult)
File "/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_manager.py", line 120
return self._inner_hookexec(hook_name, methods, kwargs,
firstresult)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/pluggy/_callers.py",
line 121
res = hook_impl.function(*args)
File
"/s3ql-source/.venv/lib/python3.13/site-packages/_pytest/python.py",
line 157
result = testfunction(**testargs)
File "/s3ql-source/tests/t0_http.py", line 503
fh = TextIOWrapper(conn)
warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
Until we address Python 3.13 compatibility issues, you might want
to install S3QL inside a venv with Python 3.12.
$ python3 -m pytest tests/t0_http.py::test_aborted_write2[ssl]
================================================================================== test session starts ===================================================================================
platform linux -- Python 3.13.5, pytest-8.3.5, pluggy-1.5.0 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /.../s3ql-git/tests
configfile: pytest.ini
plugins: trio-0.8.0, typeguard-4.4.2
collected 1 item
tests/t0_http.py::test_aborted_write2[ssl] PASSED [100%]
=================================================================================== 1 passed in 0.72s ====================================================================================
Yes - this works! Thanks ever so much - I notice this has already been applied to the 5.4 release.One more issue I ran in to for trixie is that something seems to have changed for the type checking. If I set --metadata-backup-interval=0 to disable automatic uploading I get this sort of error:> TypeError: '<' not supported between instances of 'NoneType' and 'int' at mount.py:670 → with > trio.move_on_after(self.options.metadata_backup_interval):