Skip to content
This repository was archived by the owner on Jan 23, 2026. It is now read-only.

Use Lease related methods from client service (phase 1)#342

Merged
NickCao merged 5 commits intomainfrom
client-svc-phase1
Mar 17, 2025
Merged

Use Lease related methods from client service (phase 1)#342
NickCao merged 5 commits intomainfrom
client-svc-phase1

Conversation

@NickCao
Copy link
Copy Markdown
Collaborator

@NickCao NickCao commented Mar 13, 2025

Summary by CodeRabbit

  • New Features

    • Introduced comprehensive lease management, enabling users to create, update, retrieve, list, and delete leases.
    • Enhanced client service capabilities for managing exporters and leases with more flexible identifier handling.
  • Refactor

    • Streamlined backend service integration and import organization to improve overall connectivity and reliability.
  • Tests

    • Removed outdated serving tests to simplify the testing framework.
  • Chores

    • Updated configuration settings to support extended term recognition for typo-checking.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 13, 2025

Walkthrough

This pull request reorganizes import statements and refactors the protocol buffer definitions and gRPC service implementations into a new namespace. It introduces new files for the client v1 APIs—including message definitions and a gRPC service for lease and exporter operations—and removes the outdated files under the previous namespace. Additionally, the gRPC client now supports comprehensive lease management with extended identifier parsing, new Lease data models, and corresponding asynchronous methods. Several deprecated lease management methods and tests have been removed, and a small configuration update has been made in the project file.

Changes

File(s) Change Summary
packages/jumpstarter-protocol/jumpstarter_protocol/__init__.py Changed import sources for client_pb2 and client_pb2_grpc (from jumpstarter.v1 to jumpstarter/client/v1) while retaining public exports.
packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py Added new Protocol Buffers file with definitions for Exporter, Lease, various request/response messages, and the ClientService service.
packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2_grpc.py Added new gRPC implementation including ClientServiceStub, ClientServiceServicer, registration function, and static methods for service calls.
`packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2(.py _grpc.py)`
packages/jumpstarter/conftest.py Removed lease management methods (RequestLease, GetLease, ReleaseLease) from the MockController class.
packages/jumpstarter/jumpstarter/client/grpc.py Refactored identifier parsing (renamed to parse_identifier with a kind parameter), added parse_client/exporter/lease_identifier functions, introduced Lease and LeaseList classes, and new async lease management methods.
packages/jumpstarter/jumpstarter/client/lease.py Added a new namespace attribute to the Lease class and updated calls to use ClientService for lease operations with revised duration handling.
packages/jumpstarter/jumpstarter/config/client.py Updated exporter and lease-related async methods to include the namespace parameter and use the new ClientService API.
packages/jumpstarter/jumpstarter/config/exporter_test.py Removed an asynchronous test (test_exporter_serve) for exporter serving functionality.
packages/jumpstarter/jumpstarter/listener_test.py Deleted the file containing asynchronous tests for Lease and Exporter behavior.
pyproject.toml Added a new subsection [tool.typos.default.extend-words] with an entry ser = "ser" to extend valid terms for typo-checking.

Sequence Diagram(s)

sequenceDiagram
  participant Config as ClientConfigV1Alpha1
  participant ClientSvc as ClientService (gRPC Client)
  participant Stub as gRPC Stub
  participant Server as gRPC Server (Lease Provider)

  Config->>ClientSvc: CreateLease(selector, duration)
  ClientSvc->>Stub: CreateLease(request)
  Stub->>Server: Process CreateLease request
  Server-->>Stub: Lease Created Response
  Stub-->>ClientSvc: Return Lease Info
  ClientSvc-->>Config: Lease object returned
Loading

Suggested reviewers

  • mangelajo
  • bennyz
  • kirkbrauer

Poem

Hi! I'm a happy rabbit 🐰,
Hopping through lines of code so bright,
Imports and leases now run neat,
With gRPC paths set just right,
I celebrate these changes with delight,
Leaping into tomorrow with pure insight!

Happy coding, hop on and shine!

Tip

⚡🧪 Multi-step agentic review comment chat (experimental)
  • We're introducing multi-step agentic chat in review comments. This experimental feature enhances review discussions with the CodeRabbit agentic chat by enabling advanced interactions, including the ability to create pull requests directly from comments.
    - To enable this feature, set early_access to true under in the settings.
✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@netlify
Copy link
Copy Markdown

netlify Bot commented Mar 13, 2025

Deploy Preview for jumpstarter-docs ready!

Name Link
🔨 Latest commit b799c40
🔍 Latest deploy log https://app.netlify.com/sites/jumpstarter-docs/deploys/67d8300bd3aeac0008241cc5
😎 Deploy Preview https://deploy-preview-342--jumpstarter-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (5)
packages/jumpstarter/jumpstarter/client/grpc.py (2)

24-26: Consider unifying parse functions or keep them separate for clarity.

These three functions differ only by the kind argument. If you prefer a single function with an argument or enum for different resource types, it would reduce repetition. If readability is paramount, retaining them as separate functions is also fine.

Also applies to: 28-30, 32-34


47-57: Well-structured Lease model, consider adding tests.

Your approach to storing lease data and providing from/to Protobuf methods is solid. For increased confidence, add unit tests covering edge cases (e.g., empty selectors, zero durations) and confirm your assumptions about namespace, name, etc.

Also applies to: 59-65, 67-85

packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py (1)

1-143: Address unused imports and line length issues in generated code.

Ruff flags multiple unused imports (e.g., google.api.annotations_pb2, etc.) and long lines. If you wish to suppress these warnings, remove unneeded references from the proto definitions or configure your style checks to ignore generated files.

🧰 Tools
🪛 Ruff (0.8.2)

25-25: Module level import not at top of file

(E402)


25-25: google.api.annotations_pb2 imported but unused

Remove unused import: google.api.annotations_pb2

(F401)


26-26: Module level import not at top of file

(E402)


26-26: google.api.client_pb2 imported but unused

Remove unused import: google.api.client_pb2

(F401)


27-27: Module level import not at top of file

(E402)


27-27: google.api.field_behavior_pb2 imported but unused

Remove unused import: google.api.field_behavior_pb2

(F401)


28-28: Module level import not at top of file

(E402)


28-28: google.api.resource_pb2 imported but unused

Remove unused import: google.api.resource_pb2

(F401)


29-29: Module level import not at top of file

(E402)


29-29: google.protobuf.duration_pb2 imported but unused

Remove unused import: google.protobuf.duration_pb2

(F401)


30-30: Module level import not at top of file

(E402)


30-30: google.protobuf.empty_pb2 imported but unused

Remove unused import: google.protobuf.empty_pb2

(F401)


31-31: Module level import not at top of file

(E402)


31-31: google.protobuf.field_mask_pb2 imported but unused

Remove unused import: google.protobuf.field_mask_pb2

(F401)


32-32: Module level import not at top of file

(E402)


32-32: google.protobuf.timestamp_pb2 imported but unused

Remove unused import: google.protobuf.timestamp_pb2

(F401)


33-33: Module level import not at top of file

(E402)


33-33: ...v1.kubernetes_pb2 imported but unused

Remove unused import: ...v1.kubernetes_pb2

(F401)


36-36: Line too long (6048 > 120)

(E501)


43-43: Line too long (265 > 120)

(E501)


49-49: Line too long (159 > 120)

(E501)


65-65: Line too long (121 > 120)

(E501)


69-69: Line too long (142 > 120)

(E501)


71-71: Line too long (130 > 120)

(E501)


73-73: Line too long (136 > 120)

(E501)


81-81: Line too long (124 > 120)

(E501)


83-83: Line too long (130 > 120)

(E501)


91-91: Line too long (131 > 120)

(E501)


101-101: Line too long (127 > 120)

(E501)


103-103: Line too long (159 > 120)

(E501)


105-105: Line too long (163 > 120)

(E501)


107-107: Line too long (154 > 120)

(E501)


109-109: Line too long (158 > 120)

(E501)


111-111: Line too long (181 > 120)

(E501)


113-113: Line too long (182 > 120)

(E501)


115-115: Line too long (154 > 120)

(E501)

packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2_grpc.py (2)

1-337: Add documentation comments to the protocol buffer file

This auto-generated gRPC file correctly defines the ClientService with methods for exporter and lease management. However, there are multiple "Missing associated documentation comment in .proto file" notices throughout the code (lines 10, 59, 65, 71, etc.).

Since this is a generated file that shouldn't be modified directly, you should add proper documentation comments to the original .proto file that defines the ClientService. This would improve the generated code's documentation and make the API more self-explanatory for developers.


143-143: Consider implementing validation in future servicer implementations

Line 143 adds the server handlers, but note that the placeholder implementations in ClientServiceServicer don't perform any validation. When implementing the actual servicer, make sure to add proper input validation, error handling, and authentication checks for each method.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 28d6b1c and cd1af66.

📒 Files selected for processing (12)
  • .github/workflows/e2e.yaml (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/__init__.py (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2_grpc.py (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2.py (0 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2_grpc.py (0 hunks)
  • packages/jumpstarter/conftest.py (0 hunks)
  • packages/jumpstarter/jumpstarter/client/grpc.py (4 hunks)
  • packages/jumpstarter/jumpstarter/client/lease.py (5 hunks)
  • packages/jumpstarter/jumpstarter/config/client.py (3 hunks)
  • packages/jumpstarter/jumpstarter/config/exporter_test.py (0 hunks)
  • packages/jumpstarter/jumpstarter/listener_test.py (0 hunks)
💤 Files with no reviewable changes (5)
  • packages/jumpstarter/conftest.py
  • packages/jumpstarter/jumpstarter/config/exporter_test.py
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2_grpc.py
  • packages/jumpstarter/jumpstarter/listener_test.py
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2.py
🧰 Additional context used
🪛 GitHub Check: typos
packages/jumpstarter/jumpstarter/client/grpc.py

[warning] 58-58:
"ser" should be "set".

🪛 GitHub Actions: Spell Check
packages/jumpstarter/jumpstarter/client/grpc.py

[warning] 58-58: "ser" should be "set".


[error] 1-1: error: ser should be set

🪛 Ruff (0.8.2)
packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py

25-25: Module level import not at top of file

(E402)


25-25: google.api.annotations_pb2 imported but unused

Remove unused import: google.api.annotations_pb2

(F401)


26-26: Module level import not at top of file

(E402)


26-26: google.api.client_pb2 imported but unused

Remove unused import: google.api.client_pb2

(F401)


27-27: Module level import not at top of file

(E402)


27-27: google.api.field_behavior_pb2 imported but unused

Remove unused import: google.api.field_behavior_pb2

(F401)


28-28: Module level import not at top of file

(E402)


28-28: google.api.resource_pb2 imported but unused

Remove unused import: google.api.resource_pb2

(F401)


29-29: Module level import not at top of file

(E402)


29-29: google.protobuf.duration_pb2 imported but unused

Remove unused import: google.protobuf.duration_pb2

(F401)


30-30: Module level import not at top of file

(E402)


30-30: google.protobuf.empty_pb2 imported but unused

Remove unused import: google.protobuf.empty_pb2

(F401)


31-31: Module level import not at top of file

(E402)


31-31: google.protobuf.field_mask_pb2 imported but unused

Remove unused import: google.protobuf.field_mask_pb2

(F401)


32-32: Module level import not at top of file

(E402)


32-32: google.protobuf.timestamp_pb2 imported but unused

Remove unused import: google.protobuf.timestamp_pb2

(F401)


33-33: Module level import not at top of file

(E402)


33-33: ...v1.kubernetes_pb2 imported but unused

Remove unused import: ...v1.kubernetes_pb2

(F401)


36-36: Line too long (6048 > 120)

(E501)


43-43: Line too long (265 > 120)

(E501)


49-49: Line too long (159 > 120)

(E501)


65-65: Line too long (121 > 120)

(E501)


69-69: Line too long (142 > 120)

(E501)


71-71: Line too long (130 > 120)

(E501)


73-73: Line too long (136 > 120)

(E501)


81-81: Line too long (124 > 120)

(E501)


83-83: Line too long (130 > 120)

(E501)


91-91: Line too long (131 > 120)

(E501)


101-101: Line too long (127 > 120)

(E501)


103-103: Line too long (159 > 120)

(E501)


105-105: Line too long (163 > 120)

(E501)


107-107: Line too long (154 > 120)

(E501)


109-109: Line too long (158 > 120)

(E501)


111-111: Line too long (181 > 120)

(E501)


113-113: Line too long (182 > 120)

(E501)


115-115: Line too long (154 > 120)

(E501)

⏰ Context from checks skipped due to timeout of 90000ms (8)
  • GitHub Check: pytest-matrix (3.13)
  • GitHub Check: pytest-matrix (3.12)
  • GitHub Check: e2e
  • GitHub Check: pytest-matrix (3.11)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-devspace .devfile/Containerfile.client)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-dev .devfile/Containerfile)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-utils Dockerfile.utils)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter Dockerfile)
🔇 Additional comments (20)
.github/workflows/e2e.yaml (1)

21-21: Verify correct E2E branch reference.

By switching to client-svc-lease here, you’re pointing the E2E test workflow to a new branch for the controller. Please confirm that the client-svc-lease branch exists and is stable, so that the workflow can run successfully.

packages/jumpstarter-protocol/jumpstarter_protocol/__init__.py (1)

1-4: Reorganized imports look consistent with the new client structure.

This change properly aligns the package imports with the updated client_pb2 and client_pb2_grpc modules. No issues found here.

packages/jumpstarter/jumpstarter/client/lease.py (4)

10-10: Ensure compatibility with new ClientService and namespace usage.

  1. You’ve replaced the controller-based logic (ControllerServiceStub) with ClientService. Please verify that ClientService includes all functionality formerly provided by the controller, especially for lease management.
  2. The new namespace: str attribute in the Lease dataclass enforces namespace usage. If an empty namespace is not valid upstream, consider providing a default or raising an error when none is supplied.

Also applies to: 15-15, 19-19, 35-35, 48-48


52-53: Confirm server-side handling of timedelta.

Here, the lease creation call passes a native Python timedelta object. Verify that the server or client code properly converts timedelta into the corresponding protobuf duration format (if required). Otherwise, this might cause a runtime type mismatch.

Also applies to: 55-55, 58-61, 64-64


101-104: Check error handling for missing or invalid lease retrieval.

While wrapped in translate_grpc_exceptions(), ensure that a non-existent or revoked lease triggers an appropriate exception. If additional error states exist (e.g., forbidden namespace), consider handling them as well.


138-141: Finalize lease deletion logic.

Deleting the lease within __aexit__ is good for resource cleanup. Be mindful of potential race conditions if the lease has already been invalidated or expired before the delete call. Confirm that the gRPC stub or service’s default error handling gracefully handles such cases.

packages/jumpstarter/jumpstarter/client/grpc.py (8)

13-21: No issues found in parse_identifier.


58-58: Potential spelling fix for ser_json_timedelta.

The pipeline flagged “ser” as a possible spelling error. If it’s a custom config name, ignore this. Otherwise, consider renaming to something like serialize_json_timedelta or set_json_timedelta.

🧰 Tools
🪛 GitHub Check: typos

[warning] 58-58:
"ser" should be "set".

🪛 GitHub Actions: Spell Check

[warning] 58-58: "ser" should be "set".


110-126: LeaseList appears consistent and robust.

This design matches the pattern used in ExporterList, maintaining congruency across data structures.


162-169: GetLease method logic looks solid.

Retrieves the lease by full resource name. This aligns with the gRPC patterns for other resources.


170-187: ListLeases method mirrors your exporters logic.

Handling pagination and filtering similarly ensures consistency and reduces the maintenance burden.


188-208: CreateLease method aligns with new lease concepts.

The code properly uses durations, parent resource paths, and returns a Lease object. Nice implementation.


209-232: UpdateLease method uses field masks effectively.

Your approach ensures selective updates for the duration field. If more fields need updating, remember to extend the mask.


233-238: DeleteLease method is straightforward and correct.

Implements the standard pattern for resource deletion via gRPC.

packages/jumpstarter/jumpstarter/config/client.py (4)

120-120: Namespace reference for lease creation.

Passing namespace=self.metadata.namespace ensures the lease is scoped appropriately. Good move.


132-135: Updated list_leases_async to invoke ClientService.

Delegating listing to the new lease functionality is consistent with your refactoring.


138-140: release_lease_async method.

Calls DeleteLease on the client service, fully transitioning away from the prior controller logic. Nicely done.


158-158: Verify metadata.namespace availability.

If metadata.namespace can be None, this call may fail. Ensure it’s always set at runtime or handle the missing case to avoid exceptions.

packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2_grpc.py (2)

8-53: LGTM: ClientServiceStub implementation looks good

The ClientServiceStub properly defines all necessary methods for lease management (GetLease, ListLeases, CreateLease, UpdateLease, DeleteLease) and exporter operations (GetExporter, ListExporters). The method configurations for serialization and deserialization are correctly set up.


145-336: Note: ClientService uses experimental gRPC API

The ClientService class is marked as part of an EXPERIMENTAL API (line 145). Be aware that this API might change in future gRPC releases. Consider documenting this in your client usage documentation to warn developers about potential breaking changes in the future.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
pyproject.toml (1)

70-72: Extend Typos Recognition with Custom Word

The addition of the [tool.typos.default.extend-words] section with ser = "ser" correctly extends the typo-checking tool's vocabulary to treat "ser" as valid. Please verify that this is the intended configuration and consider whether any additional related terms should be added for consistency.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cd1af66 and ae22a2a.

📒 Files selected for processing (1)
  • pyproject.toml (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (7)
  • GitHub Check: pytest-matrix (3.13)
  • GitHub Check: pytest-matrix (3.12)
  • GitHub Check: pytest-matrix (3.11)
  • GitHub Check: e2e
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-devspace .devfile/Containerfile.client)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-utils Dockerfile.utils)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter Dockerfile)

@NickCao NickCao changed the title Use Lease related methods from client service Use Lease related methods from client service (phase 1) Mar 13, 2025
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
packages/jumpstarter/jumpstarter/client/grpc.py (2)

13-13: Consider clarifying error messages or adding docstrings
While the logic seems correct, more descriptive error messages or docstrings could improve debugging.

Also applies to: 19-20


47-90: Add docstrings or usage examples
The Lease model is well-defined. Adding docstrings or usage examples could help future maintainers understand the intent of each field.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ae22a2a and 87eae9a.

📒 Files selected for processing (3)
  • packages/jumpstarter/jumpstarter/client/grpc.py (3 hunks)
  • packages/jumpstarter/jumpstarter/client/lease.py (5 hunks)
  • packages/jumpstarter/jumpstarter/config/client.py (4 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/jumpstarter/jumpstarter/client/lease.py
⏰ Context from checks skipped due to timeout of 90000ms (11)
  • GitHub Check: Redirect rules - jumpstarter-docs
  • GitHub Check: Header rules - jumpstarter-docs
  • GitHub Check: Pages changed - jumpstarter-docs
  • GitHub Check: pytest-matrix (3.13)
  • GitHub Check: pytest-matrix (3.12)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-devspace .devfile/Containerfile.client)
  • GitHub Check: e2e
  • GitHub Check: pytest-matrix (3.11)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-dev .devfile/Containerfile)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-utils Dockerfile.utils)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter Dockerfile)
🔇 Additional comments (18)
packages/jumpstarter/jumpstarter/client/grpc.py (12)

4-4: No concerns with these import additions
These appear necessary for the new lease operations.

Also applies to: 7-7, 9-9, 10-10


24-33: Helper functions usage
These wrapper functions for each identifier type are nicely organized and consistent.


94-94: Filtering out next_page_token
Excluding next_page_token from the model representation is a good design choice if it’s an internal field.


110-126: Consistent pattern with LeaseList
This approach mirrors ExporterList, promoting code familiarity and maintainability.


131-131: Namespace property in ClientService
Having an explicit namespace field ensures clarity and consistency for all gRPC requests.


140-140: String formatting for exporter names
Using self.namespace in the constructed resource path aligns with the new refactor.


154-154: Parent path usage
Providing the namespace in the parent field matches the updated resource structure.


162-168: GetLease method
Implementation is straightforward and consistent with existing gRPC call patterns.


170-186: ListLeases method
Uses the same pattern as exporter listing for consistency across resource operations.


187-206: CreateLease method
Converting timedelta to Duration is a reliable approach.


207-229: UpdateLease and field mask
Utilizing field masks is a good way to handle partial updates in gRPC.


230-235: DeleteLease method
Cleanly removes a lease resource, no issues found.

packages/jumpstarter/jumpstarter/config/client.py (6)

94-96: get_exporter_async refactor
Passing namespace=self.metadata.namespace ensures correct resource scoping.


104-106: list_exporters_async refactor
Uses the same approach for scoping with namespace, maintaining consistency.


118-118: Consistent namespace usage
Adding namespace=self.metadata.namespace aligns Lease creation with the new model.


130-130: New approach to listing leases
Switching from a controller stub to ClientService creates uniform gRPC usage.

Also applies to: 132-133


136-136: Lease deletion logic
Delegating lease deletion to ClientService unifies the code path for lease operations.

Also applies to: 138-138


156-156: Namespace injection in lease_async
Ensuring the Lease has the correct namespace fosters consistency with other resources.

@NickCao NickCao force-pushed the client-svc-phase1 branch from 87eae9a to e05b146 Compare March 14, 2025 14:33
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (6)
packages/jumpstarter/jumpstarter/client/grpc.py (3)

24-33: Consider consolidating parse functions.
These thin wrappers each pass a different kind to parse_identifier. While it’s clear and readable, you might consider consolidating them into a single parse function or use partial application if these are invoked frequently.


47-55: Add docstrings or inline comments for clarity.
Documenting usage and constraints of namespace, selector, client, etc., might help future developers quickly reference how these fields map to your system.


207-229: Extend update mask usage if new fields are updated later.
Currently, your update mask only includes "duration". This is correct for now, but remember to add new fields (e.g., selector) if you plan to update them in the future.

packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py (2)

25-33: Remove unused imports or ignore them in generated code.
Static analysis identifies multiple imports (google.api.annotations_pb2, google.api.client_pb2, etc.) that appear unused. Generated code often includes them automatically. If they’re truly unnecessary, remove or suppress lint warnings for this file to maintain clarity.

🧰 Tools
🪛 Ruff (0.8.2)

25-25: Module level import not at top of file

(E402)


25-25: google.api.annotations_pb2 imported but unused

Remove unused import: google.api.annotations_pb2

(F401)


26-26: Module level import not at top of file

(E402)


26-26: google.api.client_pb2 imported but unused

Remove unused import: google.api.client_pb2

(F401)


27-27: Module level import not at top of file

(E402)


27-27: google.api.field_behavior_pb2 imported but unused

Remove unused import: google.api.field_behavior_pb2

(F401)


28-28: Module level import not at top of file

(E402)


28-28: google.api.resource_pb2 imported but unused

Remove unused import: google.api.resource_pb2

(F401)


29-29: Module level import not at top of file

(E402)


29-29: google.protobuf.duration_pb2 imported but unused

Remove unused import: google.protobuf.duration_pb2

(F401)


30-30: Module level import not at top of file

(E402)


30-30: google.protobuf.empty_pb2 imported but unused

Remove unused import: google.protobuf.empty_pb2

(F401)


31-31: Module level import not at top of file

(E402)


31-31: google.protobuf.field_mask_pb2 imported but unused

Remove unused import: google.protobuf.field_mask_pb2

(F401)


32-32: Module level import not at top of file

(E402)


32-32: google.protobuf.timestamp_pb2 imported but unused

Remove unused import: google.protobuf.timestamp_pb2

(F401)


33-33: Module level import not at top of file

(E402)


33-33: ...v1.kubernetes_pb2 imported but unused

Remove unused import: ...v1.kubernetes_pb2

(F401)


36-36: Consider excluding generated files from strict line-length checks.
Line 36 is extremely long due to the serialized descriptor. Typically, ignoring line-length and layout checks for protobuf-generated files is preferred, as manual edits will be overwritten.

🧰 Tools
🪛 Ruff (0.8.2)

36-36: Line too long (6048 > 120)

(E501)

packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2_grpc.py (1)

5-5: Unused imports in generated code.
google.protobuf.empty_pb2 is indeed used, but confirm that all other imports are necessary. If not, remove or ignore them in lint configurations to avoid warnings.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 87eae9a and e05b146.

