From beac3b3ee896aefde5fee40d43501722a6bab29a Mon Sep 17 00:00:00 2001 From: Eric Dramstad Date: Sun, 10 May 2026 18:29:56 -0400 Subject: [PATCH 1/2] enable ruff's TC rules and future-annotations setting --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 96abbe6..8c6fff8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -91,10 +91,14 @@ dependency-groups.docs = { requires-python = ">=3.13" } [tool.ruff] line-length = 88 preview = true +lint.extend-select = [ + "TC", +] lint.ignore = [ "DTZ001", # call-datetime-without-tzinfo "DTZ005", # call-datetime-now-without-tzinfo ] +lint.future-annotations = true [tool.pyproject-fmt] indent = 4 From 95fb23c0a27a511c466d3fa91d562c0f1bde694c Mon Sep 17 00:00:00 2001 From: Eric Dramstad Date: Sun, 10 May 2026 18:33:02 -0400 Subject: [PATCH 2/2] fix TC issues --- coilmq/subscription.py | 7 +++++-- tests/functional/conftest.py | 8 +++++--- tests/functional/test_memory.py | 7 +++++-- tests/protocol/conftest.py | 6 ++++-- tests/protocol/test_1_1.py | 5 ++++- tests/protocol/test_stomp_1_2.py | 5 ++++- tests/queue_manager/__init__.py | 9 +++++++-- tests/queue_manager/conftest.py | 8 ++++++-- tests/queue_manager/test_dbm.py | 7 ++++++- tests/store/__init__.py | 7 ++++++- tests/store/test_dbm.py | 11 ++++++++--- tests/store/test_sa.py | 8 ++++++-- tests/test_engine.py | 6 ++++-- 13 files changed, 70 insertions(+), 24 deletions(-) diff --git a/coilmq/subscription.py b/coilmq/subscription.py index 8198412..3662568 100644 --- a/coilmq/subscription.py +++ b/coilmq/subscription.py @@ -1,9 +1,12 @@ +from __future__ import annotations + import itertools from collections import defaultdict from dataclasses import dataclass -from typing import Any +from typing import TYPE_CHECKING, Any -from coilmq.server import StompConnection +if TYPE_CHECKING: + from coilmq.server import StompConnection DEFAULT_SUBSCRIPTION_ID = 0 diff --git a/tests/functional/conftest.py b/tests/functional/conftest.py index eb69f59..69ee5bc 100644 --- a/tests/functional/conftest.py +++ b/tests/functional/conftest.py @@ -1,19 +1,21 @@ from __future__ import annotations import threading -from typing import Generator +from typing import TYPE_CHECKING, Generator import pytest -from coilmq.auth import Authenticator from coilmq.protocol import STOMP10 from coilmq.queue import QueueManager from coilmq.scheduler import FavorReliableSubscriberScheduler, RandomQueueScheduler from coilmq.server.socket_server import ThreadedStompServer -from coilmq.store import QueueStore from coilmq.topic import TopicManager from tests.functional import Client +if TYPE_CHECKING: + from coilmq.auth import Authenticator + from coilmq.store import QueueStore + @pytest.fixture def server( diff --git a/tests/functional/test_memory.py b/tests/functional/test_memory.py index 1b261a3..1adbd18 100644 --- a/tests/functional/test_memory.py +++ b/tests/functional/test_memory.py @@ -6,14 +6,17 @@ import zlib from queue import Empty +from typing import TYPE_CHECKING import pytest from coilmq.auth.simple import SimpleAuthenticator -from coilmq.server.socket_server import ThreadedStompServer from coilmq.store.memory import MemoryQueue from coilmq.util import frames -from tests.functional import Client + +if TYPE_CHECKING: + from coilmq.server.socket_server import ThreadedStompServer + from tests.functional import Client __authors__ = ['"Hans Lellelid" '] __copyright__ = "Copyright 2009 Hans Lellelid" diff --git a/tests/protocol/conftest.py b/tests/protocol/conftest.py index eee5b82..950d1fe 100644 --- a/tests/protocol/conftest.py +++ b/tests/protocol/conftest.py @@ -1,17 +1,19 @@ from __future__ import annotations -from typing import Generator +from typing import TYPE_CHECKING, Generator import pytest from coilmq.engine import StompEngine -from coilmq.protocol import STOMP11, STOMP12 from tests.mock import ( MockConnection, MockQueueManager, MockTopicManager, ) +if TYPE_CHECKING: + from coilmq.protocol import STOMP11, STOMP12 + @pytest.fixture def engine(protocol: type[STOMP11 | STOMP12]) -> Generator[StompEngine, None, None]: diff --git a/tests/protocol/test_1_1.py b/tests/protocol/test_1_1.py index 7014a02..bdd7569 100644 --- a/tests/protocol/test_1_1.py +++ b/tests/protocol/test_1_1.py @@ -1,14 +1,17 @@ from __future__ import annotations import time +from typing import TYPE_CHECKING import pytest -from coilmq.engine import StompEngine from coilmq.protocol import STOMP11 from coilmq.util import frames from coilmq.util.frames import ErrorFrame, Frame +if TYPE_CHECKING: + from coilmq.engine import StompEngine + @pytest.fixture def protocol() -> type[STOMP11]: diff --git a/tests/protocol/test_stomp_1_2.py b/tests/protocol/test_stomp_1_2.py index 958aef9..621fc3d 100644 --- a/tests/protocol/test_stomp_1_2.py +++ b/tests/protocol/test_stomp_1_2.py @@ -1,14 +1,17 @@ from __future__ import annotations import socket +from typing import TYPE_CHECKING import pytest -from coilmq.engine import StompEngine from coilmq.protocol import STOMP11, STOMP12 from coilmq.util import frames from coilmq.util.frames import Frame +if TYPE_CHECKING: + from coilmq.engine import StompEngine + @pytest.fixture def protocol() -> type[STOMP12]: diff --git a/tests/queue_manager/__init__.py b/tests/queue_manager/__init__.py index 2d95495..bafd180 100644 --- a/tests/queue_manager/__init__.py +++ b/tests/queue_manager/__init__.py @@ -1,16 +1,21 @@ """Tests for queue-related classes.""" +from __future__ import annotations + import re import uuid +from typing import TYPE_CHECKING import pytest -from coilmq.queue import QueueManager -from coilmq.store import QueueStore from coilmq.util import frames from coilmq.util.frames import Frame from tests.mock import MockConnection +if TYPE_CHECKING: + from coilmq.queue import QueueManager + from coilmq.store import QueueStore + __authors__ = ['"Hans Lellelid" '] __copyright__ = "Copyright 2009 Hans Lellelid" __license__ = """Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/tests/queue_manager/conftest.py b/tests/queue_manager/conftest.py index 50c9c95..9239894 100644 --- a/tests/queue_manager/conftest.py +++ b/tests/queue_manager/conftest.py @@ -1,11 +1,15 @@ -from typing import Generator +from __future__ import annotations + +from typing import TYPE_CHECKING, Generator import pytest from coilmq.queue import QueueManager -from coilmq.store import QueueStore from tests.mock import MockConnection +if TYPE_CHECKING: + from coilmq.store import QueueStore + @pytest.fixture def queue_manager(store: QueueStore) -> Generator[QueueManager, None, None]: diff --git a/tests/queue_manager/test_dbm.py b/tests/queue_manager/test_dbm.py index 15f59ff..983b0bc 100644 --- a/tests/queue_manager/test_dbm.py +++ b/tests/queue_manager/test_dbm.py @@ -1,12 +1,17 @@ """Test of the QueueManager when using a DBM backend (store).""" -from pathlib import Path +from __future__ import annotations + +from typing import TYPE_CHECKING import pytest from coilmq.store.dbm import DbmQueue from tests.queue_manager import QueueManagerTests +if TYPE_CHECKING: + from pathlib import Path + __authors__ = ['"Hans Lellelid" '] __copyright__ = "Copyright 2009 Hans Lellelid" __license__ = """Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/tests/store/__init__.py b/tests/store/__init__.py index d693feb..ff3368d 100644 --- a/tests/store/__init__.py +++ b/tests/store/__init__.py @@ -1,11 +1,16 @@ """Queue storage tests.""" +from __future__ import annotations + import uuid +from typing import TYPE_CHECKING -from coilmq.store import QueueStore from coilmq.util import frames from coilmq.util.frames import Frame +if TYPE_CHECKING: + from coilmq.store import QueueStore + __authors__ = ['"Hans Lellelid" '] __copyright__ = "Copyright 2009 Hans Lellelid" __license__ = """Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/tests/store/test_dbm.py b/tests/store/test_dbm.py index d94b651..33b7e65 100644 --- a/tests/store/test_dbm.py +++ b/tests/store/test_dbm.py @@ -1,19 +1,24 @@ """Test DBM queue storage.""" +from __future__ import annotations + import time import uuid from contextlib import closing -from pathlib import Path -from typing import Generator +from typing import TYPE_CHECKING, Generator import pytest -from coilmq.store import QueueStore from coilmq.store.dbm import DbmQueue from coilmq.util import frames from coilmq.util.frames import Frame from tests.store import BaseQueueTests +if TYPE_CHECKING: + from pathlib import Path + + from coilmq.store import QueueStore + __authors__ = ['"Hans Lellelid" '] __copyright__ = "Copyright 2009 Hans Lellelid" __license__ = """Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/tests/store/test_sa.py b/tests/store/test_sa.py index ecec727..e3aff04 100644 --- a/tests/store/test_sa.py +++ b/tests/store/test_sa.py @@ -1,17 +1,21 @@ """Test SQLAlchemy storage.""" +from __future__ import annotations + import datetime -from typing import Generator +from typing import TYPE_CHECKING, Generator import pytest from sqlalchemy import create_engine -from coilmq.store import QueueStore from coilmq.store.sa import SAQueue, init_model, meta, model from coilmq.util import frames from coilmq.util.frames import Frame from tests.store import BaseQueueTests +if TYPE_CHECKING: + from coilmq.store import QueueStore + __authors__ = ['"Hans Lellelid" '] __copyright__ = "Copyright 2009 Hans Lellelid" __license__ = """Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/tests/test_engine.py b/tests/test_engine.py index d02a9fa..2090071 100644 --- a/tests/test_engine.py +++ b/tests/test_engine.py @@ -2,11 +2,10 @@ from __future__ import annotations -from typing import Generator +from typing import TYPE_CHECKING, Generator import pytest -from coilmq.auth import Authenticator from coilmq.engine import StompEngine from coilmq.util import frames from coilmq.util.frames import Frame, ReceiptFrame @@ -17,6 +16,9 @@ MockTopicManager, ) +if TYPE_CHECKING: + from coilmq.auth import Authenticator + __authors__ = ['"Hans Lellelid" '] __copyright__ = "Copyright 2009 Hans Lellelid" __license__ = """Licensed under the Apache License, Version 2.0 (the "License");