summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Devaev <[email protected]>2023-05-04 12:37:05 +0300
committerMaxim Devaev <[email protected]>2023-05-04 12:37:05 +0300
commitb5353e63cd52b0d98e7a56acc5c8fbfc6ad8b3ee (patch)
tree3176f1a738b9533e6f3a28b132e4501a6f97f991
parentb5d67314977a7e475fac164446031ca7c83b8bc4 (diff)
python 3.11 fixes
-rw-r--r--PKGBUILD10
-rw-r--r--kvmd/aiotools.py7
-rw-r--r--kvmd/apps/kvmd/streamer.py5
-rw-r--r--kvmd/inotify.py5
-rw-r--r--kvmd/plugins/ugpio/tesmart.py12
-rwxr-xr-xsetup.py2
-rw-r--r--testenv/linters/mypy.ini2
-rw-r--r--testenv/tox.ini16
8 files changed, 37 insertions, 22 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 6545c3ab..e5956bf2 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -39,11 +39,11 @@ url="https://github.com/pikvm/kvmd"
license=(GPL)
arch=(any)
depends=(
- "python>=3.10"
- "python<3.11"
+ "python>=3.11"
+ "python<3.12"
python-yaml
- "python-aiohttp>=3.7.4.post0-1.1"
- "python-aiofiles>=23.1.0-1"
+ python-aiohttp
+ python-aiofiles
python-passlib
python-pyotp
python-qrcode
@@ -60,7 +60,7 @@ depends=(
python-pygments
python-pyghmi
python-pam
- "python-pillow>=8.3.1-1"
+ python-pillow
python-xlib
libxkbcommon
python-hidapi
diff --git a/kvmd/aiotools.py b/kvmd/aiotools.py
index c87e8268..51ad6ca8 100644
--- a/kvmd/aiotools.py
+++ b/kvmd/aiotools.py
@@ -202,7 +202,7 @@ async def wait_infinite() -> None:
await asyncio.sleep(3600)
-async def wait_first(*aws: Awaitable) -> tuple[set[asyncio.Task], set[asyncio.Task]]:
+async def wait_first(*aws: (asyncio.Future | asyncio.Task)) -> tuple[set[asyncio.Task], set[asyncio.Task]]:
return (await asyncio.wait(list(aws), return_when=asyncio.FIRST_COMPLETED))
@@ -242,7 +242,10 @@ class AioNotifier:
await self.__queue.get()
else:
try:
- await asyncio.wait_for(self.__queue.get(), timeout=timeout)
+ await asyncio.wait_for(
+ asyncio.ensure_future(self.__queue.get()),
+ timeout=timeout,
+ )
except asyncio.TimeoutError:
return # False
while not self.__queue.empty():
diff --git a/kvmd/apps/kvmd/streamer.py b/kvmd/apps/kvmd/streamer.py
index 3cdb301a..ce4db816 100644
--- a/kvmd/apps/kvmd/streamer.py
+++ b/kvmd/apps/kvmd/streamer.py
@@ -329,7 +329,10 @@ class Streamer: # pylint: disable=too-many-instance-attributes
if waiter_task is None:
waiter_task = asyncio.create_task(self.__notifier.wait())
- if waiter_task in (await aiotools.wait_first(asyncio.sleep(self.__state_poll), waiter_task))[0]:
+ if waiter_task in (await aiotools.wait_first(
+ asyncio.ensure_future(asyncio.sleep(self.__state_poll)),
+ waiter_task,
+ ))[0]:
waiter_task = None
# =====
diff --git a/kvmd/inotify.py b/kvmd/inotify.py
index b66ca443..c157c1ca 100644
--- a/kvmd/inotify.py
+++ b/kvmd/inotify.py
@@ -215,7 +215,10 @@ class Inotify:
async def get_event(self, timeout: float) -> (InotifyEvent | None):
assert timeout > 0
try:
- return (await asyncio.wait_for(self.__events_queue.get(), timeout=timeout))
+ return (await asyncio.wait_for(
+ asyncio.ensure_future(self.__events_queue.get()),
+ timeout=timeout,
+ ))
except asyncio.TimeoutError:
return None
diff --git a/kvmd/plugins/ugpio/tesmart.py b/kvmd/plugins/ugpio/tesmart.py
index c7e410f6..1e869ed2 100644
--- a/kvmd/plugins/ugpio/tesmart.py
+++ b/kvmd/plugins/ugpio/tesmart.py
@@ -137,8 +137,14 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
assert self.__writer is not None
try:
self.__writer.write(b"\xAA\xBB\x03%s\xEE" % (cmd))
- await asyncio.wait_for(self.__writer.drain(), timeout=self.__timeout)
- return (await asyncio.wait_for(self.__reader.readexactly(6), timeout=self.__timeout))[4]
+ await asyncio.wait_for(
+ asyncio.ensure_future(self.__writer.drain()),
+ timeout=self.__timeout,
+ )
+ return (await asyncio.wait_for(
+ asyncio.ensure_future(self.__reader.readexactly(6)),
+ timeout=self.__timeout,
+ ))[4]
except Exception as err:
get_logger(0).error("Can't send command to TESmart KVM [%s]:%d: %s",
self.__host, self.__port, tools.efmt(err))
@@ -155,7 +161,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
async def __ensure_device_net(self) -> None:
try:
(self.__reader, self.__writer) = await asyncio.wait_for(
- asyncio.open_connection(self.__host, self.__port),
+ asyncio.ensure_future(asyncio.open_connection(self.__host, self.__port)),
timeout=self.__timeout,
)
except Exception as err:
diff --git a/setup.py b/setup.py
index 4cccb345..58715f1c 100755
--- a/setup.py
+++ b/setup.py
@@ -145,7 +145,7 @@ def main() -> None:
classifiers=[
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
"Development Status :: 5 - Production/Stable",
- "Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.11",
"Topic :: System :: Systems Administration",
"Operating System :: POSIX :: Linux",
"Intended Audience :: System Administrators",
diff --git a/testenv/linters/mypy.ini b/testenv/linters/mypy.ini
index 33877875..d436fd2c 100644
--- a/testenv/linters/mypy.ini
+++ b/testenv/linters/mypy.ini
@@ -1,5 +1,5 @@
[mypy]
-python_version = 3.10
+python_version = 3.11
ignore_missing_imports = true
disallow_untyped_defs = true
strict_optional = true
diff --git a/testenv/tox.ini b/testenv/tox.ini
index 77f8521a..c0efad82 100644
--- a/testenv/tox.ini
+++ b/testenv/tox.ini
@@ -3,12 +3,12 @@ envlist = flake8, pylint, mypy, vulture, pytest, eslint, htmlhint, shellcheck
skipsdist = true
[testenv]
-basepython = python3.10
+basepython = python3.11
sitepackages = true
changedir = /src
[testenv:flake8]
-whitelist_externals = bash
+allowlist_externals = bash
commands = bash -c 'flake8 --config=testenv/linters/flake8.ini kvmd testenv/tests *.py'
deps =
flake8==5.0.4
@@ -16,7 +16,7 @@ deps =
-rrequirements.txt
[testenv:pylint]
-whitelist_externals = bash
+allowlist_externals = bash
commands = bash -c 'pylint -j0 --rcfile=testenv/linters/pylint.ini --output-format=colorized --reports=no kvmd testenv/tests *.py'
deps =
pylint
@@ -26,14 +26,14 @@ deps =
-rrequirements.txt
[testenv:mypy]
-whitelist_externals = bash
+allowlist_externals = bash
commands = bash -c 'mypy --config-file=testenv/linters/mypy.ini --cache-dir=testenv/.mypy_cache kvmd testenv/tests *.py'
deps =
mypy
-rrequirements.txt
[testenv:vulture]
-whitelist_externals = bash
+allowlist_externals = bash
commands = bash -c 'vulture --ignore-names=_format_P,Plugin --ignore-decorators=@exposed_http,@exposed_ws,@pytest.fixture kvmd testenv/tests *.py testenv/linters/vulture-wl.py'
deps =
vulture
@@ -53,13 +53,13 @@ deps =
-rrequirements.txt
[testenv:eslint]
-whitelist_externals = eslint
+allowlist_externals = eslint
commands = eslint --cache-location=/tmp --config=testenv/linters/eslintrc.yaml --color --ext .js web/share/js
[testenv:htmlhint]
-whitelist_externals = htmlhint
+allowlist_externals = htmlhint
commands = htmlhint --config=testenv/linters/htmlhint.json web/*.html web/*/*.html
[testenv:shellcheck]
-whitelist_externals = bash
+allowlist_externals = bash
commands = bash -c 'shellcheck --color=always kvmd.install scripts/*'