Your message dated Tue, 16 Jun 2026 09:05:40 +0000
with message-id <[email protected]>
and subject line Bug#1139486: fixed in python-scrapli 2023.7.30-6
has caused the Debian Bug report #1139486,
regarding python-scrapli: FTBFS: E RuntimeError: There is no current
event loop in thread 'MainThread'.
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 [email protected]
immediately.)
--
1139486: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139486
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: src:python-scrapli
Version: 2023.7.30-5
Severity: serious
Tags: ftbfs forky sid
Dear maintainer:
During a rebuild of all packages in unstable, this package failed to build.
Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:
https://people.debian.org/~sanvila/build-logs/202606/
About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.
If you cannot reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.
If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:python-scrapli, so that this is still
visible in the BTS web page for this package.
Thanks.
--------------------------------------------------------------------------------
[...]
debian/rules clean
make: pyversions: No such file or directory
py3versions: no X-Python3-Version in control file, using supported versions
dh clean --with python3 --buildsystem=pybuild
debian/rules override_dh_auto_clean
make[1]: Entering directory '/<<PKGBUILDDIR>>'
make[1]: pyversions: No such file or directory
py3versions: no X-Python3-Version in control file, using supported versions
rm -rf build *.egg-info .pybuild
find . -iname '*.pyc' -delete
for i in $(find . -type d -iname __pycache__) ; do rm -rf $i ; done
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
dh_autoreconf_clean -O--buildsystem=pybuild
dh_clean -O--buildsystem=pybuild
debian/rules binary
[... snipped ...]
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f261b6f1710>
asyncssh_transport =
<scrapli.transport.plugins.asyncssh.transport.AsyncsshTransport object at
0x7f26176c0ad0>
def test_close_catch_brokenpipe(monkeypatch, asyncssh_transport):
def _close(cls):
raise BrokenPipeError
monkeypatch.setattr(
"asyncssh.connection.SSHClientConnection.close",
_close,
)
# lie and pretend the session is already assigned
options = DumbContainer()
asyncssh_transport.session = SSHClientConnection(
> loop=asyncio.get_event_loop_policy().get_event_loop(),
> options=options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
tests/unit/transport/plugins/asyncssh/test_asyncssh_transport.py:59:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at
0x7f261b935be0>
def get_event_loop(self):
"""Get the event loop for the current context.
Returns an instance of EventLoop or raises an exception.
"""
if (self._local._loop is None and
not self._local._set_called and
threading.current_thread() is threading.main_thread()):
stacklevel = 2
try:
f = sys._getframe(1)
except AttributeError:
pass
else:
# Move up the call stack so that the warning is attached
# to the line outside asyncio itself.
while f:
module = f.f_globals.get('__name__')
if not (module == 'asyncio' or
module.startswith('asyncio.')):
break
f = f.f_back
stacklevel += 1
import warnings
warnings.warn('There is no current event loop',
DeprecationWarning, stacklevel=stacklevel)
self.set_event_loop(self.new_event_loop())
if self._local._loop is None:
> raise RuntimeError('There is no current event loop in thread %r.'
% threading.current_thread().name)
E RuntimeError: There is no current event loop in thread 'MainThread'.
/usr/lib/python3.13/asyncio/events.py:716: RuntimeError
_________________________________ test_isalive _________________________________
asyncssh_transport =
<scrapli.transport.plugins.asyncssh.transport.AsyncsshTransport object at
0x7f26176c12b0>
def test_isalive(asyncssh_transport):
# lie and pretend the session is already assigned
options = DumbContainer()
asyncssh_transport.session = SSHClientConnection(
> loop=asyncio.get_event_loop_policy().get_event_loop(),
> options=options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
tests/unit/transport/plugins/asyncssh/test_asyncssh_transport.py:77:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at
0x7f261b935be0>
def get_event_loop(self):
"""Get the event loop for the current context.
Returns an instance of EventLoop or raises an exception.
"""
if (self._local._loop is None and
not self._local._set_called and
threading.current_thread() is threading.main_thread()):
stacklevel = 2
try:
f = sys._getframe(1)
except AttributeError:
pass
else:
# Move up the call stack so that the warning is attached
# to the line outside asyncio itself.
while f:
module = f.f_globals.get('__name__')
if not (module == 'asyncio' or
module.startswith('asyncio.')):
break
f = f.f_back
stacklevel += 1
import warnings
warnings.warn('There is no current event loop',
DeprecationWarning, stacklevel=stacklevel)
self.set_event_loop(self.new_event_loop())
if self._local._loop is None:
> raise RuntimeError('There is no current event loop in thread %r.'
% threading.current_thread().name)
E RuntimeError: There is no current event loop in thread 'MainThread'.
/usr/lib/python3.13/asyncio/events.py:716: RuntimeError
_________________________ test_isalive_attribute_error _________________________
asyncssh_transport =
<scrapli.transport.plugins.asyncssh.transport.AsyncsshTransport object at
0x7f2616b97110>
def test_isalive_attribute_error(asyncssh_transport):
# lie and pretend the session is already assigned
options = DumbContainer()
asyncssh_transport.session = SSHClientConnection(
> loop=asyncio.get_event_loop_policy().get_event_loop(),
> options=options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
tests/unit/transport/plugins/asyncssh/test_asyncssh_transport.py:94:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at
0x7f261b935be0>
def get_event_loop(self):
"""Get the event loop for the current context.
Returns an instance of EventLoop or raises an exception.
"""
if (self._local._loop is None and
not self._local._set_called and
threading.current_thread() is threading.main_thread()):
stacklevel = 2
try:
f = sys._getframe(1)
except AttributeError:
pass
else:
# Move up the call stack so that the warning is attached
# to the line outside asyncio itself.
while f:
module = f.f_globals.get('__name__')
if not (module == 'asyncio' or
module.startswith('asyncio.')):
break
f = f.f_back
stacklevel += 1
import warnings
warnings.warn('There is no current event loop',
DeprecationWarning, stacklevel=stacklevel)
self.set_event_loop(self.new_event_loop())
if self._local._loop is None:
> raise RuntimeError('There is no current event loop in thread %r.'
% threading.current_thread().name)
E RuntimeError: There is no current event loop in thread 'MainThread'.
/usr/lib/python3.13/asyncio/events.py:716: RuntimeError
__________________________________ test_close __________________________________
asynctelnet_transport =
<scrapli.transport.plugins.asynctelnet.transport.AsynctelnetTransport object at
0x7f2616c19bd0>
def test_close(asynctelnet_transport):
# lie like connection is open
asynctelnet_transport.stdout = asyncio.StreamReader(
> loop=asyncio.get_event_loop_policy().get_event_loop()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
tests/unit/transport/plugins/asynctelnet/test_asynctelnet_transport.py:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at
0x7f261b935be0>
def get_event_loop(self):
"""Get the event loop for the current context.
Returns an instance of EventLoop or raises an exception.
"""
if (self._local._loop is None and
not self._local._set_called and
threading.current_thread() is threading.main_thread()):
stacklevel = 2
try:
f = sys._getframe(1)
except AttributeError:
pass
else:
# Move up the call stack so that the warning is attached
# to the line outside asyncio itself.
while f:
module = f.f_globals.get('__name__')
if not (module == 'asyncio' or
module.startswith('asyncio.')):
break
f = f.f_back
stacklevel += 1
import warnings
warnings.warn('There is no current event loop',
DeprecationWarning, stacklevel=stacklevel)
self.set_event_loop(self.new_event_loop())
if self._local._loop is None:
> raise RuntimeError('There is no current event loop in thread %r.'
% threading.current_thread().name)
E RuntimeError: There is no current event loop in thread 'MainThread'.
/usr/lib/python3.13/asyncio/events.py:716: RuntimeError
_________________________________ test_isalive _________________________________
asynctelnet_transport =
<scrapli.transport.plugins.asynctelnet.transport.AsynctelnetTransport object at
0x7f2616c1a210>
def test_isalive(asynctelnet_transport):
# lie like connection is open
asynctelnet_transport.stdout = asyncio.StreamReader(
> loop=asyncio.get_event_loop_policy().get_event_loop()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
tests/unit/transport/plugins/asynctelnet/test_asynctelnet_transport.py:105:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at
0x7f261b935be0>
def get_event_loop(self):
"""Get the event loop for the current context.
Returns an instance of EventLoop or raises an exception.
"""
if (self._local._loop is None and
not self._local._set_called and
threading.current_thread() is threading.main_thread()):
stacklevel = 2
try:
f = sys._getframe(1)
except AttributeError:
pass
else:
# Move up the call stack so that the warning is attached
# to the line outside asyncio itself.
while f:
module = f.f_globals.get('__name__')
if not (module == 'asyncio' or
module.startswith('asyncio.')):
break
f = f.f_back
stacklevel += 1
import warnings
warnings.warn('There is no current event loop',
DeprecationWarning, stacklevel=stacklevel)
self.set_event_loop(self.new_event_loop())
if self._local._loop is None:
> raise RuntimeError('There is no current event loop in thread %r.'
% threading.current_thread().name)
E RuntimeError: There is no current event loop in thread 'MainThread'.
/usr/lib/python3.13/asyncio/events.py:716: RuntimeError
=============================== warnings summary ===============================
scrapli/helper.py:10
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_scrapli/build/scrapli/helper.py:10:
DeprecationWarning: pkg_resources is deprecated as an API. See
https://setuptools.pypa.io/en/latest/pkg_resources.html
import pkg_resources
tests/unit/transport/plugins/asyncssh/test_asyncssh_transport.py:11
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_scrapli/build/tests/unit/transport/plugins/asyncssh/test_asyncssh_transport.py:11:
DeprecationWarning: There is no current event loop
asyncio.get_event_loop()
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED
tests/unit/transport/plugins/asyncssh/test_asyncssh_transport.py::test_close
FAILED
tests/unit/transport/plugins/asyncssh/test_asyncssh_transport.py::test_close_catch_brokenpipe
FAILED
tests/unit/transport/plugins/asyncssh/test_asyncssh_transport.py::test_isalive
FAILED
tests/unit/transport/plugins/asyncssh/test_asyncssh_transport.py::test_isalive_attribute_error
FAILED
tests/unit/transport/plugins/asynctelnet/test_asynctelnet_transport.py::test_close
FAILED
tests/unit/transport/plugins/asynctelnet/test_asynctelnet_transport.py::test_isalive
===== 6 failed, 488 passed, 4 skipped, 43 deselected, 2 warnings in 7.83s ======
E: pybuild pybuild:485: test: plugin pyproject failed with: exit code=1: cd
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_scrapli/build; python3.13 -m pytest -v
tests/unit -k 'not test_factory_community_platform_defaults and not
test_factory_community_platform_variant and not
test_factory_no_scrapli_community_platform and not test_textfsm_get_template
and not test_textfsm_parse and not test_ttp_parse and not
test_response_parse_textfsm and not test_response_parse_ttp and not
test_open_channel_no_session and not test_isalive_no_session and not
test_write_exception and not test_socket_open_connection_refused and not
test_socket_open_close_isalive and not test_socket_bool'
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.14
3.13" --parallel=2 returned exit code 13
make: *** [debian/rules:50: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess failed with exit
status 2
--------------------------------------------------------------------------------
--- End Message ---
--- Begin Message ---
Source: python-scrapli
Source-Version: 2023.7.30-6
Done: Thomas Goirand <[email protected]>
We believe that the bug you reported is fixed in the latest version of
python-scrapli, which is due to be installed in the Debian FTP archive.
A summary of the changes between this version and the previous one is
attached.
Thank you for reporting the bug, which will now be closed. If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
pp.
Thomas Goirand <[email protected]> (supplier of updated python-scrapli package)
(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Format: 1.8
Date: Tue, 16 Jun 2026 10:34:59 +0200
Source: python-scrapli
Architecture: source
Version: 2023.7.30-6
Distribution: unstable
Urgency: medium
Maintainer: Debian OpenStack <[email protected]>
Changed-By: Thomas Goirand <[email protected]>
Closes: 1139486
Changes:
python-scrapli (2023.7.30-6) unstable; urgency=medium
.
* Blacklist broken tests (Closes: #1139486).
Checksums-Sha1:
5f3462a3dc06889551f9a2cf3c2f9874f73919f9 2303 python-scrapli_2023.7.30-6.dsc
630b8d7989856aba4b5e14ad0bb003fdf7acb2f2 4032
python-scrapli_2023.7.30-6.debian.tar.xz
9ac713afede03f74dcf638b495e9302b61d001b0 8695
python-scrapli_2023.7.30-6_amd64.buildinfo
Checksums-Sha256:
16342cc0a1e1077ec6d1ce7c4ed659b47fda7b3ea8dd4c22267332c7d88a95ae 2303
python-scrapli_2023.7.30-6.dsc
d602da25150184ef4b54fb6e4f495c03b1c901871856210efca14ebed635d87d 4032
python-scrapli_2023.7.30-6.debian.tar.xz
ab5a8ff97d6c9bffb4921c135f0071394d4d16980686f2f8bb669b8cc4bcd334 8695
python-scrapli_2023.7.30-6_amd64.buildinfo
Files:
98534612023386aa9c6d3af341bd3adb 2303 python optional
python-scrapli_2023.7.30-6.dsc
dce592a5549976e8484da58ae7c2e8cb 4032 python optional
python-scrapli_2023.7.30-6.debian.tar.xz
7bba26e88e64c1b655bf094b59b2eff6 8695 python optional
python-scrapli_2023.7.30-6_amd64.buildinfo
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCgAdFiEEoLGp81CJVhMOekJc1BatFaxrQ/4FAmoxDooACgkQ1BatFaxr
Q/6hdg//fDsl1kiF2Nyc7o4zviuliyF0H8Sk7EMG2c7rWvDGek4rQaWdN30yRhU+
sXf/r0CCYQsGZ59JwQBYk7s5LRhvNQyyrugiblv/Tv+3TDMB9une6628Mc4dLGa2
adqp5MN4oBPq1W2rN8GuTrQiL/3P9yx5h6kyfwS49Bi9Fb03kibjuwUGS3M2Ro6j
S9IlC5dOdd5PceqlWA6+gQusUJaEEFptUckpI6THUs592T2KPYaHtPJ5Yz31X5Wm
bbMOFl9RPFBow8FDz1znxEA6cIhQukwTmUh9/LS1jcOBByLHMXT6h6+T9HdkazZQ
YPVTrd/t8Mlp7owvllKoF6SEsp6/Alxa5u3gQejYi4tTPsFBh9EHAA3JmJGwT2GP
neUmlr+gnw4GV3Yvnv2jQOUnFtPKYBikrIa13GwpaU5Q0GlZPGbAgtvzdOgpEjhP
Pl5ahr7SmjZ7Ac8/H4x4daaXwW8ckIMzTyWfaW0VNd73NtabcYNvRZ+LG0HUjoEc
ZllZItYNZUK5ZC1CYn3TE4hiAyarF1C/TdceMGzoBwT/hr7gLXpfpCEk1zpGrC14
GLihj4UCW3/IfUmScE9SPGgfnot00UrOc4co5DWPLrg+7z0lpOn++m/VqJIArhHV
rraZ5TJGyEZZOGU2Grab2y1l1Ld9oxGUnl2vJ1kQ6zyucuROQEo=
=nXR5
-----END PGP SIGNATURE-----
pgp_0SYlv8Ay5.pgp
Description: PGP signature
--- End Message ---