chore: Python 3.12 is the floor (NAPALM/driver-standard#6)
driver / standard (pull_request) Successful in 18s
driver / lint (pull_request) Successful in 14s
driver / test (3.13) (pull_request) Successful in 55s
driver / types (pull_request) Successful in 1m7s
driver / test (3.12) (pull_request) Successful in 1m9s
driver / lowest (pull_request) Failing after 5s
driver / build (pull_request) Successful in 35s
driver / security (pull_request) Successful in 1m12s
CI / driver (pull_request) Failing after 2m51s
driver / publish (pull_request) Skipped

netOrk runs every driver in its own containers on Python 3.12, so 3.10
and 3.11 are no longer supported or tested. requires-python, mypy and
ruff move to 3.12, along with what ruff's pyupgrade rules then rewrite.
This commit is contained in:
Christian Manivong committed 2026-10-27 10:19:01 +01:00
1 parent e235eb96b4
commit 3b3f5d9d02
5 files changed
+11 -11

No files matched your search

+4
View File
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [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 ## [0.3.0] - 2026-10-23
The first release on PyPI. The first release on PyPI.
+1 -1
View File
@@ -57,7 +57,7 @@ Unverified assumptions, to be checked against real hardware:
## Install ## Install
Python 3.10 or later. Python 3.12 or later.
```bash ```bash
pip install napalm-vmware pip install napalm-vmware
+2 -4
View File
@@ -9,14 +9,12 @@ from __future__ import annotations
import time import time
from collections.abc import Callable from collections.abc import Callable
from typing import Any, TypeVar from typing import Any
from pyVmomi import vmodl from pyVmomi import vmodl
from napalm_vmware._plain import to_plain from napalm_vmware._plain import to_plain
T = TypeVar("T")
_POLL_SECONDS = 0.5 _POLL_SECONDS = 0.5
_FREE_LICENSE = ( _FREE_LICENSE = (
"the host runs the free vSphere Hypervisor license, which makes the " "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") 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``.""" """Run a vSphere call, re-raising any ``MethodFault`` as ``RuntimeError``."""
try: try:
return call(*args, **kwargs) return call(*args, **kwargs)
+3 -5
View File
@@ -7,7 +7,7 @@ name = "napalm-vmware"
version = "0.3.0" version = "0.3.0"
description = "NAPALM drivers for VMware ESXi hosts and vCenter Server (vSphere API via pyVmomi)" description = "NAPALM drivers for VMware ESXi hosts and vCenter Server (vSphere API via pyVmomi)"
readme = "README.md" readme = "README.md"
requires-python = ">=3.10" requires-python = ">=3.12"
license = "Apache-2.0" license = "Apache-2.0"
authors = [ authors = [
{ name = "Christian Manivong", email = "christian@manivong.de" }, { name = "Christian Manivong", email = "christian@manivong.de" },
@@ -19,8 +19,6 @@ classifiers = [
"Intended Audience :: System Administrators", "Intended Audience :: System Administrators",
"Operating System :: OS Independent", "Operating System :: OS Independent",
"Programming Language :: Python :: 3", "Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.13",
"Topic :: System :: Networking", "Topic :: System :: Networking",
@@ -69,7 +67,7 @@ markers = [
[tool.ruff] [tool.ruff]
line-length = 100 line-length = 100
target-version = "py310" target-version = "py312"
[tool.ruff.lint] [tool.ruff.lint]
select = ["E", "F", "I", "UP", "B"] select = ["E", "F", "I", "UP", "B"]
@@ -79,7 +77,7 @@ select = ["E", "F", "I", "UP", "B"]
"tests/**" = ["E501"] "tests/**" = ["E501"]
[tool.mypy] [tool.mypy]
python_version = "3.10" python_version = "3.12"
strict = true strict = true
# napalm itself is untyped, so every driver subclasses Any. # napalm itself is untyped, so every driver subclasses Any.
disallow_subclassing_any = false disallow_subclassing_any = false
+1 -1
View File
@@ -54,7 +54,7 @@ def test_lists_are_converted_elementwise():
def test_datetime_becomes_epoch_seconds(): 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 assert to_plain(when) == 1767225600.0