--- Begin Message ---
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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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.
--- End Message ---