📒 Files selected for processing (13)
  • .github/workflows/e2e.yaml (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/__init__.py (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2_grpc.py (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2.py (0 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2_grpc.py (0 hunks)
  • packages/jumpstarter/conftest.py (0 hunks)
  • packages/jumpstarter/jumpstarter/client/grpc.py (3 hunks)
  • packages/jumpstarter/jumpstarter/client/lease.py (5 hunks)
  • packages/jumpstarter/jumpstarter/config/client.py (4 hunks)
  • packages/jumpstarter/jumpstarter/config/exporter_test.py (0 hunks)
  • packages/jumpstarter/jumpstarter/listener_test.py (0 hunks)
  • pyproject.toml (1 hunks)
💤 Files with no reviewable changes (5)
  • packages/jumpstarter/jumpstarter/listener_test.py
  • packages/jumpstarter/jumpstarter/config/exporter_test.py
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2.py
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2_grpc.py
  • packages/jumpstarter/conftest.py
🚧 Files skipped from review as they are similar to previous changes (5)
  • .github/workflows/e2e.yaml
  • packages/jumpstarter-protocol/jumpstarter_protocol/init.py
  • packages/jumpstarter/jumpstarter/client/lease.py
  • packages/jumpstarter/jumpstarter/config/client.py
  • pyproject.toml
🧰 Additional context used
🪛 Ruff (0.8.2)
packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py

25-25: Module level import not at top of file

(E402)


25-25: google.api.annotations_pb2 imported but unused

Remove unused import: google.api.annotations_pb2

(F401)


26-26: Module level import not at top of file

(E402)


26-26: google.api.client_pb2 imported but unused

Remove unused import: google.api.client_pb2

(F401)


27-27: Module level import not at top of file

(E402)


27-27: google.api.field_behavior_pb2 imported but unused

Remove unused import: google.api.field_behavior_pb2

(F401)


28-28: Module level import not at top of file

(E402)


28-28: google.api.resource_pb2 imported but unused

Remove unused import: google.api.resource_pb2

(F401)


29-29: Module level import not at top of file

(E402)


29-29: google.protobuf.duration_pb2 imported but unused

Remove unused import: google.protobuf.duration_pb2

(F401)


30-30: Module level import not at top of file

(E402)


30-30: google.protobuf.empty_pb2 imported but unused

Remove unused import: google.protobuf.empty_pb2

(F401)


31-31: Module level import not at top of file

(E402)


31-31: google.protobuf.field_mask_pb2 imported but unused

Remove unused import: google.protobuf.field_mask_pb2

(F401)


32-32: Module level import not at top of file

(E402)


32-32: google.protobuf.timestamp_pb2 imported but unused

Remove unused import: google.protobuf.timestamp_pb2

(F401)


33-33: Module level import not at top of file

(E402)


33-33: ...v1.kubernetes_pb2 imported but unused

Remove unused import: ...v1.kubernetes_pb2

(F401)


36-36: Line too long (6048 > 120)

(E501)


43-43: Line too long (265 > 120)

(E501)


49-49: Line too long (159 > 120)

(E501)


65-65: Line too long (121 > 120)

(E501)


69-69: Line too long (142 > 120)

(E501)


71-71: Line too long (130 > 120)

(E501)


73-73: Line too long (136 > 120)

(E501)


81-81: Line too long (124 > 120)

(E501)


83-83: Line too long (130 > 120)

(E501)


91-91: Line too long (131 > 120)

(E501)


101-101: Line too long (127 > 120)

(E501)


103-103: Line too long (159 > 120)

(E501)


105-105: Line too long (163 > 120)

(E501)


107-107: Line too long (154 > 120)

(E501)


109-109: Line too long (158 > 120)

(E501)


111-111: Line too long (181 > 120)

(E501)


113-113: Line too long (182 > 120)

(E501)


115-115: Line too long (154 > 120)

(E501)

⏰ Context from checks skipped due to timeout of 90000ms (7)
  • GitHub Check: e2e
  • GitHub Check: pytest-matrix (3.12)
  • GitHub Check: pytest-matrix (3.13)
  • GitHub Check: pytest-matrix (3.11)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-dev .devfile/Containerfile)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-utils Dockerfile.utils)
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-devspace .devfile/Containerfile.client)
🔇 Additional comments (4)
packages/jumpstarter/jumpstarter/client/grpc.py (3)

13-21: Validate broader usage of parse_identifier.
This helper function is concise and efficient. Just ensure future code—or other internal methods—handle the raised ValueError appropriately to prevent unhandled exceptions in your application flow.


66-83: Validate missing exporter references.
When data.exporter is empty, you default to an empty string. Confirm that your usage downstream handles an empty exporter string without error. Otherwise, consider raising or logging a warning for clarity.


110-126: Check partial responses in LeaseList.
If the server returns incomplete or partial lease data, ensure your client handles it gracefully. Right now, everything is mapped, but confirm that any field-level missing data doesn’t cause undesired exceptions.

packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2_grpc.py (1)

1-337: Avoid manual edits in gRPC-generated files.
All changes here appear to be generated code. Manual modifications might be lost during regeneration. If needed, apply custom logic in a separate extension or partial class.

pytestmark = pytest.mark.anyio


async def test_exporter_serve(mock_controller):
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why removing this test?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It also requires a working mock controller, which we don't have anymore. And it's already covered by e2e anyway.

pytestmark = pytest.mark.anyio


@pytest.mark.xfail(raises=Exception)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And this?

@NickCao NickCao force-pushed the client-svc-phase1 branch from e05b146 to cfe2876 Compare March 17, 2025 14:21
@NickCao NickCao force-pushed the client-svc-phase1 branch from cfe2876 to b799c40 Compare March 17, 2025 14:22
@NickCao NickCao enabled auto-merge March 17, 2025 14:22
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (4)
packages/jumpstarter/jumpstarter/client/grpc.py (3)

13-20: Consider adding checks for all path segments in parse_identifier.
Currently, the code validates only the first and third segments. You might also want to ensure the second and fourth segments meet any additional criteria if necessary, for more robust error handling.


162-168: Consider implementing error handling in GetLease.
Currently, any gRPC or server-side errors are unhandled. You may want to catch exceptions here to provide clearer logs or fallback logic.


170-185: ListLeases parallels ListExporters well.
As with GetLease, consider whether additional timeouts, retries, or exception handling might be needed.

packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py (1)

25-35: Address unused imports in generated code.
Static analysis flags these imports as unused. Since this file is auto-generated, usually you wouldn’t modify it directly. Instead, consider either adjusting your proto definitions or configuring your linter to skip auto-generated files.

🧰 Tools
🪛 Ruff (0.8.2)

25-25: Module level import not at top of file

(E402)


25-25: google.api.annotations_pb2 imported but unused

Remove unused import: google.api.annotations_pb2

(F401)


26-26: Module level import not at top of file

(E402)


26-26: google.api.client_pb2 imported but unused

Remove unused import: google.api.client_pb2

(F401)


27-27: Module level import not at top of file

(E402)


27-27: google.api.field_behavior_pb2 imported but unused

Remove unused import: google.api.field_behavior_pb2

(F401)


28-28: Module level import not at top of file

(E402)


28-28: google.api.resource_pb2 imported but unused

Remove unused import: google.api.resource_pb2

(F401)


29-29: Module level import not at top of file

(E402)


29-29: google.protobuf.duration_pb2 imported but unused

Remove unused import: google.protobuf.duration_pb2

(F401)


30-30: Module level import not at top of file

(E402)


30-30: google.protobuf.empty_pb2 imported but unused

Remove unused import: google.protobuf.empty_pb2

(F401)


31-31: Module level import not at top of file

(E402)


31-31: google.protobuf.field_mask_pb2 imported but unused

Remove unused import: google.protobuf.field_mask_pb2

(F401)


32-32: Module level import not at top of file

(E402)


32-32: google.protobuf.timestamp_pb2 imported but unused

Remove unused import: google.protobuf.timestamp_pb2

(F401)


33-33: Module level import not at top of file

(E402)


33-33: ...v1.kubernetes_pb2 imported but unused

Remove unused import: ...v1.kubernetes_pb2

(F401)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e05b146 and b799c40.

📒 Files selected for processing (12)
  • packages/jumpstarter-protocol/jumpstarter_protocol/__init__.py (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2_grpc.py (1 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2.py (0 hunks)
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2_grpc.py (0 hunks)
  • packages/jumpstarter/conftest.py (0 hunks)
  • packages/jumpstarter/jumpstarter/client/grpc.py (3 hunks)
  • packages/jumpstarter/jumpstarter/client/lease.py (5 hunks)
  • packages/jumpstarter/jumpstarter/config/client.py (4 hunks)
  • packages/jumpstarter/jumpstarter/config/exporter_test.py (0 hunks)
  • packages/jumpstarter/jumpstarter/listener_test.py (0 hunks)
  • pyproject.toml (1 hunks)
💤 Files with no reviewable changes (5)
  • packages/jumpstarter/jumpstarter/config/exporter_test.py
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2.py
  • packages/jumpstarter/conftest.py
  • packages/jumpstarter/jumpstarter/listener_test.py
  • packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/v1/client_pb2_grpc.py
🚧 Files skipped from review as they are similar to previous changes (4)
  • pyproject.toml
  • packages/jumpstarter-protocol/jumpstarter_protocol/init.py
  • packages/jumpstarter/jumpstarter/client/lease.py
  • packages/jumpstarter/jumpstarter/config/client.py
🧰 Additional context used
🪛 Ruff (0.8.2)
packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py

25-25: Module level import not at top of file

(E402)


25-25: google.api.annotations_pb2 imported but unused

Remove unused import: google.api.annotations_pb2

(F401)


26-26: Module level import not at top of file

(E402)


26-26: google.api.client_pb2 imported but unused

Remove unused import: google.api.client_pb2

(F401)


27-27: Module level import not at top of file

(E402)


27-27: google.api.field_behavior_pb2 imported but unused

Remove unused import: google.api.field_behavior_pb2

(F401)


28-28: Module level import not at top of file

(E402)


28-28: google.api.resource_pb2 imported but unused

Remove unused import: google.api.resource_pb2

(F401)


29-29: Module level import not at top of file

(E402)


29-29: google.protobuf.duration_pb2 imported but unused

Remove unused import: google.protobuf.duration_pb2

(F401)


30-30: Module level import not at top of file

(E402)


30-30: google.protobuf.empty_pb2 imported but unused

Remove unused import: google.protobuf.empty_pb2

(F401)


31-31: Module level import not at top of file

(E402)


31-31: google.protobuf.field_mask_pb2 imported but unused

Remove unused import: google.protobuf.field_mask_pb2

(F401)


32-32: Module level import not at top of file

(E402)


32-32: google.protobuf.timestamp_pb2 imported but unused

Remove unused import: google.protobuf.timestamp_pb2

(F401)


33-33: Module level import not at top of file

(E402)


33-33: ...v1.kubernetes_pb2 imported but unused

Remove unused import: ...v1.kubernetes_pb2

(F401)


36-36: Line too long (6048 > 120)

(E501)


43-43: Line too long (265 > 120)

(E501)


49-49: Line too long (159 > 120)

(E501)


65-65: Line too long (121 > 120)

(E501)


69-69: Line too long (142 > 120)

(E501)


71-71: Line too long (130 > 120)

(E501)


73-73: Line too long (136 > 120)

(E501)


81-81: Line too long (124 > 120)

(E501)


83-83: Line too long (130 > 120)

(E501)


91-91: Line too long (131 > 120)

(E501)


101-101: Line too long (127 > 120)

(E501)


103-103: Line too long (159 > 120)

(E501)


105-105: Line too long (163 > 120)

(E501)


107-107: Line too long (154 > 120)

(E501)


109-109: Line too long (158 > 120)

(E501)


111-111: Line too long (181 > 120)

(E501)


113-113: Line too long (182 > 120)

(E501)


115-115: Line too long (154 > 120)

(E501)

⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: pytest-matrix (3.13)
  • GitHub Check: e2e
  • GitHub Check: build-and-push-image (jumpstarter-dev/jumpstarter-dev .devfile/Containerfile)
🔇 Additional comments (14)
packages/jumpstarter/jumpstarter/client/grpc.py (12)

4-4: Imports look correct.
These newly added imports for timedelta, protobuf modules, and Pydantic are appropriate. No immediate issues.

Also applies to: 7-7, 9-9, 10-10


24-33: DRY approach to identifier parsing is solid.
Reusing parse_identifier for clients, exporters, and leases ensures consistency. No issues found.


47-63: Lease model structure is well designed.
Allowing arbitrary types and custom serialization of conditions provides flexibility. Implementation looks correct.


66-89: Factory and dump methods for Lease are consistent.
Parsing from protobuf, handling empty exporter fields, and providing JSON/YAML dumps appear well-structured with Pydantic.


94-94: No issues with newly introduced next_page_token.
Excluding it by default is a standard pattern for pagination tokens. Code is fine.


110-125: LeaseList mirrors ExporterList appropriately.
Parsing from protobuf and dumping to JSON/YAML are implemented consistently.


131-131: Namespace field in ClientService.
Introducing a required namespace at initialization for building resource names is a reasonable design choice.


137-140: GetExporter uses the correct resource path.
The f-string approach to build the exporter name is straightforward and consistent.


154-154: ListExporters parent reference is correct.
No issues found with the usage of namespaces/{}


187-205: CreateLease implementation follows established patterns.
Translating timedelta to Duration is correct. No issues found.


207-228: UpdateLease usage of FieldMask is appropriate.
This approach precisely updates the duration field. Looks good.


230-235: DeleteLease method is straightforward.
Returning an empty response aligns with the proto definition.

packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2.py (1)

1-143: File is auto-generated by protoc.
Direct modifications to this file can be lost on regeneration. Looks fine as-is, aside from the linter warnings for unused imports.

🧰 Tools
🪛 Ruff (0.8.2)

25-25: Module level import not at top of file

(E402)


25-25: google.api.annotations_pb2 imported but unused

Remove unused import: google.api.annotations_pb2

(F401)


26-26: Module level import not at top of file

(E402)


26-26: google.api.client_pb2 imported but unused

Remove unused import: google.api.client_pb2

(F401)


27-27: Module level import not at top of file

(E402)


27-27: google.api.field_behavior_pb2 imported but unused

Remove unused import: google.api.field_behavior_pb2

(F401)


28-28: Module level import not at top of file

(E402)


28-28: google.api.resource_pb2 imported but unused

Remove unused import: google.api.resource_pb2

(F401)


29-29: Module level import not at top of file

(E402)


29-29: google.protobuf.duration_pb2 imported but unused

Remove unused import: google.protobuf.duration_pb2

(F401)


30-30: Module level import not at top of file

(E402)


30-30: google.protobuf.empty_pb2 imported but unused

Remove unused import: google.protobuf.empty_pb2

(F401)


31-31: Module level import not at top of file

(E402)


31-31: google.protobuf.field_mask_pb2 imported but unused

Remove unused import: google.protobuf.field_mask_pb2

(F401)


32-32: Module level import not at top of file

(E402)


32-32: google.protobuf.timestamp_pb2 imported but unused

Remove unused import: google.protobuf.timestamp_pb2

(F401)


33-33: Module level import not at top of file

(E402)


33-33: ...v1.kubernetes_pb2 imported but unused

Remove unused import: ...v1.kubernetes_pb2

(F401)


36-36: Line too long (6048 > 120)

(E501)


43-43: Line too long (265 > 120)

(E501)


49-49: Line too long (159 > 120)

(E501)


65-65: Line too long (121 > 120)

(E501)


69-69: Line too long (142 > 120)

(E501)


71-71: Line too long (130 > 120)

(E501)


73-73: Line too long (136 > 120)

(E501)


81-81: Line too long (124 > 120)

(E501)


83-83: Line too long (130 > 120)

(E501)


91-91: Line too long (131 > 120)

(E501)


101-101: Line too long (127 > 120)

(E501)


103-103: Line too long (159 > 120)

(E501)


105-105: Line too long (163 > 120)

(E501)


107-107: Line too long (154 > 120)

(E501)


109-109: Line too long (158 > 120)

(E501)


111-111: Line too long (181 > 120)

(E501)


113-113: Line too long (182 > 120)

(E501)


115-115: Line too long (154 > 120)

(E501)

packages/jumpstarter-protocol/jumpstarter_protocol/jumpstarter/client/v1/client_pb2_grpc.py (1)

1-337: Generated gRPC stubs and servicer definition are valid.
All service methods follow the expected unary-unary pattern. Implementation placeholders raise NotImplementedError, which is standard practice for future server-side logic.

@NickCao NickCao merged commit 35dc3df into main Mar 17, 2025
@NickCao NickCao deleted the client-svc-phase1 branch March 17, 2025 14:50
@mangelajo mangelajo added this to the 0.6.0 milestone May 8, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants