Package: src:python-foobot-async Version: 1.0.1-2 Severity: serious Tags: ftbfs
Dear maintainer: During a rebuild of all packages in unstable, your package failed to build: -------------------------------------------------------------------------------- [...] debian/rules build make: pyversions: No such file or directory py3versions: no X-Python3-Version in control file, using supported versions dh build --buildsystem=pybuild --with python3 dh_update_autotools_config -O--buildsystem=pybuild dh_autoreconf -O--buildsystem=pybuild dh_auto_configure -O--buildsystem=pybuild dh_auto_build -O--buildsystem=pybuild I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" module I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation --wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13 * Building wheel... /usr/lib/python3/dist-packages/setuptools/dist.py:491: SetuptoolsDeprecationWarning: Invalid dash-separated options !! ******************************************************************************** Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead. By 2025-Mar-03, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self.warn_dash_deprecation(opt, section) running bdist_wheel running build running build_py creating build/lib/foobot_async copying foobot_async/__init__.py -> build/lib/foobot_async installing to build/bdist.linux-x86_64/wheel running install running install_lib creating build/bdist.linux-x86_64/wheel creating build/bdist.linux-x86_64/wheel/foobot_async copying build/lib/foobot_async/__init__.py -> build/bdist.linux-x86_64/wheel/./foobot_async running install_egg_info running egg_info creating foobot_async.egg-info writing foobot_async.egg-info/PKG-INFO writing dependency_links to foobot_async.egg-info/dependency_links.txt writing requirements to foobot_async.egg-info/requires.txt writing top-level names to foobot_async.egg-info/top_level.txt writing manifest file 'foobot_async.egg-info/SOURCES.txt' reading manifest file 'foobot_async.egg-info/SOURCES.txt' writing manifest file 'foobot_async.egg-info/SOURCES.txt' Copying foobot_async.egg-info to build/bdist.linux-x86_64/wheel/./foobot_async-1.0.1.egg-info running install_scripts creating build/bdist.linux-x86_64/wheel/foobot_async-1.0.1.dist-info/WHEEL creating '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/.tmp-orbvnmdv/foobot_async-1.0.1-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it adding 'foobot_async/__init__.py' adding 'foobot_async-1.0.1.dist-info/METADATA' adding 'foobot_async-1.0.1.dist-info/WHEEL' adding 'foobot_async-1.0.1.dist-info/top_level.txt' adding 'foobot_async-1.0.1.dist-info/zip-safe' adding 'foobot_async-1.0.1.dist-info/RECORD' removing build/bdist.linux-x86_64/wheel Successfully built foobot_async-1.0.1-py3-none-any.whl I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.13 with "installer" module I: pybuild plugin_pyproject:129: Building wheel for python3.12 with "build" module I: pybuild base:311: python3.12 -m build --skip-dependency-check --no-isolation --wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12 * Building wheel... /usr/lib/python3/dist-packages/setuptools/dist.py:491: SetuptoolsDeprecationWarning: Invalid dash-separated options !! ******************************************************************************** Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead. By 2025-Mar-03, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for details. ******************************************************************************** !! opt = self.warn_dash_deprecation(opt, section) running bdist_wheel running build running build_py installing to build/bdist.linux-x86_64/wheel running install running install_lib creating build/bdist.linux-x86_64/wheel creating build/bdist.linux-x86_64/wheel/foobot_async copying build/lib/foobot_async/__init__.py -> build/bdist.linux-x86_64/wheel/./foobot_async running install_egg_info running egg_info writing foobot_async.egg-info/PKG-INFO writing dependency_links to foobot_async.egg-info/dependency_links.txt writing requirements to foobot_async.egg-info/requires.txt writing top-level names to foobot_async.egg-info/top_level.txt reading manifest file 'foobot_async.egg-info/SOURCES.txt' writing manifest file 'foobot_async.egg-info/SOURCES.txt' Copying foobot_async.egg-info to build/bdist.linux-x86_64/wheel/./foobot_async-1.0.1.egg-info running install_scripts creating build/bdist.linux-x86_64/wheel/foobot_async-1.0.1.dist-info/WHEEL creating '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.12/.tmp-veh0p147/foobot_async-1.0.1-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it adding 'foobot_async/__init__.py' adding 'foobot_async-1.0.1.dist-info/METADATA' adding 'foobot_async-1.0.1.dist-info/WHEEL' adding 'foobot_async-1.0.1.dist-info/top_level.txt' adding 'foobot_async-1.0.1.dist-info/zip-safe' adding 'foobot_async-1.0.1.dist-info/RECORD' removing build/bdist.linux-x86_64/wheel Successfully built foobot_async-1.0.1-py3-none-any.whl I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.12 with "installer" module dh_auto_test -O--buildsystem=pybuild I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build; python3.13 -m pytest -v /<<PKGBUILDDIR>>/foobot_async/tests ============================= test session starts ============================== platform linux -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0 -- /usr/bin/python3.13 cachedir: .pytest_cache rootdir: /<<PKGBUILDDIR>> plugins: typeguard-4.4.1 collecting ... collected 10 items ../../../foobot_async/tests/test_foobot_async.py::test_get_devices_request FAILED [ 10%] ../../../foobot_async/tests/test_foobot_async.py::test_failed_auth_request FAILED [ 20%] ../../../foobot_async/tests/test_foobot_async.py::test_failed_bad_format_request FAILED [ 30%] ../../../foobot_async/tests/test_foobot_async.py::test_forbidden_access_request FAILED [ 40%] ../../../foobot_async/tests/test_foobot_async.py::test_overquota_request FAILED [ 50%] ../../../foobot_async/tests/test_foobot_async.py::test_internal_error_request FAILED [ 60%] ../../../foobot_async/tests/test_foobot_async.py::test_unhandled_error_request FAILED [ 70%] ../../../foobot_async/tests/test_foobot_async.py::test_get_last_data_request FAILED [ 80%] ../../../foobot_async/tests/test_foobot_async.py::test_get_historical_data_request FAILED [ 90%] ../../../foobot_async/tests/test_foobot_async.py::test_get_bad_data_request FAILED [100%] =================================== FAILURES =================================== ___________________________ test_get_devices_request ___________________________ def test_get_devices_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=200, body='''[{"uuid": "1234127987696AB", "userId": 2353, "mac": "013843C3C20A", "name": "FooBot"}]''') > resp = loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:20: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:720: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7fe7d3c26cf0> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError ___________________________ test_failed_auth_request ___________________________ def test_failed_auth_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=401, body='{"message": "invalid key provided"}') with pytest.raises(FoobotClient.AuthFailure): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:51: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:720: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7fe7d3c26cf0> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError ________________________ test_failed_bad_format_request ________________________ def test_failed_bad_format_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=400, body='''{"state": 400, "message": "ParseException : Bad date format : bad date format [test]", "requestedUri": "/v2/device/26025766336015C0/datapoint/test/last/test/", "stack": "[obfuscated]", "propagatedException": null}''') with pytest.raises(FoobotClient.BadFormat): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:64: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:720: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7fe7d3c26cf0> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError ________________________ test_forbidden_access_request _________________________ def test_forbidden_access_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=403, body='''{"{"state": 403, "message": null, "stack": "403 - Forbidden", "propagatedException": null }": "invalid key provided"}''') with pytest.raises(FoobotClient.ForbiddenAccess): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:76: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:720: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7fe7d3c26cf0> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError ____________________________ test_overquota_request ____________________________ def test_overquota_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=429, body='') with pytest.raises(FoobotClient.TooManyRequests): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:85: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:720: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7fe7d3c26cf0> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError _________________________ test_internal_error_request __________________________ def test_internal_error_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=500, body='') with pytest.raises(FoobotClient.InternalError): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:94: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:720: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7fe7d3c26cf0> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError _________________________ test_unhandled_error_request _________________________ def test_unhandled_error_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=404, body='') with pytest.raises(FoobotClient.ClientError): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:720: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7fe7d3c26cf0> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError __________________________ test_get_last_data_request __________________________ def test_get_last_data_request(): body = '''{"uuid": "1234127987696AB", "start": 1518131274, "end": 1518131874, "sensors": ["time", "pm", "tmp", "hum", "co2", "voc", "allpollu"], "units": [ "s", "ugm3", "C", "pc", "ppm", "ppb", "%" ], "datapoints": [ [ 1518131274, 135.70001, 21.046001, 46.6885, 1178.0, 325.5, 131.19643 ] ] }''' with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/device/1234127987696AB/datapoint/600/last/601/', status=200, body=body) > resp = > loop.run_until_complete(client.get_last_data("1234127987696AB", 600, 601)) ../../../foobot_async/tests/test_foobot_async.py:118: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:720: in run_until_complete return future.result() ../../../foobot_async/__init__.py:86: in get_last_data return self.parse_data((await self._get( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7fe7d3c26cf0> path = 'https://api.foobot.io/v2/device/1234127987696AB/datapoint/600/last/601/' kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError _______________________ test_get_historical_data_request _______________________ def test_get_historical_data_request(): body = '''{"uuid": "1234127987696AB", "start": 1518131274, "end": 1518131874, "sensors": ["time", "pm", "tmp", "hum", "co2", "voc", "allpollu"], "units": [ "s", "ugm3", "C", "pc", "ppm", "ppb", "%" ], "datapoints": [ [ 1518131274, 135.70001, 21.046001, 46.6885, 1178.0, 325.5, 131.19643 ] ] }''' with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/device/1234127987696AB/datapoint/1518121274/1518131274/3600/', status=200, body=body) > resp = > loop.run_until_complete(client.get_historical_data("1234127987696AB", datetime.utcfromtimestamp(1518121274), datetime.utcfromtimestamp(1518131274), 3600)) ../../../foobot_async/tests/test_foobot_async.py:142: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:720: in run_until_complete return future.result() ../../../foobot_async/__init__.py:117: in get_historical_data return self.parse_data((await self._get( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7fe7d3c26cf0> path = 'https://api.foobot.io/v2/device/1234127987696AB/datapoint/1518121274/1518131274/3600/' kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError __________________________ test_get_bad_data_request ___________________________ def test_get_bad_data_request(): body = '''{"uuid": "1234127987696AB", "start": 1518131274, "end": 1518131874}''' with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/device/1234127987696AB/datapoint/1518121274/1518131274/3600/', status=200, body=body) with pytest.raises(FoobotClient.InvalidData): > > loop.run_until_complete(client.get_historical_data("1234127987696AB", datetime.utcfromtimestamp(1518121274), datetime.utcfromtimestamp(1518131274), 3600)) ../../../foobot_async/tests/test_foobot_async.py:165: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.13/asyncio/base_events.py:720: in run_until_complete return future.result() ../../../foobot_async/__init__.py:117: in get_historical_data return self.parse_data((await self._get( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7fe7d3c26cf0> path = 'https://api.foobot.io/v2/device/1234127987696AB/datapoint/1518121274/1518131274/3600/' kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError =============================== warnings summary =============================== foobot_async/tests/test_foobot_async.py::test_get_historical_data_request /<<PKGBUILDDIR>>/foobot_async/tests/test_foobot_async.py:143: 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). datetime.utcfromtimestamp(1518121274), foobot_async/tests/test_foobot_async.py::test_get_historical_data_request /<<PKGBUILDDIR>>/foobot_async/tests/test_foobot_async.py:144: 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). datetime.utcfromtimestamp(1518131274), foobot_async/tests/test_foobot_async.py::test_get_bad_data_request /<<PKGBUILDDIR>>/foobot_async/tests/test_foobot_async.py:166: 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). datetime.utcfromtimestamp(1518121274), foobot_async/tests/test_foobot_async.py::test_get_bad_data_request /<<PKGBUILDDIR>>/foobot_async/tests/test_foobot_async.py:167: 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). datetime.utcfromtimestamp(1518131274), -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED ../../../foobot_async/tests/test_foobot_async.py::test_get_devices_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_failed_auth_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_failed_bad_format_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_forbidden_access_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_overquota_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_internal_error_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_unhandled_error_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_get_last_data_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_get_historical_data_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_get_bad_data_request ======================== 10 failed, 4 warnings in 0.26s ======================== Unclosed client session client_session: <aiohttp.client.ClientSession object at 0x7fe7d3c27a10> E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build; python3.13 -m pytest -v /<<PKGBUILDDIR>>/foobot_async/tests I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12/build; python3.12 -m pytest -v /<<PKGBUILDDIR>>/foobot_async/tests ============================= test session starts ============================== platform linux -- Python 3.12.8, pytest-8.3.4, pluggy-1.5.0 -- /usr/bin/python3.12 cachedir: .pytest_cache rootdir: /<<PKGBUILDDIR>> plugins: typeguard-4.4.1 collecting ... collected 10 items ../../../foobot_async/tests/test_foobot_async.py::test_get_devices_request FAILED [ 10%] ../../../foobot_async/tests/test_foobot_async.py::test_failed_auth_request FAILED [ 20%] ../../../foobot_async/tests/test_foobot_async.py::test_failed_bad_format_request FAILED [ 30%] ../../../foobot_async/tests/test_foobot_async.py::test_forbidden_access_request FAILED [ 40%] ../../../foobot_async/tests/test_foobot_async.py::test_overquota_request FAILED [ 50%] ../../../foobot_async/tests/test_foobot_async.py::test_internal_error_request FAILED [ 60%] ../../../foobot_async/tests/test_foobot_async.py::test_unhandled_error_request FAILED [ 70%] ../../../foobot_async/tests/test_foobot_async.py::test_get_last_data_request FAILED [ 80%] ../../../foobot_async/tests/test_foobot_async.py::test_get_historical_data_request FAILED [ 90%] ../../../foobot_async/tests/test_foobot_async.py::test_get_bad_data_request FAILED [100%] =================================== FAILURES =================================== ___________________________ test_get_devices_request ___________________________ def test_get_devices_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=200, body='''[{"uuid": "1234127987696AB", "userId": 2353, "mac": "013843C3C20A", "name": "FooBot"}]''') > resp = loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:20: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/asyncio/base_events.py:686: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7f0acacb3260> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError ___________________________ test_failed_auth_request ___________________________ def test_failed_auth_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=401, body='{"message": "invalid key provided"}') with pytest.raises(FoobotClient.AuthFailure): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:51: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/asyncio/base_events.py:686: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7f0acacb3260> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError ________________________ test_failed_bad_format_request ________________________ def test_failed_bad_format_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=400, body='''{"state": 400, "message": "ParseException : Bad date format : bad date format [test]", "requestedUri": "/v2/device/26025766336015C0/datapoint/test/last/test/", "stack": "[obfuscated]", "propagatedException": null}''') with pytest.raises(FoobotClient.BadFormat): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:64: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/asyncio/base_events.py:686: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7f0acacb3260> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError ________________________ test_forbidden_access_request _________________________ def test_forbidden_access_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=403, body='''{"{"state": 403, "message": null, "stack": "403 - Forbidden", "propagatedException": null }": "invalid key provided"}''') with pytest.raises(FoobotClient.ForbiddenAccess): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:76: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/asyncio/base_events.py:686: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7f0acacb3260> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError ____________________________ test_overquota_request ____________________________ def test_overquota_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=429, body='') with pytest.raises(FoobotClient.TooManyRequests): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:85: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/asyncio/base_events.py:686: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7f0acacb3260> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError _________________________ test_internal_error_request __________________________ def test_internal_error_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=500, body='') with pytest.raises(FoobotClient.InternalError): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:94: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/asyncio/base_events.py:686: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7f0acacb3260> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError _________________________ test_unhandled_error_request _________________________ def test_unhandled_error_request(): with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/owner/exam...@example.com/device/', status=404, body='') with pytest.raises(FoobotClient.ClientError): > loop.run_until_complete(client.get_devices()) ../../../foobot_async/tests/test_foobot_async.py:103: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/asyncio/base_events.py:686: in run_until_complete return future.result() ../../../foobot_async/__init__.py:59: in get_devices return (await self._get(DEVICE_URL.format( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7f0acacb3260> path = 'https://api.foobot.io/v2/owner/exam...@example.com/device/', kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError __________________________ test_get_last_data_request __________________________ def test_get_last_data_request(): body = '''{"uuid": "1234127987696AB", "start": 1518131274, "end": 1518131874, "sensors": ["time", "pm", "tmp", "hum", "co2", "voc", "allpollu"], "units": [ "s", "ugm3", "C", "pc", "ppm", "ppb", "%" ], "datapoints": [ [ 1518131274, 135.70001, 21.046001, 46.6885, 1178.0, 325.5, 131.19643 ] ] }''' with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/device/1234127987696AB/datapoint/600/last/601/', status=200, body=body) > resp = > loop.run_until_complete(client.get_last_data("1234127987696AB", 600, 601)) ../../../foobot_async/tests/test_foobot_async.py:118: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/asyncio/base_events.py:686: in run_until_complete return future.result() ../../../foobot_async/__init__.py:86: in get_last_data return self.parse_data((await self._get( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7f0acacb3260> path = 'https://api.foobot.io/v2/device/1234127987696AB/datapoint/600/last/601/' kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError _______________________ test_get_historical_data_request _______________________ def test_get_historical_data_request(): body = '''{"uuid": "1234127987696AB", "start": 1518131274, "end": 1518131874, "sensors": ["time", "pm", "tmp", "hum", "co2", "voc", "allpollu"], "units": [ "s", "ugm3", "C", "pc", "ppm", "ppb", "%" ], "datapoints": [ [ 1518131274, 135.70001, 21.046001, 46.6885, 1178.0, 325.5, 131.19643 ] ] }''' with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/device/1234127987696AB/datapoint/1518121274/1518131274/3600/', status=200, body=body) > resp = > loop.run_until_complete(client.get_historical_data("1234127987696AB", datetime.utcfromtimestamp(1518121274), datetime.utcfromtimestamp(1518131274), 3600)) ../../../foobot_async/tests/test_foobot_async.py:142: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/asyncio/base_events.py:686: in run_until_complete return future.result() ../../../foobot_async/__init__.py:117: in get_historical_data return self.parse_data((await self._get( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7f0acacb3260> path = 'https://api.foobot.io/v2/device/1234127987696AB/datapoint/1518121274/1518131274/3600/' kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError __________________________ test_get_bad_data_request ___________________________ def test_get_bad_data_request(): body = '''{"uuid": "1234127987696AB", "start": 1518131274, "end": 1518131874}''' with aioresponses() as mocked: mocked.get('https://api.foobot.io/v2/device/1234127987696AB/datapoint/1518121274/1518131274/3600/', status=200, body=body) with pytest.raises(FoobotClient.InvalidData): > > loop.run_until_complete(client.get_historical_data("1234127987696AB", datetime.utcfromtimestamp(1518121274), datetime.utcfromtimestamp(1518131274), 3600)) ../../../foobot_async/tests/test_foobot_async.py:165: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/asyncio/base_events.py:686: in run_until_complete return future.result() ../../../foobot_async/__init__.py:117: in get_historical_data return self.parse_data((await self._get( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <foobot_async.FoobotClient object at 0x7f0acacb3260> path = 'https://api.foobot.io/v2/device/1234127987696AB/datapoint/1518121274/1518131274/3600/' kwargs = {} async def _get(self, path, **kwargs): if not hasattr(self, '_session'): self._session = aiohttp.ClientSession() > with async_timeout.timeout(self._timeout): E TypeError: 'Timeout' object does not support the context manager protocol ../../../foobot_async/__init__.py:158: TypeError =============================== warnings summary =============================== foobot_async/tests/test_foobot_async.py::test_get_historical_data_request /<<PKGBUILDDIR>>/foobot_async/tests/test_foobot_async.py:143: 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). datetime.utcfromtimestamp(1518121274), foobot_async/tests/test_foobot_async.py::test_get_historical_data_request /<<PKGBUILDDIR>>/foobot_async/tests/test_foobot_async.py:144: 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). datetime.utcfromtimestamp(1518131274), foobot_async/tests/test_foobot_async.py::test_get_bad_data_request /<<PKGBUILDDIR>>/foobot_async/tests/test_foobot_async.py:166: 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). datetime.utcfromtimestamp(1518121274), foobot_async/tests/test_foobot_async.py::test_get_bad_data_request /<<PKGBUILDDIR>>/foobot_async/tests/test_foobot_async.py:167: 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). datetime.utcfromtimestamp(1518131274), -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED ../../../foobot_async/tests/test_foobot_async.py::test_get_devices_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_failed_auth_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_failed_bad_format_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_forbidden_access_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_overquota_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_internal_error_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_unhandled_error_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_get_last_data_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_get_historical_data_request FAILED ../../../foobot_async/tests/test_foobot_async.py::test_get_bad_data_request ======================== 10 failed, 4 warnings in 0.29s ======================== Unclosed client session client_session: <aiohttp.client.ClientSession object at 0x7f0aca987aa0> E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12/build; python3.12 -m pytest -v /<<PKGBUILDDIR>>/foobot_async/tests dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.13 3.12" returned exit code 13 make: *** [debian/rules:9: build] Error 25 dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2 -------------------------------------------------------------------------------- The above is just how the build ends and not necessarily the most relevant part. If required, the full build log is available here: https://people.debian.org/~sanvila/build-logs/202412/ 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 could not 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 affects, so that this is still visible in the BTS web page for this package. Thanks.