From eda37061c4b4068a2fd6b051f9becfc8ae7bba10 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 7 Jan 2025 09:37:35 -1000 Subject: [PATCH] chore: switch to ruff (#339) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 12 +++++------- README.md | 4 ++-- examples/example-service.py | 2 +- pyproject.toml | 9 +++++++++ src/dbus_fast/_private/address.py | 2 +- src/dbus_fast/_private/marshaller.py | 2 +- src/dbus_fast/_private/unmarshaller.py | 2 +- src/dbus_fast/_private/util.py | 2 +- src/dbus_fast/aio/__init__.py | 4 ++-- src/dbus_fast/aio/message_bus.py | 2 +- src/dbus_fast/aio/proxy_object.py | 2 +- src/dbus_fast/auth.py | 2 +- src/dbus_fast/errors.py | 6 +++--- src/dbus_fast/glib/__init__.py | 4 ++-- src/dbus_fast/glib/proxy_object.py | 2 +- src/dbus_fast/introspection.py | 2 +- src/dbus_fast/message.py | 2 +- src/dbus_fast/message_bus.py | 2 +- src/dbus_fast/proxy_object.py | 2 +- src/dbus_fast/send_reply.py | 2 +- src/dbus_fast/service.py | 2 +- src/dbus_fast/signature.py | 2 +- tests/client/test_methods.py | 2 +- tests/client/test_properties.py | 2 +- tests/client/test_signals.py | 2 +- tests/service/test_decorators.py | 2 +- tests/service/test_methods.py | 16 ++++++++++++---- tests/test_address_parser.py | 5 +++-- tests/test_disconnect.py | 5 +++-- tests/test_marshaller.py | 4 +--- tests/util.py | 2 +- 31 files changed, 63 insertions(+), 48 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 28042b9..d4de1b2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -37,14 +37,12 @@ repos: hooks: - id: pyupgrade args: [--py39-plus] - - repo: https://github.com/PyCQA/isort - rev: 5.13.2 + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.8.2 hooks: - - id: isort - - repo: https://github.com/psf/black - rev: 24.10.0 - hooks: - - id: black + - id: ruff + args: [--fix, --exit-non-zero-on-fix] + - id: ruff-format # - repo: https://github.com/codespell-project/codespell # rev: v2.2.1 # hooks: diff --git a/README.md b/README.md index 5a99dc1..75889e0 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ Poetry - - black + + Ruff pre-commit diff --git a/examples/example-service.py b/examples/example-service.py index ef7f3f5..ccb20bc 100755 --- a/examples/example-service.py +++ b/examples/example-service.py @@ -25,7 +25,7 @@ class ExampleInterface(ServiceInterface): return [what1, what2] @method() - def GetVariantDict(self) -> "a{sv}": + def GetVariantDict(self) -> "a{sv}": # noqa: F722 return { "foo": Variant("s", "bar"), "bat": Variant("x", -55), diff --git a/pyproject.toml b/pyproject.toml index a06aa75..053a972 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -105,3 +105,12 @@ ignore_errors = true [build-system] requires = ['setuptools>=65.4.1', 'wheel', 'Cython>=3,<3.1.0', "poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" + +[tool.ruff] +target-version = "py39" +line-length = 88 + +[tool.ruff.lint] +ignore = [ + "F821", # undefined names are used for decorators +] diff --git a/src/dbus_fast/_private/address.py b/src/dbus_fast/_private/address.py index ee1b48b..ee150f2 100644 --- a/src/dbus_fast/_private/address.py +++ b/src/dbus_fast/_private/address.py @@ -1,6 +1,6 @@ import os import re -from typing import Dict, List, Optional, Tuple +from typing import Optional from urllib.parse import unquote from ..constants import BusType diff --git a/src/dbus_fast/_private/marshaller.py b/src/dbus_fast/_private/marshaller.py index c69bcbe..18e0232 100644 --- a/src/dbus_fast/_private/marshaller.py +++ b/src/dbus_fast/_private/marshaller.py @@ -1,5 +1,5 @@ from struct import Struct, error -from typing import Any, Callable, Dict, List, Optional, Tuple, Union +from typing import Any, Callable, Optional, Union from ..signature import SignatureType, Variant, get_signature_tree diff --git a/src/dbus_fast/_private/unmarshaller.py b/src/dbus_fast/_private/unmarshaller.py index 2d8af54..a2327df 100644 --- a/src/dbus_fast/_private/unmarshaller.py +++ b/src/dbus_fast/_private/unmarshaller.py @@ -5,7 +5,7 @@ import socket import sys from collections.abc import Iterable from struct import Struct -from typing import Any, Callable, Dict, List, Optional, Tuple, Union +from typing import Any, Callable, Optional, Union from ..constants import MESSAGE_FLAG_MAP, MESSAGE_TYPE_MAP, MessageFlag from ..errors import InvalidMessageError diff --git a/src/dbus_fast/_private/util.py b/src/dbus_fast/_private/util.py index 5e37252..b7c2366 100644 --- a/src/dbus_fast/_private/util.py +++ b/src/dbus_fast/_private/util.py @@ -1,6 +1,6 @@ import ast import inspect -from typing import Any, List, Tuple, Union +from typing import Any, Union from ..signature import SignatureTree, Variant, get_signature_tree diff --git a/src/dbus_fast/aio/__init__.py b/src/dbus_fast/aio/__init__.py index 020dcc7..e04a895 100644 --- a/src/dbus_fast/aio/__init__.py +++ b/src/dbus_fast/aio/__init__.py @@ -1,2 +1,2 @@ -from .message_bus import MessageBus -from .proxy_object import ProxyInterface, ProxyObject +from .message_bus import MessageBus as MessageBus +from .proxy_object import ProxyInterface as ProxyInterface, ProxyObject as ProxyObject diff --git a/src/dbus_fast/aio/message_bus.py b/src/dbus_fast/aio/message_bus.py index 8d4ae9e..e3b4aea 100644 --- a/src/dbus_fast/aio/message_bus.py +++ b/src/dbus_fast/aio/message_bus.py @@ -6,7 +6,7 @@ import socket from collections import deque from copy import copy from functools import partial -from typing import Any, Callable, List, Optional, Set, Tuple +from typing import Any, Callable, Optional from .. import introspection as intr from ..auth import Authenticator, AuthExternal diff --git a/src/dbus_fast/aio/proxy_object.py b/src/dbus_fast/aio/proxy_object.py index c37f146..75e1ba0 100644 --- a/src/dbus_fast/aio/proxy_object.py +++ b/src/dbus_fast/aio/proxy_object.py @@ -1,5 +1,5 @@ import xml.etree.ElementTree as ET -from typing import TYPE_CHECKING, Any, List, Union +from typing import TYPE_CHECKING, Any, Union from .. import introspection as intr from .._private.util import replace_fds_with_idx, replace_idx_with_fds diff --git a/src/dbus_fast/auth.py b/src/dbus_fast/auth.py index e8a36ab..7e39589 100644 --- a/src/dbus_fast/auth.py +++ b/src/dbus_fast/auth.py @@ -1,6 +1,6 @@ import enum import os -from typing import List, Optional, Tuple +from typing import Optional from .errors import AuthError diff --git a/src/dbus_fast/errors.py b/src/dbus_fast/errors.py index 0ef39c1..5f2a1e7 100644 --- a/src/dbus_fast/errors.py +++ b/src/dbus_fast/errors.py @@ -53,9 +53,9 @@ class InvalidMemberNameError(TypeError): super().__init__(f"invalid member name: {member}") -from .constants import ErrorType, MessageType -from .message import Message -from .validators import assert_interface_name_valid +from .constants import ErrorType, MessageType # noqa: E402 +from .message import Message # noqa: E402 +from .validators import assert_interface_name_valid # noqa: E402 class DBusError(Exception): diff --git a/src/dbus_fast/glib/__init__.py b/src/dbus_fast/glib/__init__.py index 020dcc7..e04a895 100644 --- a/src/dbus_fast/glib/__init__.py +++ b/src/dbus_fast/glib/__init__.py @@ -1,2 +1,2 @@ -from .message_bus import MessageBus -from .proxy_object import ProxyInterface, ProxyObject +from .message_bus import MessageBus as MessageBus +from .proxy_object import ProxyInterface as ProxyInterface, ProxyObject as ProxyObject diff --git a/src/dbus_fast/glib/proxy_object.py b/src/dbus_fast/glib/proxy_object.py index 2322456..71d8e6e 100644 --- a/src/dbus_fast/glib/proxy_object.py +++ b/src/dbus_fast/glib/proxy_object.py @@ -1,5 +1,5 @@ import xml.etree.ElementTree as ET -from typing import List, Union +from typing import Union from .. import introspection as intr from ..constants import ErrorType diff --git a/src/dbus_fast/introspection.py b/src/dbus_fast/introspection.py index dccddd9..2c97db5 100644 --- a/src/dbus_fast/introspection.py +++ b/src/dbus_fast/introspection.py @@ -1,5 +1,5 @@ import xml.etree.ElementTree as ET -from typing import List, Optional, Union +from typing import Optional, Union from .constants import ArgDirection, PropertyAccess from .errors import InvalidIntrospectionError diff --git a/src/dbus_fast/message.py b/src/dbus_fast/message.py index 56b13bd..44aeb55 100644 --- a/src/dbus_fast/message.py +++ b/src/dbus_fast/message.py @@ -1,4 +1,4 @@ -from typing import Any, List, Optional, Union +from typing import Any, Optional, Union from ._private.constants import LITTLE_ENDIAN, PROTOCOL_VERSION, HeaderField from ._private.marshaller import Marshaller diff --git a/src/dbus_fast/message_bus.py b/src/dbus_fast/message_bus.py index a30eb1a..2534127 100644 --- a/src/dbus_fast/message_bus.py +++ b/src/dbus_fast/message_bus.py @@ -4,7 +4,7 @@ import socket import traceback import xml.etree.ElementTree as ET from functools import partial -from typing import Any, Callable, Dict, List, Optional, Type, Union +from typing import Any, Callable, Optional, Union from . import introspection as intr from ._private.address import get_bus_address, parse_address diff --git a/src/dbus_fast/proxy_object.py b/src/dbus_fast/proxy_object.py index cc83f4a..e9c40b2 100644 --- a/src/dbus_fast/proxy_object.py +++ b/src/dbus_fast/proxy_object.py @@ -6,7 +6,7 @@ import xml.etree.ElementTree as ET from collections.abc import Coroutine from dataclasses import dataclass from functools import lru_cache -from typing import Callable, Dict, List, Optional, Type, Union +from typing import Callable, Optional, Union from . import introspection as intr from . import message_bus diff --git a/src/dbus_fast/send_reply.py b/src/dbus_fast/send_reply.py index a90587b..00d4440 100644 --- a/src/dbus_fast/send_reply.py +++ b/src/dbus_fast/send_reply.py @@ -1,6 +1,6 @@ import traceback from types import TracebackType -from typing import TYPE_CHECKING, Optional, Type +from typing import TYPE_CHECKING, Optional from .constants import ErrorType from .errors import DBusError diff --git a/src/dbus_fast/service.py b/src/dbus_fast/service.py index 25defde..b31120a 100644 --- a/src/dbus_fast/service.py +++ b/src/dbus_fast/service.py @@ -2,7 +2,7 @@ import asyncio import copy import inspect from functools import wraps -from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Set, Tuple +from typing import TYPE_CHECKING, Any, Callable, Optional from . import introspection as intr from ._private.util import ( diff --git a/src/dbus_fast/signature.py b/src/dbus_fast/signature.py index 940cf02..23afbe5 100644 --- a/src/dbus_fast/signature.py +++ b/src/dbus_fast/signature.py @@ -1,5 +1,5 @@ from functools import lru_cache -from typing import Any, Callable, Dict, List, Optional, Tuple, Union +from typing import Any, Callable, Optional, Union from .errors import InvalidSignatureError, SignatureBodyMismatchError from .validators import is_object_path_valid diff --git a/tests/client/test_methods.py b/tests/client/test_methods.py index ffade23..aac6059 100644 --- a/tests/client/test_methods.py +++ b/tests/client/test_methods.py @@ -40,7 +40,7 @@ class ExampleInterface(ServiceInterface): return [what1, what2, what3] @method() - def GetComplex(self) -> "a{sv}": + def GetComplex(self) -> "a{sv}": # noqa: F722 """Return complex output.""" return {"hello": Variant("s", "world")} diff --git a/tests/client/test_properties.py b/tests/client/test_properties.py index c628903..eab9073 100644 --- a/tests/client/test_properties.py +++ b/tests/client/test_properties.py @@ -31,7 +31,7 @@ class ExampleInterface(ServiceInterface): return self._int64_property @dbus_property(access=PropertyAccess.READ) - def ComplexProperty(self) -> "a{sv}": + def ComplexProperty(self) -> "a{sv}": # noqa: F722 """Return complex output.""" return {"hello": Variant("s", "world")} diff --git a/tests/client/test_signals.py b/tests/client/test_signals.py index d08473d..85b3fc4 100644 --- a/tests/client/test_signals.py +++ b/tests/client/test_signals.py @@ -21,7 +21,7 @@ class ExampleInterface(ServiceInterface): return ["hello", "world"] @signal() - def SignalComplex(self) -> "a{sv}": + def SignalComplex(self) -> "a{sv}": # noqa: F722 """Broadcast a complex signal.""" return {"hello": Variant("s", "world")} diff --git a/tests/service/test_decorators.py b/tests/service/test_decorators.py index b1769ef..8278b3b 100644 --- a/tests/service/test_decorators.py +++ b/tests/service/test_decorators.py @@ -19,7 +19,7 @@ class ExampleInterface(ServiceInterface): pass @signal() - def some_signal(self) -> "as": + def some_signal(self) -> "as": # noqa: F722 return ["result"] @signal(name="renamed_signal", disabled=True) diff --git a/tests/service/test_methods.py b/tests/service/test_methods.py index 6fdfe5d..99f21b6 100644 --- a/tests/service/test_methods.py +++ b/tests/service/test_methods.py @@ -29,8 +29,12 @@ class ExampleInterface(ServiceInterface): @method() def echo_containers( - self, array: "as", variant: "v", dict_entries: "a{sv}", struct: "(s(s(v)))" - ) -> "asva{sv}(s(s(v)))": + self, + array: "as", # noqa: F722 + variant: "v", + dict_entries: "a{sv}", # noqa: F722 + struct: "(s(s(v)))", # noqa: F722 + ) -> "asva{sv}(s(s(v)))": # noqa: F722 assert type(self) is ExampleInterface return [array, variant, dict_entries, struct] @@ -76,8 +80,12 @@ class AsyncInterface(ServiceInterface): @method() async def echo_containers( - self, array: "as", variant: "v", dict_entries: "a{sv}", struct: "(s(s(v)))" - ) -> "asva{sv}(s(s(v)))": + self, + array: "as", # noqa: F722 + variant: "v", + dict_entries: "a{sv}", # noqa: F722 + struct: "(s(s(v)))", # noqa: F722 + ) -> "asva{sv}(s(s(v)))": # noqa: F722 assert type(self) is AsyncInterface return [array, variant, dict_entries, struct] diff --git a/tests/test_address_parser.py b/tests/test_address_parser.py index bf999c1..c162ca2 100644 --- a/tests/test_address_parser.py +++ b/tests/test_address_parser.py @@ -63,8 +63,9 @@ def test_get_session_bus_address(): with patch.dict(os.environ, DBUS_SESSION_BUS_ADDRESS="unix:path=/dog"): assert get_session_bus_address() == "unix:path=/dog" assert get_bus_address(BusType.SESSION) == "unix:path=/dog" - with patch.dict(os.environ, DBUS_SESSION_BUS_ADDRESS="", DISPLAY=""), pytest.raises( - InvalidAddressError + with ( + patch.dict(os.environ, DBUS_SESSION_BUS_ADDRESS="", DISPLAY=""), + pytest.raises(InvalidAddressError), ): assert get_session_bus_address() diff --git a/tests/test_disconnect.py b/tests/test_disconnect.py index b8fa367..e4bd9bc 100644 --- a/tests/test_disconnect.py +++ b/tests/test_disconnect.py @@ -52,8 +52,9 @@ async def test_unexpected_disconnect(event_loop): await bus.connect() assert bus.connected - with patch.object(bus._writer, "_write_without_remove_writer"), patch.object( - bus._writer, "sock", FakeSocket() + with ( + patch.object(bus._writer, "_write_without_remove_writer"), + patch.object(bus._writer, "sock", FakeSocket()), ): ping = bus.call( Message( diff --git a/tests/test_marshaller.py b/tests/test_marshaller.py index debe82c..7a04ce4 100644 --- a/tests/test_marshaller.py +++ b/tests/test_marshaller.py @@ -2,7 +2,7 @@ import io import json import os from enum import Enum -from typing import Any, Dict +from typing import Any import pytest @@ -101,8 +101,6 @@ def test_marshalling_with_table(): @pytest.mark.parametrize("unmarshall_table", (table,)) def test_unmarshalling_with_table(unmarshall_table): - from dbus_fast._private import unmarshaller - for item in unmarshall_table: stream = io.BytesIO(bytes.fromhex(item["data"])) unmarshaller = Unmarshaller(stream) diff --git a/tests/util.py b/tests/util.py index 80c7f3f..658a398 100644 --- a/tests/util.py +++ b/tests/util.py @@ -7,7 +7,7 @@ def check_gi_repository(): if _has_gi is not None: return _has_gi try: - from gi.repository import GLib + from gi.repository import GLib # noqa: F401 _has_gi = True return _has_gi