Skip to content
This repository was archived by the owner on Jan 23, 2026. It is now read-only.
Draft
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
3 changes: 2 additions & 1 deletion .github/workflows/pytest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@ jobs:
pytest-matrix:
runs-on: ${{ matrix.runs-on }}
strategy:
fail-fast: false
matrix:
runs-on: [ubuntu-24.04, macos-15]
python-version: ["3.11", "3.12", "3.13"]
python-version: ["3.11", "3.12", "3.13", "3.14"]
steps:
- uses: actions/checkout@v4

Expand Down
2 changes: 1 addition & 1 deletion __templates__/driver/pyproject.toml.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
]

Expand Down
3 changes: 1 addition & 2 deletions packages/jumpstarter-cli-admin/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ dependencies = [
[dependency-groups]
dev = [
"pytest>=8.3.2",
"pytest-anyio>=0.0.0",
"pytest-asyncio>=0.0.0",
"pytest-asyncio>=1.3.0",
"pytest-cov>=5.0.0",
]

Expand Down
4 changes: 2 additions & 2 deletions packages/jumpstarter-cli-common/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ dependencies = [
"joserfc>=1.0.3",
"yarl>=1.18.3",
"rich>=14.0.0",
"requests>=2.32.5",
]

[dependency-groups]
dev = [
"pytest>=8.3.2",
"pytest-anyio>=0.0.0",
"pytest-asyncio>=0.0.0",
"pytest-asyncio>=1.3.0",
"pytest-cov>=5.0.0",
]

Expand Down
3 changes: 1 addition & 2 deletions packages/jumpstarter-cli-driver/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ dependencies = ["jumpstarter-cli-common", "click>=8.1.7.2"]
[dependency-groups]
dev = [
"pytest>=8.3.2",
"pytest-anyio>=0.0.0",
"pytest-asyncio>=0.0.0",
"pytest-asyncio>=1.3.0",
"pytest-cov>=5.0.0",
]

Expand Down
3 changes: 1 addition & 2 deletions packages/jumpstarter-cli/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ dependencies = [
[dependency-groups]
dev = [
"pytest>=8.3.2",
"pytest-anyio>=0.0.0",
"pytest-asyncio>=0.0.0",
"pytest-asyncio>=1.3.0",
"pytest-cov>=5.0.0",
]

Expand Down
2 changes: 1 addition & 1 deletion packages/jumpstarter-driver-ble/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [{ name = "Andreas Karner", email = "[email protected]" }]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
"bleak>=1.1.1",
]
Expand Down
1 change: 1 addition & 0 deletions packages/jumpstarter-driver-corellium/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ dependencies = [
"jumpstarter-driver-network",
"jumpstarter-driver-pyserial",
"click>=8.1.7.2",
"requests>=2.32.5",
]

[project.entry-points."jumpstarter.drivers"]
Expand Down
5 changes: 3 additions & 2 deletions packages/jumpstarter-driver-energenie/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ authors = [
]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
"jumpstarter-driver-power"
"jumpstarter-driver-power",
"requests>=2.32.5",
]

[project.entry-points."jumpstarter.drivers"]
Expand Down
3 changes: 2 additions & 1 deletion packages/jumpstarter-driver-flashers/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,15 @@ authors = [
requires-python = ">=3.11"
dependencies = [
"oras>=0.2.25",
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
"jumpstarter-driver-opendal",
"jumpstarter-driver-pyserial",
"jumpstarter-driver-http",
"jumpstarter-driver-tftp",
"jumpstarter-driver-power",
"jumpstarter-driver-uboot",
"requests>=2.32.5",
]

[tool.hatch.version]
Expand Down
3 changes: 2 additions & 1 deletion packages/jumpstarter-driver-http-power/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ authors = [
]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
"jumpstarter-driver-power",
"requests>=2.32.5",
]


Expand Down
5 changes: 2 additions & 3 deletions packages/jumpstarter-driver-http/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [{ name = "Benny Zlotnik", email = "[email protected]" }]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
"jumpstarter-driver-composite",
"jumpstarter-driver-opendal",
Expand Down Expand Up @@ -35,8 +35,7 @@ build-backend = "hatchling.build"
dev = [
"pytest-cov>=6.0.0",
"pytest>=8.3.3",
"pytest-asyncio>=0.0.0",
"pytest-asyncio>=0.24.0",
"pytest-asyncio>=1.3.0",
]

[tool.hatch.build.hooks.pin_jumpstarter]
Expand Down
4 changes: 2 additions & 2 deletions packages/jumpstarter-driver-iscsi/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ readme = "README.md"
authors = [{ name = "Benny Zlotnik", email = "[email protected]" }]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
"jumpstarter-driver-composite",
"jumpstarter-driver-opendal",
"click>=8.1.8",
"rtslib-fb",
"requests>=2.32.5"
"requests>=2.32.5",
]

[tool.hatch.version]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import ctypes
import socket
from abc import ABCMeta, abstractmethod
from asyncio import get_running_loop
from contextlib import asynccontextmanager
from dataclasses import dataclass, field
from os import getenv, getuid
Expand All @@ -14,7 +13,7 @@
create_connected_udp_socket,
create_memory_object_stream,
)
from anyio._backends._asyncio import SocketStream, StreamProtocol
from anyio._core._eventloop import get_async_backend
from anyio.streams.stapled import StapledObjectStream

from .streams.websocket import WebsocketClientStream
Expand Down Expand Up @@ -120,6 +119,7 @@ async def address(self):
else:
raise ValueError("enable_address mode is not true in the exporter configuration")


@dataclass(kw_only=True)
class UdpNetwork(NetworkInterface, Driver):
'''
Expand Down Expand Up @@ -207,12 +207,7 @@ async def connect(self):
if libc.connect(sock.fileno(), ctypes.byref(addr), ctypes.sizeof(addr)) < 0:
raise OSError(ctypes.get_errno(), "vsock connect() failed")

transport, protocol = await get_running_loop().create_connection(
StreamProtocol,
sock=sock,
)

yield SocketStream(transport, protocol)
yield await get_async_backend().wrap_stream_socket(sock)


@dataclass(kw_only=True)
Expand Down Expand Up @@ -301,26 +296,27 @@ class EchoNetwork(NetworkInterface, Driver):
@exportstream
@asynccontextmanager
async def connect(self):
tx, rx = create_memory_object_stream[bytes](32) # ty: ignore[call-non-callable]
tx, rx = create_memory_object_stream[bytes](32) # ty: ignore[call-non-callable]
self.logger.debug("Connecting Echo")
async with StapledObjectStream(tx, rx) as stream:
yield stream


@dataclass(kw_only=True)
class WebsocketNetwork(NetworkInterface, Driver):
'''
"""
Handles websocket connections from a given url.
'''
"""

url: str
enable_address: bool = True

@exportstream
@asynccontextmanager
async def connect(self):
'''
"""
Create a websocket connection to `self.url` and streams its output.
'''
"""
self.logger.info("Connecting to %s", self.url)

async with websockets.connect(self.url) as websocket:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,20 +83,28 @@ class Capability(BaseModel):
read: bool
read_with_if_match: bool
read_with_if_none_match: bool
read_with_if_modified_since: bool
read_with_if_unmodified_since: bool
read_with_override_cache_control: bool
read_with_override_content_disposition: bool
read_with_override_content_type: bool
read_with_version: bool

write: bool
write_can_multi: bool
write_can_empty: bool
write_can_append: bool
write_with_content_type: bool
write_with_content_disposition: bool
write_with_content_encoding: bool
write_with_cache_control: bool
write_multi_max_size: Optional[int]
write_multi_min_size: Optional[int]
write_total_max_size: Optional[int]
write_with_if_match: bool
write_with_if_none_match: bool
write_with_if_not_exists: bool
write_with_user_metadata: bool
write_multi_max_size: int | None
write_multi_min_size: int | None
write_total_max_size: int | None

create_dir: bool
delete: bool
Expand All @@ -112,6 +120,6 @@ class Capability(BaseModel):
presign_read: bool
presign_stat: bool
presign_write: bool
presign_delete: bool

shared: bool
blocking: bool
2 changes: 1 addition & 1 deletion packages/jumpstarter-driver-probe-rs/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [{ name = "Miguel Angel Ajo", email = "[email protected]" }]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"click>=8.1.7.2",
"jumpstarter",
"jumpstarter-driver-opendal",
Expand Down
1 change: 1 addition & 0 deletions packages/jumpstarter-driver-qemu/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ dependencies = [
"jumpstarter-driver-pyserial",
"pyyaml>=6.0.2",
"qemu-qmp>=0.0.3",
"requests>=2.32.5",
]

[dependency-groups]
Expand Down
2 changes: 1 addition & 1 deletion packages/jumpstarter-driver-ridesx/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ build-backend = "hatchling.build"
dev = [
"pytest-cov>=6.0.0",
"pytest>=8.3.3",
"pytest-asyncio>=0.0.0",
"pytest-asyncio>=1.3.0",
]

[tool.hatch.build.hooks.pin_jumpstarter]
Expand Down
2 changes: 1 addition & 1 deletion packages/jumpstarter-driver-shell/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ readme = "README.md"
authors = [{ name = "Miguel Angel Ajo", email = "[email protected]" }]
requires-python = ">=3.11"
license = "Apache-2.0"
dependencies = ["anyio>=4.10.0", "jumpstarter", "click>=8.1.8"]
dependencies = ["anyio>=4.12.1", "jumpstarter", "click>=8.1.8"]

[project.entry-points."jumpstarter.drivers"]
Shell = "jumpstarter_driver_shell.driver:Shell"
Expand Down
3 changes: 1 addition & 2 deletions packages/jumpstarter-driver-snmp/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ dependencies = [
dev = [
"pytest>=8.3.2",
"pytest-cov>=6.0.0",
"pytest-anyio>=0.0.0",
"pytest-asyncio>=0.0.0",
"pytest-asyncio>=1.3.0",
"jumpstarter-testing",
]

Expand Down
2 changes: 1 addition & 1 deletion packages/jumpstarter-driver-ssh-mitm/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
"jumpstarter-driver-network",
"paramiko>=3.6.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/jumpstarter-driver-ssh/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"click>=8.0.0",
"jumpstarter",
"jumpstarter-driver-composite",
Expand Down
2 changes: 1 addition & 1 deletion packages/jumpstarter-driver-tasmota/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [{ name = "Nick Cao", email = "[email protected]" }]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter_driver_power",
"jumpstarter",
"paho-mqtt>=2.1.0",
Expand Down
5 changes: 2 additions & 3 deletions packages/jumpstarter-driver-tftp/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ license = "Apache-2.0"
authors = [{ name = "Benny Zlotnik", email = "[email protected]" }]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
"jumpstarter-driver-composite",
"jumpstarter-driver-opendal",
Expand All @@ -17,8 +17,7 @@ dependencies = [
dev = [
"pytest>=8.3.2",
"pytest-cov>=6.0.0",
"pytest-anyio>=0.0.0",
"pytest-asyncio>=0.0.0",
"pytest-asyncio>=1.3.0",
"jumpstarter-testing",
]

Expand Down
2 changes: 1 addition & 1 deletion packages/jumpstarter-driver-tmt/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
"jumpstarter-driver-network",
"jumpstarter-driver-composite",
Expand Down
7 changes: 6 additions & 1 deletion packages/jumpstarter-driver-uboot/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@ authors = [
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.11"
dependencies = ["jumpstarter", "jumpstarter-driver-composite", "pexpect>=4.9.0"]
dependencies = [
"jumpstarter",
"jumpstarter-driver-composite",
"pexpect>=4.9.0",
"requests>=2.32.5",
]

[dependency-groups]
dev = [
Expand Down
2 changes: 1 addition & 1 deletion packages/jumpstarter-driver-vnc/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ authors = [
]
requires-python = ">=3.11"
dependencies = [
"anyio>=4.10.0",
"anyio>=4.12.1",
"jumpstarter",
"jumpstarter-driver-composite",
"jumpstarter-driver-network",
Expand Down
Loading
Loading