Skip to content

Conversation

@tacklequestions
Copy link
Member

@tacklequestions tacklequestions commented Dec 14, 2025

Summary by CodeRabbit

  • New Features
    • New Permission Management and Access Key Management surfaces: permission checks, role assignment/removal, access key create/enable/disable/delete, and release comparison.
  • Documentation
    • API docs and READMEs updated with examples and auth (API key) guidance for the new permission, access-key, and release-diff endpoints.
  • Tests
    • Added API and model tests covering new DTOs, permission flows, and access-key operations.
  • Refactor
    • Release and namespace responses standardized to new DTO shapes and clearer empty-response semantics.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Dec 14, 2025

Walkthrough

Adds a permission-management and access-key surface to the OpenAPI spec and regenerates Java/Python clients: many new permission/access-key endpoints and DTOs, release compare/diff endpoints, operator query propagation, response-type adjustments (void/empty), and generated client model/adapter updates.

Changes

Cohort / File(s) Summary
OpenAPI spec & schemas
apollo-openapi.yaml
Adds Permission Management and AccessKey Management endpoints; new schemas (OpenPermissionConditionDTO, OpenUserInfoDTO, OpenAccessKeyDTO, OpenAppRoleUserDTO, OpenClusterNamespaceRoleUserDTO, OpenEnvNamespaceRoleUserDTO, OpenNamespaceRoleUserDTO, OpenReleaseDiffDTO, OpenReleaseChangeDTO, etc.); replaces SuccessEmptyResponse; adds ApiKeyAuth; adds compareRelease and operator param propagation.
Java client — APIs
java-client/src/main/java/org/openapitools/client/api/*
Adds AccessKeyManagementApi (create/delete/enable/disable/find), adds PermissionManagementApi surfaces and tests; ReleaseManagementApi gains compareRelease and operator param propagation; several APIs changed from returning Object to void (App/Cluster/Namespace flows).
Java client — models & JSON
java-client/src/main/java/org/openapitools/client/model/*DTO.java, java-client/src/main/java/org/openapitools/client/JSON.java
Adds many Open*DTO model classes with validation, Gson TypeAdapterFactories, fluent builders, equals/hashCode/toString; registers new adapters in JSON.java; removes KVEntity/SuccessEmptyResponse/OpenReleaseBO usages where replaced.
Java client — docs & README
java-client/docs/*, java-client/README.md
Adds docs for AccessKeyManagementApi and PermissionManagementApi; updates examples and API docs to reflect void returns, operator parameter, and new DTOs; README example switched to AccessKeyManagementApi.createAccessKey.
Java client — tests
java-client/src/test/java/org/openapitools/client/{api,model}/*Test.java
Adds PermissionManagementApiTest and AccessKeyManagementApiTest (stubs); adds model tests for new DTOs; updates existing tests to match void-return and operator changes.
Python client — tag & API aggregators
python/apollo_openapi/apis/tags/*.py, python/apollo_openapi/apis/tag_to_api.py, python/apollo_openapi/apis/tags/__init__.py
Adds AccessKeyManagementApi and PermissionManagementApi aggregator classes; extends TagValues with ACCESS_KEY_MANAGEMENT and PERMISSION_MANAGEMENT; updates tag_to_api mapping; ReleaseManagementApi includes CompareRelease.
Python client — paths & mapping
python/apollo_openapi/apis/paths/*, python/apollo_openapi/apis/path_to_api.py, python/apollo_openapi/paths/__init__.py
Adds 30+ new path wrapper classes for permission/role/accesskey/release-comparison endpoints; removes legacy releases-all path; updates PathToApi/PathValues mapping and constants.
Python client — models & stubs
python/apollo_openapi/model/*.py, python/apollo_openapi/model/*.pyi, python/apollo_openapi/models/__init__.py
Adds Open*DTO Python models and .pyi stubs (OpenAccessKeyDTO, OpenAppRoleUserDTO, OpenClusterNamespaceRoleUserDTO, OpenEnvNamespaceRoleUserDTO, OpenNamespaceRoleUserDTO, OpenPermissionConditionDTO, OpenReleaseChangeDTO, OpenReleaseDiffDTO, OpenUserInfoDTO) and exports them from models/init.py.
Python client — response typing adjustments
python/apollo_openapi/paths/openapi_v1_apps_app_id/{delete,put}.py
Removes typed 200 response bodies for some app delete/put endpoints (ApiResponseFor200.body → schemas.unset), aligning with empty-response semantics.
Generator artifacts / manifests
java-client/.openapi-generator/FILES, python/.openapi-generator/FILES
Generated file lists updated to include new APIs, models, docs, and tests across Java and Python clients.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Focus areas:

  • apollo-openapi.yaml: permission endpoint paths/parameters, security (ApiKeyAuth) and schema references.
  • Java client signature changes: Object→void conversions, operator propagation across ReleaseManagementApi and other endpoints.
  • Model/serialization changes: JSON.java adapter registrations, renamed/removed types (KVEntity, OpenReleaseBO → OpenReleaseDiffDTO), and validateJsonObject logic in generated models.
  • Python path/mapping changes: PathToApi and tag_to_api correctness; removal of releases-all vs new compareRelease path.

Possibly related PRs

Suggested reviewers

  • hezhangjian

Poem

"I hopped through YAML, swift and spry,
Keys and roles now reach the sky.
DTOs in order, endpoints bloom,
Releases compared beneath the moon.
A rabbit's cheer — the clients zoom! 🥕"

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 56.61% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: adding release comparison, access key management, and permission management endpoints to the API.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@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: 15

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
python/README.md (2)

158-190: Fix broken “Getting Started” Python snippet (indentation + invalid create_access_key call).
As written, the example won’t run: env/operator are outside the with block, and the create_access_key(...) invocation is malformed (missing arg names/commas and doesn’t pass env).

 from pprint import pprint
 from apollo_openapi.apis.tags import access_key_management_api
-from apollo_openapi.model.open_access_key_dto import OpenAccessKeyDTO
+# (Optional) Only import DTOs you actually use in the example.

@@
 with apollo_openapi.ApiClient(configuration) as api_client:
     # Create an instance of the API class
     api_instance = access_key_management_api.AccessKeyManagementApi(api_client)
     app_id = "appId_example" # str |
-env = "env_example" # str |
-operator = "operator_example" # str |  (optional)
+    env = "env_example" # str |
+    operator = "operator_example" # str | (optional)

     try:
         # 创建AccessKey
-        api_response = api_instance.create_access_key(app_idenvoperator=operator)
+        api_response = api_instance.create_access_key(
+            app_id=app_id,
+            env=env,
+            operator=operator,
+        )
         pprint(api_response)
     except apollo_openapi.ApiException as e:
         print("Exception when calling AccessKeyManagementApi->create_access_key: %s\n" % e)

304-341: Resolve markdownlint MD007 (ul-indent) in the Models list.
Static analysis flags inconsistent indentation for many list items in this section; aligning indentation will keep CI green and the rendered list consistent.

java-client/src/main/java/org/openapitools/client/api/InstanceManagementApi.java (1)

436-442: Consider validating releaseIds as non-blank (not just non-null).

Right now releaseIds = "" passes validation and will be sent; if the server expects at least one ID, this becomes a runtime 4xx with a less actionable client error. Suggest tightening validation to trim().isEmpty() as well.

@@
-        if (releaseIds == null) {
+        if (releaseIds == null) {
             throw new ApiException("Missing the required parameter 'releaseIds' when calling getByReleasesAndNamespaceNotIn(Async)");
         }
+        if (releaseIds.trim().isEmpty()) {
+            throw new ApiException("Missing the required parameter 'releaseIds' (non-empty) when calling getByReleasesAndNamespaceNotIn(Async)");
+        }

Also applies to: 512-541

🟡 Minor comments (7)
java-client/api/openapi.yaml-48-49 (1)

48-49: Define the AccessKey Management tag (used by AccessKey endpoints) in the top-level tags list.
Right now only Permission Management was added, but AccessKey operations are tagged AccessKey Management, so docs/tools may show an “undefined” tag group or omit tag metadata.

 tags:
@@
 - description: 权限管理相关接口,包括权限查询等功能
   name: Permission Management
+- description: AccessKey 管理相关接口,包括 AccessKey 的创建、查询、启用/禁用、删除等操作
+  name: AccessKey Management

Also applies to: 5334-5379

java-client/docs/AccessKeyManagementApi.md-1-376 (1)

1-376: Fix markdownlint issues to keep docs CI clean (MD034/MD001/MD007/MD058).
Primarily: wrap the base URL in code (or angle brackets), change operation headings to ## (not #), normalize list indentation, and add blank lines around tables.

java-client/src/main/java/org/openapitools/client/model/OpenAccessKeyDTO.java-361-378 (1)

361-378: Consider masking secret in toString() to prevent accidental logging of sensitive data.

The toString() method outputs the secret field (line 372), which contains the access key secret. If these objects are logged during debugging or error handling, secrets could be inadvertently exposed in logs.

Since this is auto-generated code, you may want to either:

  1. Configure the OpenAPI generator to exclude sensitive fields from toString()
  2. Add a post-generation hook to mask sensitive fields
  3. Document that this DTO should not be logged directly
apollo-openapi.yaml-4079-4127 (1)

4079-4127: Typo in URL path: namepsaces should be namespaces.

The path /openapi/v1/apps/{appId}/envs/{env}/clusters/{clusterName}/namepsaces/role-users has a typo - transposed letters in "namespaces". This will create an inconsistent API surface.

- /openapi/v1/apps/{appId}/envs/{env}/clusters/{clusterName}/namepsaces/role-users:
+ /openapi/v1/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/role-users:
apollo-openapi.yaml-4405-4410 (1)

4405-4410: Incorrect parameter description: "removed from" should be "assigned to".

The userId parameter description says "the user which role removed from" but this is for the assignAppRoleToUser operation. The description appears to be copy-pasted from the delete operation.

         - name: userId
           in: query
-          description: 'the user which role removed from'
+          description: 'the user which role assigned to'
           required: true
apollo-openapi.yaml-3701-3736 (1)

3701-3736: Typo in URL path: permision-init should be permission-init.

The path /openapi/v1/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/permision-init has a typo - missing 's' in "permission". This will create an inconsistent API surface compared to the other permission-related endpoints.

- /openapi/v1/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/permision-init:
+ /openapi/v1/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/permission-init:
java-client/src/main/java/org/openapitools/client/api/AccessKeyManagementApi.java-377-421 (1)

377-421: Add operator parameter to disableAccessKey and enableAccessKey methods for consistent audit tracking.

createAccessKey and deleteAccessKey include an operator parameter for tracking who performed the operation, but disableAccessKey and enableAccessKey do not. For complete audit coverage across all access key lifecycle operations, add the operator parameter to these methods as well.

🧹 Nitpick comments (25)
java-client/docs/InstanceManagementApi.md (1)

214-223: Clarify releaseIds requiredness and expected CSV format (non-empty).

Docs now mark releaseIds as required, which matches the client-side null validation. Consider also stating it must be non-empty and give an example (e.g., "1,2,3") to reduce “required but empty” misuse.

java-client/src/main/java/org/openapitools/client/api/InstanceManagementApi.java (1)

467-492: Redundant null-guard for required query param (ok to keep as generated code).

Given getByReleasesAndNamespaceNotInValidateBeforeCall now enforces releaseIds != null, the if (releaseIds != null) branch is effectively dead for public entrypoints. Not a problem, but if you maintain hand-edits in generated clients, you could simplify.

java-client/src/main/java/org/openapitools/client/model/OpenReleaseChangeDTO.java (2)

231-237: Strict unknown field validation may break forward compatibility.

The validateJsonObject method throws an exception if the JSON contains any fields not defined in openapiFields. If the server adds new fields in a future API version, existing clients will fail to deserialize responses. Consider whether this behavior is intentional for this API client.


18-23: Duplicate imports present (auto-generated artifact).

Lines 18, 21-23 and 35-38 have duplicate imports (TypeAdapter, JsonReader, JsonWriter, IOException). This is a common artifact of OpenAPI code generation and doesn't affect functionality.

Also applies to: 35-38

java-client/api/openapi.yaml (1)

2345-2427: Consider wrapping /releases/active response into a page DTO (or document it as “not paged”).
The endpoint requires page/size, but the 200 response is an array of OpenReleaseDTO (no total/page metadata), which can be surprising for client consumers. If the server truly returns an array only, consider dropping paging params; otherwise return a page object.

java-client/docs/OpenPermissionConditionDTO.md (1)

3-10: Add a short description for hasPermission to avoid ambiguous semantics (false vs missing).
Right now the Description column is empty; consider clarifying what null means vs false (e.g., “not evaluated” vs “evaluated and denied”).

java-client/docs/OpenReleaseChangeDTO.md (1)

3-13: Consider unifying field descriptions language (all CN or all EN) for consistency.
Optional polish for generated docs/readability.

java-client/src/test/java/org/openapitools/client/api/ClusterManagementApiTest.java (1)

58-66: Good alignment with void-return + new operator parameter.
Optional: add a reason to @Disabled (or replace null placeholders with minimal fixtures) to make it obvious these are generated stubs and will fail if enabled.

java-client/src/test/java/org/openapitools/client/model/OpenReleaseChangeDTOTest.java (1)

29-71: Consider implementing the test scaffolding.

The test class contains only TODO placeholders for all test methods. While this is standard for auto-generated OpenAPI client code, implementing these tests would provide better coverage for the OpenReleaseChangeDTO model, especially since this is a new DTO being introduced in this PR.

Would you like me to generate implementations for these test methods based on the DTO's properties?

java-client/src/test/java/org/openapitools/client/model/OpenReleaseDiffDTOTest.java (1)

38-49: Placeholder tests provide no coverage.

These auto-generated tests contain only TODO comments and will pass without validating any behavior. Consider implementing actual assertions or marking with @Disabled if they're intentionally deferred.

Would you like me to generate example test implementations for OpenReleaseDiffDTO that validate the changes property behavior?

java-client/src/main/java/org/openapitools/client/model/OpenAppRoleUserDTO.java (1)

16-51: Duplicate imports present but harmless.

Lines 18-22 import TypeAdapter, JsonReader, and JsonWriter, then lines 38-40 re-import them. This is a generator artifact that doesn't affect functionality but could be cleaned up if regenerating.

java-client/src/test/java/org/openapitools/client/model/OpenUserInfoDTOTest.java (1)

29-71: Auto-generated test scaffold with TODO placeholders.

This test class provides a good starting point for testing OpenUserInfoDTO. All test methods currently contain TODO comments indicating they need implementation.

Do you want me to generate implementations for these test methods, or will these be implemented manually later?

java-client/src/test/java/org/openapitools/client/model/OpenAccessKeyDTOTest.java (1)

29-128: Auto-generated test scaffold with TODO placeholders.

This test class provides comprehensive coverage stubs for all OpenAccessKeyDTO properties. All test methods currently contain TODO comments and require implementation.

Do you want me to generate test implementations for these methods, or will these be completed manually?

java-client/docs/AppManagementApi.md (1)

92-94: Use explicit void in the method signature lines to avoid ambiguity in Java docs.
Right now the signatures are shown as > createAppInEnv(...), > deleteApp(...), > updateApp(...), while createApp shows an explicit return type. Consider documenting them as > void createAppInEnv(...) / > void deleteApp(...) / > void updateApp(...) for consistency and clarity.

Also applies to: 165-168, 724-727

python/apollo_openapi/model/open_app_role_user_dto.py (1)

42-66: Potential linter-ordering/circularity hazard: consider local import inside items() instead of relying on a bottom import.
Even if runtime works, some linters get unhappy with referencing OpenUserInfoDTO before it’s imported. A low-impact pattern is: from apollo_openapi.model.open_user_info_dto import OpenUserInfoDTO inside items() and drop the bottom import.

Also applies to: 115-115

python/apollo_openapi/model/open_release_change_dto.pyi (1)

1-24: If Ruff runs on generated *.pyi, consider excluding or adding file-level ignores.
This file has the same generator header/import/noqa patterns that commonly trigger RUF002/RUF100 under certain Ruff configs.

python/apollo_openapi/model/open_env_namespace_role_user_dto.py (1)

43-93: Prefer local import in items() for OpenUserInfoDTO to reduce circular/lint sensitivity.
Same idea as the other role-user DTO: import OpenUserInfoDTO inside items() and remove the bottom import if possible.

Also applies to: 170-170

python/apollo_openapi/model/open_user_info_dto.pyi (1)

1-24: No active Ruff linting in CI—but add generated code exclusions to prevent future issues.

Ruff is configured in ruff.toml but not currently run in any CI pipeline (only pytest, commitlint, linelint, and typos checks). However, F401 is globally ignored while RUF100 is not, so # noqa: F401 annotations on imported stubs would trigger unused noqa warnings if Ruff is ever enabled locally or in CI. To prevent this, exclude the generated python/apollo_openapi/model/ directory in ruff.toml under a new [lint.exclude] section, or add # ruff: noqa at the top of generated .pyi files via the generator template.

java-client/src/main/java/org/openapitools/client/model/OpenPermissionConditionDTO.java (2)

140-154: Add type validation for hasPermission for consistency with other DTO validators
Right now the validator only rejects unknown fields.

   public static void validateJsonObject(JsonObject jsonObj) throws IOException {
+    // ... keep existing null/unknown-field checks
+
+    if (jsonObj.get("hasPermission") != null && !jsonObj.get("hasPermission").isJsonNull()) {
+      if (!jsonObj.get("hasPermission").isJsonPrimitive()
+          || !jsonObj.getAsJsonPrimitive("hasPermission").isBoolean()) {
+        throw new IllegalArgumentException(String.format(
+          "Expected the field `hasPermission` to be a boolean in the JSON string but got `%s`",
+          jsonObj.get("hasPermission").toString()
+        ));
+      }
+    }
   }

16-47: Deduplicate imports (likely generator template issue)
There are repeated imports (e.g., TypeAdapter, JsonReader, JsonWriter, IOException). Not a functional issue, but it’s avoidable churn.

java-client/src/test/java/org/openapitools/client/api/AccessKeyManagementApiTest.java (2)

29-33: Add a disable reason for why these tests are skipped
This prevents “accidentally enabled” CI confusion.

-@Disabled
+@Disabled("Generated scaffolding; requires a configured ApiClient + real Apollo endpoint and credentials")
 public class AccessKeyManagementApiTest {

41-113: Avoid null placeholders in API calls (even in disabled tests)
If enabled, these will fail fast and mask real regressions.

     public void createAccessKeyTest() throws ApiException {
-        String appId = null;
-        String env = null;
-        String operator = null;
+        String appId = "example-app";
+        String env = "DEV";
+        String operator = "tester";
         OpenAccessKeyDTO response = api.createAccessKey(appId, env, operator);
         // TODO: test validations
     }

(Apply similarly to the other tests; or load from env/system properties if you want these runnable locally.)

java-client/src/main/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTO.java (2)

291-317: Check isJsonArray() before calling getAsJsonArray() to avoid IllegalStateException
Currently getAsJsonArray() can throw before your explicit error message runs.

       if (jsonObj.get("modifyRoleUsers") != null && !jsonObj.get("modifyRoleUsers").isJsonNull()) {
-        JsonArray jsonArraymodifyRoleUsers = jsonObj.getAsJsonArray("modifyRoleUsers");
-        if (jsonArraymodifyRoleUsers != null) {
-          // ensure the json data is an array
-          if (!jsonObj.get("modifyRoleUsers").isJsonArray()) {
-            throw new IllegalArgumentException(String.format("Expected the field `modifyRoleUsers` to be an array in the JSON string but got `%s`", jsonObj.get("modifyRoleUsers").toString()));
-          }
+        if (!jsonObj.get("modifyRoleUsers").isJsonArray()) {
+          throw new IllegalArgumentException(String.format(
+            "Expected the field `modifyRoleUsers` to be an array in the JSON string but got `%s`",
+            jsonObj.get("modifyRoleUsers").toString()
+          ));
+        }
+        JsonArray jsonArraymodifyRoleUsers = jsonObj.getAsJsonArray("modifyRoleUsers");
 
           // validate the optional field `modifyRoleUsers` (array)
           for (int i = 0; i < jsonArraymodifyRoleUsers.size(); i++) {
             OpenUserInfoDTO.validateJsonObject(jsonArraymodifyRoleUsers.get(i).getAsJsonObject());
           };
-        }
       }

(Apply the same reorder to releaseRoleUsers.)


16-52: Deduplicate imports (likely generator template issue)
Not a functional problem, but it’s noisy in reviews and diffs.

java-client/src/main/java/org/openapitools/client/api/AccessKeyManagementApi.java (1)

37-37: Unused import can be removed.

javax.ws.rs.core.GenericType is imported but not used in this file.

-import javax.ws.rs.core.GenericType;

Copy link

@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: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
java-client/src/main/java/org/openapitools/client/api/AppManagementApi.java (1)

446-491: deleteApp() discards the response object; consider returning it or removing the unnecessary call.

The deleteApp() method calls deleteAppWithHttpInfo() which returns ApiResponse<Void> containing response metadata, but the result is not returned to the caller. This prevents callers from accessing response details if needed. Either return the ApiResponse<Void> or call deleteAppCall() directly if response details are not required.

No existing callers in the codebase depend on a return value, but this design limits future usability.

apollo-openapi.yaml (1)

22-49: Declare the AccessKey Management tag (it’s referenced by operations).
You added Permission Management to the top-level tags, but the new access-key endpoints use tags: [AccessKey Management]. Consider adding an explicit tag entry so generated docs/grouping is consistent.

 tags:
@@
   - name: Permission Management
     description: 权限管理相关接口,包括权限查询等功能
+  - name: AccessKey Management
+    description: AccessKey 管理相关接口,包括创建、启用/禁用、删除、查询等操作

Also applies to: 4632-4722

♻️ Duplicate comments (8)
python/apollo_openapi/apis/tags/permission_management_api.py (2)

20-20: Critical: Import path typo will cause ImportError.

The import path contains a typo: namepsaces should be namespaces. This will cause a runtime import error.

Apply this diff to fix the typo:

-from apollo_openapi.paths.openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namepsaces_role_users.get import GetClusterNamespaceRoles
+from apollo_openapi.paths.openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_role_users.get import GetClusterNamespaceRoles

31-31: Critical: Import path typo will cause ImportError.

The import path contains a typo: permision should be permission. This will cause a runtime import error.

Apply this diff to fix the typo:

-from apollo_openapi.paths.openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_permision_init.post import InitClusterNamespacePermission
+from apollo_openapi.paths.openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_permission_init.post import InitClusterNamespacePermission
python/apollo_openapi/model/open_env_namespace_role_user_dto.py (2)

54-66: F821 undefined name in return type annotation.

Line 58's return type 'modifyRoleUsers' triggers F821 because the nested class name isn't in scope during annotation evaluation. This is a template issue in the OpenAPI generator.

Add # noqa: F821 to suppress:

                 ) -> 'modifyRoleUsers':
+                    # noqa: F821
                     return super().__new__(

80-92: F821 undefined name in return type annotation.

Line 84's return type 'releaseRoleUsers' triggers F821 because the nested class name isn't in scope during annotation evaluation. This is a template issue in the OpenAPI generator.

Add # noqa: F821 to suppress:

                 ) -> 'releaseRoleUsers':
+                    # noqa: F821
                     return super().__new__(
python/apollo_openapi/model/open_cluster_namespace_role_user_dto.py (2)

55-67: F821 undefined name in return type annotation.

Line 59's return type annotation triggers F821. This was already flagged in previous reviews.


81-93: F821 undefined name in return type annotation.

Line 85's return type annotation triggers F821. This was already flagged in previous reviews.

java-client/src/main/java/org/openapitools/client/model/OpenUserInfoDTO.java (1)

179-189: PII exposure risk in toString() method.

The email field is included in toString() output at line 185, which could leak PII if objects are logged. This was already flagged in previous reviews.

java-client/api/openapi.yaml (1)

5433-5461: accessKeyId path param type should be int64 to match OpenAccessKeyDTO.id.
This mismatch will generate awkward/incorrect SDK signatures and was previously flagged.

       - description: ""
         explode: false
         in: path
         name: accessKeyId
         required: true
         schema:
-          type: string
+          type: integer
+          format: int64
         style: simple

(Apply consistently for /accesskeys/{accessKeyId}, /activation, and /deactivation.)

Also applies to: 5499-5506, 5546-5553, 7094-7098

🧹 Nitpick comments (12)
java-client/docs/ReleaseManagementApi.md (3)

82-83: Fix markdown linting issues: unordered list indentation (MD007).

The HTTP request headers sections have improper indentation in the list items. Ensure list items are not indented relative to their list markers.

 - **Content-Type**: Not defined
 - **Accept**: application/json

Apply this correction to all occurrences at lines 82-83, 323-324, and 624.

Also applies to: 323-324, 624-624


86-86: Add blank lines around tables (MD058).

Markdown linting requires blank lines before and after tables. Add blank lines before the "HTTP response details" tables at lines 86 and 327 (and similar occurrences).

Also applies to: 327-327


284-284: Inconsistent parameter documentation for clusterName.

In the createRelease method example (line 284), the clusterName parameter comment lacks a description ("集群名称"), while the createGrayRelease example (line 203) and others include it. Update line 284 to include the description for consistency:

-    String clusterName = "clusterName_example"; // String |
+    String clusterName = "clusterName_example"; // String | 集群名称

Similarly, update the parameter table at line 308 to include a description.

Also applies to: 308-308

python/apollo_openapi/paths/openapi_v1_apps_app_id/put.py (1)

101-156: 200 response is now “void”; consider clearing Accept list to avoid requesting JSON unnecessarily.
Switching ApiResponseFor200.body to schemas.Unset and removing the application/json schema for 200 aligns with apollo-openapi.yaml where PUT /openapi/v1/apps/{appId} has a 200 description only. Optional: set _all_accept_content_types = () (or omit adding Accept) for this endpoint to match the “no response body” intent.

java-client/docs/OpenAccessKeyDTO.md (1)

8-20: Documentation could benefit from field descriptions.

The properties table currently has empty descriptions for all fields. While the field names are reasonably self-descriptive, adding brief descriptions would improve the documentation's utility, especially for fields like mode (Integer) and enabled (Boolean) where the meaning and valid values aren't immediately obvious.

Since this appears to be auto-generated from the OpenAPI specification, consider adding descriptions to the source schema if you want them to appear here.

java-client/docs/PermissionManagementApi.md (1)

1-1933: Documentation is functional and comprehensive.

The API documentation covers all 22 permission management endpoints with usage examples. While markdownlint flags formatting inconsistencies (heading levels, list indentation, table spacing), these are minor style issues in auto-generated documentation that don't impact usability.

If you plan to manually improve this documentation in the future, note that the OpenAPI Generator could be configured to produce cleaner markdown formatting.

java-client/src/test/java/org/openapitools/client/model/OpenAccessKeyDTOTest.java (1)

35-127: Test implementation required.

All test methods contain only TODO comments. While this is typical for generated test scaffolds, these tests should be implemented to ensure proper validation of the OpenAccessKeyDTO model.

Would you like me to generate test implementations for these properties? I can create assertions to validate getters/setters, JSON serialization/deserialization, and builder patterns if supported by the DTO.

java-client/src/main/java/org/openapitools/client/model/OpenClusterNamespaceRoleUserDTO.java (1)

16-50: Fix duplicated imports (generated noise) to reduce warnings.
There are repeated imports (TypeAdapter, JsonReader, JsonWriter, IOException, List). Not a functional issue, but it’s avoidable churn/noise.

java-client/src/main/java/org/openapitools/client/model/OpenAccessKeyDTO.java (1)

434-458: Validation misses non-string fields (id, mode, enabled) type checks.
Right now validateJsonObject checks several string fields, but allows invalid JSON types for id/mode/enabled to slip through silently.

java-client/api/openapi.yaml (2)

2428-2469: Release comparison endpoint shape looks OK; consider naming consistency (toCompareReleaseId).
SDK ergonomics are often nicer with compareReleaseId (or targetReleaseId) vs toCompareReleaseId, but this is optional if it matches server reality.


5076-5126: assignAppRoleToUser POST likely shouldn’t require a request body if userId is the real input.
You already require userId in query params; adding a string JSON body will force generated SDKs to accept/pass a body, which is surprising and easy to misuse.

java-client/src/main/java/org/openapitools/client/api/AccessKeyManagementApi.java (1)

39-74: Guard hostIndex / base-path selection to avoid AIOOB on future server arrays
Today localBasePaths is empty, but if it becomes non-empty later, localHostIndex can be set to an invalid value and crash at runtime (Line 98-100). Consider clamping or validating in setHostIndex() (or right before indexing).

 public void setHostIndex(int hostIndex) {
-    this.localHostIndex = hostIndex;
+    if (hostIndex < 0) {
+        throw new IllegalArgumentException("hostIndex must be >= 0");
+    }
+    this.localHostIndex = hostIndex;
 }

Also applies to: 90-103

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4b98766 and ad20eed.

📒 Files selected for processing (107)
  • apollo-openapi.yaml (9 hunks)
  • java-client/.openapi-generator/FILES (9 hunks)
  • java-client/README.md (6 hunks)
  • java-client/api/openapi.yaml (9 hunks)
  • java-client/docs/AccessKeyManagementApi.md (1 hunks)
  • java-client/docs/AppManagementApi.md (9 hunks)
  • java-client/docs/ClusterManagementApi.md (3 hunks)
  • java-client/docs/InstanceManagementApi.md (1 hunks)
  • java-client/docs/NamespaceManagementApi.md (4 hunks)
  • java-client/docs/OpenAccessKeyDTO.md (1 hunks)
  • java-client/docs/OpenAppRoleUserDTO.md (1 hunks)
  • java-client/docs/OpenClusterNamespaceRoleUserDTO.md (1 hunks)
  • java-client/docs/OpenEnvNamespaceRoleUserDTO.md (1 hunks)
  • java-client/docs/OpenNamespaceRoleUserDTO.md (1 hunks)
  • java-client/docs/OpenPermissionConditionDTO.md (1 hunks)
  • java-client/docs/OpenReleaseChangeDTO.md (1 hunks)
  • java-client/docs/OpenReleaseDiffDTO.md (1 hunks)
  • java-client/docs/OpenUserInfoDTO.md (1 hunks)
  • java-client/docs/PermissionManagementApi.md (1 hunks)
  • java-client/docs/ReleaseManagementApi.md (18 hunks)
  • java-client/src/main/java/org/openapitools/client/JSON.java (2 hunks)
  • java-client/src/main/java/org/openapitools/client/api/AccessKeyManagementApi.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/api/AppManagementApi.java (11 hunks)
  • java-client/src/main/java/org/openapitools/client/api/ClusterManagementApi.java (4 hunks)
  • java-client/src/main/java/org/openapitools/client/api/InstanceManagementApi.java (5 hunks)
  • java-client/src/main/java/org/openapitools/client/api/NamespaceManagementApi.java (3 hunks)
  • java-client/src/main/java/org/openapitools/client/api/ReleaseManagementApi.java (38 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenAccessKeyDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenAppRoleUserDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenClusterNamespaceRoleUserDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenNamespaceRoleUserDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenPermissionConditionDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenReleaseChangeDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenReleaseDiffDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenUserInfoDTO.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/api/AccessKeyManagementApiTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/api/AppManagementApiTest.java (3 hunks)
  • java-client/src/test/java/org/openapitools/client/api/ClusterManagementApiTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/api/NamespaceManagementApiTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/api/PermissionManagementApiTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/api/ReleaseManagementApiTest.java (6 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenAccessKeyDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenAppRoleUserDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenClusterNamespaceRoleUserDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenNamespaceRoleUserDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenPermissionConditionDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenReleaseChangeDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenReleaseDiffDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenUserInfoDTOTest.java (1 hunks)
  • python/.openapi-generator/FILES (10 hunks)
  • python/README.md (7 hunks)
  • python/apollo_openapi/apis/path_to_api.py (6 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_activation.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_deactivation.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_permission_init.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_permissions_permission_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_role_users.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_roles_role_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_namespaces_namespace_name_permissions_permission_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_namespaces_namespace_name_role_users.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_namespaces_namespace_name_roles_role_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_permission_init.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_permissions_permission_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_role_users.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_roles_role_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_permissions_permission_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_role_users.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_roles_master.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_roles_role_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_envs_env_apps_app_id_clusters_cluster_name_namespaces_namespace_name_releases_all.py (0 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_envs_env_releases_comparison.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_permissions_root.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_system_role_manage_app_master.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_system_roles_create_application.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_system_roles_create_application_role_users.py (1 hunks)
  • python/apollo_openapi/apis/tag_to_api.py (3 hunks)
  • python/apollo_openapi/apis/tags/__init__.py (1 hunks)
  • python/apollo_openapi/apis/tags/access_key_management_api.py (1 hunks)
  • python/apollo_openapi/apis/tags/permission_management_api.py (1 hunks)
  • python/apollo_openapi/apis/tags/release_management_api.py (1 hunks)
  • python/apollo_openapi/model/open_access_key_dto.py (1 hunks)
  • python/apollo_openapi/model/open_access_key_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_app_role_user_dto.py (1 hunks)
  • python/apollo_openapi/model/open_app_role_user_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_cluster_namespace_role_user_dto.py (1 hunks)
  • python/apollo_openapi/model/open_cluster_namespace_role_user_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_env_namespace_role_user_dto.py (1 hunks)
  • python/apollo_openapi/model/open_env_namespace_role_user_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_namespace_role_user_dto.py (1 hunks)
  • python/apollo_openapi/model/open_namespace_role_user_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_permission_condition_dto.py (1 hunks)
  • python/apollo_openapi/model/open_permission_condition_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_release_change_dto.py (1 hunks)
  • python/apollo_openapi/model/open_release_change_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_release_diff_dto.py (1 hunks)
  • python/apollo_openapi/model/open_release_diff_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_user_info_dto.py (1 hunks)
  • python/apollo_openapi/model/open_user_info_dto.pyi (1 hunks)
  • python/apollo_openapi/models/__init__.py (2 hunks)
  • python/apollo_openapi/paths/__init__.py (2 hunks)
  • python/apollo_openapi/paths/openapi_v1_apps_app_id/delete.py (1 hunks)
  • python/apollo_openapi/paths/openapi_v1_apps_app_id/delete.pyi (1 hunks)
  • python/apollo_openapi/paths/openapi_v1_apps_app_id/put.py (1 hunks)
⛔ Files not processed due to max files limit (14)
  • python/apollo_openapi/paths/openapi_v1_apps_app_id/put.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys/init.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys/get.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys/post.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys/post.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id/init.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id/delete.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id/delete.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_activation/init.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_activation/put.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_activation/put.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_deactivation/init.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_deactivation/put.py
💤 Files with no reviewable changes (1)
  • python/apollo_openapi/apis/paths/openapi_v1_envs_env_apps_app_id_clusters_cluster_name_namespaces_namespace_name_releases_all.py
✅ Files skipped from review due to trivial changes (1)
  • java-client/docs/OpenUserInfoDTO.md
🚧 Files skipped from review as they are similar to previous changes (38)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_role_users.py
  • java-client/docs/OpenReleaseChangeDTO.md
  • java-client/docs/OpenEnvNamespaceRoleUserDTO.md
  • python/apollo_openapi/paths/openapi_v1_apps_app_id/delete.pyi
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_activation.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_roles_role_type.py
  • java-client/src/test/java/org/openapitools/client/api/ReleaseManagementApiTest.java
  • java-client/src/test/java/org/openapitools/client/api/AccessKeyManagementApiTest.java
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_namespaces_namespace_name_role_users.py
  • java-client/docs/InstanceManagementApi.md
  • java-client/src/main/java/org/openapitools/client/model/OpenPermissionConditionDTO.java
  • java-client/src/test/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTOTest.java
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_roles_role_type.py
  • java-client/src/main/java/org/openapitools/client/model/OpenAppRoleUserDTO.java
  • python/apollo_openapi/model/open_namespace_role_user_dto.pyi
  • python/apollo_openapi/model/open_release_diff_dto.pyi
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_roles_master.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_deactivation.py
  • java-client/src/test/java/org/openapitools/client/api/AppManagementApiTest.java
  • java-client/docs/OpenPermissionConditionDTO.md
  • java-client/src/main/java/org/openapitools/client/JSON.java
  • java-client/docs/OpenNamespaceRoleUserDTO.md
  • python/apollo_openapi/model/open_release_change_dto.pyi
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_permissions_permission_type.py
  • java-client/src/test/java/org/openapitools/client/model/OpenReleaseChangeDTOTest.java
  • java-client/docs/OpenReleaseDiffDTO.md
  • java-client/src/test/java/org/openapitools/client/model/OpenReleaseDiffDTOTest.java
  • python/apollo_openapi/apis/paths/openapi_v1_permissions_root.py
  • python/apollo_openapi/apis/tag_to_api.py
  • java-client/docs/OpenClusterNamespaceRoleUserDTO.md
  • java-client/src/test/java/org/openapitools/client/model/OpenUserInfoDTOTest.java
  • python/.openapi-generator/FILES
  • java-client/src/main/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTO.java
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_role_users.py
  • java-client/docs/ClusterManagementApi.md
  • python/apollo_openapi/model/open_permission_condition_dto.pyi
  • java-client/docs/AppManagementApi.md
  • java-client/src/main/java/org/openapitools/client/api/InstanceManagementApi.java
🧰 Additional context used
🧬 Code graph analysis (1)
java-client/src/main/java/org/openapitools/client/api/ClusterManagementApi.java (1)
typescript/src/apis/ClusterManagementApi.ts (1)
  • deleteCluster (142-144)
🪛 markdownlint-cli2 (0.18.1)
java-client/docs/PermissionManagementApi.md

3-3: Bare URL used

(MD034, no-bare-urls)


43-43: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


97-97: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


98-98: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


101-101: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


113-113: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


169-169: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


170-170: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


173-173: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


185-185: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


245-245: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


246-246: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


249-249: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


261-261: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


323-323: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


324-324: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


327-327: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


339-339: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


401-401: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


402-402: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


405-405: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


417-417: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


477-477: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


478-478: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


481-481: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


493-493: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


547-547: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


548-548: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


551-551: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


563-563: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


616-616: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


617-617: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


620-620: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


632-632: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


689-689: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


690-690: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


693-693: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


705-705: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


754-754: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


755-755: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


758-758: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


770-770: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


827-827: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


828-828: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


831-831: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


843-843: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


898-898: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


899-899: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


902-902: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


914-914: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


971-971: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


972-972: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


975-975: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


987-987: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1048-1048: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1049-1049: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1052-1052: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1064-1064: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1117-1117: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1118-1118: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1121-1121: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1133-1133: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1194-1194: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1195-1195: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1198-1198: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1210-1210: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1269-1269: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1270-1270: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1273-1273: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1285-1285: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1338-1338: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1339-1339: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1342-1342: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1354-1354: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1410-1410: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1411-1411: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1414-1414: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1426-1426: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1484-1484: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1485-1485: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1488-1488: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1500-1500: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1549-1549: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1550-1550: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1553-1553: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1565-1565: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1623-1623: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1624-1624: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1627-1627: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1639-1639: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1701-1701: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1702-1702: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1705-1705: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1717-1717: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1773-1773: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1774-1774: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1777-1777: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1789-1789: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1851-1851: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1852-1852: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1855-1855: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1867-1867: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1927-1927: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1928-1928: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1931-1931: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)

python/README.md

304-304: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


305-305: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


306-306: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


307-307: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


308-308: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


309-309: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


310-310: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


311-311: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


312-312: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


313-313: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


314-314: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


315-315: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


331-331: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


332-332: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


333-333: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


334-334: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


335-335: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


336-336: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


337-337: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


338-338: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


339-339: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


340-340: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


341-341: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

java-client/README.md

227-227: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


228-228: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


245-245: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)

java-client/docs/ReleaseManagementApi.md

82-82: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


83-83: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


86-86: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


323-323: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


324-324: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


327-327: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


624-624: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

java-client/docs/AccessKeyManagementApi.md

3-3: Bare URL used

(MD034, no-bare-urls)


28-28: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


81-81: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


82-82: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


85-85: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


99-99: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


155-155: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


156-156: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


159-159: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


173-173: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


227-227: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


228-228: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


231-231: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


245-245: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


298-298: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


299-299: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


302-302: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


315-315: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


364-364: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


365-365: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


368-368: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)

java-client/docs/NamespaceManagementApi.md

85-85: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

🪛 Ruff (0.14.8)
python/apollo_openapi/model/open_namespace_role_user_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


58-58: Undefined name modifyRoleUsers

(F821)


84-84: Undefined name releaseRoleUsers

(F821)

python/apollo_openapi/model/open_app_role_user_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


57-57: Undefined name masterUsers

(F821)

python/apollo_openapi/apis/tags/permission_management_api.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)

python/apollo_openapi/model/open_access_key_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)

python/apollo_openapi/model/open_release_change_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)

python/apollo_openapi/model/open_cluster_namespace_role_user_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


59-59: Undefined name modifyRoleUsers

(F821)


85-85: Undefined name releaseRoleUsers

(F821)

python/apollo_openapi/apis/tags/access_key_management_api.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)

python/apollo_openapi/model/open_env_namespace_role_user_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


58-58: Undefined name modifyRoleUsers

(F821)


84-84: Undefined name releaseRoleUsers

(F821)

python/apollo_openapi/model/open_permission_condition_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)

python/apollo_openapi/model/open_release_diff_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


56-56: Undefined name changes

(F821)

python/apollo_openapi/model/open_user_info_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)

Copy link

@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: 6

♻️ Duplicate comments (12)
python/apollo_openapi/model/open_user_info_dto.py (1)

3-24: Configure Ruff to exclude generated models (RUF002, RUF100)

The Ruff violations (ambiguous fullwidth characters in docstrings, unused noqa directives) are artifacts of the OpenAPI generator template and affect all generated model files. As noted in previous reviews, either exclude python/apollo_openapi/model/**/*.py from Ruff checks in your config or update the generator template.

