Your message dated Wed, 17 Jan 2024 13:59:10 +0100
with message-id 
<CADsTwj+iDc8ovbgqFXnj39ACoeG1ZgvFQ=+kho9tscn+wxo...@mail.gmail.com>
and subject line last upload does build
has caused the Debian Bug report #1056420,
regarding logbook's autopkg tests fail with Python 3.12
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
1056420: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1056420
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: src:logbook
Version: 1.5.3-5.2
Severity: important
Tags: sid trixie
User: debian-pyt...@lists.debian.org
Usertags: python3.12

logbook's autopkg tests fail with Python 3.12:

[...]
332s =================================== FAILURES =================================== 332s __________________________ test_warning_redirections ___________________________
332s
332s     def test_warning_redirections():
332s         from logbook.compat import redirected_warnings
332s         with logbook.TestHandler() as handler:
332s             redirector = redirected_warnings()
332s             redirector.start()
332s             try:
332s                 from warnings import warn, resetwarnings
332s                 resetwarnings()
332s warn(RuntimeWarning('Testing' + str(next(test_warning_redirections_i))))
332s             finally:
332s                 redirector.end()
332s
332s >       assert len(handler.records) == 1
332s E       assert 2 == 1
332s E + where 2 = len([<logbook.base.LogRecord object at 0x7f8f80d180b0>, <logbook.base.LogRecord object at 0x7f8f8157ec30>]) 332s E + where [<logbook.base.LogRecord object at 0x7f8f80d180b0>, <logbook.base.LogRecord object at 0x7f8f8157ec30>] = <logbook.handlers.TestHandler object at 0x7f8f80972ae0>.records
332s
332s tests/test_logging_compat.py:86: AssertionError
332s _________________________ test_mail_handler_arguments __________________________
332s
332s     def test_mail_handler_arguments():
332s         with patch('smtplib.SMTP', autospec=True) as mock_smtp:
332s
332s # Test the mail handler with supported arguments before changes to
332s             # secure, credentials, and starttls
332s             mail_handler = logbook.MailHandler(
332s                 from_addr='f...@example.com',
332s                 recipients='t...@example.com',
332s                 server_addr=('server.example.com', 465),
332s                 credentials=('username', 'password'),
332s                 secure=('keyfile', 'certfile'))
332s
332s >           mail_handler.get_connection()
332s
332s tests/test_mail_handler.py:126:
332s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 332s /usr/lib/python3/dist-packages/logbook/handlers.py:1380: in get_connection
332s     con.starttls(keyfile=keyfile, certfile=certfile)
332s /usr/lib/python3.12/unittest/mock.py:1132: in __call__
332s     self._mock_check_sig(*args, **kwargs)
332s /usr/lib/python3.12/unittest/mock.py:131: in checksig
332s     sig.bind(*args, **kwargs)
332s /usr/lib/python3.12/inspect.py:3259: in bind
332s     return self._bind(args, kwargs)
332s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
332s
332s self = <Signature (*, context=None)>, args = ()
332s kwargs = {'certfile': 'certfile', 'keyfile': 'keyfile'}
332s
332s     def _bind(self, args, kwargs, *, partial=False):
332s         """Private method. Don't use directly."""
332s
332s         arguments = {}
332s
332s         parameters = iter(self.parameters.values())
332s         parameters_ex = ()
332s         arg_vals = iter(args)
332s
332s         while True:
332s # Let's iterate through the positional arguments and corresponding
332s             # parameters
332s             try:
332s                 arg_val = next(arg_vals)
332s             except StopIteration:
332s                 # No more positional arguments
332s                 try:
332s                     param = next(parameters)
332s                 except StopIteration:
332s # No more parameters. That's it. Just need to check that
332s                     # we have no `kwargs` after this while loop
332s                     break
332s                 else:
332s                     if param.kind == _VAR_POSITIONAL:
332s # That's OK, just empty *args. Let's start parsing
332s                         # kwargs
332s                         break
332s                     elif param.name in kwargs:
332s                         if param.kind == _POSITIONAL_ONLY:
332s msg = '{arg!r} parameter is positional only, ' \
332s                                   'but was passed as a keyword'
332s                             msg = msg.format(arg=param.name)
332s                             raise TypeError(msg) from None
332s                         parameters_ex = (param,)
332s                         break
332s                     elif (param.kind == _VAR_KEYWORD or
332s param.default is not _empty): 332s # That's fine too - we have a default value for this 332s # parameter. So, lets start parsing `kwargs`, starting
332s                         # with the current parameter
332s                         parameters_ex = (param,)
332s                         break
332s                     else:
332s # No default, not VAR_KEYWORD, not VAR_POSITIONAL,
332s                         # not in `kwargs`
332s                         if partial:
332s                             parameters_ex = (param,)
332s                             break
332s                         else:
332s                             if param.kind == _KEYWORD_ONLY:
332s                                 argtype = ' keyword-only'
332s                             else:
332s                                 argtype = ''
332s msg = 'missing a required{argtype} argument: {arg!r}' 332s msg = msg.format(arg=param.name, argtype=argtype)
332s                             raise TypeError(msg) from None
332s             else:
332s                 # We have a positional argument to process
332s                 try:
332s                     param = next(parameters)
332s                 except StopIteration:
332s raise TypeError('too many positional arguments') from None
332s                 else:
332s                     if param.kind in (_VAR_KEYWORD, _KEYWORD_ONLY):
332s # Looks like we have no parameter for this positional
332s                         # argument
332s                         raise TypeError(
332s                             'too many positional arguments') from None
332s
332s                     if param.kind == _VAR_POSITIONAL:
332s # We have an '*args'-like argument, let's fill it with 332s # all positional arguments we have left and move on to
332s                         # the next phase
332s                         values = [arg_val]
332s                         values.extend(arg_vals)
332s                         arguments[param.name] = tuple(values)
332s                         break
332s
332s if param.name in kwargs and param.kind != _POSITIONAL_ONLY:
332s                         raise TypeError(
332s 'multiple values for argument {arg!r}'.format(
332s                                 arg=param.name)) from None
332s
332s                     arguments[param.name] = arg_val
332s
332s         # Now, we iterate through the remaining parameters to process
332s         # keyword arguments
332s         kwargs_param = None
332s         for param in itertools.chain(parameters_ex, parameters):
332s             if param.kind == _VAR_KEYWORD:
332s                 # Memorize that we have a '**kwargs'-like parameter
332s                 kwargs_param = param
332s                 continue
332s
332s             if param.kind == _VAR_POSITIONAL:
332s # Named arguments don't refer to '*args'-like parameters.
332s                 # We only arrive here if the positional arguments ended
332s                 # before reaching the last parameter before *args.
332s                 continue
332s
332s             param_name = param.name
332s             try:
332s                 arg_val = kwargs.pop(param_name)
332s             except KeyError:
332s # We have no value for this parameter. It's fine though,
332s                 # if it has a default value, or it is an '*args'-like
332s                 # parameter, left alone by the processing of positional
332s                 # arguments.
332s                 if (not partial and param.kind != _VAR_POSITIONAL and
332s param.default is _empty): 332s raise TypeError('missing a required argument: {arg!r}'. \
332s                                     format(arg=param_name)) from None
332s
332s             else:
332s                 if param.kind == _POSITIONAL_ONLY:
332s # This should never happen in case of a properly built
332s                     # Signature object (but let's have this check here
332s                     # to ensure correct behaviour just in case)
332s raise TypeError('{arg!r} parameter is positional only, '
332s                                     'but was passed as a keyword'. \
332s                                     format(arg=param.name))
332s
332s                 arguments[param_name] = arg_val
332s
332s         if kwargs:
332s             if kwargs_param is not None:
332s                 # Process our '**kwargs'-like parameter
332s                 arguments[kwargs_param.name] = kwargs
332s             else:
332s >               raise TypeError(
332s 'got an unexpected keyword argument {arg!r}'.format(
332s                         arg=next(iter(kwargs))))
332s E               TypeError: got an unexpected keyword argument 'keyfile'
332s
332s /usr/lib/python3.12/inspect.py:3248: TypeError
332s =============================== warnings summary ===============================
332s tests/test_asyncio.py::test_asyncio_context_management
332s /tmp/autopkgtest.2S63iW/autopkgtest_tmp/build/tests/test_asyncio.py:21: DeprecationWarning: There is no current event loop 332s asyncio.get_event_loop().run_until_complete(asyncio.gather(task(h1, 'task1'), task(h2, 'task2')))
332s
332s tests/test_asyncio.py: 200 warnings
332s tests/test_deadlock.py: 2 warnings
332s tests/test_file_handler.py: 80 warnings
332s tests/test_fingers_crossed_handler.py: 26 warnings
332s tests/test_flags.py: 4 warnings
332s tests/test_groups.py: 7 warnings
332s tests/test_handler_errors.py: 2 warnings
332s tests/test_handlers.py: 31 warnings
332s tests/test_log_record.py: 10 warnings
332s tests/test_logbook.py: 16 warnings
332s tests/test_logging_api.py: 14 warnings
332s tests/test_logging_compat.py: 11 warnings
332s tests/test_logging_times.py: 2 warnings
332s tests/test_mail_handler.py: 20 warnings
332s tests/test_more.py: 19 warnings
332s tests/test_null_handler.py: 8 warnings
332s tests/test_processors.py: 4 warnings
332s tests/test_queues.py: 2 warnings
332s tests/test_syslog_handler.py: 12 warnings
332s tests/test_test_handler.py: 32 warnings
332s tests/test_unicode.py: 7 warnings
332s tests/test_utils.py: 15 warnings
332s /usr/lib/python3/dist-packages/logbook/base.py:466: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
332s     self.time = _datetime_factory()
332s
332s tests/test_file_handler.py: 16 warnings
332s /usr/lib/python3/dist-packages/logbook/handlers.py:902: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
332s     self._timestamp = self._get_timestamp(_datetime_factory())
332s
332s tests/test_fingers_crossed_handler.py: 26 warnings
332s tests/test_logging_api.py: 4 warnings
332s tests/test_mail_handler.py: 16 warnings
332s /usr/lib/python3/dist-packages/logbook/concurrency.py:141: DeprecationWarning: currentThread() is deprecated, use current_thread() instead
332s     return currentThread().getName()
332s
332s tests/test_fingers_crossed_handler.py: 26 warnings
332s tests/test_logging_api.py: 4 warnings
332s tests/test_mail_handler.py: 16 warnings
332s /usr/lib/python3/dist-packages/logbook/concurrency.py:141: DeprecationWarning: getName() is deprecated, get the name attribute instead
332s     return currentThread().getName()
332s
332s tests/test_helpers.py::test_datehelpers
332s /usr/lib/python3/dist-packages/logbook/helpers.py:220: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
332s     d = datetime.utcnow()
332s
332s tests/test_logging_compat.py: 10 warnings
332s /usr/lib/python3/dist-packages/logbook/compat.py:128: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
332s     return datetime.utcfromtimestamp(timestamp)
332s
332s tests/test_logging_times.py::test_timedate_format[ContextEnteringStrategy]
332s tests/test_logging_times.py::test_timedate_format[PushingStrategy]
332s /tmp/autopkgtest.2S63iW/autopkgtest_tmp/build/tests/test_logging_times.py:30: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
332s     t2 = datetime.utcnow()
332s
332s tests/test_queues.py::test_missing_zeromq
332s /usr/lib/python3/dist-packages/_pytest/unraisableexception.py:78: PytestUnraisableExceptionWarning: Exception ignored in: <function ZeroMQHandler.__del__ at 0x7f8f80909e40>
332s
332s   Traceback (most recent call last):
332s File "/usr/lib/python3/dist-packages/logbook/queues.py", line 241, in __del__
332s       self.close(linger=100)
332s File "/usr/lib/python3/dist-packages/logbook/queues.py", line 232, in close
332s       self.socket.close(linger)
332s       ^^^^^^^^^^^
332s   AttributeError: 'ZeroMQHandler' object has no attribute 'socket'
332s
332s     warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
332s
332s tests/test_queues.py::test_threaded_wrapper_handler
332s tests/test_queues.py::test_threaded_wrapper_handler_emit
332s tests/test_queues.py::test_threaded_wrapper_handler_emit_batched
332s /usr/lib/python3/dist-packages/logbook/queues.py:621: DeprecationWarning: setDaemon() is deprecated, set the daemon attribute instead
332s     self._thread.setDaemon(True)
332s
332s tests/test_queues.py::test_subscriber_group
332s tests/test_queues.py::test_subscriber_group
332s /usr/lib/python3/dist-packages/logbook/queues.py:261: DeprecationWarning: setDaemon() is deprecated, set the daemon attribute instead
332s     self._thread.setDaemon(True)
332s
332s tests/test_queues.py: 20 warnings
332s /usr/lib/python3.12/multiprocessing/popen_fork.py:66: DeprecationWarning: This process (pid=2431) is multi-threaded, use of fork() may lead to deadlocks in the child.
332s     self.pid = os.fork()
332s
332s -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
332s =========================== short test summary info ============================ 332s FAILED tests/test_logging_compat.py::test_warning_redirections - assert 2 == 1 332s FAILED tests/test_mail_handler.py::test_mail_handler_arguments - TypeError: g... 332s =========== 2 failed, 194 passed, 17 skipped, 672 warnings in 1.85s ============ 332s E: pybuild pybuild:395: test: plugin distutils failed with: exit code=1: cd /tmp/autopkgtest.2S63iW/autopkgtest_tmp/build; python3.12 -m pytest tests
--- End Message ---
--- Begin Message ---
Version: 1.7.0-1.0

last upload does build with Python 3.12

--- End Message ---

Reply via email to