diff --git a/CHANGELOG.md b/CHANGELOG.md index 41fb624..b0aba69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed +- Python 3.12 is the floor (`requires-python = ">=3.12"`): netOrk runs every driver + on 3.12, so 3.10 and 3.11 are no longer tested (NAPALM/driver-standard#6). + ## [0.3.0] - 2026-10-23 The first release on PyPI. diff --git a/README.md b/README.md index 3db982d..16a5de5 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ Unverified assumptions, to be checked against real hardware: ## Install -Python 3.10 or later. +Python 3.12 or later. ```bash pip install napalm-vmware diff --git a/napalm_vmware/_tasks.py b/napalm_vmware/_tasks.py index a10debd..8b43990 100644 --- a/napalm_vmware/_tasks.py +++ b/napalm_vmware/_tasks.py @@ -9,14 +9,12 @@ from __future__ import annotations import time from collections.abc import Callable -from typing import Any, TypeVar +from typing import Any from pyVmomi import vmodl from napalm_vmware._plain import to_plain -T = TypeVar("T") - _POLL_SECONDS = 0.5 _FREE_LICENSE = ( "the host runs the free vSphere Hypervisor license, which makes the " @@ -31,7 +29,7 @@ def fault_message(fault: dict[str, Any]) -> str: return fault.get("localizedMessage") or fault.get("msg") or fault.get("_type", "unknown fault") -def invoke(call: Callable[..., T], *args: Any, **kwargs: Any) -> T: +def invoke[T](call: Callable[..., T], *args: Any, **kwargs: Any) -> T: """Run a vSphere call, re-raising any ``MethodFault`` as ``RuntimeError``.""" try: return call(*args, **kwargs) diff --git a/pyproject.toml b/pyproject.toml index c94264a..b021593 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "napalm-vmware" version = "0.3.0" description = "NAPALM drivers for VMware ESXi hosts and vCenter Server (vSphere API via pyVmomi)" readme = "README.md" -requires-python = ">=3.10" +requires-python = ">=3.12" license = "Apache-2.0" authors = [ { name = "Christian Manivong", email = "christian@manivong.de" }, @@ -19,8 +19,6 @@ classifiers = [ "Intended Audience :: System Administrators", "Operating System :: OS Independent", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: System :: Networking", @@ -69,7 +67,7 @@ markers = [ [tool.ruff] line-length = 100 -target-version = "py310" +target-version = "py312" [tool.ruff.lint] select = ["E", "F", "I", "UP", "B"] @@ -79,7 +77,7 @@ select = ["E", "F", "I", "UP", "B"] "tests/**" = ["E501"] [tool.mypy] -python_version = "3.10" +python_version = "3.12" strict = true # napalm itself is untyped, so every driver subclasses Any. disallow_subclassing_any = false diff --git a/tests/test_plain.py b/tests/test_plain.py index dcbad37..86f7bde 100644 --- a/tests/test_plain.py +++ b/tests/test_plain.py @@ -54,7 +54,7 @@ def test_lists_are_converted_elementwise(): def test_datetime_becomes_epoch_seconds(): - when = datetime.datetime(2026, 1, 1, tzinfo=datetime.timezone.utc) + when = datetime.datetime(2026, 1, 1, tzinfo=datetime.UTC) assert to_plain(when) == 1767225600.0