From 4cee09897b0c60180c64fcbb78c58a91a7da9f57 Mon Sep 17 00:00:00 2001 From: Kirk Brauer Date: Sun, 26 Jan 2025 12:05:48 -0500 Subject: [PATCH 1/4] Fix Ruff version mismatch and config issues --- .github/workflows/ruff.yaml | 2 +- .pre-commit-config.yaml | 6 ++-- __templates__/driver/pyproject.toml.tmpl | 1 - .../jumpstarter_cli_admin/create.py | 3 +- .../jumpstarter_cli_admin/create_test.py | 11 ++++--- .../jumpstarter_cli_admin/delete.py | 3 +- .../jumpstarter_cli_admin/delete_test.py | 15 +++++---- .../jumpstarter_cli_admin/import_res.py | 11 ++++--- .../jumpstarter_cli_admin/import_res_test.py | 9 +++--- .../jumpstarter_cli_client/__init__.py | 3 +- .../jumpstarter_cli_client/client_config.py | 3 +- .../jumpstarter_cli_client/client_shell.py | 1 + .../jumpstarter_cli_client/client_test.py | 1 + .../jumpstarter_cli_client/lease.py | 32 ++++++++++--------- .../jumpstarter_cli_exporter/exporter.py | 1 + .../exporter_config.py | 3 +- .../jumpstarter_cli_exporter/exporter_test.py | 1 + .../jumpstarter_driver_can/client.py | 3 +- .../jumpstarter_driver_can/client_test.py | 2 +- .../jumpstarter_driver_can/driver.py | 3 +- .../jumpstarter_driver_composite/client.py | 1 + .../jumpstarter_driver_composite/driver.py | 3 +- .../driver_test.py | 3 +- .../examples/dutlink.py | 3 +- .../jumpstarter_driver_dutlink/driver.py | 3 +- .../jumpstarter_driver_dutlink/driver_test.py | 2 +- .../jumpstarter_driver_http/client.py | 3 +- .../jumpstarter_driver_http/driver.py | 1 + .../jumpstarter_driver_http/driver_test.py | 1 + .../adapters/fabric_test.py | 3 +- .../adapters/novnc_test.py | 3 +- .../jumpstarter_driver_network/driver.py | 1 + .../jumpstarter_driver_network/driver_test.py | 1 + .../jumpstarter_driver_opendal/adapter.py | 5 +-- .../jumpstarter_driver_opendal/client.py | 3 +- .../jumpstarter_driver_opendal/driver.py | 1 + .../jumpstarter_driver_opendal/driver_test.py | 3 +- .../jumpstarter_driver_power/client.py | 1 + .../jumpstarter_driver_pyserial/client.py | 3 +- .../jumpstarter_driver_pyserial/driver.py | 3 +- .../jumpstarter_driver_raspberrypi/driver.py | 1 + .../driver_test.py | 2 +- .../jumpstarter_driver_sdwire/driver.py | 3 +- .../jumpstarter_driver_sdwire/driver_test.py | 2 +- .../jumpstarter_driver_tftp/client.py | 3 +- .../jumpstarter_driver_tftp/driver.py | 2 +- .../jumpstarter_driver_tftp/driver_test.py | 2 +- .../jumpstarter_driver_ustreamer/client.py | 3 +- .../jumpstarter_driver_ustreamer/driver.py | 1 + .../driver_test.py | 2 +- .../jumpstarter_imagehash/imagehash.py | 3 +- .../jumpstarter_kubernetes/clients.py | 3 +- .../jumpstarter_kubernetes/exporters.py | 3 +- .../jumpstarter_testing/pytest.py | 1 + .../jumpstarter_testing/pytest_test.py | 5 +-- packages/jumpstarter/conftest.py | 3 +- .../jumpstarter/jumpstarter/client/base.py | 3 +- .../jumpstarter/jumpstarter/client/client.py | 3 +- .../jumpstarter/jumpstarter/client/core.py | 3 +- .../jumpstarter/jumpstarter/client/lease.py | 3 +- .../jumpstarter/jumpstarter/common/streams.py | 5 +-- .../jumpstarter/jumpstarter/common/utils.py | 1 + .../jumpstarter/jumpstarter/config/client.py | 5 +-- .../jumpstarter/config/client_config_test.py | 3 +- .../jumpstarter/config/exporter.py | 3 +- .../jumpstarter/config/exporter_test.py | 1 + .../jumpstarter/config/user_config_test.py | 1 + .../jumpstarter/jumpstarter/driver/base.py | 7 ++-- .../jumpstarter/exporter/exporter.py | 9 +++--- .../jumpstarter/exporter/session.py | 9 +++--- .../jumpstarter/jumpstarter/listener_test.py | 3 +- pyproject.toml | 2 +- uv.lock | 24 +------------- 73 files changed, 162 insertions(+), 123 deletions(-) diff --git a/.github/workflows/ruff.yaml b/.github/workflows/ruff.yaml index 1972189d2..a6bd48743 100644 --- a/.github/workflows/ruff.yaml +++ b/.github/workflows/ruff.yaml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Run ruff + - name: Run Ruff uses: astral-sh/ruff-action@v3 with: version-file: "pyproject.toml" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a8cf4f29b..9dc643688 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,13 +1,13 @@ default_stages: [pre-commit] repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.3.5 + rev: v0.9.3 hooks: - id: ruff - name: Ruff check + name: Ruff Check description: "Run 'ruff check' for extremely fast Python linting" args: [ --fix ] - id: ruff-format - name: Ruff format + name: Ruff Format description: "Run 'ruff format' for extremely fast Python formatting" \ No newline at end of file diff --git a/__templates__/driver/pyproject.toml.tmpl b/__templates__/driver/pyproject.toml.tmpl index 4927c8275..2218ef545 100644 --- a/__templates__/driver/pyproject.toml.tmpl +++ b/__templates__/driver/pyproject.toml.tmpl @@ -35,5 +35,4 @@ build-backend = "hatchling.build" dev = [ "pytest-cov>=6.0.0", "pytest>=8.3.3", - "ruff>=0.7.1", ] diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create.py index d5ebcf7aa..d2fc864a9 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create.py @@ -2,7 +2,6 @@ from typing import Optional import asyncclick as click -from jumpstarter.config import ClientConfigV1Alpha1, ExporterConfigV1Alpha1, UserConfigV1Alpha1 from jumpstarter_cli_common import ( AliasedGroup, opt_context, @@ -14,6 +13,8 @@ from kubernetes_asyncio.client.exceptions import ApiException from kubernetes_asyncio.config.config_exception import ConfigException +from jumpstarter.config import ClientConfigV1Alpha1, ExporterConfigV1Alpha1, UserConfigV1Alpha1 + from .k8s import ( handle_k8s_api_exception, handle_k8s_config_exception, diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create_test.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create_test.py index f7fd3ecff..1ccd58621 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create_test.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create_test.py @@ -3,11 +3,6 @@ import pytest from asyncclick.testing import CliRunner -from jumpstarter.config import ( - ClientConfigV1Alpha1, - ClientConfigV1Alpha1Drivers, - ExporterConfigV1Alpha1, -) from jumpstarter_kubernetes import ( ClientsV1Alpha1Api, ExportersV1Alpha1Api, @@ -18,6 +13,12 @@ ) from kubernetes_asyncio.client.models import V1ObjectMeta +from jumpstarter.config import ( + ClientConfigV1Alpha1, + ClientConfigV1Alpha1Drivers, + ExporterConfigV1Alpha1, +) + from .create import create # Generate a random client name diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete.py index 3df7151f9..dc0d55b45 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete.py @@ -2,7 +2,6 @@ from typing import Optional import asyncclick as click -from jumpstarter.config import ClientConfigV1Alpha1, ExporterConfigV1Alpha1, UserConfigV1Alpha1 from jumpstarter_cli_common import ( AliasedGroup, opt_context, @@ -14,6 +13,8 @@ from kubernetes_asyncio.client.exceptions import ApiException from kubernetes_asyncio.config.config_exception import ConfigException +from jumpstarter.config import ClientConfigV1Alpha1, ExporterConfigV1Alpha1, UserConfigV1Alpha1 + from .k8s import ( handle_k8s_api_exception, handle_k8s_config_exception, diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete_test.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete_test.py index 521966906..bba248db3 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete_test.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete_test.py @@ -2,13 +2,6 @@ import pytest from asyncclick.testing import CliRunner -from jumpstarter.config import ( - ClientConfigV1Alpha1, - ClientConfigV1Alpha1Drivers, - ExporterConfigV1Alpha1, - UserConfigV1Alpha1, - UserConfigV1Alpha1Config, -) from jumpstarter_kubernetes import ( ClientsV1Alpha1Api, ExportersV1Alpha1Api, @@ -17,6 +10,14 @@ ) from kubernetes_asyncio.client.models import V1ObjectMeta +from jumpstarter.config import ( + ClientConfigV1Alpha1, + ClientConfigV1Alpha1Drivers, + ExporterConfigV1Alpha1, + UserConfigV1Alpha1, + UserConfigV1Alpha1Config, +) + from .delete import delete # Generate a random client name diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res.py index 10dd4aa8b..0ab62c33e 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res.py @@ -1,11 +1,6 @@ from typing import Optional import asyncclick as click -from jumpstarter.config import ( - ClientConfigV1Alpha1, - UserConfigV1Alpha1, -) -from jumpstarter.config.exporter import ExporterConfigV1Alpha1 from jumpstarter_cli_common import ( opt_context, opt_kubeconfig, @@ -15,6 +10,12 @@ from kubernetes_asyncio.client.exceptions import ApiException from kubernetes_asyncio.config.config_exception import ConfigException +from jumpstarter.config import ( + ClientConfigV1Alpha1, + UserConfigV1Alpha1, +) +from jumpstarter.config.exporter import ExporterConfigV1Alpha1 + from .k8s import ( handle_k8s_api_exception, handle_k8s_config_exception, diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res_test.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res_test.py index da977d81a..c124b5d99 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res_test.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res_test.py @@ -3,15 +3,16 @@ import pytest from asyncclick.testing import CliRunner +from jumpstarter_kubernetes import ( + ClientsV1Alpha1Api, + ExportersV1Alpha1Api, +) + from jumpstarter.config import ( ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers, ExporterConfigV1Alpha1, ) -from jumpstarter_kubernetes import ( - ClientsV1Alpha1Api, - ExportersV1Alpha1Api, -) from .import_res import import_res diff --git a/packages/jumpstarter-cli-client/jumpstarter_cli_client/__init__.py b/packages/jumpstarter-cli-client/jumpstarter_cli_client/__init__.py index 4dfdb81cc..35f0215a6 100644 --- a/packages/jumpstarter-cli-client/jumpstarter_cli_client/__init__.py +++ b/packages/jumpstarter-cli-client/jumpstarter_cli_client/__init__.py @@ -2,9 +2,10 @@ from typing import Optional import asyncclick as click -from jumpstarter.common.utils import env from jumpstarter_cli_common import AliasedGroup, opt_log_level, version +from jumpstarter.common.utils import env + from .client_config import create_client_config, delete_client_config, list_client_configs, use_client_config from .client_shell import client_shell from .lease import lease diff --git a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_config.py b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_config.py index bed794ea0..5a08aa25f 100644 --- a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_config.py +++ b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_config.py @@ -1,9 +1,10 @@ from typing import Optional import asyncclick as click -from jumpstarter.config import ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers, UserConfigV1Alpha1 from jumpstarter_cli_common import make_table +from jumpstarter.config import ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers, UserConfigV1Alpha1 + @click.command("create-config", short_help="Create a client config.") @click.argument("name") diff --git a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_shell.py b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_shell.py index fc1eb856c..ec5c11857 100644 --- a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_shell.py +++ b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_shell.py @@ -1,4 +1,5 @@ import asyncclick as click + from jumpstarter.common import MetadataFilter from jumpstarter.common.utils import launch_shell from jumpstarter.config import ( diff --git a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_test.py b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_test.py index 1440e5adf..e717a84bb 100644 --- a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_test.py +++ b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_test.py @@ -1,5 +1,6 @@ import pytest from asyncclick.testing import CliRunner + from jumpstarter.config import ClientConfigV1Alpha1, UserConfigV1Alpha1 from . import client diff --git a/packages/jumpstarter-cli-client/jumpstarter_cli_client/lease.py b/packages/jumpstarter-cli-client/jumpstarter_cli_client/lease.py index cee750759..7f20e7c90 100644 --- a/packages/jumpstarter-cli-client/jumpstarter_cli_client/lease.py +++ b/packages/jumpstarter-cli-client/jumpstarter_cli_client/lease.py @@ -1,10 +1,11 @@ import asyncclick as click +from jumpstarter_cli_common import AliasedGroup + from jumpstarter.common import MetadataFilter from jumpstarter.config import ( ClientConfigV1Alpha1, UserConfigV1Alpha1, ) -from jumpstarter_cli_common import AliasedGroup @click.group(cls=AliasedGroup, short_help="") @@ -47,31 +48,32 @@ def lease_release(name, lease, all_leases): raise ValueError("no lease specified") config.release_lease(lease) + @lease.command("request") @click.option("-l", "--label", "labels", type=(str, str), multiple=True) @click.argument("name", type=str, default="") def lease_request(name, labels): """Request an exporter lease from the jumpstarter controller. -The result of this command will be a lease ID that can be used to -connect to the remote exporter. + The result of this command will be a lease ID that can be used to + connect to the remote exporter. -This is useful for multi-step workflows where you want to hold a lease -for a specific exporter while performing multiple operations, or for -CI environments where one step will request the lease and other steps -will perform operations on the leased exporter. + This is useful for multi-step workflows where you want to hold a lease + for a specific exporter while performing multiple operations, or for + CI environments where one step will request the lease and other steps + will perform operations on the leased exporter. -Example: + Example: -.. code-block:: bash + .. code-block:: bash - $ JMP_LEASE=$(jmp lease request -l label match) - $ jmp shell - $$ j --help - $$ exit - $ jmp lease release -l "${JMP_LEASE}" + $ JMP_LEASE=$(jmp lease request -l label match) + $ jmp shell + $$ j --help + $$ exit + $ jmp lease release -l "${JMP_LEASE}" -""" + """ try: if name: config = ClientConfigV1Alpha1.load(name) diff --git a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter.py b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter.py index 870ac78b2..e35b8cdf6 100644 --- a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter.py +++ b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter.py @@ -3,6 +3,7 @@ from pathlib import Path import asyncclick as click + from jumpstarter.common.utils import launch_shell from jumpstarter.config.exporter import ExporterConfigV1Alpha1 diff --git a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_config.py b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_config.py index 074ec2662..6283f6098 100644 --- a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_config.py +++ b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_config.py @@ -1,7 +1,8 @@ import asyncclick as click -from jumpstarter.config.exporter import ExporterConfigV1Alpha1 from jumpstarter_cli_common import make_table +from jumpstarter.config.exporter import ExporterConfigV1Alpha1 + arg_alias = click.argument("alias", default="default") diff --git a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_test.py b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_test.py index f3824fd21..473337db7 100644 --- a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_test.py +++ b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_test.py @@ -1,5 +1,6 @@ import pytest from asyncclick.testing import CliRunner + from jumpstarter.config.exporter import ExporterConfigV1Alpha1 from . import exporter diff --git a/packages/jumpstarter-driver-can/jumpstarter_driver_can/client.py b/packages/jumpstarter-driver-can/jumpstarter_driver_can/client.py index bf86a2b3b..3555ec0ce 100644 --- a/packages/jumpstarter-driver-can/jumpstarter_driver_can/client.py +++ b/packages/jumpstarter-driver-can/jumpstarter_driver_can/client.py @@ -8,9 +8,10 @@ import can import isotp from can.bus import _SelfRemovingCyclicTask -from jumpstarter.client import DriverClient from pydantic import ConfigDict, validate_call +from jumpstarter.client import DriverClient + from .common import CanMessage, IsoTpAddress, IsoTpAsymmetricAddress, IsoTpMessage diff --git a/packages/jumpstarter-driver-can/jumpstarter_driver_can/client_test.py b/packages/jumpstarter-driver-can/jumpstarter_driver_can/client_test.py index 88c130af6..fe73e8d0a 100644 --- a/packages/jumpstarter-driver-can/jumpstarter_driver_can/client_test.py +++ b/packages/jumpstarter-driver-can/jumpstarter_driver_can/client_test.py @@ -6,8 +6,8 @@ import can import isotp import pytest -from jumpstarter.common.utils import serve +from jumpstarter.common.utils import serve from jumpstarter_driver_can.common import IsoTpParams from jumpstarter_driver_can.driver import Can, IsoTpPython, IsoTpSocket diff --git a/packages/jumpstarter-driver-can/jumpstarter_driver_can/driver.py b/packages/jumpstarter-driver-can/jumpstarter_driver_can/driver.py index 96f2c06eb..177d341ee 100644 --- a/packages/jumpstarter-driver-can/jumpstarter_driver_can/driver.py +++ b/packages/jumpstarter-driver-can/jumpstarter_driver_can/driver.py @@ -4,10 +4,11 @@ import can import isotp -from jumpstarter.driver import Driver, export from pydantic import ConfigDict, validate_call from pydantic.dataclasses import dataclass +from jumpstarter.driver import Driver, export + from .common import CanMessage, IsoTpAddress, IsoTpAsymmetricAddress, IsoTpMessage, IsoTpParams diff --git a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/client.py b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/client.py index 273e0434f..fed7d169e 100644 --- a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/client.py +++ b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/client.py @@ -1,6 +1,7 @@ from dataclasses import dataclass import asyncclick as click + from jumpstarter.client import DriverClient diff --git a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver.py b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver.py index 438ce317b..5a8f66990 100644 --- a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver.py +++ b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver.py @@ -1,6 +1,7 @@ -from jumpstarter.driver import Driver from pydantic.dataclasses import dataclass +from jumpstarter.driver import Driver + class CompositeInterface: @classmethod diff --git a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver_test.py b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver_test.py index b2adf6d02..03f4fb580 100644 --- a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver_test.py +++ b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver_test.py @@ -1,6 +1,7 @@ -from jumpstarter.common.utils import serve from jumpstarter_driver_power.driver import MockPower +from jumpstarter.common.utils import serve + from .driver import Composite diff --git a/packages/jumpstarter-driver-dutlink/examples/dutlink.py b/packages/jumpstarter-driver-dutlink/examples/dutlink.py index b04840f40..dc2fea042 100755 --- a/packages/jumpstarter-driver-dutlink/examples/dutlink.py +++ b/packages/jumpstarter-driver-dutlink/examples/dutlink.py @@ -3,9 +3,10 @@ import time import asyncclick as click -from jumpstarter.common.utils import env from jumpstarter_driver_network.adapters import PexpectAdapter +from jumpstarter.common.utils import env + # initialize client from exporter config # from jumpstarter.common import MetadataFilter # from jumpstarter.config.client import ClientConfigV1Alpha1 diff --git a/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver.py b/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver.py index b8210de56..17068e9cb 100644 --- a/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver.py +++ b/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver.py @@ -11,13 +11,14 @@ import usb.util from anyio import fail_after, sleep from anyio.streams.file import FileReadStream, FileWriteStream -from jumpstarter.driver import Driver, export from jumpstarter_driver_composite.driver import CompositeInterface from jumpstarter_driver_opendal.driver import StorageMuxInterface from jumpstarter_driver_power.driver import PowerInterface, PowerReading from jumpstarter_driver_pyserial.driver import PySerial from serial.serialutil import SerialException +from jumpstarter.driver import Driver, export + log = logging.getLogger(__name__) diff --git a/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver_test.py b/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver_test.py index efab289d4..18c82ae0b 100644 --- a/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver_test.py +++ b/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver_test.py @@ -1,8 +1,8 @@ import pytest import usb -from jumpstarter.common.utils import serve from jumpstarter_driver_network.adapters import PexpectAdapter +from jumpstarter.common.utils import serve from jumpstarter_driver_dutlink.driver import Dutlink diff --git a/packages/jumpstarter-driver-http/jumpstarter_driver_http/client.py b/packages/jumpstarter-driver-http/jumpstarter_driver_http/client.py index cf68516e0..e541f3a90 100644 --- a/packages/jumpstarter-driver-http/jumpstarter_driver_http/client.py +++ b/packages/jumpstarter-driver-http/jumpstarter_driver_http/client.py @@ -1,10 +1,11 @@ from dataclasses import dataclass from pathlib import Path -from jumpstarter.client import DriverClient from jumpstarter_driver_opendal.adapter import OpendalAdapter from opendal import Operator +from jumpstarter.client import DriverClient + @dataclass(kw_only=True) class HttpServerClient(DriverClient): diff --git a/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver.py b/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver.py index 08ba20308..5b7774aa7 100644 --- a/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver.py +++ b/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver.py @@ -7,6 +7,7 @@ import anyio from aiohttp import web from anyio.streams.file import FileWriteStream + from jumpstarter.driver import Driver, export logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver_test.py b/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver_test.py index 519fce79a..7a221544c 100644 --- a/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver_test.py +++ b/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver_test.py @@ -6,6 +6,7 @@ import anyio import pytest from anyio import create_memory_object_stream + from jumpstarter.common.resources import ClientStreamResource from .driver import HttpServer diff --git a/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/fabric_test.py b/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/fabric_test.py index 6845e257b..12d478752 100644 --- a/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/fabric_test.py +++ b/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/fabric_test.py @@ -2,10 +2,11 @@ from threading import Thread from time import sleep -from jumpstarter.common.utils import serve from paramiko import AUTH_SUCCESSFUL, OPEN_SUCCEEDED, ServerInterface, Transport from paramiko.rsakey import RSAKey +from jumpstarter.common.utils import serve + from ..driver import TcpNetwork from .fabric import FabricAdapter diff --git a/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/novnc_test.py b/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/novnc_test.py index f3b5deaab..7f84c9d0e 100644 --- a/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/novnc_test.py +++ b/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/novnc_test.py @@ -2,9 +2,10 @@ from urllib.parse import parse_qsl, urlparse from anyio.from_thread import start_blocking_portal +from websocket import create_connection + from jumpstarter.common import TemporaryTcpListener from jumpstarter.common.utils import serve -from websocket import create_connection from ..driver import TcpNetwork from .novnc import NovncAdapter diff --git a/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver.py b/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver.py index 8b2293ef7..8b7e64ce5 100644 --- a/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver.py +++ b/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver.py @@ -10,6 +10,7 @@ create_memory_object_stream, ) from anyio.streams.stapled import StapledObjectStream + from jumpstarter.driver import Driver, exportstream logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver_test.py b/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver_test.py index 647e229be..7dbe04ec9 100644 --- a/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver_test.py +++ b/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver_test.py @@ -5,6 +5,7 @@ import pytest from anyio.from_thread import start_blocking_portal + from jumpstarter.common import TemporaryTcpListener, TemporaryUnixListener from jumpstarter.common.utils import serve diff --git a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/adapter.py b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/adapter.py index a94be7948..1dde10343 100644 --- a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/adapter.py +++ b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/adapter.py @@ -4,11 +4,12 @@ from anyio import BrokenResourceError, EndOfStream from anyio.abc import ObjectStream -from jumpstarter.client.adapters import ClientAdapter -from jumpstarter.common.resources import PresignedRequestResource from opendal import AsyncFile, Operator from opendal.exceptions import Error +from jumpstarter.client.adapters import ClientAdapter +from jumpstarter.common.resources import PresignedRequestResource + @dataclass(frozen=True, kw_only=True, slots=True) class AsyncFileStream(ObjectStream[bytes]): diff --git a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py index 261a86069..5905b4538 100644 --- a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py +++ b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py @@ -1,9 +1,10 @@ from pathlib import Path import asyncclick as click -from jumpstarter.client import DriverClient from opendal import Operator +from jumpstarter.client import DriverClient + from .adapter import OpendalAdapter diff --git a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py index 47d36f19b..0b2f17934 100644 --- a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py +++ b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py @@ -3,6 +3,7 @@ from tempfile import NamedTemporaryFile from anyio.streams.file import FileReadStream, FileWriteStream + from jumpstarter.driver import Driver, export diff --git a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver_test.py b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver_test.py index 90221b443..1b0536316 100644 --- a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver_test.py +++ b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver_test.py @@ -5,9 +5,10 @@ from threading import Thread import pytest -from jumpstarter.common.utils import serve from opendal import Operator +from jumpstarter.common.utils import serve + from .driver import MockStorageMux diff --git a/packages/jumpstarter-driver-power/jumpstarter_driver_power/client.py b/packages/jumpstarter-driver-power/jumpstarter_driver_power/client.py index be2003773..f9aa897d7 100644 --- a/packages/jumpstarter-driver-power/jumpstarter_driver_power/client.py +++ b/packages/jumpstarter-driver-power/jumpstarter_driver_power/client.py @@ -1,6 +1,7 @@ from collections.abc import Generator import asyncclick as click + from jumpstarter.client import DriverClient from .common import PowerReading diff --git a/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/client.py b/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/client.py index f6640cc49..c0080db77 100644 --- a/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/client.py +++ b/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/client.py @@ -1,10 +1,11 @@ from contextlib import contextmanager import asyncclick as click -from jumpstarter.client import DriverClient from jumpstarter_driver_network.adapters import PexpectAdapter from pexpect.fdpexpect import fdspawn +from jumpstarter.client import DriverClient + from .console import Console diff --git a/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/driver.py b/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/driver.py index 69d4d0f88..67505d142 100644 --- a/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/driver.py +++ b/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/driver.py @@ -4,9 +4,10 @@ from anyio.abc import ObjectStream from anyio.to_thread import run_sync -from jumpstarter.driver import Driver, exportstream from serial import Serial, serial_for_url +from jumpstarter.driver import Driver, exportstream + log = logging.getLogger(__name__) diff --git a/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver.py b/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver.py index 1e86d5253..20c4a0cbe 100644 --- a/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver.py +++ b/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver.py @@ -1,6 +1,7 @@ from dataclasses import dataclass, field from gpiozero import DigitalInputDevice, DigitalOutputDevice, InputDevice + from jumpstarter.driver import Driver, export diff --git a/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver_test.py b/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver_test.py index a933ac17a..de71d989e 100644 --- a/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver_test.py +++ b/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver_test.py @@ -2,8 +2,8 @@ from gpiozero import Device from gpiozero.pins.mock import MockFactory -from jumpstarter.common.utils import serve +from jumpstarter.common.utils import serve from jumpstarter_driver_raspberrypi.driver import DigitalInput, DigitalOutput Device.pin_factory = MockFactory() diff --git a/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver.py b/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver.py index ad5d94419..f7c6d8269 100644 --- a/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver.py +++ b/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver.py @@ -8,9 +8,10 @@ import usb.util from anyio import fail_after, sleep from anyio.streams.file import FileReadStream, FileWriteStream -from jumpstarter.driver import Driver, export from jumpstarter_driver_opendal.driver import StorageMuxInterface +from jumpstarter.driver import Driver, export + @dataclass(kw_only=True) class SDWire(StorageMuxInterface, Driver): diff --git a/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver_test.py b/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver_test.py index 8f4434d0d..d6d9c9aed 100644 --- a/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver_test.py +++ b/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver_test.py @@ -1,7 +1,7 @@ import pytest import usb -from jumpstarter.common.utils import serve +from jumpstarter.common.utils import serve from jumpstarter_driver_sdwire.driver import SDWire diff --git a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py index 06c009c6f..cc22910cd 100644 --- a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py +++ b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py @@ -1,10 +1,11 @@ from dataclasses import dataclass from pathlib import Path -from jumpstarter.client import DriverClient from jumpstarter_driver_opendal.adapter import OpendalAdapter from opendal import Operator +from jumpstarter.client import DriverClient + @dataclass(kw_only=True) class TftpServerClient(DriverClient): diff --git a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py index 2c917d596..465d5d0e5 100644 --- a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py +++ b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py @@ -8,8 +8,8 @@ from typing import Optional from anyio.streams.file import FileWriteStream -from jumpstarter.driver import Driver, export +from jumpstarter.driver import Driver, export from jumpstarter_driver_tftp.server import TftpServer logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver_test.py b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver_test.py index 196cdb4b1..733130cc3 100644 --- a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver_test.py +++ b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver_test.py @@ -6,8 +6,8 @@ import anyio import pytest from anyio import create_memory_object_stream -from jumpstarter.common.resources import ClientStreamResource +from jumpstarter.common.resources import ClientStreamResource from jumpstarter_driver_tftp.driver import ( FileNotFound, Tftp, diff --git a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/client.py b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/client.py index e2e8f5101..7f40da8ea 100644 --- a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/client.py +++ b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/client.py @@ -2,9 +2,10 @@ import logging from base64 import b64decode -from jumpstarter.client import DriverClient from PIL import Image +from jumpstarter.client import DriverClient + from .common import UStreamerState log = logging.getLogger("ustreamer") diff --git a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver.py b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver.py index 24f21d724..e0a620989 100644 --- a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver.py +++ b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver.py @@ -10,6 +10,7 @@ from aiohttp import ClientSession, UnixConnector from anyio import connect_unix + from jumpstarter.driver import Driver, export, exportstream from .common import UStreamerState diff --git a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver_test.py b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver_test.py index de52cd3bd..7cbda2858 100644 --- a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver_test.py +++ b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver_test.py @@ -1,6 +1,6 @@ import pytest -from jumpstarter.common.utils import serve +from jumpstarter.common.utils import serve from jumpstarter_driver_ustreamer.driver import UStreamer diff --git a/packages/jumpstarter-imagehash/jumpstarter_imagehash/imagehash.py b/packages/jumpstarter-imagehash/jumpstarter_imagehash/imagehash.py index e7b747111..3e5e394c6 100644 --- a/packages/jumpstarter-imagehash/jumpstarter_imagehash/imagehash.py +++ b/packages/jumpstarter-imagehash/jumpstarter_imagehash/imagehash.py @@ -5,9 +5,10 @@ from typing import Any import imagehash -from jumpstarter.client import DriverClient from PIL import Image +from jumpstarter.client import DriverClient + log = logging.getLogger("imagehash") diff --git a/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/clients.py b/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/clients.py index 34d80f356..cd3d69e37 100644 --- a/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/clients.py +++ b/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/clients.py @@ -4,9 +4,10 @@ from dataclasses import dataclass from typing import Literal, Optional -from jumpstarter.config import ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers from kubernetes_asyncio.client.models import V1ObjectMeta, V1ObjectReference +from jumpstarter.config import ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers + from .util import AbstractAsyncCustomObjectApi logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/exporters.py b/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/exporters.py index ff23bb216..27b115e2c 100644 --- a/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/exporters.py +++ b/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/exporters.py @@ -3,9 +3,10 @@ from dataclasses import dataclass from typing import Literal -from jumpstarter.config import ExporterConfigV1Alpha1 from kubernetes_asyncio.client.models import V1ObjectMeta, V1ObjectReference +from jumpstarter.config import ExporterConfigV1Alpha1 + from .util import AbstractAsyncCustomObjectApi CREATE_EXPORTER_DELAY = 1 diff --git a/packages/jumpstarter-testing/jumpstarter_testing/pytest.py b/packages/jumpstarter-testing/jumpstarter_testing/pytest.py index 512abcd1c..7d3908c8d 100644 --- a/packages/jumpstarter-testing/jumpstarter_testing/pytest.py +++ b/packages/jumpstarter-testing/jumpstarter_testing/pytest.py @@ -3,6 +3,7 @@ from typing import ClassVar import pytest + from jumpstarter.common import MetadataFilter from jumpstarter.common.utils import env from jumpstarter.config.client import ClientConfigV1Alpha1 diff --git a/packages/jumpstarter-testing/jumpstarter_testing/pytest_test.py b/packages/jumpstarter-testing/jumpstarter_testing/pytest_test.py index 60be99a0d..b026ec5d3 100644 --- a/packages/jumpstarter-testing/jumpstarter_testing/pytest_test.py +++ b/packages/jumpstarter-testing/jumpstarter_testing/pytest_test.py @@ -1,8 +1,9 @@ -from jumpstarter.config.env import JMP_DRIVERS_ALLOW, JUMPSTARTER_HOST -from jumpstarter.exporter import Session from jumpstarter_driver_power.driver import MockPower from pytest import Pytester +from jumpstarter.config.env import JMP_DRIVERS_ALLOW, JUMPSTARTER_HOST +from jumpstarter.exporter import Session + def test_env(pytester: Pytester, monkeypatch): pytester.makepyfile( diff --git a/packages/jumpstarter/conftest.py b/packages/jumpstarter/conftest.py index 159b28ab1..91a57bc36 100644 --- a/packages/jumpstarter/conftest.py +++ b/packages/jumpstarter/conftest.py @@ -14,7 +14,6 @@ from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import rsa -from jumpstarter.streams import RouterStream, forward_stream from jumpstarter_protocol import ( jumpstarter_pb2, jumpstarter_pb2_grpc, @@ -22,6 +21,8 @@ router_pb2_grpc, ) +from jumpstarter.streams import RouterStream, forward_stream + @dataclass(kw_only=True) class MockRouter(router_pb2_grpc.RouterServiceServicer): diff --git a/packages/jumpstarter/jumpstarter/client/base.py b/packages/jumpstarter/jumpstarter/client/base.py index 22f236447..5b4e7cfd1 100644 --- a/packages/jumpstarter/jumpstarter/client/base.py +++ b/packages/jumpstarter/jumpstarter/client/base.py @@ -8,10 +8,11 @@ from dataclasses import field from anyio.from_thread import BlockingPortal -from jumpstarter.streams import BlockingStream from pydantic import ConfigDict from pydantic.dataclasses import dataclass +from jumpstarter.streams import BlockingStream + from .core import AsyncDriverClient diff --git a/packages/jumpstarter/jumpstarter/client/client.py b/packages/jumpstarter/jumpstarter/client/client.py index 64730330b..87aabf6bc 100644 --- a/packages/jumpstarter/jumpstarter/client/client.py +++ b/packages/jumpstarter/jumpstarter/client/client.py @@ -6,9 +6,10 @@ import grpc from anyio.from_thread import BlockingPortal from google.protobuf import empty_pb2 +from jumpstarter_protocol import jumpstarter_pb2_grpc + from jumpstarter.client import DriverClient from jumpstarter.common.importlib import import_class -from jumpstarter_protocol import jumpstarter_pb2_grpc @asynccontextmanager diff --git a/packages/jumpstarter/jumpstarter/client/core.py b/packages/jumpstarter/jumpstarter/client/core.py index f7deaae52..193d1e492 100644 --- a/packages/jumpstarter/jumpstarter/client/core.py +++ b/packages/jumpstarter/jumpstarter/client/core.py @@ -7,6 +7,8 @@ from grpc import StatusCode from grpc.aio import AioRpcError, Channel +from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, router_pb2_grpc + from jumpstarter.common import Metadata from jumpstarter.common.resources import ResourceMetadata from jumpstarter.common.serde import decode_value, encode_value @@ -22,7 +24,6 @@ RouterStream, forward_stream, ) -from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, router_pb2_grpc @dataclass(kw_only=True) diff --git a/packages/jumpstarter/jumpstarter/client/lease.py b/packages/jumpstarter/jumpstarter/client/lease.py index 3a3f96e4e..d7f66d492 100644 --- a/packages/jumpstarter/jumpstarter/client/lease.py +++ b/packages/jumpstarter/jumpstarter/client/lease.py @@ -6,12 +6,13 @@ from anyio.from_thread import BlockingPortal from google.protobuf import duration_pb2 from grpc.aio import Channel +from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, kubernetes_pb2 + from jumpstarter.client import client_from_path from jumpstarter.common import MetadataFilter, TemporaryUnixListener from jumpstarter.common.condition import condition_false, condition_present_and_equal, condition_true from jumpstarter.common.streams import connect_router_stream from jumpstarter.config.tls import TLSConfigV1Alpha1 -from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, kubernetes_pb2 logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter/jumpstarter/common/streams.py b/packages/jumpstarter/jumpstarter/common/streams.py index e2a9db6ad..d1fa265d2 100644 --- a/packages/jumpstarter/jumpstarter/common/streams.py +++ b/packages/jumpstarter/jumpstarter/common/streams.py @@ -3,11 +3,12 @@ from uuid import UUID import grpc -from jumpstarter.common.grpc import aio_secure_channel, ssl_channel_credentials -from jumpstarter.streams import RouterStream, forward_stream from jumpstarter_protocol.jumpstarter.v1 import router_pb2_grpc from pydantic import BaseModel, Field, Json +from jumpstarter.common.grpc import aio_secure_channel, ssl_channel_credentials +from jumpstarter.streams import RouterStream, forward_stream + class ResourceStreamRequest(BaseModel): kind: Literal["resource"] = "resource" diff --git a/packages/jumpstarter/jumpstarter/common/utils.py b/packages/jumpstarter/jumpstarter/common/utils.py index 20e91c46c..d9908e0a1 100644 --- a/packages/jumpstarter/jumpstarter/common/utils.py +++ b/packages/jumpstarter/jumpstarter/common/utils.py @@ -4,6 +4,7 @@ from subprocess import Popen from anyio.from_thread import BlockingPortal, start_blocking_portal + from jumpstarter.client import client_from_path from jumpstarter.config.client import _allow_from_env from jumpstarter.config.env import JMP_DRIVERS_ALLOW, JUMPSTARTER_HOST diff --git a/packages/jumpstarter/jumpstarter/config/client.py b/packages/jumpstarter/jumpstarter/config/client.py index 633d36ad1..6e8594e15 100644 --- a/packages/jumpstarter/jumpstarter/config/client.py +++ b/packages/jumpstarter/jumpstarter/config/client.py @@ -6,11 +6,12 @@ import grpc import yaml from anyio.from_thread import BlockingPortal, start_blocking_portal -from jumpstarter.common import MetadataFilter -from jumpstarter.common.grpc import aio_secure_channel, ssl_channel_credentials from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc from pydantic import BaseModel, Field, ValidationError +from jumpstarter.common import MetadataFilter +from jumpstarter.common.grpc import aio_secure_channel, ssl_channel_credentials + from .common import CONFIG_PATH from .env import JMP_DRIVERS_ALLOW, JMP_ENDPOINT, JMP_LEASE, JMP_TOKEN from .tls import TLSConfigV1Alpha1 diff --git a/packages/jumpstarter/jumpstarter/config/client_config_test.py b/packages/jumpstarter/jumpstarter/config/client_config_test.py index 325873477..fbdc1e9ae 100644 --- a/packages/jumpstarter/jumpstarter/config/client_config_test.py +++ b/packages/jumpstarter/jumpstarter/config/client_config_test.py @@ -5,12 +5,13 @@ import pytest import yaml +from pydantic import ValidationError + from jumpstarter.config import ( ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers, ) from jumpstarter.config.env import JMP_DRIVERS_ALLOW, JMP_ENDPOINT, JMP_TOKEN -from pydantic import ValidationError def test_client_ensure_exists_makes_dir(monkeypatch: pytest.MonkeyPatch): diff --git a/packages/jumpstarter/jumpstarter/config/exporter.py b/packages/jumpstarter/jumpstarter/config/exporter.py index a241d81da..46a4a2411 100644 --- a/packages/jumpstarter/jumpstarter/config/exporter.py +++ b/packages/jumpstarter/jumpstarter/config/exporter.py @@ -7,10 +7,11 @@ import grpc import yaml from anyio.from_thread import start_blocking_portal +from pydantic import BaseModel, Field + from jumpstarter.common.grpc import aio_secure_channel, ssl_channel_credentials from jumpstarter.common.importlib import import_class from jumpstarter.driver import Driver -from pydantic import BaseModel, Field from .tls import TLSConfigV1Alpha1 diff --git a/packages/jumpstarter/jumpstarter/config/exporter_test.py b/packages/jumpstarter/jumpstarter/config/exporter_test.py index 92e00319a..df0577f7f 100644 --- a/packages/jumpstarter/jumpstarter/config/exporter_test.py +++ b/packages/jumpstarter/jumpstarter/config/exporter_test.py @@ -3,6 +3,7 @@ import pytest from anyio import create_task_group from anyio.from_thread import start_blocking_portal + from jumpstarter.common import MetadataFilter from .client import ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers diff --git a/packages/jumpstarter/jumpstarter/config/user_config_test.py b/packages/jumpstarter/jumpstarter/config/user_config_test.py index 2504ab94b..d7daa9d06 100644 --- a/packages/jumpstarter/jumpstarter/config/user_config_test.py +++ b/packages/jumpstarter/jumpstarter/config/user_config_test.py @@ -3,6 +3,7 @@ from unittest.mock import patch import pytest + from jumpstarter.config import ( ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers, diff --git a/packages/jumpstarter/jumpstarter/driver/base.py b/packages/jumpstarter/jumpstarter/driver/base.py index 712b21a12..b425b624f 100644 --- a/packages/jumpstarter/jumpstarter/driver/base.py +++ b/packages/jumpstarter/jumpstarter/driver/base.py @@ -15,6 +15,10 @@ import aiohttp from anyio import to_thread from grpc import StatusCode +from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, router_pb2_grpc +from pydantic import TypeAdapter +from pydantic.dataclasses import dataclass + from jumpstarter.common import Metadata from jumpstarter.common.resources import ClientStreamResource, PresignedRequestResource, Resource, ResourceMetadata from jumpstarter.common.serde import decode_value, encode_value @@ -23,9 +27,6 @@ ResourceStreamRequest, ) from jumpstarter.streams import AiohttpStreamReaderStream, MetadataStream, create_memory_stream -from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, router_pb2_grpc -from pydantic import TypeAdapter -from pydantic.dataclasses import dataclass from .decorators import ( MARKER_DRIVERCALL, diff --git a/packages/jumpstarter/jumpstarter/exporter/exporter.py b/packages/jumpstarter/jumpstarter/exporter/exporter.py index 1420215cb..ff3963d32 100644 --- a/packages/jumpstarter/jumpstarter/exporter/exporter.py +++ b/packages/jumpstarter/jumpstarter/exporter/exporter.py @@ -6,15 +6,16 @@ import grpc from anyio import connect_unix, create_task_group from google.protobuf import empty_pb2 +from jumpstarter_protocol import ( + jumpstarter_pb2, + jumpstarter_pb2_grpc, +) + from jumpstarter.common import Metadata from jumpstarter.common.streams import connect_router_stream from jumpstarter.config.tls import TLSConfigV1Alpha1 from jumpstarter.driver import Driver from jumpstarter.exporter.session import Session -from jumpstarter_protocol import ( - jumpstarter_pb2, - jumpstarter_pb2_grpc, -) logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter/jumpstarter/exporter/session.py b/packages/jumpstarter/jumpstarter/exporter/session.py index 892e9585b..3e8e82b93 100644 --- a/packages/jumpstarter/jumpstarter/exporter/session.py +++ b/packages/jumpstarter/jumpstarter/exporter/session.py @@ -6,16 +6,17 @@ import grpc from anyio import Event, TypedAttributeLookupError from anyio.from_thread import start_blocking_portal -from jumpstarter.common import Metadata, TemporarySocket -from jumpstarter.common.streams import StreamRequestMetadata -from jumpstarter.driver import Driver -from jumpstarter.streams import MetadataStreamAttributes, RouterStream, forward_stream from jumpstarter_protocol import ( jumpstarter_pb2, jumpstarter_pb2_grpc, router_pb2_grpc, ) +from jumpstarter.common import Metadata, TemporarySocket +from jumpstarter.common.streams import StreamRequestMetadata +from jumpstarter.driver import Driver +from jumpstarter.streams import MetadataStreamAttributes, RouterStream, forward_stream + logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter/jumpstarter/listener_test.py b/packages/jumpstarter/jumpstarter/listener_test.py index 73c3e8b5b..d2025489f 100644 --- a/packages/jumpstarter/jumpstarter/listener_test.py +++ b/packages/jumpstarter/jumpstarter/listener_test.py @@ -7,13 +7,14 @@ import pytest from anyio import create_task_group from anyio.from_thread import start_blocking_portal +from jumpstarter_driver_power.driver import MockPower + from jumpstarter.client import Lease from jumpstarter.common import MetadataFilter from jumpstarter.common.grpc import aio_secure_channel, ssl_channel_credentials from jumpstarter.common.streams import connect_router_stream from jumpstarter.config.tls import TLSConfigV1Alpha1 from jumpstarter.exporter import Exporter, Session -from jumpstarter_driver_power.driver import MockPower pytestmark = pytest.mark.anyio diff --git a/pyproject.toml b/pyproject.toml index 2745c2cb1..d758431e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ docs = [ "sphinx-click>=6.0.0", "sphinx-substitution-extensions>=2024.10.17", ] -dev = ["ruff>=0.9.2", "typos>=1.23.6", "pre-commit>=3.8.0", "esbonio>=0.16.5"] +dev = ["ruff==0.9.2", "typos>=1.23.6", "pre-commit>=3.8.0", "esbonio>=0.16.5"] [tool.ruff] exclude = ["packages/jumpstarter-protocol"] diff --git a/uv.lock b/uv.lock index cc960ee23..c0f358b52 100644 --- a/uv.lock +++ b/uv.lock @@ -37,7 +37,7 @@ members = [ dev = [ { name = "esbonio", specifier = ">=0.16.5" }, { name = "pre-commit", specifier = ">=3.8.0" }, - { name = "ruff", specifier = ">=0.9.2" }, + { name = "ruff", specifier = "==0.9.2" }, { name = "typos", specifier = ">=1.23.6" }, ] docs = [ @@ -737,7 +737,6 @@ wheels = [ [[package]] name = "jumpstarter" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter" } dependencies = [ { name = "aiohttp" }, @@ -784,7 +783,6 @@ dev = [ [[package]] name = "jumpstarter-cli" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-cli" } dependencies = [ { name = "jumpstarter-cli-admin" }, @@ -817,7 +815,6 @@ dev = [ [[package]] name = "jumpstarter-cli-admin" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-cli-admin" } dependencies = [ { name = "jumpstarter-cli-common" }, @@ -848,7 +845,6 @@ dev = [ [[package]] name = "jumpstarter-cli-client" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-cli-client" } dependencies = [ { name = "jumpstarter-cli-common" }, @@ -875,7 +871,6 @@ dev = [ [[package]] name = "jumpstarter-cli-common" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-cli-common" } dependencies = [ { name = "asyncclick" }, @@ -906,7 +901,6 @@ dev = [ [[package]] name = "jumpstarter-cli-exporter" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-cli-exporter" } dependencies = [ { name = "asyncclick" }, @@ -937,7 +931,6 @@ dev = [ [[package]] name = "jumpstarter-driver-can" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-driver-can" } dependencies = [ { name = "can-isotp" }, @@ -966,7 +959,6 @@ dev = [ [[package]] name = "jumpstarter-driver-composite" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-driver-composite" } dependencies = [ { name = "asyncclick" }, @@ -995,7 +987,6 @@ dev = [ [[package]] name = "jumpstarter-driver-dutlink" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-driver-dutlink" } dependencies = [ { name = "asyncclick" }, @@ -1049,7 +1040,6 @@ dev = [ { name = "pytest" }, { name = "pytest-asyncio" }, { name = "pytest-cov" }, - { name = "ruff" }, ] [package.metadata] @@ -1065,12 +1055,10 @@ dev = [ { name = "pytest-asyncio", specifier = ">=0.0.0" }, { name = "pytest-asyncio", specifier = ">=0.24.0" }, { name = "pytest-cov", specifier = ">=6.0.0" }, - { name = "ruff", specifier = ">=0.7.1" }, ] [[package]] name = "jumpstarter-driver-network" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-driver-network" } dependencies = [ { name = "fabric" }, @@ -1103,7 +1091,6 @@ dev = [ [[package]] name = "jumpstarter-driver-opendal" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-driver-opendal" } dependencies = [ { name = "asyncclick" }, @@ -1132,7 +1119,6 @@ dev = [ [[package]] name = "jumpstarter-driver-power" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-driver-power" } dependencies = [ { name = "asyncclick" }, @@ -1163,7 +1149,6 @@ dev = [ [[package]] name = "jumpstarter-driver-pyserial" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-driver-pyserial" } dependencies = [ { name = "asyncclick" }, @@ -1194,7 +1179,6 @@ dev = [ [[package]] name = "jumpstarter-driver-raspberrypi" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-driver-raspberrypi" } dependencies = [ { name = "gpiozero" }, @@ -1221,7 +1205,6 @@ dev = [ [[package]] name = "jumpstarter-driver-sdwire" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-driver-sdwire" } dependencies = [ { name = "jumpstarter" }, @@ -1289,7 +1272,6 @@ dev = [ [[package]] name = "jumpstarter-driver-ustreamer" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-driver-ustreamer" } dependencies = [ { name = "jumpstarter" }, @@ -1350,7 +1332,6 @@ requires-dist = [ [[package]] name = "jumpstarter-imagehash" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-imagehash" } dependencies = [ { name = "imagehash" }, @@ -1377,7 +1358,6 @@ dev = [ [[package]] name = "jumpstarter-kubernetes" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-kubernetes" } dependencies = [ { name = "jumpstarter" }, @@ -1410,7 +1390,6 @@ dev = [ [[package]] name = "jumpstarter-protocol" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-protocol" } dependencies = [ { name = "grpcio" }, @@ -1441,7 +1420,6 @@ dev = [ [[package]] name = "jumpstarter-testing" -version = "0.5.1.dev125+g41e837e.d20250124" source = { editable = "packages/jumpstarter-testing" } dependencies = [ { name = "jumpstarter" }, From 9ef87026a030ad5b61a053292163acf0f3d3e485 Mon Sep 17 00:00:00 2001 From: Kirk Brauer Date: Sun, 26 Jan 2025 12:12:21 -0500 Subject: [PATCH 2/4] Fix import ordering --- .../jumpstarter_cli_admin/create.py | 3 +-- .../jumpstarter_cli_admin/create_test.py | 11 +++++------ .../jumpstarter_cli_admin/delete.py | 3 +-- .../jumpstarter_cli_admin/delete_test.py | 15 +++++++-------- .../jumpstarter_cli_admin/import_res.py | 11 +++++------ .../jumpstarter_cli_admin/import_res_test.py | 9 ++++----- .../jumpstarter_cli_client/__init__.py | 3 +-- .../jumpstarter_cli_client/client_config.py | 3 +-- .../jumpstarter_cli_client/client_shell.py | 1 - .../jumpstarter_cli_client/client_test.py | 1 - .../jumpstarter_cli_client/lease.py | 3 +-- .../jumpstarter_cli_exporter/exporter.py | 1 - .../jumpstarter_cli_exporter/exporter_config.py | 3 +-- .../jumpstarter_cli_exporter/exporter_test.py | 1 - .../jumpstarter_driver_can/client.py | 3 +-- .../jumpstarter_driver_can/client_test.py | 2 +- .../jumpstarter_driver_can/driver.py | 3 +-- .../jumpstarter_driver_composite/client.py | 1 - .../jumpstarter_driver_composite/driver.py | 3 +-- .../jumpstarter_driver_composite/driver_test.py | 3 +-- .../examples/dutlink.py | 3 +-- .../jumpstarter_driver_dutlink/driver.py | 3 +-- .../jumpstarter_driver_dutlink/driver_test.py | 2 +- .../jumpstarter_driver_http/client.py | 3 +-- .../jumpstarter_driver_http/driver.py | 1 - .../jumpstarter_driver_http/driver_test.py | 1 - .../adapters/fabric_test.py | 3 +-- .../adapters/novnc_test.py | 3 +-- .../jumpstarter_driver_network/driver.py | 1 - .../jumpstarter_driver_network/driver_test.py | 1 - .../jumpstarter_driver_opendal/adapter.py | 5 ++--- .../jumpstarter_driver_opendal/client.py | 3 +-- .../jumpstarter_driver_opendal/driver.py | 1 - .../jumpstarter_driver_opendal/driver_test.py | 3 +-- .../jumpstarter_driver_power/client.py | 1 - .../jumpstarter_driver_pyserial/client.py | 3 +-- .../jumpstarter_driver_pyserial/driver.py | 3 +-- .../jumpstarter_driver_raspberrypi/driver.py | 1 - .../jumpstarter_driver_raspberrypi/driver_test.py | 2 +- .../jumpstarter_driver_sdwire/driver.py | 3 +-- .../jumpstarter_driver_sdwire/driver_test.py | 2 +- .../jumpstarter_driver_tftp/client.py | 3 +-- .../jumpstarter_driver_tftp/driver.py | 2 +- .../jumpstarter_driver_tftp/driver_test.py | 2 +- .../jumpstarter_driver_ustreamer/client.py | 3 +-- .../jumpstarter_driver_ustreamer/driver.py | 1 - .../jumpstarter_driver_ustreamer/driver_test.py | 2 +- .../jumpstarter_imagehash/imagehash.py | 3 +-- .../jumpstarter_kubernetes/clients.py | 3 +-- .../jumpstarter_kubernetes/exporters.py | 3 +-- .../jumpstarter_testing/pytest.py | 1 - .../jumpstarter_testing/pytest_test.py | 5 ++--- packages/jumpstarter/conftest.py | 3 +-- packages/jumpstarter/jumpstarter/client/base.py | 3 +-- packages/jumpstarter/jumpstarter/client/client.py | 3 +-- packages/jumpstarter/jumpstarter/client/core.py | 3 +-- packages/jumpstarter/jumpstarter/client/lease.py | 3 +-- .../jumpstarter/jumpstarter/common/streams.py | 5 ++--- packages/jumpstarter/jumpstarter/common/utils.py | 1 - packages/jumpstarter/jumpstarter/config/client.py | 5 ++--- .../jumpstarter/config/client_config_test.py | 3 +-- .../jumpstarter/jumpstarter/config/exporter.py | 3 +-- .../jumpstarter/config/exporter_test.py | 1 - .../jumpstarter/config/user_config_test.py | 1 - packages/jumpstarter/jumpstarter/driver/base.py | 7 +++---- .../jumpstarter/jumpstarter/exporter/exporter.py | 9 ++++----- .../jumpstarter/jumpstarter/exporter/session.py | 9 ++++----- packages/jumpstarter/jumpstarter/listener_test.py | 3 +-- 68 files changed, 80 insertions(+), 141 deletions(-) diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create.py index d2fc864a9..d5ebcf7aa 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create.py @@ -2,6 +2,7 @@ from typing import Optional import asyncclick as click +from jumpstarter.config import ClientConfigV1Alpha1, ExporterConfigV1Alpha1, UserConfigV1Alpha1 from jumpstarter_cli_common import ( AliasedGroup, opt_context, @@ -13,8 +14,6 @@ from kubernetes_asyncio.client.exceptions import ApiException from kubernetes_asyncio.config.config_exception import ConfigException -from jumpstarter.config import ClientConfigV1Alpha1, ExporterConfigV1Alpha1, UserConfigV1Alpha1 - from .k8s import ( handle_k8s_api_exception, handle_k8s_config_exception, diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create_test.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create_test.py index 1ccd58621..f7fd3ecff 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create_test.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/create_test.py @@ -3,6 +3,11 @@ import pytest from asyncclick.testing import CliRunner +from jumpstarter.config import ( + ClientConfigV1Alpha1, + ClientConfigV1Alpha1Drivers, + ExporterConfigV1Alpha1, +) from jumpstarter_kubernetes import ( ClientsV1Alpha1Api, ExportersV1Alpha1Api, @@ -13,12 +18,6 @@ ) from kubernetes_asyncio.client.models import V1ObjectMeta -from jumpstarter.config import ( - ClientConfigV1Alpha1, - ClientConfigV1Alpha1Drivers, - ExporterConfigV1Alpha1, -) - from .create import create # Generate a random client name diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete.py index dc0d55b45..3df7151f9 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete.py @@ -2,6 +2,7 @@ from typing import Optional import asyncclick as click +from jumpstarter.config import ClientConfigV1Alpha1, ExporterConfigV1Alpha1, UserConfigV1Alpha1 from jumpstarter_cli_common import ( AliasedGroup, opt_context, @@ -13,8 +14,6 @@ from kubernetes_asyncio.client.exceptions import ApiException from kubernetes_asyncio.config.config_exception import ConfigException -from jumpstarter.config import ClientConfigV1Alpha1, ExporterConfigV1Alpha1, UserConfigV1Alpha1 - from .k8s import ( handle_k8s_api_exception, handle_k8s_config_exception, diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete_test.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete_test.py index bba248db3..521966906 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete_test.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/delete_test.py @@ -2,14 +2,6 @@ import pytest from asyncclick.testing import CliRunner -from jumpstarter_kubernetes import ( - ClientsV1Alpha1Api, - ExportersV1Alpha1Api, - V1Alpha1Exporter, - V1Alpha1ExporterStatus, -) -from kubernetes_asyncio.client.models import V1ObjectMeta - from jumpstarter.config import ( ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers, @@ -17,6 +9,13 @@ UserConfigV1Alpha1, UserConfigV1Alpha1Config, ) +from jumpstarter_kubernetes import ( + ClientsV1Alpha1Api, + ExportersV1Alpha1Api, + V1Alpha1Exporter, + V1Alpha1ExporterStatus, +) +from kubernetes_asyncio.client.models import V1ObjectMeta from .delete import delete diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res.py index 0ab62c33e..10dd4aa8b 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res.py @@ -1,6 +1,11 @@ from typing import Optional import asyncclick as click +from jumpstarter.config import ( + ClientConfigV1Alpha1, + UserConfigV1Alpha1, +) +from jumpstarter.config.exporter import ExporterConfigV1Alpha1 from jumpstarter_cli_common import ( opt_context, opt_kubeconfig, @@ -10,12 +15,6 @@ from kubernetes_asyncio.client.exceptions import ApiException from kubernetes_asyncio.config.config_exception import ConfigException -from jumpstarter.config import ( - ClientConfigV1Alpha1, - UserConfigV1Alpha1, -) -from jumpstarter.config.exporter import ExporterConfigV1Alpha1 - from .k8s import ( handle_k8s_api_exception, handle_k8s_config_exception, diff --git a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res_test.py b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res_test.py index c124b5d99..da977d81a 100644 --- a/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res_test.py +++ b/packages/jumpstarter-cli-admin/jumpstarter_cli_admin/import_res_test.py @@ -3,16 +3,15 @@ import pytest from asyncclick.testing import CliRunner -from jumpstarter_kubernetes import ( - ClientsV1Alpha1Api, - ExportersV1Alpha1Api, -) - from jumpstarter.config import ( ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers, ExporterConfigV1Alpha1, ) +from jumpstarter_kubernetes import ( + ClientsV1Alpha1Api, + ExportersV1Alpha1Api, +) from .import_res import import_res diff --git a/packages/jumpstarter-cli-client/jumpstarter_cli_client/__init__.py b/packages/jumpstarter-cli-client/jumpstarter_cli_client/__init__.py index 35f0215a6..4dfdb81cc 100644 --- a/packages/jumpstarter-cli-client/jumpstarter_cli_client/__init__.py +++ b/packages/jumpstarter-cli-client/jumpstarter_cli_client/__init__.py @@ -2,9 +2,8 @@ from typing import Optional import asyncclick as click -from jumpstarter_cli_common import AliasedGroup, opt_log_level, version - from jumpstarter.common.utils import env +from jumpstarter_cli_common import AliasedGroup, opt_log_level, version from .client_config import create_client_config, delete_client_config, list_client_configs, use_client_config from .client_shell import client_shell diff --git a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_config.py b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_config.py index 5a08aa25f..bed794ea0 100644 --- a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_config.py +++ b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_config.py @@ -1,9 +1,8 @@ from typing import Optional import asyncclick as click -from jumpstarter_cli_common import make_table - from jumpstarter.config import ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers, UserConfigV1Alpha1 +from jumpstarter_cli_common import make_table @click.command("create-config", short_help="Create a client config.") diff --git a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_shell.py b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_shell.py index ec5c11857..fc1eb856c 100644 --- a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_shell.py +++ b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_shell.py @@ -1,5 +1,4 @@ import asyncclick as click - from jumpstarter.common import MetadataFilter from jumpstarter.common.utils import launch_shell from jumpstarter.config import ( diff --git a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_test.py b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_test.py index e717a84bb..1440e5adf 100644 --- a/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_test.py +++ b/packages/jumpstarter-cli-client/jumpstarter_cli_client/client_test.py @@ -1,6 +1,5 @@ import pytest from asyncclick.testing import CliRunner - from jumpstarter.config import ClientConfigV1Alpha1, UserConfigV1Alpha1 from . import client diff --git a/packages/jumpstarter-cli-client/jumpstarter_cli_client/lease.py b/packages/jumpstarter-cli-client/jumpstarter_cli_client/lease.py index 7f20e7c90..cbff12745 100644 --- a/packages/jumpstarter-cli-client/jumpstarter_cli_client/lease.py +++ b/packages/jumpstarter-cli-client/jumpstarter_cli_client/lease.py @@ -1,11 +1,10 @@ import asyncclick as click -from jumpstarter_cli_common import AliasedGroup - from jumpstarter.common import MetadataFilter from jumpstarter.config import ( ClientConfigV1Alpha1, UserConfigV1Alpha1, ) +from jumpstarter_cli_common import AliasedGroup @click.group(cls=AliasedGroup, short_help="") diff --git a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter.py b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter.py index e35b8cdf6..870ac78b2 100644 --- a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter.py +++ b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter.py @@ -3,7 +3,6 @@ from pathlib import Path import asyncclick as click - from jumpstarter.common.utils import launch_shell from jumpstarter.config.exporter import ExporterConfigV1Alpha1 diff --git a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_config.py b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_config.py index 6283f6098..074ec2662 100644 --- a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_config.py +++ b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_config.py @@ -1,7 +1,6 @@ import asyncclick as click -from jumpstarter_cli_common import make_table - from jumpstarter.config.exporter import ExporterConfigV1Alpha1 +from jumpstarter_cli_common import make_table arg_alias = click.argument("alias", default="default") diff --git a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_test.py b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_test.py index 473337db7..f3824fd21 100644 --- a/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_test.py +++ b/packages/jumpstarter-cli-exporter/jumpstarter_cli_exporter/exporter_test.py @@ -1,6 +1,5 @@ import pytest from asyncclick.testing import CliRunner - from jumpstarter.config.exporter import ExporterConfigV1Alpha1 from . import exporter diff --git a/packages/jumpstarter-driver-can/jumpstarter_driver_can/client.py b/packages/jumpstarter-driver-can/jumpstarter_driver_can/client.py index 3555ec0ce..bf86a2b3b 100644 --- a/packages/jumpstarter-driver-can/jumpstarter_driver_can/client.py +++ b/packages/jumpstarter-driver-can/jumpstarter_driver_can/client.py @@ -8,9 +8,8 @@ import can import isotp from can.bus import _SelfRemovingCyclicTask -from pydantic import ConfigDict, validate_call - from jumpstarter.client import DriverClient +from pydantic import ConfigDict, validate_call from .common import CanMessage, IsoTpAddress, IsoTpAsymmetricAddress, IsoTpMessage diff --git a/packages/jumpstarter-driver-can/jumpstarter_driver_can/client_test.py b/packages/jumpstarter-driver-can/jumpstarter_driver_can/client_test.py index fe73e8d0a..88c130af6 100644 --- a/packages/jumpstarter-driver-can/jumpstarter_driver_can/client_test.py +++ b/packages/jumpstarter-driver-can/jumpstarter_driver_can/client_test.py @@ -6,8 +6,8 @@ import can import isotp import pytest - from jumpstarter.common.utils import serve + from jumpstarter_driver_can.common import IsoTpParams from jumpstarter_driver_can.driver import Can, IsoTpPython, IsoTpSocket diff --git a/packages/jumpstarter-driver-can/jumpstarter_driver_can/driver.py b/packages/jumpstarter-driver-can/jumpstarter_driver_can/driver.py index 177d341ee..96f2c06eb 100644 --- a/packages/jumpstarter-driver-can/jumpstarter_driver_can/driver.py +++ b/packages/jumpstarter-driver-can/jumpstarter_driver_can/driver.py @@ -4,11 +4,10 @@ import can import isotp +from jumpstarter.driver import Driver, export from pydantic import ConfigDict, validate_call from pydantic.dataclasses import dataclass -from jumpstarter.driver import Driver, export - from .common import CanMessage, IsoTpAddress, IsoTpAsymmetricAddress, IsoTpMessage, IsoTpParams diff --git a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/client.py b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/client.py index fed7d169e..273e0434f 100644 --- a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/client.py +++ b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/client.py @@ -1,7 +1,6 @@ from dataclasses import dataclass import asyncclick as click - from jumpstarter.client import DriverClient diff --git a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver.py b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver.py index 5a8f66990..438ce317b 100644 --- a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver.py +++ b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver.py @@ -1,6 +1,5 @@ -from pydantic.dataclasses import dataclass - from jumpstarter.driver import Driver +from pydantic.dataclasses import dataclass class CompositeInterface: diff --git a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver_test.py b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver_test.py index 03f4fb580..b2adf6d02 100644 --- a/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver_test.py +++ b/packages/jumpstarter-driver-composite/jumpstarter_driver_composite/driver_test.py @@ -1,6 +1,5 @@ -from jumpstarter_driver_power.driver import MockPower - from jumpstarter.common.utils import serve +from jumpstarter_driver_power.driver import MockPower from .driver import Composite diff --git a/packages/jumpstarter-driver-dutlink/examples/dutlink.py b/packages/jumpstarter-driver-dutlink/examples/dutlink.py index dc2fea042..b04840f40 100755 --- a/packages/jumpstarter-driver-dutlink/examples/dutlink.py +++ b/packages/jumpstarter-driver-dutlink/examples/dutlink.py @@ -3,9 +3,8 @@ import time import asyncclick as click -from jumpstarter_driver_network.adapters import PexpectAdapter - from jumpstarter.common.utils import env +from jumpstarter_driver_network.adapters import PexpectAdapter # initialize client from exporter config # from jumpstarter.common import MetadataFilter diff --git a/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver.py b/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver.py index 17068e9cb..b8210de56 100644 --- a/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver.py +++ b/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver.py @@ -11,14 +11,13 @@ import usb.util from anyio import fail_after, sleep from anyio.streams.file import FileReadStream, FileWriteStream +from jumpstarter.driver import Driver, export from jumpstarter_driver_composite.driver import CompositeInterface from jumpstarter_driver_opendal.driver import StorageMuxInterface from jumpstarter_driver_power.driver import PowerInterface, PowerReading from jumpstarter_driver_pyserial.driver import PySerial from serial.serialutil import SerialException -from jumpstarter.driver import Driver, export - log = logging.getLogger(__name__) diff --git a/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver_test.py b/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver_test.py index 18c82ae0b..efab289d4 100644 --- a/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver_test.py +++ b/packages/jumpstarter-driver-dutlink/jumpstarter_driver_dutlink/driver_test.py @@ -1,8 +1,8 @@ import pytest import usb +from jumpstarter.common.utils import serve from jumpstarter_driver_network.adapters import PexpectAdapter -from jumpstarter.common.utils import serve from jumpstarter_driver_dutlink.driver import Dutlink diff --git a/packages/jumpstarter-driver-http/jumpstarter_driver_http/client.py b/packages/jumpstarter-driver-http/jumpstarter_driver_http/client.py index e541f3a90..cf68516e0 100644 --- a/packages/jumpstarter-driver-http/jumpstarter_driver_http/client.py +++ b/packages/jumpstarter-driver-http/jumpstarter_driver_http/client.py @@ -1,11 +1,10 @@ from dataclasses import dataclass from pathlib import Path +from jumpstarter.client import DriverClient from jumpstarter_driver_opendal.adapter import OpendalAdapter from opendal import Operator -from jumpstarter.client import DriverClient - @dataclass(kw_only=True) class HttpServerClient(DriverClient): diff --git a/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver.py b/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver.py index 5b7774aa7..08ba20308 100644 --- a/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver.py +++ b/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver.py @@ -7,7 +7,6 @@ import anyio from aiohttp import web from anyio.streams.file import FileWriteStream - from jumpstarter.driver import Driver, export logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver_test.py b/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver_test.py index 7a221544c..519fce79a 100644 --- a/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver_test.py +++ b/packages/jumpstarter-driver-http/jumpstarter_driver_http/driver_test.py @@ -6,7 +6,6 @@ import anyio import pytest from anyio import create_memory_object_stream - from jumpstarter.common.resources import ClientStreamResource from .driver import HttpServer diff --git a/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/fabric_test.py b/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/fabric_test.py index 12d478752..6845e257b 100644 --- a/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/fabric_test.py +++ b/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/fabric_test.py @@ -2,11 +2,10 @@ from threading import Thread from time import sleep +from jumpstarter.common.utils import serve from paramiko import AUTH_SUCCESSFUL, OPEN_SUCCEEDED, ServerInterface, Transport from paramiko.rsakey import RSAKey -from jumpstarter.common.utils import serve - from ..driver import TcpNetwork from .fabric import FabricAdapter diff --git a/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/novnc_test.py b/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/novnc_test.py index 7f84c9d0e..f3b5deaab 100644 --- a/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/novnc_test.py +++ b/packages/jumpstarter-driver-network/jumpstarter_driver_network/adapters/novnc_test.py @@ -2,10 +2,9 @@ from urllib.parse import parse_qsl, urlparse from anyio.from_thread import start_blocking_portal -from websocket import create_connection - from jumpstarter.common import TemporaryTcpListener from jumpstarter.common.utils import serve +from websocket import create_connection from ..driver import TcpNetwork from .novnc import NovncAdapter diff --git a/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver.py b/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver.py index 8b7e64ce5..8b2293ef7 100644 --- a/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver.py +++ b/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver.py @@ -10,7 +10,6 @@ create_memory_object_stream, ) from anyio.streams.stapled import StapledObjectStream - from jumpstarter.driver import Driver, exportstream logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver_test.py b/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver_test.py index 7dbe04ec9..647e229be 100644 --- a/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver_test.py +++ b/packages/jumpstarter-driver-network/jumpstarter_driver_network/driver_test.py @@ -5,7 +5,6 @@ import pytest from anyio.from_thread import start_blocking_portal - from jumpstarter.common import TemporaryTcpListener, TemporaryUnixListener from jumpstarter.common.utils import serve diff --git a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/adapter.py b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/adapter.py index 1dde10343..a94be7948 100644 --- a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/adapter.py +++ b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/adapter.py @@ -4,11 +4,10 @@ from anyio import BrokenResourceError, EndOfStream from anyio.abc import ObjectStream -from opendal import AsyncFile, Operator -from opendal.exceptions import Error - from jumpstarter.client.adapters import ClientAdapter from jumpstarter.common.resources import PresignedRequestResource +from opendal import AsyncFile, Operator +from opendal.exceptions import Error @dataclass(frozen=True, kw_only=True, slots=True) diff --git a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py index 5905b4538..261a86069 100644 --- a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py +++ b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/client.py @@ -1,9 +1,8 @@ from pathlib import Path import asyncclick as click -from opendal import Operator - from jumpstarter.client import DriverClient +from opendal import Operator from .adapter import OpendalAdapter diff --git a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py index 0b2f17934..47d36f19b 100644 --- a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py +++ b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver.py @@ -3,7 +3,6 @@ from tempfile import NamedTemporaryFile from anyio.streams.file import FileReadStream, FileWriteStream - from jumpstarter.driver import Driver, export diff --git a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver_test.py b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver_test.py index 1b0536316..90221b443 100644 --- a/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver_test.py +++ b/packages/jumpstarter-driver-opendal/jumpstarter_driver_opendal/driver_test.py @@ -5,9 +5,8 @@ from threading import Thread import pytest -from opendal import Operator - from jumpstarter.common.utils import serve +from opendal import Operator from .driver import MockStorageMux diff --git a/packages/jumpstarter-driver-power/jumpstarter_driver_power/client.py b/packages/jumpstarter-driver-power/jumpstarter_driver_power/client.py index f9aa897d7..be2003773 100644 --- a/packages/jumpstarter-driver-power/jumpstarter_driver_power/client.py +++ b/packages/jumpstarter-driver-power/jumpstarter_driver_power/client.py @@ -1,7 +1,6 @@ from collections.abc import Generator import asyncclick as click - from jumpstarter.client import DriverClient from .common import PowerReading diff --git a/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/client.py b/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/client.py index c0080db77..f6640cc49 100644 --- a/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/client.py +++ b/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/client.py @@ -1,11 +1,10 @@ from contextlib import contextmanager import asyncclick as click +from jumpstarter.client import DriverClient from jumpstarter_driver_network.adapters import PexpectAdapter from pexpect.fdpexpect import fdspawn -from jumpstarter.client import DriverClient - from .console import Console diff --git a/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/driver.py b/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/driver.py index 67505d142..69d4d0f88 100644 --- a/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/driver.py +++ b/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/driver.py @@ -4,9 +4,8 @@ from anyio.abc import ObjectStream from anyio.to_thread import run_sync -from serial import Serial, serial_for_url - from jumpstarter.driver import Driver, exportstream +from serial import Serial, serial_for_url log = logging.getLogger(__name__) diff --git a/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver.py b/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver.py index 20c4a0cbe..1e86d5253 100644 --- a/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver.py +++ b/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver.py @@ -1,7 +1,6 @@ from dataclasses import dataclass, field from gpiozero import DigitalInputDevice, DigitalOutputDevice, InputDevice - from jumpstarter.driver import Driver, export diff --git a/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver_test.py b/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver_test.py index de71d989e..a933ac17a 100644 --- a/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver_test.py +++ b/packages/jumpstarter-driver-raspberrypi/jumpstarter_driver_raspberrypi/driver_test.py @@ -2,8 +2,8 @@ from gpiozero import Device from gpiozero.pins.mock import MockFactory - from jumpstarter.common.utils import serve + from jumpstarter_driver_raspberrypi.driver import DigitalInput, DigitalOutput Device.pin_factory = MockFactory() diff --git a/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver.py b/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver.py index f7c6d8269..ad5d94419 100644 --- a/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver.py +++ b/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver.py @@ -8,9 +8,8 @@ import usb.util from anyio import fail_after, sleep from anyio.streams.file import FileReadStream, FileWriteStream -from jumpstarter_driver_opendal.driver import StorageMuxInterface - from jumpstarter.driver import Driver, export +from jumpstarter_driver_opendal.driver import StorageMuxInterface @dataclass(kw_only=True) diff --git a/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver_test.py b/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver_test.py index d6d9c9aed..8f4434d0d 100644 --- a/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver_test.py +++ b/packages/jumpstarter-driver-sdwire/jumpstarter_driver_sdwire/driver_test.py @@ -1,7 +1,7 @@ import pytest import usb - from jumpstarter.common.utils import serve + from jumpstarter_driver_sdwire.driver import SDWire diff --git a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py index cc22910cd..06c009c6f 100644 --- a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py +++ b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/client.py @@ -1,11 +1,10 @@ from dataclasses import dataclass from pathlib import Path +from jumpstarter.client import DriverClient from jumpstarter_driver_opendal.adapter import OpendalAdapter from opendal import Operator -from jumpstarter.client import DriverClient - @dataclass(kw_only=True) class TftpServerClient(DriverClient): diff --git a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py index 465d5d0e5..2c917d596 100644 --- a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py +++ b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver.py @@ -8,8 +8,8 @@ from typing import Optional from anyio.streams.file import FileWriteStream - from jumpstarter.driver import Driver, export + from jumpstarter_driver_tftp.server import TftpServer logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver_test.py b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver_test.py index 733130cc3..196cdb4b1 100644 --- a/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver_test.py +++ b/packages/jumpstarter-driver-tftp/jumpstarter_driver_tftp/driver_test.py @@ -6,8 +6,8 @@ import anyio import pytest from anyio import create_memory_object_stream - from jumpstarter.common.resources import ClientStreamResource + from jumpstarter_driver_tftp.driver import ( FileNotFound, Tftp, diff --git a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/client.py b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/client.py index 7f40da8ea..e2e8f5101 100644 --- a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/client.py +++ b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/client.py @@ -2,9 +2,8 @@ import logging from base64 import b64decode -from PIL import Image - from jumpstarter.client import DriverClient +from PIL import Image from .common import UStreamerState diff --git a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver.py b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver.py index e0a620989..24f21d724 100644 --- a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver.py +++ b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver.py @@ -10,7 +10,6 @@ from aiohttp import ClientSession, UnixConnector from anyio import connect_unix - from jumpstarter.driver import Driver, export, exportstream from .common import UStreamerState diff --git a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver_test.py b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver_test.py index 7cbda2858..de52cd3bd 100644 --- a/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver_test.py +++ b/packages/jumpstarter-driver-ustreamer/jumpstarter_driver_ustreamer/driver_test.py @@ -1,6 +1,6 @@ import pytest - from jumpstarter.common.utils import serve + from jumpstarter_driver_ustreamer.driver import UStreamer diff --git a/packages/jumpstarter-imagehash/jumpstarter_imagehash/imagehash.py b/packages/jumpstarter-imagehash/jumpstarter_imagehash/imagehash.py index 3e5e394c6..e7b747111 100644 --- a/packages/jumpstarter-imagehash/jumpstarter_imagehash/imagehash.py +++ b/packages/jumpstarter-imagehash/jumpstarter_imagehash/imagehash.py @@ -5,9 +5,8 @@ from typing import Any import imagehash -from PIL import Image - from jumpstarter.client import DriverClient +from PIL import Image log = logging.getLogger("imagehash") diff --git a/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/clients.py b/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/clients.py index cd3d69e37..34d80f356 100644 --- a/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/clients.py +++ b/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/clients.py @@ -4,9 +4,8 @@ from dataclasses import dataclass from typing import Literal, Optional -from kubernetes_asyncio.client.models import V1ObjectMeta, V1ObjectReference - from jumpstarter.config import ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers +from kubernetes_asyncio.client.models import V1ObjectMeta, V1ObjectReference from .util import AbstractAsyncCustomObjectApi diff --git a/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/exporters.py b/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/exporters.py index 27b115e2c..ff23bb216 100644 --- a/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/exporters.py +++ b/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/exporters.py @@ -3,9 +3,8 @@ from dataclasses import dataclass from typing import Literal -from kubernetes_asyncio.client.models import V1ObjectMeta, V1ObjectReference - from jumpstarter.config import ExporterConfigV1Alpha1 +from kubernetes_asyncio.client.models import V1ObjectMeta, V1ObjectReference from .util import AbstractAsyncCustomObjectApi diff --git a/packages/jumpstarter-testing/jumpstarter_testing/pytest.py b/packages/jumpstarter-testing/jumpstarter_testing/pytest.py index 7d3908c8d..512abcd1c 100644 --- a/packages/jumpstarter-testing/jumpstarter_testing/pytest.py +++ b/packages/jumpstarter-testing/jumpstarter_testing/pytest.py @@ -3,7 +3,6 @@ from typing import ClassVar import pytest - from jumpstarter.common import MetadataFilter from jumpstarter.common.utils import env from jumpstarter.config.client import ClientConfigV1Alpha1 diff --git a/packages/jumpstarter-testing/jumpstarter_testing/pytest_test.py b/packages/jumpstarter-testing/jumpstarter_testing/pytest_test.py index b026ec5d3..60be99a0d 100644 --- a/packages/jumpstarter-testing/jumpstarter_testing/pytest_test.py +++ b/packages/jumpstarter-testing/jumpstarter_testing/pytest_test.py @@ -1,8 +1,7 @@ -from jumpstarter_driver_power.driver import MockPower -from pytest import Pytester - from jumpstarter.config.env import JMP_DRIVERS_ALLOW, JUMPSTARTER_HOST from jumpstarter.exporter import Session +from jumpstarter_driver_power.driver import MockPower +from pytest import Pytester def test_env(pytester: Pytester, monkeypatch): diff --git a/packages/jumpstarter/conftest.py b/packages/jumpstarter/conftest.py index 91a57bc36..159b28ab1 100644 --- a/packages/jumpstarter/conftest.py +++ b/packages/jumpstarter/conftest.py @@ -14,6 +14,7 @@ from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import rsa +from jumpstarter.streams import RouterStream, forward_stream from jumpstarter_protocol import ( jumpstarter_pb2, jumpstarter_pb2_grpc, @@ -21,8 +22,6 @@ router_pb2_grpc, ) -from jumpstarter.streams import RouterStream, forward_stream - @dataclass(kw_only=True) class MockRouter(router_pb2_grpc.RouterServiceServicer): diff --git a/packages/jumpstarter/jumpstarter/client/base.py b/packages/jumpstarter/jumpstarter/client/base.py index 5b4e7cfd1..22f236447 100644 --- a/packages/jumpstarter/jumpstarter/client/base.py +++ b/packages/jumpstarter/jumpstarter/client/base.py @@ -8,11 +8,10 @@ from dataclasses import field from anyio.from_thread import BlockingPortal +from jumpstarter.streams import BlockingStream from pydantic import ConfigDict from pydantic.dataclasses import dataclass -from jumpstarter.streams import BlockingStream - from .core import AsyncDriverClient diff --git a/packages/jumpstarter/jumpstarter/client/client.py b/packages/jumpstarter/jumpstarter/client/client.py index 87aabf6bc..64730330b 100644 --- a/packages/jumpstarter/jumpstarter/client/client.py +++ b/packages/jumpstarter/jumpstarter/client/client.py @@ -6,10 +6,9 @@ import grpc from anyio.from_thread import BlockingPortal from google.protobuf import empty_pb2 -from jumpstarter_protocol import jumpstarter_pb2_grpc - from jumpstarter.client import DriverClient from jumpstarter.common.importlib import import_class +from jumpstarter_protocol import jumpstarter_pb2_grpc @asynccontextmanager diff --git a/packages/jumpstarter/jumpstarter/client/core.py b/packages/jumpstarter/jumpstarter/client/core.py index 193d1e492..f7deaae52 100644 --- a/packages/jumpstarter/jumpstarter/client/core.py +++ b/packages/jumpstarter/jumpstarter/client/core.py @@ -7,8 +7,6 @@ from grpc import StatusCode from grpc.aio import AioRpcError, Channel -from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, router_pb2_grpc - from jumpstarter.common import Metadata from jumpstarter.common.resources import ResourceMetadata from jumpstarter.common.serde import decode_value, encode_value @@ -24,6 +22,7 @@ RouterStream, forward_stream, ) +from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, router_pb2_grpc @dataclass(kw_only=True) diff --git a/packages/jumpstarter/jumpstarter/client/lease.py b/packages/jumpstarter/jumpstarter/client/lease.py index d7f66d492..3a3f96e4e 100644 --- a/packages/jumpstarter/jumpstarter/client/lease.py +++ b/packages/jumpstarter/jumpstarter/client/lease.py @@ -6,13 +6,12 @@ from anyio.from_thread import BlockingPortal from google.protobuf import duration_pb2 from grpc.aio import Channel -from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, kubernetes_pb2 - from jumpstarter.client import client_from_path from jumpstarter.common import MetadataFilter, TemporaryUnixListener from jumpstarter.common.condition import condition_false, condition_present_and_equal, condition_true from jumpstarter.common.streams import connect_router_stream from jumpstarter.config.tls import TLSConfigV1Alpha1 +from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, kubernetes_pb2 logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter/jumpstarter/common/streams.py b/packages/jumpstarter/jumpstarter/common/streams.py index d1fa265d2..e2a9db6ad 100644 --- a/packages/jumpstarter/jumpstarter/common/streams.py +++ b/packages/jumpstarter/jumpstarter/common/streams.py @@ -3,11 +3,10 @@ from uuid import UUID import grpc -from jumpstarter_protocol.jumpstarter.v1 import router_pb2_grpc -from pydantic import BaseModel, Field, Json - from jumpstarter.common.grpc import aio_secure_channel, ssl_channel_credentials from jumpstarter.streams import RouterStream, forward_stream +from jumpstarter_protocol.jumpstarter.v1 import router_pb2_grpc +from pydantic import BaseModel, Field, Json class ResourceStreamRequest(BaseModel): diff --git a/packages/jumpstarter/jumpstarter/common/utils.py b/packages/jumpstarter/jumpstarter/common/utils.py index d9908e0a1..20e91c46c 100644 --- a/packages/jumpstarter/jumpstarter/common/utils.py +++ b/packages/jumpstarter/jumpstarter/common/utils.py @@ -4,7 +4,6 @@ from subprocess import Popen from anyio.from_thread import BlockingPortal, start_blocking_portal - from jumpstarter.client import client_from_path from jumpstarter.config.client import _allow_from_env from jumpstarter.config.env import JMP_DRIVERS_ALLOW, JUMPSTARTER_HOST diff --git a/packages/jumpstarter/jumpstarter/config/client.py b/packages/jumpstarter/jumpstarter/config/client.py index 6e8594e15..633d36ad1 100644 --- a/packages/jumpstarter/jumpstarter/config/client.py +++ b/packages/jumpstarter/jumpstarter/config/client.py @@ -6,11 +6,10 @@ import grpc import yaml from anyio.from_thread import BlockingPortal, start_blocking_portal -from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc -from pydantic import BaseModel, Field, ValidationError - from jumpstarter.common import MetadataFilter from jumpstarter.common.grpc import aio_secure_channel, ssl_channel_credentials +from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc +from pydantic import BaseModel, Field, ValidationError from .common import CONFIG_PATH from .env import JMP_DRIVERS_ALLOW, JMP_ENDPOINT, JMP_LEASE, JMP_TOKEN diff --git a/packages/jumpstarter/jumpstarter/config/client_config_test.py b/packages/jumpstarter/jumpstarter/config/client_config_test.py index fbdc1e9ae..325873477 100644 --- a/packages/jumpstarter/jumpstarter/config/client_config_test.py +++ b/packages/jumpstarter/jumpstarter/config/client_config_test.py @@ -5,13 +5,12 @@ import pytest import yaml -from pydantic import ValidationError - from jumpstarter.config import ( ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers, ) from jumpstarter.config.env import JMP_DRIVERS_ALLOW, JMP_ENDPOINT, JMP_TOKEN +from pydantic import ValidationError def test_client_ensure_exists_makes_dir(monkeypatch: pytest.MonkeyPatch): diff --git a/packages/jumpstarter/jumpstarter/config/exporter.py b/packages/jumpstarter/jumpstarter/config/exporter.py index 46a4a2411..a241d81da 100644 --- a/packages/jumpstarter/jumpstarter/config/exporter.py +++ b/packages/jumpstarter/jumpstarter/config/exporter.py @@ -7,11 +7,10 @@ import grpc import yaml from anyio.from_thread import start_blocking_portal -from pydantic import BaseModel, Field - from jumpstarter.common.grpc import aio_secure_channel, ssl_channel_credentials from jumpstarter.common.importlib import import_class from jumpstarter.driver import Driver +from pydantic import BaseModel, Field from .tls import TLSConfigV1Alpha1 diff --git a/packages/jumpstarter/jumpstarter/config/exporter_test.py b/packages/jumpstarter/jumpstarter/config/exporter_test.py index df0577f7f..92e00319a 100644 --- a/packages/jumpstarter/jumpstarter/config/exporter_test.py +++ b/packages/jumpstarter/jumpstarter/config/exporter_test.py @@ -3,7 +3,6 @@ import pytest from anyio import create_task_group from anyio.from_thread import start_blocking_portal - from jumpstarter.common import MetadataFilter from .client import ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers diff --git a/packages/jumpstarter/jumpstarter/config/user_config_test.py b/packages/jumpstarter/jumpstarter/config/user_config_test.py index d7daa9d06..2504ab94b 100644 --- a/packages/jumpstarter/jumpstarter/config/user_config_test.py +++ b/packages/jumpstarter/jumpstarter/config/user_config_test.py @@ -3,7 +3,6 @@ from unittest.mock import patch import pytest - from jumpstarter.config import ( ClientConfigV1Alpha1, ClientConfigV1Alpha1Drivers, diff --git a/packages/jumpstarter/jumpstarter/driver/base.py b/packages/jumpstarter/jumpstarter/driver/base.py index b425b624f..712b21a12 100644 --- a/packages/jumpstarter/jumpstarter/driver/base.py +++ b/packages/jumpstarter/jumpstarter/driver/base.py @@ -15,10 +15,6 @@ import aiohttp from anyio import to_thread from grpc import StatusCode -from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, router_pb2_grpc -from pydantic import TypeAdapter -from pydantic.dataclasses import dataclass - from jumpstarter.common import Metadata from jumpstarter.common.resources import ClientStreamResource, PresignedRequestResource, Resource, ResourceMetadata from jumpstarter.common.serde import decode_value, encode_value @@ -27,6 +23,9 @@ ResourceStreamRequest, ) from jumpstarter.streams import AiohttpStreamReaderStream, MetadataStream, create_memory_stream +from jumpstarter_protocol import jumpstarter_pb2, jumpstarter_pb2_grpc, router_pb2_grpc +from pydantic import TypeAdapter +from pydantic.dataclasses import dataclass from .decorators import ( MARKER_DRIVERCALL, diff --git a/packages/jumpstarter/jumpstarter/exporter/exporter.py b/packages/jumpstarter/jumpstarter/exporter/exporter.py index ff3963d32..1420215cb 100644 --- a/packages/jumpstarter/jumpstarter/exporter/exporter.py +++ b/packages/jumpstarter/jumpstarter/exporter/exporter.py @@ -6,16 +6,15 @@ import grpc from anyio import connect_unix, create_task_group from google.protobuf import empty_pb2 -from jumpstarter_protocol import ( - jumpstarter_pb2, - jumpstarter_pb2_grpc, -) - from jumpstarter.common import Metadata from jumpstarter.common.streams import connect_router_stream from jumpstarter.config.tls import TLSConfigV1Alpha1 from jumpstarter.driver import Driver from jumpstarter.exporter.session import Session +from jumpstarter_protocol import ( + jumpstarter_pb2, + jumpstarter_pb2_grpc, +) logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter/jumpstarter/exporter/session.py b/packages/jumpstarter/jumpstarter/exporter/session.py index 3e8e82b93..892e9585b 100644 --- a/packages/jumpstarter/jumpstarter/exporter/session.py +++ b/packages/jumpstarter/jumpstarter/exporter/session.py @@ -6,17 +6,16 @@ import grpc from anyio import Event, TypedAttributeLookupError from anyio.from_thread import start_blocking_portal +from jumpstarter.common import Metadata, TemporarySocket +from jumpstarter.common.streams import StreamRequestMetadata +from jumpstarter.driver import Driver +from jumpstarter.streams import MetadataStreamAttributes, RouterStream, forward_stream from jumpstarter_protocol import ( jumpstarter_pb2, jumpstarter_pb2_grpc, router_pb2_grpc, ) -from jumpstarter.common import Metadata, TemporarySocket -from jumpstarter.common.streams import StreamRequestMetadata -from jumpstarter.driver import Driver -from jumpstarter.streams import MetadataStreamAttributes, RouterStream, forward_stream - logger = logging.getLogger(__name__) diff --git a/packages/jumpstarter/jumpstarter/listener_test.py b/packages/jumpstarter/jumpstarter/listener_test.py index d2025489f..73c3e8b5b 100644 --- a/packages/jumpstarter/jumpstarter/listener_test.py +++ b/packages/jumpstarter/jumpstarter/listener_test.py @@ -7,14 +7,13 @@ import pytest from anyio import create_task_group from anyio.from_thread import start_blocking_portal -from jumpstarter_driver_power.driver import MockPower - from jumpstarter.client import Lease from jumpstarter.common import MetadataFilter from jumpstarter.common.grpc import aio_secure_channel, ssl_channel_credentials from jumpstarter.common.streams import connect_router_stream from jumpstarter.config.tls import TLSConfigV1Alpha1 from jumpstarter.exporter import Exporter, Session +from jumpstarter_driver_power.driver import MockPower pytestmark = pytest.mark.anyio From 24f07b3c7573ea9630a4d823c89c7b2aa9088e39 Mon Sep 17 00:00:00 2001 From: Kirk Brauer Date: Sun, 26 Jan 2025 12:24:01 -0500 Subject: [PATCH 3/4] Fix pre-commit hook version --- .pre-commit-config.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9dc643688..ee31bc413 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,13 +1,13 @@ default_stages: [pre-commit] repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.9.3 + rev: v0.9.2 hooks: - - id: ruff - name: Ruff Check - description: "Run 'ruff check' for extremely fast Python linting" - args: [ --fix ] + - id: ruff + name: Ruff Check + description: "Run 'ruff check' for extremely fast Python linting" + args: [ --fix ] - - id: ruff-format - name: Ruff Format - description: "Run 'ruff format' for extremely fast Python formatting" \ No newline at end of file + - id: ruff-format + name: Ruff Format + description: "Run 'ruff format' for extremely fast Python formatting" \ No newline at end of file From 58c3375e674e2901aac24ad831cedc2cd762ad27 Mon Sep 17 00:00:00 2001 From: Kirk Brauer Date: Sun, 26 Jan 2025 17:34:27 +0000 Subject: [PATCH 4/4] Upgrade devcontainer with latest uv version --- .devcontainer/Dockerfile | 28 ++----------------- .../jumpstarter-driver-http/pyproject.toml | 1 - 2 files changed, 2 insertions(+), 27 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 811190f31..c936e5825 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,39 +1,15 @@ -FROM debian:bookworm-slim AS builder - -WORKDIR /opt - -# The installer requires curl (and certificates) to download the release archive -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - ca-certificates \ - curl - -SHELL [ "/bin/bash", "-o", "pipefail", "-c" ] - -# Download the latest installer -ADD https://astral.sh/uv/install.sh uv-installer.sh - -# Run the installer then remove it -RUN sh uv-installer.sh - - FROM mcr.microsoft.com/vscode/devcontainers/base:bookworm -ENV CARGO_HOME="/opt/.cargo/bin" -ENV PATH="$CARGO_HOME/:$PATH" - ENV PYTHONUNBUFFERED=True ENV UV_LINK_MODE=copy WORKDIR /opt -COPY --from=builder /root/.cargo/bin/uv $CARGO_HOME/uv -COPY --from=builder /root/.cargo/bin/uvx $CARGO_HOME/uvx +COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv +COPY --from=ghcr.io/astral-sh/uv:latest /uvx /bin/uvx COPY ./.python-version ./ RUN uv python pin "$(cat .python-version)" -RUN chown -R vscode $CARGO_HOME - # Install required tools for development RUN apt-get update && apt-get install -y iperf3 libusb-dev \ No newline at end of file diff --git a/packages/jumpstarter-driver-http/pyproject.toml b/packages/jumpstarter-driver-http/pyproject.toml index a1744e951..1a2afd819 100644 --- a/packages/jumpstarter-driver-http/pyproject.toml +++ b/packages/jumpstarter-driver-http/pyproject.toml @@ -35,6 +35,5 @@ dev = [ "pytest-cov>=6.0.0", "pytest>=8.3.3", "pytest-asyncio>=0.0.0", - "ruff>=0.7.1", "pytest-asyncio>=0.24.0", ]