Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ addopts = [
"--cov", "cruizlib",
"--cov-report", "term-missing:skip-covered",
"--import-mode=importlib",
"-x",
]
pythonpath = [
"tests",
Expand Down
16 changes: 13 additions & 3 deletions src/cruizlib/multiprocessingmessagequeuetype.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,19 @@
"""Type annotation for multiprocssing Queues on Messages."""

import multiprocessing
import multiprocessing.queues

from cruizlib.interop.message import Message

# pylint: disable=unsubscriptable-object
MultiProcessingMessageQueueType = multiprocessing.Queue[Message]
MultiProcessingStringJoinableQueueType = multiprocessing.JoinableQueue[str]
# multiprocessing.Queue is a function rather than a class, so it does not satisfy
# the usual static type rules
# multiprocessing.queues is undocumented in more recent Pythons
# see https://github.com/python/cpython/issues/99509#issuecomment-1742069772
# unfortunately canot do this while older Pythons (at least 3.10) are being tested
try:
MultiProcessingMessageQueueType = multiprocessing.queues.Queue[Message]
MultiProcessingStringJoinableQueueType = multiprocessing.queues.JoinableQueue[str]
except TypeError:
# pylint: disable=unsubscriptable-object
MultiProcessingMessageQueueType = multiprocessing.Queue[Message]
MultiProcessingStringJoinableQueueType = multiprocessing.JoinableQueue[str]
32 changes: 0 additions & 32 deletions tests/interop/test_imports.py

This file was deleted.

38 changes: 38 additions & 0 deletions tests/test_imports.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
"""Tests for imports that are prohibited."""

import importlib
import os
import pathlib
import sys

import pytest


@pytest.mark.skipif(
sys.version_info < (3, 13),
reason="multiprocessing type annotation quirks in older Python versions",
)
def test_no_gui_imports() -> None:
"""Ensure no GUI imports are in the cruizlib package."""
current_file_path = pathlib.Path(__file__)
tests_dir = current_file_path.parent
root_dir = tests_dir.parent
src_dir = root_dir / "src"
cruiz_lib_src = src_dir / "cruizlib"
for file in cruiz_lib_src.rglob("*.py"):
if "v1" in os.fspath(file) or "v2" in os.fspath(file):
# those modules that import conan cannot be tested "in process"
continue
module_path = os.fspath(file.relative_to(src_dir)).replace(os.path.sep, ".")
module_name = module_path.replace(".py", "")
assert importlib.import_module(module_name)
modules = list(sys.modules.keys())
modules = [module for module in modules if module.startswith("PySide")]
allow_list_prefix = ("PySide6.support",)
modules = [module for module in modules if not module.startswith(allow_list_prefix)]
allow_list_exact = (
"PySide6",
"PySide6.QtCore",
)
modules = [module for module in modules if module not in allow_list_exact]
assert not modules
Loading