python/apollo_openapi/model/open_env_namespace_role_user_dto.py (1)

80-89: Fix forward-reference in nested class return type

Same F821 issue as modifyRoleUsers: the return type annotation -> 'releaseRoleUsers': at line 85 is flagged. Apply the same suppression or generator template fix.

python/apollo_openapi/model/open_app_role_user_dto.py (1)

53-63: Fix forward-reference in nested class return type

The return type annotation -> 'masterUsers': at line 57 triggers F821 (undefined name). Add # type: ignore[name-defined] to suppress, or update the OpenAPI generator template to avoid this pattern.

java-client/src/main/java/org/openapitools/client/model/OpenPermissionConditionDTO.java (1)

140-154: Fix NPE in validateJsonObject when jsonObj is null (Critical)

As noted in the previous review, when jsonObj is null and openapiRequiredFields is empty, the code falls through to line 147 and calls jsonObj.entrySet(), causing a NullPointerException. Add an early return after the null check:

   public static void validateJsonObject(JsonObject jsonObj) throws IOException {
       if (jsonObj == null) {
-        if (!OpenPermissionConditionDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
-          throw new IllegalArgumentException(String.format("The required field(s) %s in OpenPermissionConditionDTO is not found in the empty JSON string", OpenPermissionConditionDTO.openapiRequiredFields.toString()));
+        if (!OpenPermissionConditionDTO.openapiRequiredFields.isEmpty()) {
+          throw new IllegalArgumentException(String.format(
+            "The required field(s) %s in OpenPermissionConditionDTO is not found in the empty JSON string",
+            OpenPermissionConditionDTO.openapiRequiredFields.toString()
+          ));
         }
+        return;
       }
 
       Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
python/apollo_openapi/model/open_cluster_namespace_role_user_dto.py (2)

55-67: Fix forward-reference F821 in nested class return type

The return type annotation -> 'modifyRoleUsers': at line 59 triggers F821. As noted in previous reviews on similar files, add # type: ignore[name-defined] or update the OpenAPI generator template to use proper forward references.


81-93: Fix forward-reference F821 in nested class return type

The return type annotation -> 'releaseRoleUsers': at line 85 triggers F821. Same issue and solution as modifyRoleUsers above.

python/README.md (1)

187-187: Critical syntax error in example code.

The method call is missing commas between parameters, making the example invalid Python syntax.

This issue was previously flagged and should be fixed by separating the parameters with commas.

java-client/src/main/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTO.java (1)

271-322: Fix NPE in validateJsonObject when jsonObj is null.

Same issue flagged in past review: after checking jsonObj == null at line 272, the method should return early to avoid NPE at line 278.

The fix is the same as previously suggested - add return; after the null check block.

java-client/src/main/java/org/openapitools/client/model/OpenAccessKeyDTO.java (2)

361-378: Do not log secrets: toString() currently prints secret.

This is a high-risk footgun. The secret field is printed in plaintext and can leak into logs, metrics, exceptions, or debug output.

Apply this diff to redact the secret:

   @Override
   public String toString() {
     StringBuilder sb = new StringBuilder();
     sb.append("class OpenAccessKeyDTO {\n");
     sb.append("    dataChangeCreatedBy: ").append(toIndentedString(dataChangeCreatedBy)).append("\n");
     sb.append("    dataChangeLastModifiedBy: ").append(toIndentedString(dataChangeLastModifiedBy)).append("\n");
     sb.append("    dataChangeCreatedByDisplayName: ").append(toIndentedString(dataChangeCreatedByDisplayName)).append("\n");
     sb.append("    dataChangeLastModifiedByDisplayName: ").append(toIndentedString(dataChangeLastModifiedByDisplayName)).append("\n");
     sb.append("    dataChangeCreatedTime: ").append(toIndentedString(dataChangeCreatedTime)).append("\n");
     sb.append("    dataChangeLastModifiedTime: ").append(toIndentedString(dataChangeLastModifiedTime)).append("\n");
     sb.append("    id: ").append(toIndentedString(id)).append("\n");
-    sb.append("    secret: ").append(toIndentedString(secret)).append("\n");
+    sb.append("    secret: ").append(secret == null ? "null" : "[REDACTED]").append("\n");
     sb.append("    appId: ").append(toIndentedString(appId)).append("\n");
     sb.append("    mode: ").append(toIndentedString(mode)).append("\n");
     sb.append("    enabled: ").append(toIndentedString(enabled)).append("\n");
     sb.append("}");
     return sb.toString();
   }

420-426: validateJsonObject(null) can NPE; return early when jsonObj == null.

When openapiRequiredFields is empty and jsonObj is null, execution falls through to line 427 where jsonObj.entrySet() will throw NPE.

Apply this diff to add early return:

   public static void validateJsonObject(JsonObject jsonObj) throws IOException {
       if (jsonObj == null) {
         if (!OpenAccessKeyDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
           throw new IllegalArgumentException(String.format("The required field(s) %s in OpenAccessKeyDTO is not found in the empty JSON string", OpenAccessKeyDTO.openapiRequiredFields.toString()));
         }
+        return;
       }
java-client/src/main/java/org/openapitools/client/api/AccessKeyManagementApi.java (1)

264-266: Make Accept header consistent for Void responses (delete/disable/enable).

The deleteAccessKeyCall, disableAccessKeyCall, and enableAccessKeyCall methods use empty localVarAccepts arrays, while create/find use application/json. Even for Void responses, setting Accept: application/json keeps behavior consistent, especially for error responses.

Apply this diff to each method:

         final String[] localVarAccepts = {
+            "application/json"
         };

Also applies to: 405-407, 548-550

java-client/api/openapi.yaml (1)

5457-5461: Fix accessKeyId path param type to integer(int64) to match OpenAccessKeyDTO.id.
Currently accessKeyId is type: string, but the schema uses format: int64 integer for IDs; this tends to generate mismatched SDK signatures and surprises at runtime.

       - description: ""
         explode: false
         in: path
         name: accessKeyId
         required: true
         schema:
-          type: string
+          type: integer
+          format: int64
         style: simple
🧹 Nitpick comments (10)
java-client/src/test/java/org/openapitools/client/model/OpenReleaseChangeDTOTest.java (1)

29-70: Implement the TODO test placeholders.

All test methods contain TODO placeholders and lack assertions. These tests should validate the OpenReleaseChangeDTO model's constructor, getters/setters, and property behavior to ensure correctness.

Would you like me to generate the test implementations for OpenReleaseChangeDTO covering the properties changeType, key, newValue, and oldValue?

java-client/src/test/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTOTest.java (1)

38-81: Implement the test methods.

All 6 test methods contain only TODO placeholders. These tests should be implemented to validate the OpenEnvNamespaceRoleUserDTO model's properties, serialization, and deserialization behavior.

Do you want me to generate test implementations for these methods, or open a new issue to track this task?

java-client/src/test/java/org/openapitools/client/model/OpenUserInfoDTOTest.java (1)

35-70: Implement test coverage for OpenUserInfoDTO properties.

The test methods are currently placeholders. Consider implementing assertions to verify property getters/setters, JSON serialization/deserialization, and validation behavior for the OpenUserInfoDTO model.

Do you want me to generate comprehensive test implementations for these test methods?

java-client/src/test/java/org/openapitools/client/model/OpenAccessKeyDTOTest.java (1)

35-126: Implement test coverage for OpenAccessKeyDTO properties.

The test methods are currently placeholders. Consider implementing assertions to verify property getters/setters, JSON serialization/deserialization, and validation behavior for the OpenAccessKeyDTO model, including the audit fields (dataChangeCreatedBy, dataChangeLastModifiedBy, etc.).

Do you want me to generate comprehensive test implementations for these test methods?

java-client/src/test/java/org/openapitools/client/model/OpenAppRoleUserDTOTest.java (1)

24-57: Test migration looks good; implement test coverage.

The migration from OpenReleaseBOTest to OpenAppRoleUserDTOTest is correctly implemented with appropriate import and property name updates. However, the test methods remain placeholders. Consider implementing assertions to verify the appId and masterUsers properties.

apollo-openapi.yaml (2)

3671-3700: Consider adding error responses to permission initialization endpoint.

The initAppPermission endpoint only defines a 200 response. Consider adding 400, 403, and 404 error responses for consistency with other mutation endpoints in the spec that handle parameter validation errors, permission denials, and not-found scenarios.

       responses:
         '200':
           description: '初始化成功'
+        '400':
+          description: '请求参数错误'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ExceptionResponse'
+        '403':
+          description: '权限不足'
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ExceptionResponse'

5557-5577: Add descriptions to new DTO schema properties for better API documentation.

The new DTO schemas (OpenPermissionConditionDTO, OpenUserInfoDTO, etc.) have mostly empty description fields. While functional, adding meaningful descriptions would improve API discoverability and client code documentation.

Example improvement for OpenUserInfoDTO:

     OpenUserInfoDTO:
       type: object
       properties:
         userId:
           type: string
-          description: ''
+          description: '用户唯一标识符'
         name:
           type: string
-          description: ''
+          description: '用户显示名称'
         email:
           type: string
-          description: ''
+          description: '用户邮箱地址'
         enabled:
           type: integer
-          description: ''
+          description: '用户启用状态,0表示禁用,1表示启用'
java-client/docs/ReleaseManagementApi.md (1)

82-83: Minor markdown formatting issue from generator.

The HTTP request headers list has incorrect indentation (1 space instead of 0). This is a generator artifact and doesn't affect functionality, but could be fixed in the OpenAPI generator template if desired.

 ### HTTP request headers

-- - **Content-Type**: Not defined
-- - **Accept**: application/json
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
java-client/api/openapi.yaml (2)

48-49: Add missing AccessKey Management tag entry (spec hygiene / doc grouping).
You added Permission Management to tags, but new endpoints also reference AccessKey Management (e.g., Line 5377, Line 5429). If there’s no corresponding tags: entry, many doc renderers will show it as “untagged”/inconsistent.


6829-7093: Consider tightening schemas: add descriptions and (where applicable) enums.
Several new DTO fields have empty description: "" (e.g., OpenPermissionConditionDTO.hasPermission, OpenUserInfoDTO.*, OpenAccessKeyDTO.*). This weakens generated docs and can reduce SDK ergonomics; also OpenReleaseChangeDTO.changeType likely wants an enum if the backend has a finite set.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ad20eed and f756aad.

📒 Files selected for processing (107)
  • apollo-openapi.yaml (9 hunks)
  • java-client/.openapi-generator/FILES (7 hunks)
  • java-client/README.md (6 hunks)
  • java-client/api/openapi.yaml (9 hunks)
  • java-client/docs/AccessKeyManagementApi.md (1 hunks)
  • java-client/docs/AppManagementApi.md (9 hunks)
  • java-client/docs/ClusterManagementApi.md (3 hunks)
  • java-client/docs/InstanceManagementApi.md (1 hunks)
  • java-client/docs/NamespaceManagementApi.md (4 hunks)
  • java-client/docs/OpenAccessKeyDTO.md (1 hunks)
  • java-client/docs/OpenAppRoleUserDTO.md (1 hunks)
  • java-client/docs/OpenClusterNamespaceRoleUserDTO.md (1 hunks)
  • java-client/docs/OpenEnvNamespaceRoleUserDTO.md (1 hunks)
  • java-client/docs/OpenNamespaceRoleUserDTO.md (1 hunks)
  • java-client/docs/OpenPermissionConditionDTO.md (1 hunks)
  • java-client/docs/OpenReleaseBO.md (0 hunks)
  • java-client/docs/OpenReleaseChangeDTO.md (1 hunks)
  • java-client/docs/OpenReleaseDiffDTO.md (1 hunks)
  • java-client/docs/OpenUserInfoDTO.md (1 hunks)
  • java-client/docs/PermissionManagementApi.md (1 hunks)
  • java-client/docs/ReleaseManagementApi.md (18 hunks)
  • java-client/src/main/java/org/openapitools/client/JSON.java (2 hunks)
  • java-client/src/main/java/org/openapitools/client/api/AccessKeyManagementApi.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/api/AppManagementApi.java (11 hunks)
  • java-client/src/main/java/org/openapitools/client/api/ClusterManagementApi.java (4 hunks)
  • java-client/src/main/java/org/openapitools/client/api/InstanceManagementApi.java (5 hunks)
  • java-client/src/main/java/org/openapitools/client/api/NamespaceManagementApi.java (3 hunks)
  • java-client/src/main/java/org/openapitools/client/api/ReleaseManagementApi.java (38 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenAccessKeyDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenAppRoleUserDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenClusterNamespaceRoleUserDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenNamespaceRoleUserDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenPermissionConditionDTO.java (5 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenReleaseChangeDTO.java (1 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenReleaseDiffDTO.java (7 hunks)
  • java-client/src/main/java/org/openapitools/client/model/OpenUserInfoDTO.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/api/AccessKeyManagementApiTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/api/AppManagementApiTest.java (3 hunks)
  • java-client/src/test/java/org/openapitools/client/api/ClusterManagementApiTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/api/NamespaceManagementApiTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/api/PermissionManagementApiTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/api/ReleaseManagementApiTest.java (6 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenAccessKeyDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenAppRoleUserDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenClusterNamespaceRoleUserDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenNamespaceRoleUserDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenPermissionConditionDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenReleaseChangeDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenReleaseDiffDTOTest.java (1 hunks)
  • java-client/src/test/java/org/openapitools/client/model/OpenUserInfoDTOTest.java (1 hunks)
  • python/.openapi-generator/FILES (9 hunks)
  • python/README.md (6 hunks)
  • python/apollo_openapi/apis/path_to_api.py (6 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_activation.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_deactivation.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_permission_init.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_permissions_permission_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_role_users.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_roles_role_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_namespaces_namespace_name_permissions_permission_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_namespaces_namespace_name_role_users.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_namespaces_namespace_name_roles_role_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_permission_init.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_permissions_permission_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_role_users.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_roles_role_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_permissions_permission_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_role_users.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_roles_master.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_roles_role_type.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_envs_env_apps_app_id_clusters_cluster_name_namespaces_namespace_name_releases_all.py (0 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_envs_env_releases_comparison.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_permissions_root.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_system_role_manage_app_master.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_system_roles_create_application.py (1 hunks)
  • python/apollo_openapi/apis/paths/openapi_v1_system_roles_create_application_role_users.py (1 hunks)
  • python/apollo_openapi/apis/tag_to_api.py (3 hunks)
  • python/apollo_openapi/apis/tags/__init__.py (1 hunks)
  • python/apollo_openapi/apis/tags/access_key_management_api.py (1 hunks)
  • python/apollo_openapi/apis/tags/permission_management_api.py (1 hunks)
  • python/apollo_openapi/apis/tags/release_management_api.py (1 hunks)
  • python/apollo_openapi/model/open_access_key_dto.py (1 hunks)
  • python/apollo_openapi/model/open_access_key_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_app_role_user_dto.py (2 hunks)
  • python/apollo_openapi/model/open_app_role_user_dto.pyi (2 hunks)
  • python/apollo_openapi/model/open_cluster_namespace_role_user_dto.py (1 hunks)
  • python/apollo_openapi/model/open_cluster_namespace_role_user_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_env_namespace_role_user_dto.py (1 hunks)
  • python/apollo_openapi/model/open_env_namespace_role_user_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_namespace_role_user_dto.py (1 hunks)
  • python/apollo_openapi/model/open_namespace_role_user_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_permission_condition_dto.py (2 hunks)
  • python/apollo_openapi/model/open_permission_condition_dto.pyi (2 hunks)
  • python/apollo_openapi/model/open_release_change_dto.py (1 hunks)
  • python/apollo_openapi/model/open_release_change_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_release_diff_dto.py (1 hunks)
  • python/apollo_openapi/model/open_release_diff_dto.pyi (1 hunks)
  • python/apollo_openapi/model/open_user_info_dto.py (1 hunks)
  • python/apollo_openapi/model/open_user_info_dto.pyi (1 hunks)
  • python/apollo_openapi/models/__init__.py (2 hunks)
  • python/apollo_openapi/paths/__init__.py (2 hunks)
  • python/apollo_openapi/paths/openapi_v1_apps_app_id/delete.py (1 hunks)
  • python/apollo_openapi/paths/openapi_v1_apps_app_id/delete.pyi (1 hunks)
⛔ Files not processed due to max files limit (15)
  • python/apollo_openapi/paths/openapi_v1_apps_app_id/put.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id/put.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys/init.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys/get.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys/post.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys/post.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id/init.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id/delete.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id/delete.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_activation/init.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_activation/put.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_activation/put.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_deactivation/init.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_deactivation/put.py
💤 Files with no reviewable changes (2)
  • java-client/docs/OpenReleaseBO.md
  • python/apollo_openapi/apis/paths/openapi_v1_envs_env_apps_app_id_clusters_cluster_name_namespaces_namespace_name_releases_all.py
✅ Files skipped from review due to trivial changes (2)
  • java-client/docs/OpenEnvNamespaceRoleUserDTO.md
  • java-client/docs/OpenUserInfoDTO.md
🚧 Files skipped from review as they are similar to previous changes (38)
  • java-client/docs/OpenReleaseChangeDTO.md
  • java-client/docs/OpenReleaseDiffDTO.md
  • java-client/docs/OpenAppRoleUserDTO.md
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_permissions_permission_type.py
  • java-client/docs/OpenNamespaceRoleUserDTO.md
  • java-client/docs/InstanceManagementApi.md
  • java-client/src/test/java/org/openapitools/client/api/NamespaceManagementApiTest.java
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_namespaces_namespace_name_roles_role_type.py
  • java-client/docs/OpenClusterNamespaceRoleUserDTO.md
  • python/apollo_openapi/apis/tag_to_api.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_namespaces_namespace_name_permissions_permission_type.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_deactivation.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_roles_role_type.py
  • java-client/src/main/java/org/openapitools/client/JSON.java
  • java-client/src/main/java/org/openapitools/client/api/InstanceManagementApi.java
  • java-client/src/test/java/org/openapitools/client/model/OpenPermissionConditionDTOTest.java
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_role_users.py
  • python/apollo_openapi/model/open_access_key_dto.pyi
  • python/apollo_openapi/apis/paths/openapi_v1_system_role_manage_app_master.py
  • java-client/docs/OpenPermissionConditionDTO.md
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_role_users.py
  • java-client/src/test/java/org/openapitools/client/api/AppManagementApiTest.java
  • java-client/src/test/java/org/openapitools/client/model/OpenNamespaceRoleUserDTOTest.java
  • java-client/src/test/java/org/openapitools/client/api/ClusterManagementApiTest.java
  • java-client/src/test/java/org/openapitools/client/api/AccessKeyManagementApiTest.java
  • python/apollo_openapi/apis/paths/openapi_v1_system_roles_create_application_role_users.py
  • java-client/src/test/java/org/openapitools/client/model/OpenReleaseDiffDTOTest.java
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_roles_master.py
  • java-client/src/main/java/org/openapitools/client/model/OpenClusterNamespaceRoleUserDTO.java
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_permissions_permission_type.py
  • java-client/src/test/java/org/openapitools/client/api/ReleaseManagementApiTest.java
  • java-client/docs/NamespaceManagementApi.md
  • python/apollo_openapi/model/open_release_diff_dto.pyi
  • java-client/src/test/java/org/openapitools/client/model/OpenClusterNamespaceRoleUserDTOTest.java
  • java-client/docs/OpenAccessKeyDTO.md
  • python/apollo_openapi/apis/tags/init.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_namespaces_namespace_name_roles_role_type.py
  • java-client/.openapi-generator/FILES
🧰 Additional context used
🧬 Code graph analysis (2)
java-client/src/main/java/org/openapitools/client/api/ClusterManagementApi.java (1)
typescript/src/apis/ClusterManagementApi.ts (1)
  • deleteCluster (142-144)
python/apollo_openapi/apis/path_to_api.py (1)
python/apollo_openapi/paths/__init__.py (1)
  • PathValues (8-81)
🪛 markdownlint-cli2 (0.18.1)
java-client/docs/PermissionManagementApi.md

3-3: Bare URL used

(MD034, no-bare-urls)


43-43: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


97-97: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


98-98: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


101-101: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


113-113: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


169-169: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


170-170: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


173-173: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


185-185: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


245-245: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


246-246: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


249-249: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


261-261: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


323-323: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


324-324: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


327-327: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


339-339: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


401-401: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


402-402: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


405-405: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


417-417: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


477-477: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


478-478: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


481-481: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


493-493: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


547-547: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


548-548: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


551-551: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


563-563: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


616-616: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


617-617: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


620-620: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


632-632: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


689-689: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


690-690: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


693-693: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


705-705: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


754-754: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


755-755: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


758-758: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


770-770: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


827-827: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


828-828: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


831-831: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


843-843: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


898-898: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


899-899: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


902-902: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


914-914: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


971-971: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


972-972: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


975-975: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


987-987: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1048-1048: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1049-1049: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1052-1052: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1064-1064: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1117-1117: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1118-1118: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1121-1121: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1133-1133: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1194-1194: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1195-1195: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1198-1198: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1210-1210: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1269-1269: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1270-1270: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1273-1273: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1285-1285: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1338-1338: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1339-1339: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1342-1342: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1354-1354: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1410-1410: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1411-1411: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1414-1414: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1426-1426: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1484-1484: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1485-1485: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1488-1488: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1500-1500: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1549-1549: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1550-1550: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1553-1553: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1565-1565: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1623-1623: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1624-1624: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1627-1627: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1639-1639: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1701-1701: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1702-1702: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1705-1705: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1717-1717: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1773-1773: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1774-1774: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1777-1777: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1789-1789: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1851-1851: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1852-1852: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1855-1855: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


1867-1867: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


1927-1927: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1928-1928: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


1931-1931: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)

java-client/README.md

244-244: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


245-245: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


246-246: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


247-247: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


248-248: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


249-249: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


250-250: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


251-251: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


252-252: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


253-253: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


254-254: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


255-255: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


271-271: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


272-272: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


273-273: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


274-274: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


275-275: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


276-276: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


277-277: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


278-278: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


279-279: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


280-280: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

java-client/docs/ReleaseManagementApi.md

82-82: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


83-83: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


86-86: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


323-323: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


324-324: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


327-327: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


624-624: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

python/README.md

299-299: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


300-300: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


301-301: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


302-302: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


303-303: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


304-304: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


305-305: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


306-306: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


307-307: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


308-308: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


309-309: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


310-310: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


311-311: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


312-312: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


313-313: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


314-314: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


330-330: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


331-331: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


332-332: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


333-333: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


334-334: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


335-335: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


336-336: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


337-337: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


338-338: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


339-339: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)

java-client/docs/AccessKeyManagementApi.md

3-3: Bare URL used

(MD034, no-bare-urls)


22-22: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


79-79: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


80-80: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


83-83: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


95-95: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


153-153: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


154-154: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


157-157: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


169-169: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


225-225: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


226-226: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


229-229: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


241-241: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


299-299: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


300-300: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


303-303: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)


315-315: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)


370-370: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


371-371: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


374-374: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)

🪛 Ruff (0.14.8)
python/apollo_openapi/apis/tags/access_key_management_api.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)

python/apollo_openapi/model/open_namespace_role_user_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


58-58: Undefined name modifyRoleUsers

(F821)


84-84: Undefined name releaseRoleUsers

(F821)

python/apollo_openapi/model/open_app_role_user_dto.py

57-57: Undefined name masterUsers

(F821)

python/apollo_openapi/model/open_release_change_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)

python/apollo_openapi/model/open_cluster_namespace_role_user_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


59-59: Undefined name modifyRoleUsers

(F821)


85-85: Undefined name releaseRoleUsers

(F821)

python/apollo_openapi/model/open_release_diff_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


56-56: Undefined name changes

(F821)

python/apollo_openapi/model/open_env_namespace_role_user_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


58-58: Undefined name modifyRoleUsers

(F821)


84-84: Undefined name releaseRoleUsers

(F821)

python/apollo_openapi/model/open_access_key_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)

python/apollo_openapi/apis/tags/permission_management_api.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)

python/apollo_openapi/model/open_user_info_dto.py

6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COLON). Did you mean : (COLON)?

(RUF002)


6-6: Docstring contains ambiguous (FULLWIDTH COMMA). Did you mean , (COMMA)?

(RUF002)


12-12: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


13-13: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


14-14: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


15-15: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


16-16: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


17-17: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


18-18: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


19-19: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


21-21: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)


23-23: Unused noqa directive (non-enabled: F401)

Remove unused noqa directive

(RUF100)

Copy link

@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: 9

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
python/apollo_openapi/paths/openapi_v1_apps_app_id/delete.pyi (1)

14-16: Stub correctness: path and _auth are referenced but not defined/imported

In this .pyi, used_path = path.value (Line 193) and auth_settings=_auth (Line 231) have no corresponding from . import path / _auth = [...] like the paired delete.py—this can break type checking and makes the stub internally inconsistent.

@@
 from apollo_openapi import schemas  # noqa: F401
 
 from apollo_openapi.model.exception_response import ExceptionResponse
+
+from . import path
+
+_auth = [
+    'ApiKeyAuth',
+]

Also applies to: 190-194, 226-234

java-client/api/openapi.yaml (2)

25-50: Add missing AccessKey Management tag entry (tag used later but not declared).
Paths reference tags: [AccessKey Management], but the top-level tags: list (Line 25+) doesn’t include it, which degrades rendered docs and some tooling.

 tags:
@@
 - description: 权限管理相关接口,包括权限查询等功能
   name: Permission Management
+- description: AccessKey 管理相关接口,包括创建、查询、启用/禁用、删除等功能
+  name: AccessKey Management

2298-2319: Align releaseId types across all endpoints to use format: int64.
The rollback and getByRelease endpoints both define releaseId as integer with format: int64, but getReleaseById omits the format specifier. Add format: int64 to ensure consistent SDK signatures.

   /openapi/v1/envs/{env}/releases/{releaseId}:
     get:
       deprecated: false
       description: "GET /openapi/v1/envs/{env}/releases/{releaseId}"
       operationId: getReleaseById
       parameters:
       - description: 环境标识
         explode: false
         in: path
         name: env
         required: true
         schema:
           type: string
         style: simple
       - description: 发布ID
         explode: false
         in: path
         name: releaseId
         required: true
         schema:
           type: integer
+          format: int64
         style: simple
♻️ Duplicate comments (20)
python/README.md (1)

187-187: Resolve the syntax error in the API call (unresolved from previous review).

This is the same syntax error flagged in the prior review. The method parameters are squashed together without proper separation. The call should pass app_id and env as positional arguments (or named), followed by the optional operator keyword argument.

Apply this diff to fix the syntax error:

-        api_response = api_instance.create_access_key(app_idenvoperator=operator)
+        api_response = api_instance.create_access_key(app_id, env, operator=operator)
java-client/src/main/java/org/openapitools/client/model/OpenPermissionConditionDTO.java (1)

