Skip to content

Commit 511b7ac

Browse files
authored
Added support for Python3.14 (#43)
* Prepare release 1.5.0 * Set min 3 minutes for SaaS fixture * Fixed linting * Tried to fix workflows * Patched the issue in itde * Patched the issue in itde * Patched the issue in itde * Patched the issue in itde * Patched the issue in itde * Patched the issue in itde * split `slow-checks.yml` * split `slow-checks.yml` * split `slow-checks.yml` * split `slow-checks.yml` * split `slow-checks.yml` * undone split `slow-checks.yml` * undone split `slow-checks.yml`
1 parent f86d06e commit 511b7ac

10 files changed

Lines changed: 137 additions & 36 deletions

File tree

.github/workflows/checks.yml

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.github/workflows/fast-tests.yml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

doc/changes/changelog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Changes
22

33
* [unreleased](unreleased.md)
4+
* [1.5.0](changes_1.5.0.md)
45
* [1.4.1](changes_1.4.1.md)
56
* [1.4.0](changes_1.4.0.md)
67
* [1.3.0](changes_1.3.0.md)
@@ -26,6 +27,7 @@
2627
hidden:
2728
---
2829
unreleased
30+
changes_1.5.0
2931
changes_1.4.1
3032
changes_1.4.0
3133
changes_1.3.0

doc/changes/changes_1.5.0.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# 1.5.0 - 2026-06-25
2+
3+
## Summary
4+
5+
## Security Issues
6+
7+
This release fixes vulnerabilities by updating dependencies:
8+
9+
| Dependency | Vulnerability | Affected | Fixed in |
10+
|------------|---------------|----------|----------|
11+
| cryptography | GHSA-537c-gmf6-5ccf | 47.0.0 | 48.0.1 |
12+
| gitpython | GHSA-mv93-w799-cj2w | 3.1.49 | 3.1.50 |
13+
| idna | PYSEC-2026-215 | 3.13 | 3.15 |
14+
| msgpack | GHSA-6v7p-g79w-8964 | 1.1.2 | 1.2.1 |
15+
| pip | PYSEC-2026-196 | 26.1 | 26.1.2 |
16+
| tornado | CVE-2026-49854 | 6.5.5 | 6.5.6 |
17+
| tornado | CVE-2026-49853 | 6.5.5 | 6.5.6 |
18+
| tornado | CVE-2026-49855 | 6.5.5 | 6.5.6 |
19+
| tornado | GHSA-pw6j-qg29-8w7f | 6.5.5 | 6.5.7 |
20+
| urllib3 | PYSEC-2026-142 | 2.6.3 | 2.7.0 |
21+
| urllib3 | PYSEC-2026-142 | 2.6.3 | 2.7.0 |
22+
| urllib3 | PYSEC-2026-141 | 2.6.3 | 2.7.0 |
23+
24+
## Refactoring
25+
26+
* #25: Updated to `exasol-toolbox` 8.1.1
27+
* #6: Updated mypy checks to include all packages from Exasol
28+
* #31: Updated to `exasol-toolbox` 8.2.0
29+
* #27: Fixed SonarQube warnings
30+
* #34: Fixed SonarQube Cloud warning
31+
* #39: Updated to `exasol-toolbox` 9.0.0
32+
* #41: Updated to `exasol-toolbox` 10.0.0
33+
* #3: Added support to Python3.14
34+
35+
## Dependency Updates
36+
37+
### `main`
38+
39+
* Updated dependency `exasol-integration-test-docker-environment:6.1.0` to `6.2.0`
40+
* Updated dependency `pytest:9.0.3` to `9.1.1`
41+
42+
### `dev`
43+
44+
* Updated dependency `exasol-toolbox:7.0.0` to `10.0.0`
45+
* Updated dependency `pyexasol:2.2.1` to `2.2.2`
46+
* Updated dependency `types-pyyaml:6.0.12.20260408` to `6.0.12.20260518`

doc/changes/unreleased.md

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,3 @@
11
# Unreleased
22

33
## Summary
4-
5-
## Refactoring
6-
7-
* #25: Updated to `exasol-toolbox` 8.1.1
8-
* #6: Updated mypy checks to include all packages from Exasol
9-
* #31: Updated to `exasol-toolbox` 8.2.0
10-
* #27: Fixed SonarQube warnings
11-
* #34: Fixed SonarQube Cloud warning
12-
* #39: Updated to `exasol-toolbox` 9.0.0
13-
* #41: Updated to `exasol-toolbox` 10.0.0

exasol/pytest_backend/__init__.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import importlib.abc
34
import os
45
import ssl
56
from collections.abc import Iterable
@@ -18,6 +19,19 @@
1819
get_connection_params,
1920
timestamp_name,
2021
)
22+
23+
# Python 3.14 removed importlib.abc.Traversable (moved to importlib.resources.abc
24+
# in 3.9). Patch it back so older dependencies that still use the removed location
25+
# continue to work until they are updated.
26+
# The patch addresses the issue in exasol-integration-test-docker-environment,
27+
# see https://github.com/exasol/integration-test-docker-environment/issues/647.
28+
if not hasattr(importlib.abc, "Traversable"):
29+
# isort: off
30+
from importlib.resources.abc import Traversable as _Traversable # type: ignore[import-not-found] # pylint: disable=import-error,no-name-in-module # fmt: skip
31+
importlib.abc.Traversable = _Traversable # type: ignore[misc,attr-defined]
32+
del _Traversable
33+
34+
# pylint: disable=wrong-import-position
2135
from exasol_integration_test_docker_environment.lib import api
2236
from exasol_integration_test_docker_environment.lib.models.data.environment_info import (
2337
EnvironmentInfo,
@@ -34,6 +48,8 @@
3448
)
3549
from .parallel_task import paralleltask
3650

51+
# pylint: enable=wrong-import-position
52+
3753
__version__ = version("pytest-exasol-backend")
3854

3955
BACKEND_OPTION = "--backend"

exasol/pytest_backend/parallel_task.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@
99
from functools import wraps
1010
from typing import Any
1111

12+
# Use fork explicitly: Python 3.14 changed the default start method on Linux
13+
# from "fork" to "forkserver". With forkserver/spawn, decorated functions are
14+
# not picklable because the inner generator's __qualname__ collides with the
15+
# module-level decorated name. Fork avoids serialisation entirely.
16+
_mp_ctx = mp.get_context("fork")
17+
1218

1319
class _ParallelGenCtxManager(AbstractContextManager, ContextDecorator):
1420

@@ -17,9 +23,9 @@ def __init__(self, func, args, kwargs):
1723
self._ctx_func = contextmanager(func)
1824
self._args = args
1925
self._kwargs = kwargs
20-
self._queue = mp.Queue()
21-
self._ready = mp.Event()
22-
self._done = mp.Event()
26+
self._queue = _mp_ctx.Queue()
27+
self._ready = _mp_ctx.Event()
28+
self._done = _mp_ctx.Event()
2329

2430
def _run(self) -> None:
2531
try:
@@ -39,7 +45,7 @@ def _run(self) -> None:
3945
self._done.wait()
4046

4147
def __enter__(self) -> _ParallelGenCtxManager:
42-
self._proc: mp.Process = mp.Process(target=self._run)
48+
self._proc = _mp_ctx.Process(target=self._run)
4349
self._proc.start()
4450
# Leave the process running
4551
return self

noxconfig.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
PROJECT_CONFIG = BaseConfig(
66
root_path=Path(__file__).parent,
77
project_name="pytest_backend",
8-
python_versions=("3.10", "3.11", "3.12", "3.13"),
8+
python_versions=("3.10", "3.11", "3.12", "3.13", "3.14"),
99
)

poetry.lock

Lines changed: 55 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
[project]
22
name = "pytest-exasol-backend"
3-
version = "1.4.1"
3+
version = "1.5.0"
44
description = ""
5-
# Restrict Python versions as difficulty with some unit tests related
6-
# to the ParallelTask implementation for Python 3.14.
7-
# This will be resolved in:
8-
# https://github.com/exasol/pytest-backend/issues/3
95
authors = [{ name = "Mikhail Beck", email = "mikhail.beck@exasol.com" }]
10-
requires-python = ">=3.10,<3.14"
6+
requires-python = ">=3.10,<3.15"
117
readme = "README.md"
128
classifiers = [
139
"Programming Language :: Python :: 3",
1410
"Programming Language :: Python :: 3.10",
1511
"Programming Language :: Python :: 3.11",
1612
"Programming Language :: Python :: 3.12",
1713
"Programming Language :: Python :: 3.13",
14+
"Programming Language :: Python :: 3.14",
1815
]
1916
dependencies = [
2017
"pytest>=9,<10",

0 commit comments

Comments
 (0)