From 505005bec44de292a104619df225be06cdf1688c Mon Sep 17 00:00:00 2001 From: Jvst Me Date: Tue, 12 May 2026 09:25:05 +0200 Subject: [PATCH] Fix Pyright errors with `requests==2.34.0` The latest `requests` version annotates `HTTPError.response` as optional, which breaks our Pyright checks. --- src/dstack/_internal/cli/commands/project.py | 4 ++-- src/dstack/_internal/core/backends/cudo/compute.py | 4 ++-- .../_internal/core/backends/digitalocean_base/api_client.py | 3 +-- src/dstack/_internal/core/backends/lambdalabs/api_client.py | 2 +- src/dstack/_internal/core/backends/vultr/compute.py | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/dstack/_internal/cli/commands/project.py b/src/dstack/_internal/cli/commands/project.py index 4c0df49281..867bd9686d 100644 --- a/src/dstack/_internal/cli/commands/project.py +++ b/src/dstack/_internal/cli/commands/project.py @@ -140,9 +140,9 @@ def _add(self, args: argparse.Namespace): try: api_client.projects.get(args.name) except HTTPError as e: - if e.response.status_code == 403: + if e.response is not None and e.response.status_code == 403: raise CLIError("Forbidden. Ensure the token is valid.") - elif e.response.status_code == 404: + elif e.response is not None and e.response.status_code == 404: raise CLIError(f"Project '{args.name}' not found.") else: raise e diff --git a/src/dstack/_internal/core/backends/cudo/compute.py b/src/dstack/_internal/core/backends/cudo/compute.py index edf8d4dc2f..0dbddcba0e 100644 --- a/src/dstack/_internal/core/backends/cudo/compute.py +++ b/src/dstack/_internal/core/backends/cudo/compute.py @@ -133,10 +133,10 @@ def terminate_instance( try: self.api_client.terminate_virtual_machine(instance_id, self.config.project_id) except requests.HTTPError as e: - if e.response.status_code == requests.codes.not_found: + if e.response is not None and e.response.status_code == requests.codes.not_found: logger.debug("The instance with name %s not found", instance_id) return - raise BackendError(e.response.text) + raise BackendError(e.response.text if e.response is not None else str(e)) def update_provisioning_data( self, diff --git a/src/dstack/_internal/core/backends/digitalocean_base/api_client.py b/src/dstack/_internal/core/backends/digitalocean_base/api_client.py index afedd36ffc..fa901fc0d9 100644 --- a/src/dstack/_internal/core/backends/digitalocean_base/api_client.py +++ b/src/dstack/_internal/core/backends/digitalocean_base/api_client.py @@ -20,8 +20,7 @@ def validate_api_key(self) -> bool: response.raise_for_status() return True except requests.HTTPError as e: - status = e.response.status_code - if status == 401: + if e.response is not None and e.response.status_code == 401: raise_invalid_credentials_error( fields=[["creds", "api_key"]], details="Invaild API key" ) diff --git a/src/dstack/_internal/core/backends/lambdalabs/api_client.py b/src/dstack/_internal/core/backends/lambdalabs/api_client.py index 0f38da28ea..0da70ff5fc 100644 --- a/src/dstack/_internal/core/backends/lambdalabs/api_client.py +++ b/src/dstack/_internal/core/backends/lambdalabs/api_client.py @@ -13,7 +13,7 @@ def validate_api_key(self) -> bool: try: self.list_instance_types() except requests.HTTPError as e: - if e.response.status_code in [401, 403]: + if e.response is not None and e.response.status_code in [401, 403]: return False raise e return True diff --git a/src/dstack/_internal/core/backends/vultr/compute.py b/src/dstack/_internal/core/backends/vultr/compute.py index 17877d3d4c..2ae3210621 100644 --- a/src/dstack/_internal/core/backends/vultr/compute.py +++ b/src/dstack/_internal/core/backends/vultr/compute.py @@ -117,7 +117,7 @@ def terminate_instance( try: self.api_client.terminate_instance(instance_id=instance_id, plan_type=plan_type) except requests.HTTPError as e: - raise BackendError(e.response.text) + raise BackendError(e.response.text if e.response is not None else str(e)) def update_provisioning_data( self,