140-154: NPE in validateJsonObject when jsonObj is null still present.

The previous review comment was marked as addressed, but the fix appears incomplete. When jsonObj is null and openapiRequiredFields is empty, execution falls through to line 147 where jsonObj.entrySet() will throw a NullPointerException.

Add an early return after the null check:

      if (jsonObj == null) {
        if (!OpenPermissionConditionDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
          throw new IllegalArgumentException(String.format("The required field(s) %s in OpenPermissionConditionDTO is not found in the empty JSON string", OpenPermissionConditionDTO.openapiRequiredFields.toString()));
        }
+       return;
      }
java-client/src/main/java/org/openapitools/client/model/OpenUserInfoDTO.java (2)

224-247: NPE in validateJsonObject when jsonObj is null.

Same issue as in OpenPermissionConditionDTO: when jsonObj is null and openapiRequiredFields is empty, execution continues to line 231 where jsonObj.entrySet() throws NPE.

  public static void validateJsonObject(JsonObject jsonObj) throws IOException {
      if (jsonObj == null) {
        if (!OpenUserInfoDTO.openapiRequiredFields.isEmpty()) {
          throw new IllegalArgumentException(String.format("The required field(s) %s in OpenUserInfoDTO is not found in the empty JSON string", OpenUserInfoDTO.openapiRequiredFields.toString()));
        }
+       return;
      }

179-189: PII exposure risk: email field included in toString() output.

The email field contains personally identifiable information. If OpenUserInfoDTO objects are logged, the email address will be exposed in logs, potentially violating privacy requirements (GDPR/CCPA).

Consider redacting the email in toString():

     sb.append("    userId: ").append(toIndentedString(userId)).append("\n");
     sb.append("    name: ").append(toIndentedString(name)).append("\n");
-    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    email: ").append(email != null ? "<redacted>" : "null").append("\n");
     sb.append("    enabled: ").append(toIndentedString(enabled)).append("\n");
apollo-openapi.yaml (1)

5591-5601: Remove empty description: keys from array item references (still present).
This matches the earlier review note; leaving these in can break some OpenAPI parsers/generators.

 modifyRoleUsers:
   type: array
   items:
     $ref: '#/components/schemas/OpenUserInfoDTO'
-    description:
   description: ''
 releaseRoleUsers:
   type: array
   items:
     $ref: '#/components/schemas/OpenUserInfoDTO'
-    description:
   description: ''

Also applies to: 5618-5628, 5639-5649, 5657-5661

java-client/src/main/java/org/openapitools/client/model/OpenAccessKeyDTO.java (2)

361-378: Do not include secret in toString() (sensitive data leak).

-    sb.append("    secret: ").append(toIndentedString(secret)).append("\n");
+    sb.append("    secret: ").append(toIndentedString(secret == null ? null : "[REDACTED]")).append("\n");

420-458: validateJsonObject(null) can NPE; return early when jsonObj == null.

   public static void validateJsonObject(JsonObject jsonObj) throws IOException {
       if (jsonObj == null) {
         if (!OpenAccessKeyDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
           throw new IllegalArgumentException(String.format("The required field(s) %s in OpenAccessKeyDTO is not found in the empty JSON string", OpenAccessKeyDTO.openapiRequiredFields.toString()));
         }
+        return;
       }
 
       Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
java-client/docs/AccessKeyManagementApi.md (1)

1-376: Markdown formatting issues already flagged in previous review.

The bare URL and other markdown lint violations (heading increment, list indentation, table spacing) have already been identified in a previous review. These are artifacts of the OpenAPI generator templates and should be addressed by regenerating with updated configuration.

python/apollo_openapi/model/open_env_namespace_role_user_dto.py (1)

43-67: Fix forward-ref return annotations to avoid Ruff F821 (likely CI-failing)

Ruff flags the nested __new__ return annotations ('modifyRoleUsers', 'releaseRoleUsers') as undefined names. Quick local mitigation:

-                ) -> 'modifyRoleUsers':
+                ) -> 'modifyRoleUsers':  # type: ignore[name-defined]
@@
-                ) -> 'releaseRoleUsers':
+                ) -> 'releaseRoleUsers':  # type: ignore[name-defined]

Longer-term, it’s better to update the OpenAPI generator templates so all nested schema classes use a pattern that type-checkers accept.

Also applies to: 69-93

python/apollo_openapi/model/open_cluster_namespace_role_user_dto.py (1)

55-93: Forward reference typing issue already flagged in past reviews.

The F821 errors for 'modifyRoleUsers' and 'releaseRoleUsers' on lines 59 and 85 were previously identified and marked as addressed in commit f756aad. If these errors persist, ensure the fix (either per-file Ruff ignore or # noqa: F821 comments) is correctly applied.

java-client/src/main/java/org/openapitools/client/model/OpenAppRoleUserDTO.java (2)

179-210: NPE in validateJsonObject already flagged in past reviews.

The issue where jsonObj.entrySet() is called at line 186 after a null check without an early return was previously identified. Ensure the fix (adding return; after line 184) is applied.


138-146: PII exposure in toString() already flagged in past reviews.

The masterUsers list contains OpenUserInfoDTO objects with email fields that will be exposed in logs if this DTO's toString() is called. This issue was previously identified and should be addressed by either redacting sensitive fields or documenting the risk.

java-client/src/main/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTO.java (2)

271-322: NPE in validateJsonObject already flagged in past reviews.

The issue where jsonObj.entrySet() is called at line 278 after a null check without an early return was previously identified. Apply the fix by adding return; after line 276.


224-235: PII exposure in toString() already flagged in past reviews.

The modifyRoleUsers and releaseRoleUsers lists contain OpenUserInfoDTO objects with email fields that will be exposed if this DTO is logged. This issue was previously identified.

java-client/src/main/java/org/openapitools/client/model/OpenClusterNamespaceRoleUserDTO.java (2)

271-284: Prevent NPE when jsonObj == null (return early).
Currently, jsonObj == null falls through and dereferences jsonObj.entrySet().

 public static void validateJsonObject(JsonObject jsonObj) throws IOException {
       if (jsonObj == null) {
         if (!OpenClusterNamespaceRoleUserDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
           throw new IllegalArgumentException(String.format("The required field(s) %s in OpenClusterNamespaceRoleUserDTO is not found in the empty JSON string", OpenClusterNamespaceRoleUserDTO.openapiRequiredFields.toString()));
         }
+        return;
       }
 
       Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();

294-321: Fix array validation order (getAsJsonArray() can throw before isJsonArray()).
Call isJsonArray() on the element before getAsJsonArray(...) so your error message is reliable.

-      if (jsonObj.get("modifyRoleUsers") != null && !jsonObj.get("modifyRoleUsers").isJsonNull()) {
-        JsonArray jsonArraymodifyRoleUsers = jsonObj.getAsJsonArray("modifyRoleUsers");
-        if (jsonArraymodifyRoleUsers != null) {
-          // ensure the json data is an array
-          if (!jsonObj.get("modifyRoleUsers").isJsonArray()) {
-            throw new IllegalArgumentException(String.format("Expected the field `modifyRoleUsers` to be an array in the JSON string but got `%s`", jsonObj.get("modifyRoleUsers").toString()));
-          }
-
-          // validate the optional field `modifyRoleUsers` (array)
-          for (int i = 0; i < jsonArraymodifyRoleUsers.size(); i++) {
-            OpenUserInfoDTO.validateJsonObject(jsonArraymodifyRoleUsers.get(i).getAsJsonObject());
-          };
-        }
-      }
+      JsonElement modifyRoleUsersElem = jsonObj.get("modifyRoleUsers");
+      if (modifyRoleUsersElem != null && !modifyRoleUsersElem.isJsonNull()) {
+        if (!modifyRoleUsersElem.isJsonArray()) {
+          throw new IllegalArgumentException(String.format("Expected the field `modifyRoleUsers` to be an array in the JSON string but got `%s`", modifyRoleUsersElem.toString()));
+        }
+        JsonArray jsonArraymodifyRoleUsers = modifyRoleUsersElem.getAsJsonArray();
+        for (int i = 0; i < jsonArraymodifyRoleUsers.size(); i++) {
+          OpenUserInfoDTO.validateJsonObject(jsonArraymodifyRoleUsers.get(i).getAsJsonObject());
+        }
+      }

(Apply the same pattern to releaseRoleUsers.)

python/apollo_openapi/model/open_user_info_dto.py (1)

3-23: Ruff noise in generated models: exclude generated dir or adjust templates.
This file triggers RUF002 (ambiguous fullwidth punctuation in docstring) and RUF100 (unused # noqa: F401).

-    <p>Apollo配置中心OpenAPI接口文档</p>  <h2>认证方式</h2> <p>所有 API 接口都需要通过 <code>Authorization</code> header 进行身份验证。</p>  <h3>获取 Token 的方式:</h3> <ol>   <li><b>Portal 管理界面获取</b>:登录 Portal → 管理员工具 → 开放平台授权管理 → 创建第三方应用,获取 Token。</li>   <li><b>Token 格式</b>:<code>Authorization: token_value</code></li>   <li><b>Token 权限</b>:按应用/环境/命名空间授予,建议不同用途分别创建。</li> </ol>  <h3>使用示例</h3> <pre><code class=\"language-bash\">curl -X GET \"http://localhost:8070/openapi/v1/apps\" \\ -H \"Authorization: your_token_here\"</code></pre>   # noqa: E501
+    <p>Apollo配置中心OpenAPI接口文档</p>  <h2>认证方式</h2> <p>所有 API 接口都需要通过 <code>Authorization</code> header 进行身份验证。</p>  <h3>获取 Token 的方式:</h3> <ol>   <li><b>Portal 管理界面获取</b>: 登录 Portal → 管理员工具 → 开放平台授权管理 → 创建第三方应用,获取 Token。</li>   <li><b>Token 格式</b>: <code>Authorization: token_value</code></li>   <li><b>Token 权限</b>: 按应用/环境/命名空间授予,建议不同用途分别创建。</li> </ol>  <h3>使用示例</h3> <pre><code class=\"language-bash\">curl -X GET \"http://localhost:8070/openapi/v1/apps\" \\ -H \"Authorization: your_token_here\"</code></pre>   # noqa: E501

Better option: exclude python/apollo_openapi/model/** in Ruff config (since it’s generated).

java-client/src/main/java/org/openapitools/client/api/AccessKeyManagementApi.java (3)

264-266: Empty Accept header for void-returning method remains.

The localVarAccepts array is still empty. For consistency and proper error response handling, it should include "application/json".


405-407: Empty Accept header for void-returning method remains.

The localVarAccepts array is still empty. For consistency and proper error response handling, it should include "application/json".


548-550: Empty Accept header for void-returning method remains.

The localVarAccepts array is still empty. For consistency and proper error response handling, it should include "application/json".

🧹 Nitpick comments (19)
java-client/src/main/java/org/openapitools/client/api/InstanceManagementApi.java (1)

441-442: Consider also rejecting blank/empty releaseIds, not just null. As-is, "" (or " ") passes validation but likely produces a bad request (or confusing “exclude nothing” semantics). If the API contract requires at least one id, validate releaseIds.trim().isEmpty() and throw ApiException, ideally via the generator template / OpenAPI constraints (e.g., minLength: 1).

Also applies to: 489-491, 534-537, 550-551, 571-572, 593-594

python/apollo_openapi/model/open_access_key_dto.py (2)

3-10: Ruff RUF002: generated docstring uses “ambiguous” fullwidth punctuation; decide whether to ignore for generated files.
If Ruff is enforced in CI, you’ll likely want to exclude/ignore generated code (or at least RUF002) rather than hand-editing the generator output.


12-23: Ruff RUF100: # noqa: F401 directives are unused (F401 not enabled) — remove at the generator/template level or ignore for generated files.
Right now these directives add noise and still fail lint.

apollo-openapi.yaml (1)

47-48: Declare AccessKey Management in tags: (endpoints use it but it’s missing).
OpenAPI allows undeclared tags, but declaring improves generated docs/navigation consistency.

java-client/src/main/java/org/openapitools/client/model/OpenAccessKeyDTO.java (1)

334-359: Consider excluding secret from equals() / hashCode() to reduce accidental exposure and surprising semantics.
Not strictly required for correctness, but it’s usually the safer default for credential-like fields.

java-client/docs/OpenNamespaceRoleUserDTO.md (1)

8-13: Consider adding field descriptions for better API clarity.

While the auto-generated documentation structure is correct, the empty "Description" column makes it harder for API consumers to understand the purpose of each field. Consider enhancing the OpenAPI spec with field descriptions to improve the generated documentation.

java-client/docs/OpenClusterNamespaceRoleUserDTO.md (1)

8-14: Consider adding field descriptions for better API clarity.

The documentation follows the correct structure but lacks descriptions for each field. Adding descriptions in the OpenAPI spec would help API consumers understand the purpose and usage of appId, env, cluster, modifyRoleUsers, and releaseRoleUsers.

java-client/src/test/java/org/openapitools/client/model/OpenReleaseChangeDTOTest.java (1)

29-71: Consider implementing the test placeholders.

All test methods contain TODO placeholders without actual assertions or validation logic. While this generated scaffolding provides a starting point, the tests currently don't verify any behavior of the OpenReleaseChangeDTO model.

Consider implementing assertions for:

  • Constructor behavior and field initialization
  • Getter/setter validation for changeType, key, newValue, oldValue
  • JSON serialization/deserialization via Gson adapters
  • Null/edge case handling
java-client/docs/PermissionManagementApi.md (1)

1-1933: Markdown formatting issues from generated documentation.

The static analysis reports multiple markdown lint violations (bare URL, heading increments, list indentation, table spacing). These are artifacts of the OpenAPI generator templates and can be addressed optionally by updating the generator configuration or post-processing the output.

java-client/src/test/java/org/openapitools/client/model/OpenReleaseDiffDTOTest.java (1)

32-50: Consider implementing the test placeholders.

The test methods contain TODO placeholders without actual validation. While this scaffolding provides a starting point, the tests don't currently verify the behavior of OpenReleaseDiffDTO.

Consider adding assertions to validate:

  • The changes property (List) handling
  • JSON serialization/deserialization
  • Null and empty list edge cases
  • Integration with the OpenReleaseChangeDTO model
java-client/src/test/java/org/openapitools/client/model/OpenAppRoleUserDTOTest.java (1)

35-57: Auto-generated test stubs lack actual test implementations.

All test methods contain only TODO placeholders. While this is expected from OpenAPI Generator, consider implementing actual assertions to validate the model's getter/setter behavior and serialization/deserialization if this DTO is critical to the permission management feature.

Would you like me to help generate actual test implementations for these property tests?

python/apollo_openapi/model/open_access_key_dto.pyi (1)

49-49: Inconsistent enabled field typing across DTOs.

In OpenAccessKeyDTO, enabled is typed as BoolSchema, but in OpenUserInfoDTO, the enabled field uses IntSchema. If both represent the same concept (enabled/disabled state), consider aligning the OpenAPI spec definitions for consistency across the generated clients.

#!/bin/bash
# Check for enabled field type consistency across Python model files
rg -n "enabled\s*=\s*schemas\." --type=py
java-client/.openapi-generator/FILES (1)

9-11: Docs/API surface naming: ensure AppManagementApi vs AccessKeyManagementApi story is consistent

docs/AccessKeyManagementApi.md is added while docs/AppManagementApi.md still exists; if this was a rename/deprecation, consider adding an explicit deprecation note / redirect in the old doc to avoid ambiguous public surface.

Also applies to: 60-61, 84-86

java-client/src/test/java/org/openapitools/client/model/OpenPermissionConditionDTOTest.java (1)

22-46: Generated TODO tests: either disable them or add minimal assertions

Right now these tests do nothing (and Disabled is imported but not used). Consider adding @Disabled at class level (like other generated API tests) or adding a minimal getter/setter / JSON roundtrip assertion.

python/apollo_openapi/apis/tags/permission_management_api.py (1)

3-37: Ruff RUF002 on generated docstring: prefer excluding/ignoring generated code vs editing content

Given this is OpenAPI-generator output, consider a file-level # ruff: noqa (or ruff exclude/per-file-ignores for apollo_openapi/**) so CI isn’t brittle to docstring punctuation.

python/apollo_openapi/model/open_env_namespace_role_user_dto.py (1)

1-24: Generated-file lint noise (RUF002/RUF100): consider per-file ignores / excluding generated models from Ruff

Ruff is also reporting docstring punctuation and “unused noqa” directives; excluding apollo_openapi/model/** from Ruff (or adding # ruff: noqa to generated modules) will keep CI stable without hand-editing generated output.

java-client/README.md (1)

244-280: Optional: Fix markdown list indentation for linter compliance.

The markdown linter flags unordered list items with 1-space indentation instead of the expected 0-space indentation. While this doesn't affect functionality, fixing it would eliminate linter warnings.

If you regenerate documentation, consider adjusting the OpenAPI generator template to produce lists with 0-space indentation:

- - [OpenAccessKeyDTO](docs/OpenAccessKeyDTO.md)
+ - [OpenAccessKeyDTO](docs/OpenAccessKeyDTO.md)

(Remove the leading space before the dash on lines 244-280)

java-client/src/test/java/org/openapitools/client/api/PermissionManagementApiTest.java (1)

33-463: Guard against accidental enablement: null-arg calls will explode if @Disabled is removed.
Since these are generated stubs, consider either (a) adding a reason in @Disabled("..."), or (b) removing the actual API invocations and leaving TODOs, so enabling doesn’t immediately NPE/400.

java-client/docs/ReleaseManagementApi.md (1)

560-625: rollback “Accept: Not defined” may surprise client users—confirm generator behavior.
If the endpoint still returns JSON error bodies (common), leaving Accept undefined can be confusing in generated clients. Consider documenting Accept as application/json (or explain why it must be unset).

Comment on lines +3968 to +3970
$ref: '#/components/schemas/OpenEnvNamespaceRoleUserDTO'
description:
example:
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Invalid/fragile schema: $ref siblings (description next to $ref) — remove or rewrite via allOf.
$ref with siblings is commonly ignored or rejected by tooling; empty description: is especially problematic. Consider either removing the sibling description or using:

items:
  allOf:
    - $ref: '#/components/schemas/OpenAccessKeyDTO'
  description: ...

Also applies to: 4112-4114, 4250-4252, 4369-4371, 4705-4709

🤖 Prompt for AI Agents
In apollo-openapi.yaml around lines 3968-3970 the schema uses a $ref with a
sibling empty description which is invalid/fragile; update the schema to remove
the sibling or rewrite using allOf so the $ref is the sole entry and the
description is attached to an allOf entry. Replace the current block so that
items (or the schema block) use allOf with the $ref as the first element and put
the description as a separate element under allOf; apply the same fix at the
other reported locations (4112-4114, 4250-4252, 4369-4371, 4705-4709).

Comment on lines 80 to 89
### HTTP request headers

- **Content-Type**: application/json
- **Content-Type**: Not defined
- **Accept**: application/json

### HTTP response details
| Status code | Description | Response headers |
|-------------|-------------|------------------|
| **200** | | - |
| **200** | Successful comparison | - |

Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix markdownlint nits (indentation + blank lines around tables) to keep docs clean.
Not blocking, but will keep CI green if markdownlint runs on docs.

Also applies to: 86-89, 323-327, 624-624

🧰 Tools
🪛 markdownlint-cli2 (0.18.1)

82-82: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


83-83: Unordered list indentation
Expected: 0; Actual: 1

(MD007, ul-indent)


86-86: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)

🤖 Prompt for AI Agents
In java-client/docs/ReleaseManagementApi.md around lines 80-89 (and similarly at
86-89, 323-327, 624-624), the markdown has linting nits: table blocks need a
blank line before and after them and surrounding list/heading indentation should
be consistent. Edit the file to ensure there is one blank line above and below
each table, adjust the list indentation so list items are flush with the heading
(no extra leading spaces), and run markdownlint to verify no remaining errors.

Comment on lines +243 to +256
public static void validateJsonObject(JsonObject jsonObj) throws IOException {
if (jsonObj == null) {
if (!OpenNamespaceRoleUserDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
throw new IllegalArgumentException(String.format("The required field(s) %s in OpenNamespaceRoleUserDTO is not found in the empty JSON string", OpenNamespaceRoleUserDTO.openapiRequiredFields.toString()));
}
}

Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
// check to see if the JSON string contains additional fields
for (Entry<String, JsonElement> entry : entries) {
if (!OpenNamespaceRoleUserDTO.openapiFields.contains(entry.getKey())) {
throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `OpenNamespaceRoleUserDTO` properties. JSON: %s", entry.getKey(), jsonObj.toString()));
}
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Prevent NPE when jsonObj == null (return early).
Same pattern: jsonObj == null falls through to jsonObj.entrySet().

 public static void validateJsonObject(JsonObject jsonObj) throws IOException {
       if (jsonObj == null) {
         if (!OpenNamespaceRoleUserDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
           throw new IllegalArgumentException(String.format("The required field(s) %s in OpenNamespaceRoleUserDTO is not found in the empty JSON string", OpenNamespaceRoleUserDTO.openapiRequiredFields.toString()));
         }
+        return;
       }
 
       Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
public static void validateJsonObject(JsonObject jsonObj) throws IOException {
if (jsonObj == null) {
if (!OpenNamespaceRoleUserDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
throw new IllegalArgumentException(String.format("The required field(s) %s in OpenNamespaceRoleUserDTO is not found in the empty JSON string", OpenNamespaceRoleUserDTO.openapiRequiredFields.toString()));
}
}
Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
// check to see if the JSON string contains additional fields
for (Entry<String, JsonElement> entry : entries) {
if (!OpenNamespaceRoleUserDTO.openapiFields.contains(entry.getKey())) {
throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `OpenNamespaceRoleUserDTO` properties. JSON: %s", entry.getKey(), jsonObj.toString()));
}
}
public static void validateJsonObject(JsonObject jsonObj) throws IOException {
if (jsonObj == null) {
if (!OpenNamespaceRoleUserDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
throw new IllegalArgumentException(String.format("The required field(s) %s in OpenNamespaceRoleUserDTO is not found in the empty JSON string", OpenNamespaceRoleUserDTO.openapiRequiredFields.toString()));
}
return;
}
Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
// check to see if the JSON string contains additional fields
for (Entry<String, JsonElement> entry : entries) {
if (!OpenNamespaceRoleUserDTO.openapiFields.contains(entry.getKey())) {
throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `OpenNamespaceRoleUserDTO` properties. JSON: %s", entry.getKey(), jsonObj.toString()));
}
}
🤖 Prompt for AI Agents
In
java-client/src/main/java/org/openapitools/client/model/OpenNamespaceRoleUserDTO.java
around lines 243 to 256, the method validateJsonObject calls jsonObj.entrySet()
even when jsonObj is null; change the null-handling branch so that if jsonObj ==
null and openapiRequiredFields is empty you return immediately (no further
processing), and if required fields exist you still throw the
IllegalArgumentException as currently done; ensure the rest of the method
executes only when jsonObj is non-null to prevent the NPE.

Comment on lines +263 to +290
if (jsonObj.get("modifyRoleUsers") != null && !jsonObj.get("modifyRoleUsers").isJsonNull()) {
JsonArray jsonArraymodifyRoleUsers = jsonObj.getAsJsonArray("modifyRoleUsers");
if (jsonArraymodifyRoleUsers != null) {
// ensure the json data is an array
if (!jsonObj.get("modifyRoleUsers").isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `modifyRoleUsers` to be an array in the JSON string but got `%s`", jsonObj.get("modifyRoleUsers").toString()));
}

// validate the optional field `modifyRoleUsers` (array)
for (int i = 0; i < jsonArraymodifyRoleUsers.size(); i++) {
OpenUserInfoDTO.validateJsonObject(jsonArraymodifyRoleUsers.get(i).getAsJsonObject());
};
}
}
if (jsonObj.get("releaseRoleUsers") != null && !jsonObj.get("releaseRoleUsers").isJsonNull()) {
JsonArray jsonArrayreleaseRoleUsers = jsonObj.getAsJsonArray("releaseRoleUsers");
if (jsonArrayreleaseRoleUsers != null) {
// ensure the json data is an array
if (!jsonObj.get("releaseRoleUsers").isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `releaseRoleUsers` to be an array in the JSON string but got `%s`", jsonObj.get("releaseRoleUsers").toString()));
}

// validate the optional field `releaseRoleUsers` (array)
for (int i = 0; i < jsonArrayreleaseRoleUsers.size(); i++) {
OpenUserInfoDTO.validateJsonObject(jsonArrayreleaseRoleUsers.get(i).getAsJsonObject());
};
}
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Fix array validation order (getAsJsonArray() before isJsonArray()).
jsonObj.getAsJsonArray("modifyRoleUsers") / getAsJsonArray("releaseRoleUsers") can throw before your check.

-      if (jsonObj.get("modifyRoleUsers") != null && !jsonObj.get("modifyRoleUsers").isJsonNull()) {
-        JsonArray jsonArraymodifyRoleUsers = jsonObj.getAsJsonArray("modifyRoleUsers");
-        if (jsonArraymodifyRoleUsers != null) {
-          // ensure the json data is an array
-          if (!jsonObj.get("modifyRoleUsers").isJsonArray()) {
-            throw new IllegalArgumentException(String.format("Expected the field `modifyRoleUsers` to be an array in the JSON string but got `%s`", jsonObj.get("modifyRoleUsers").toString()));
-          }
-          for (int i = 0; i < jsonArraymodifyRoleUsers.size(); i++) {
-            OpenUserInfoDTO.validateJsonObject(jsonArraymodifyRoleUsers.get(i).getAsJsonObject());
-          };
-        }
-      }
+      JsonElement modifyRoleUsersElem = jsonObj.get("modifyRoleUsers");
+      if (modifyRoleUsersElem != null && !modifyRoleUsersElem.isJsonNull()) {
+        if (!modifyRoleUsersElem.isJsonArray()) {
+          throw new IllegalArgumentException(String.format("Expected the field `modifyRoleUsers` to be an array in the JSON string but got `%s`", modifyRoleUsersElem.toString()));
+        }
+        JsonArray jsonArraymodifyRoleUsers = modifyRoleUsersElem.getAsJsonArray();
+        for (int i = 0; i < jsonArraymodifyRoleUsers.size(); i++) {
+          OpenUserInfoDTO.validateJsonObject(jsonArraymodifyRoleUsers.get(i).getAsJsonObject());
+        }
+      }

(Repeat for releaseRoleUsers.)

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (jsonObj.get("modifyRoleUsers") != null && !jsonObj.get("modifyRoleUsers").isJsonNull()) {
JsonArray jsonArraymodifyRoleUsers = jsonObj.getAsJsonArray("modifyRoleUsers");
if (jsonArraymodifyRoleUsers != null) {
// ensure the json data is an array
if (!jsonObj.get("modifyRoleUsers").isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `modifyRoleUsers` to be an array in the JSON string but got `%s`", jsonObj.get("modifyRoleUsers").toString()));
}
// validate the optional field `modifyRoleUsers` (array)
for (int i = 0; i < jsonArraymodifyRoleUsers.size(); i++) {
OpenUserInfoDTO.validateJsonObject(jsonArraymodifyRoleUsers.get(i).getAsJsonObject());
};
}
}
if (jsonObj.get("releaseRoleUsers") != null && !jsonObj.get("releaseRoleUsers").isJsonNull()) {
JsonArray jsonArrayreleaseRoleUsers = jsonObj.getAsJsonArray("releaseRoleUsers");
if (jsonArrayreleaseRoleUsers != null) {
// ensure the json data is an array
if (!jsonObj.get("releaseRoleUsers").isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `releaseRoleUsers` to be an array in the JSON string but got `%s`", jsonObj.get("releaseRoleUsers").toString()));
}
// validate the optional field `releaseRoleUsers` (array)
for (int i = 0; i < jsonArrayreleaseRoleUsers.size(); i++) {
OpenUserInfoDTO.validateJsonObject(jsonArrayreleaseRoleUsers.get(i).getAsJsonObject());
};
}
}
JsonElement modifyRoleUsersElem = jsonObj.get("modifyRoleUsers");
if (modifyRoleUsersElem != null && !modifyRoleUsersElem.isJsonNull()) {
if (!modifyRoleUsersElem.isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `modifyRoleUsers` to be an array in the JSON string but got `%s`", modifyRoleUsersElem.toString()));
}
JsonArray jsonArraymodifyRoleUsers = modifyRoleUsersElem.getAsJsonArray();
for (int i = 0; i < jsonArraymodifyRoleUsers.size(); i++) {
OpenUserInfoDTO.validateJsonObject(jsonArraymodifyRoleUsers.get(i).getAsJsonObject());
}
}
if (jsonObj.get("releaseRoleUsers") != null && !jsonObj.get("releaseRoleUsers").isJsonNull()) {
JsonArray jsonArrayreleaseRoleUsers = jsonObj.getAsJsonArray("releaseRoleUsers");
if (jsonArrayreleaseRoleUsers != null) {
// ensure the json data is an array
if (!jsonObj.get("releaseRoleUsers").isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `releaseRoleUsers` to be an array in the JSON string but got `%s`", jsonObj.get("releaseRoleUsers").toString()));
}
// validate the optional field `releaseRoleUsers` (array)
for (int i = 0; i < jsonArrayreleaseRoleUsers.size(); i++) {
OpenUserInfoDTO.validateJsonObject(jsonArrayreleaseRoleUsers.get(i).getAsJsonObject());
};
}
}
🤖 Prompt for AI Agents
In
java-client/src/main/java/org/openapitools/client/model/OpenNamespaceRoleUserDTO.java
around lines 263 to 290, the code calls getAsJsonArray(...) before verifying the
element is an array which can throw; change the order so you first check
jsonObj.get("modifyRoleUsers") != null &&
!jsonObj.get("modifyRoleUsers").isJsonNull() &&
jsonObj.get("modifyRoleUsers").isJsonArray(), and only then call
jsonObj.getAsJsonArray("modifyRoleUsers") (repeat the same fix for
releaseRoleUsers), so the isJsonArray() guard prevents getAsJsonArray() from
being invoked on non-array values.

Comment on lines +224 to +250
public static void validateJsonObject(JsonObject jsonObj) throws IOException {
if (jsonObj == null) {
if (!OpenReleaseChangeDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
throw new IllegalArgumentException(String.format("The required field(s) %s in OpenReleaseChangeDTO is not found in the empty JSON string", OpenReleaseChangeDTO.openapiRequiredFields.toString()));
}
}

Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
// check to see if the JSON string contains additional fields
for (Entry<String, JsonElement> entry : entries) {
if (!OpenReleaseChangeDTO.openapiFields.contains(entry.getKey())) {
throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `OpenReleaseChangeDTO` properties. JSON: %s", entry.getKey(), jsonObj.toString()));
}
}
if ((jsonObj.get("changeType") != null && !jsonObj.get("changeType").isJsonNull()) && !jsonObj.get("changeType").isJsonPrimitive()) {
throw new IllegalArgumentException(String.format("Expected the field `changeType` to be a primitive type in the JSON string but got `%s`", jsonObj.get("changeType").toString()));
}
if ((jsonObj.get("key") != null && !jsonObj.get("key").isJsonNull()) && !jsonObj.get("key").isJsonPrimitive()) {
throw new IllegalArgumentException(String.format("Expected the field `key` to be a primitive type in the JSON string but got `%s`", jsonObj.get("key").toString()));
}
if ((jsonObj.get("newValue") != null && !jsonObj.get("newValue").isJsonNull()) && !jsonObj.get("newValue").isJsonPrimitive()) {
throw new IllegalArgumentException(String.format("Expected the field `newValue` to be a primitive type in the JSON string but got `%s`", jsonObj.get("newValue").toString()));
}
if ((jsonObj.get("oldValue") != null && !jsonObj.get("oldValue").isJsonNull()) && !jsonObj.get("oldValue").isJsonPrimitive()) {
throw new IllegalArgumentException(String.format("Expected the field `oldValue` to be a primitive type in the JSON string but got `%s`", jsonObj.get("oldValue").toString()));
}
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Fix NPE in validateJsonObject when jsonObj is null.

The method checks if jsonObj is null but doesn't return early when no required fields exist. Line 231 will call jsonObj.entrySet(), causing a NullPointerException.

Apply this diff to add an early return:

 public static void validateJsonObject(JsonObject jsonObj) throws IOException {
     if (jsonObj == null) {
       if (!OpenReleaseChangeDTO.openapiRequiredFields.isEmpty()) {
         throw new IllegalArgumentException(String.format("The required field(s) %s in OpenReleaseChangeDTO is not found in the empty JSON string", OpenReleaseChangeDTO.openapiRequiredFields.toString()));
       }
+      return;
     }

     Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
🤖 Prompt for AI Agents
In
java-client/src/main/java/org/openapitools/client/model/OpenReleaseChangeDTO.java
around lines 224 to 250, the method validateJsonObject checks if jsonObj == null
but does not return when there are no required fields, so jsonObj.entrySet() at
line ~231 triggers an NPE; fix by adding an early return immediately after the
null check when OpenReleaseChangeDTO.openapiRequiredFields.isEmpty() (i.e., if
jsonObj == null and there are no required fields then return from the method),
so the subsequent code that dereferences jsonObj is skipped.

Comment on lines 151 to 164
public static void validateJsonObject(JsonObject jsonObj) throws IOException {
if (jsonObj == null) {
if (!OpenReleaseBO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
throw new IllegalArgumentException(String.format("The required field(s) %s in OpenReleaseBO is not found in the empty JSON string", OpenReleaseBO.openapiRequiredFields.toString()));
if (!OpenReleaseDiffDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
throw new IllegalArgumentException(String.format("The required field(s) %s in OpenReleaseDiffDTO is not found in the empty JSON string", OpenReleaseDiffDTO.openapiRequiredFields.toString()));
}
}

Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
// check to see if the JSON string contains additional fields
for (Entry<String, JsonElement> entry : entries) {
if (!OpenReleaseBO.openapiFields.contains(entry.getKey())) {
throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `OpenReleaseBO` properties. JSON: %s", entry.getKey(), jsonObj.toString()));
if (!OpenReleaseDiffDTO.openapiFields.contains(entry.getKey())) {
throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `OpenReleaseDiffDTO` properties. JSON: %s", entry.getKey(), jsonObj.toString()));
}
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Prevent NPE when jsonObj == null (return early).
Same fallthrough-to-entrySet() issue.

 public static void validateJsonObject(JsonObject jsonObj) throws IOException {
       if (jsonObj == null) {
         if (!OpenReleaseDiffDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
           throw new IllegalArgumentException(String.format("The required field(s) %s in OpenReleaseDiffDTO is not found in the empty JSON string", OpenReleaseDiffDTO.openapiRequiredFields.toString()));
         }
+        return;
       }
 
       Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
public static void validateJsonObject(JsonObject jsonObj) throws IOException {
if (jsonObj == null) {
if (!OpenReleaseBO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
throw new IllegalArgumentException(String.format("The required field(s) %s in OpenReleaseBO is not found in the empty JSON string", OpenReleaseBO.openapiRequiredFields.toString()));
if (!OpenReleaseDiffDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
throw new IllegalArgumentException(String.format("The required field(s) %s in OpenReleaseDiffDTO is not found in the empty JSON string", OpenReleaseDiffDTO.openapiRequiredFields.toString()));
}
}
Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
// check to see if the JSON string contains additional fields
for (Entry<String, JsonElement> entry : entries) {
if (!OpenReleaseBO.openapiFields.contains(entry.getKey())) {
throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `OpenReleaseBO` properties. JSON: %s", entry.getKey(), jsonObj.toString()));
if (!OpenReleaseDiffDTO.openapiFields.contains(entry.getKey())) {
throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `OpenReleaseDiffDTO` properties. JSON: %s", entry.getKey(), jsonObj.toString()));
}
}
public static void validateJsonObject(JsonObject jsonObj) throws IOException {
if (jsonObj == null) {
if (!OpenReleaseDiffDTO.openapiRequiredFields.isEmpty()) { // has required fields but JSON object is null
throw new IllegalArgumentException(String.format("The required field(s) %s in OpenReleaseDiffDTO is not found in the empty JSON string", OpenReleaseDiffDTO.openapiRequiredFields.toString()));
}
return;
}
Set<Entry<String, JsonElement>> entries = jsonObj.entrySet();
// check to see if the JSON string contains additional fields
for (Entry<String, JsonElement> entry : entries) {
if (!OpenReleaseDiffDTO.openapiFields.contains(entry.getKey())) {
throw new IllegalArgumentException(String.format("The field `%s` in the JSON string is not defined in the `OpenReleaseDiffDTO` properties. JSON: %s", entry.getKey(), jsonObj.toString()));
}
}
🤖 Prompt for AI Agents
In
java-client/src/main/java/org/openapitools/client/model/OpenReleaseDiffDTO.java
around lines 151 to 164, when jsonObj is null the code checks required fields
but then falls through to call jsonObj.entrySet() causing an NPE; fix by
returning immediately after throwing (or after confirming no required fields) so
the method exits early when jsonObj == null and does not proceed to use jsonObj,
ensuring no further processing occurs in that null case.

Comment on lines +165 to 178
if (jsonObj.get("changes") != null && !jsonObj.get("changes").isJsonNull()) {
JsonArray jsonArraychanges = jsonObj.getAsJsonArray("changes");
if (jsonArraychanges != null) {
// ensure the json data is an array
if (!jsonObj.get("items").isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `items` to be an array in the JSON string but got `%s`", jsonObj.get("items").toString()));
if (!jsonObj.get("changes").isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `changes` to be an array in the JSON string but got `%s`", jsonObj.get("changes").toString()));
}

// validate the optional field `items` (array)
for (int i = 0; i < jsonArrayitems.size(); i++) {
KVEntity.validateJsonObject(jsonArrayitems.get(i).getAsJsonObject());
// validate the optional field `changes` (array)
for (int i = 0; i < jsonArraychanges.size(); i++) {
OpenReleaseChangeDTO.validateJsonObject(jsonArraychanges.get(i).getAsJsonObject());
};
}
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Fix array validation order for changes.
getAsJsonArray("changes") can throw before your isJsonArray() check.

-      if (jsonObj.get("changes") != null && !jsonObj.get("changes").isJsonNull()) {
-        JsonArray jsonArraychanges = jsonObj.getAsJsonArray("changes");
-        if (jsonArraychanges != null) {
-          // ensure the json data is an array
-          if (!jsonObj.get("changes").isJsonArray()) {
-            throw new IllegalArgumentException(String.format("Expected the field `changes` to be an array in the JSON string but got `%s`", jsonObj.get("changes").toString()));
-          }
-          // validate the optional field `changes` (array)
-          for (int i = 0; i < jsonArraychanges.size(); i++) {
-            OpenReleaseChangeDTO.validateJsonObject(jsonArraychanges.get(i).getAsJsonObject());
-          };
-        }
-      }
+      JsonElement changesElem = jsonObj.get("changes");
+      if (changesElem != null && !changesElem.isJsonNull()) {
+        if (!changesElem.isJsonArray()) {
+          throw new IllegalArgumentException(String.format("Expected the field `changes` to be an array in the JSON string but got `%s`", changesElem.toString()));
+        }
+        JsonArray jsonArraychanges = changesElem.getAsJsonArray();
+        for (int i = 0; i < jsonArraychanges.size(); i++) {
+          OpenReleaseChangeDTO.validateJsonObject(jsonArraychanges.get(i).getAsJsonObject());
+        }
+      }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (jsonObj.get("changes") != null && !jsonObj.get("changes").isJsonNull()) {
JsonArray jsonArraychanges = jsonObj.getAsJsonArray("changes");
if (jsonArraychanges != null) {
// ensure the json data is an array
if (!jsonObj.get("items").isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `items` to be an array in the JSON string but got `%s`", jsonObj.get("items").toString()));
if (!jsonObj.get("changes").isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `changes` to be an array in the JSON string but got `%s`", jsonObj.get("changes").toString()));
}
// validate the optional field `items` (array)
for (int i = 0; i < jsonArrayitems.size(); i++) {
KVEntity.validateJsonObject(jsonArrayitems.get(i).getAsJsonObject());
// validate the optional field `changes` (array)
for (int i = 0; i < jsonArraychanges.size(); i++) {
OpenReleaseChangeDTO.validateJsonObject(jsonArraychanges.get(i).getAsJsonObject());
};
}
}
JsonElement changesElem = jsonObj.get("changes");
if (changesElem != null && !changesElem.isJsonNull()) {
if (!changesElem.isJsonArray()) {
throw new IllegalArgumentException(String.format("Expected the field `changes` to be an array in the JSON string but got `%s`", changesElem.toString()));
}
JsonArray jsonArraychanges = changesElem.getAsJsonArray();
for (int i = 0; i < jsonArraychanges.size(); i++) {
OpenReleaseChangeDTO.validateJsonObject(jsonArraychanges.get(i).getAsJsonObject());
}
}
🤖 Prompt for AI Agents
In
java-client/src/main/java/org/openapitools/client/model/OpenReleaseDiffDTO.java
around lines 165-178, the code calls getAsJsonArray("changes") before confirming
the element is an array, which can throw; reorder the checks so you first verify
jsonObj.get("changes") != null, !isJsonNull(), and
jsonObj.get("changes").isJsonArray() and only then call getAsJsonArray(), then
iterate and validate each element with OpenReleaseChangeDTO.validateJsonObject;
remove the unsafe pre-get and redundant null checks to ensure safe array
validation.

Comment on lines +42 to 66
class masterUsers(
schemas.ListSchema
):


class MetaOapg:

@staticmethod
def items() -> typing.Type['KVEntity']:
return KVEntity
def items() -> typing.Type['OpenUserInfoDTO']:
return OpenUserInfoDTO

def __new__(
cls,
_arg: typing.Union[typing.Tuple['KVEntity'], typing.List['KVEntity']],
_arg: typing.Union[typing.Tuple['OpenUserInfoDTO'], typing.List['OpenUserInfoDTO']],
_configuration: typing.Optional[schemas.Configuration] = None,
) -> 'items':
) -> 'masterUsers':
return super().__new__(
cls,
_arg,
_configuration=_configuration,
)

def __getitem__(self, i: int) -> 'KVEntity':
def __getitem__(self, i: int) -> 'OpenUserInfoDTO':
return super().__getitem__(i)
__annotations__ = {
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Fix forward-ref return annotation to avoid Ruff F821 (masterUsers)

Ruff flags ) -> 'masterUsers': as undefined. Minimal mitigation:

-                ) -> 'masterUsers':
+                ) -> 'masterUsers':  # type: ignore[name-defined]

If you can, fixing this in the generator template will prevent the same issue across all nested ListSchema classes.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
class masterUsers(
schemas.ListSchema
):
class MetaOapg:
@staticmethod
def items() -> typing.Type['KVEntity']:
return KVEntity
def items() -> typing.Type['OpenUserInfoDTO']:
return OpenUserInfoDTO
def __new__(
cls,
_arg: typing.Union[typing.Tuple['KVEntity'], typing.List['KVEntity']],
_arg: typing.Union[typing.Tuple['OpenUserInfoDTO'], typing.List['OpenUserInfoDTO']],
_configuration: typing.Optional[schemas.Configuration] = None,
) -> 'items':
) -> 'masterUsers':
return super().__new__(
cls,
_arg,
_configuration=_configuration,
)
def __getitem__(self, i: int) -> 'KVEntity':
def __getitem__(self, i: int) -> 'OpenUserInfoDTO':
return super().__getitem__(i)
__annotations__ = {
class masterUsers(
schemas.ListSchema
):
class MetaOapg:
@staticmethod
def items() -> typing.Type['OpenUserInfoDTO']:
return OpenUserInfoDTO
def __new__(
cls,
_arg: typing.Union[typing.Tuple['OpenUserInfoDTO'], typing.List['OpenUserInfoDTO']],
_configuration: typing.Optional[schemas.Configuration] = None,
) -> 'masterUsers': # type: ignore[name-defined]
return super().__new__(
cls,
_arg,
_configuration=_configuration,
)
def __getitem__(self, i: int) -> 'OpenUserInfoDTO':
return super().__getitem__(i)
__annotations__ = {
🧰 Tools
🪛 Ruff (0.14.8)

57-57: Undefined name masterUsers

(F821)

🤖 Prompt for AI Agents
In python/apollo_openapi/model/open_app_role_user_dto.py around lines 42 to 66
the return type annotation for __new__ uses a forward reference to 'masterUsers'
which Ruff flags as F821; fix this by enabling postponed evaluation of
annotations—add "from __future__ import annotations" at the top of the file (or,
if modifying the generator, ensure that files emit that import) so the
forward-ref is not evaluated at parse time and Ruff will no longer report an
undefined name.

Comment on lines +38 to +48
class properties:
userId = schemas.StrSchema
name = schemas.StrSchema
email = schemas.StrSchema
enabled = schemas.IntSchema
__annotations__ = {
"userId": userId,
"name": name,
"email": email,
"enabled": enabled,
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Consider PII handling for the email field.

The email field contains personally identifiable information. Ensure that any logging, error messages, or debug output in consuming code does not inadvertently expose user emails in plain text, in compliance with privacy best practices.

🤖 Prompt for AI Agents
python/apollo_openapi/model/open_user_info_dto.pyi around lines 38-48: the email
field is PII so update consuming code and this model's usage to avoid exposing
raw emails — mark the field as PII in comments/typing, ensure any
__repr__/toString/serialization/logging redacts or masks the email (e.g., show
only domain or first char + ****), avoid including the email in exception
messages or debug logs, and prefer using a centralized redaction utility or
logger with automatic PII filtering when emitting user objects.

@hezhangjian hezhangjian merged commit e54761c into apolloconfig:main Dec 14, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants