-
Notifications
You must be signed in to change notification settings - Fork 1
feat: release and accessKey and permission endpoints #20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughAdds 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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Focus areas:
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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. Comment |
4b98766 to
ad20eed
Compare
There was a problem hiding this 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 + invalidcreate_access_keycall).
As written, the example won’t run:env/operatorare outside thewithblock, and thecreate_access_key(...)invocation is malformed (missing arg names/commas and doesn’t passenv).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 validatingreleaseIdsas 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 totrim().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 theAccessKey Managementtag (used by AccessKey endpoints) in the top-leveltagslist.
Right now onlyPermission Managementwas added, but AccessKey operations are taggedAccessKey Management, so docs/tools may show an “undefined” tag group or omit tag metadata.tags: @@ - description: 权限管理相关接口,包括权限查询等功能 name: Permission Management +- description: AccessKey 管理相关接口,包括 AccessKey 的创建、查询、启用/禁用、删除等操作 + name: AccessKey ManagementAlso 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 maskingsecretintoString()to prevent accidental logging of sensitive data.The
toString()method outputs thesecretfield (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:
- Configure the OpenAPI generator to exclude sensitive fields from
toString()- Add a post-generation hook to mask sensitive fields
- Document that this DTO should not be logged directly
apollo-openapi.yaml-4079-4127 (1)
4079-4127: Typo in URL path:namepsacesshould benamespaces.The path
/openapi/v1/apps/{appId}/envs/{env}/clusters/{clusterName}/namepsaces/role-usershas 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
userIdparameter description says "the user which role removed from" but this is for theassignAppRoleToUseroperation. 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: trueapollo-openapi.yaml-3701-3736 (1)
3701-3736: Typo in URL path:permision-initshould bepermission-init.The path
/openapi/v1/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/permision-inithas 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: Addoperatorparameter todisableAccessKeyandenableAccessKeymethods for consistent audit tracking.
createAccessKeyanddeleteAccessKeyinclude anoperatorparameter for tracking who performed the operation, butdisableAccessKeyandenableAccessKeydo not. For complete audit coverage across all access key lifecycle operations, add theoperatorparameter to these methods as well.
🧹 Nitpick comments (25)
java-client/docs/InstanceManagementApi.md (1)
214-223: ClarifyreleaseIdsrequiredness and expected CSV format (non-empty).Docs now mark
releaseIdsas 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
getByReleasesAndNamespaceNotInValidateBeforeCallnow enforcesreleaseIds != null, theif (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
validateJsonObjectmethod throws an exception if the JSON contains any fields not defined inopenapiFields. 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/activeresponse into a page DTO (or document it as “not paged”).
The endpoint requirespage/size, but the 200 response is an array ofOpenReleaseDTO(nototal/pagemetadata), 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 forhasPermissionto avoid ambiguous semantics (false vs missing).
Right now the Description column is empty; consider clarifying whatnullmeans vsfalse(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 + newoperatorparameter.
Optional: add a reason to@Disabled(or replacenullplaceholders 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
OpenReleaseChangeDTOmodel, 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
@Disabledif they're intentionally deferred.Would you like me to generate example test implementations for
OpenReleaseDiffDTOthat validate thechangesproperty 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, andJsonWriter, 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
OpenAccessKeyDTOproperties. 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 explicitvoidin the method signature lines to avoid ambiguity in Java docs.
Right now the signatures are shown as> createAppInEnv(...),> deleteApp(...),> updateApp(...), whilecreateAppshows 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 insideitems()instead of relying on a bottom import.
Even if runtime works, some linters get unhappy with referencingOpenUserInfoDTObefore it’s imported. A low-impact pattern is:from apollo_openapi.model.open_user_info_dto import OpenUserInfoDTOinsideitems()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 triggerRUF002/RUF100under certain Ruff configs.python/apollo_openapi/model/open_env_namespace_role_user_dto.py (1)
43-93: Prefer local import initems()forOpenUserInfoDTOto reduce circular/lint sensitivity.
Same idea as the other role-user DTO: importOpenUserInfoDTOinsideitems()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.tomlbut 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: F401annotations on imported stubs would trigger unused noqa warnings if Ruff is ever enabled locally or in CI. To prevent this, exclude the generatedpython/apollo_openapi/model/directory inruff.tomlunder a new[lint.exclude]section, or add# ruff: noqaat the top of generated.pyifiles via the generator template.java-client/src/main/java/org/openapitools/client/model/OpenPermissionConditionDTO.java (2)
140-154: Add type validation forhasPermissionfor 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: Avoidnullplaceholders 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: CheckisJsonArray()before callinggetAsJsonArray()to avoidIllegalStateException
CurrentlygetAsJsonArray()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.GenericTypeis imported but not used in this file.-import javax.ws.rs.core.GenericType;
java-client/src/main/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTO.java
Show resolved
Hide resolved
java-client/src/main/java/org/openapitools/client/model/OpenPermissionConditionDTO.java
Show resolved
Hide resolved
There was a problem hiding this 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 callsdeleteAppWithHttpInfo()which returnsApiResponse<Void>containing response metadata, but the result is not returned to the caller. This prevents callers from accessing response details if needed. Either return theApiResponse<Void>or calldeleteAppCall()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 theAccessKey Managementtag (it’s referenced by operations).
You addedPermission Managementto the top-leveltags, but the new access-key endpoints usetags: [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:
namepsacesshould benamespaces. 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:
permisionshould bepermission. 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 InitClusterNamespacePermissionpython/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: F821to 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: F821to 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:accessKeyIdpath param type should beint64to matchOpenAccessKeyDTO.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/jsonApply 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 forclusterName.In the
createReleasemethod example (line 284), theclusterNameparameter comment lacks a description ("集群名称"), while thecreateGrayReleaseexample (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 clearingAcceptlist to avoid requesting JSON unnecessarily.
SwitchingApiResponseFor200.bodytoschemas.Unsetand removing theapplication/jsonschema for 200 aligns withapollo-openapi.yamlwherePUT /openapi/v1/apps/{appId}has a 200 description only. Optional: set_all_accept_content_types = ()(or omit addingAccept) 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) andenabled(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
OpenAccessKeyDTOmodel.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 nowvalidateJsonObjectchecks several string fields, but allows invalid JSON types forid/mode/enabledto 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 withcompareReleaseId(ortargetReleaseId) vstoCompareReleaseId, but this is optional if it matches server reality.
5076-5126:assignAppRoleToUserPOST likely shouldn’t require a request body ifuserIdis the real input.
You already requireuserIdin query params; adding astringJSON 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: GuardhostIndex/ base-path selection to avoid AIOOB on future server arrays
TodaylocalBasePathsis empty, but if it becomes non-empty later,localHostIndexcan be set to an invalid value and crash at runtime (Line 98-100). Consider clamping or validating insetHostIndex()(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
📒 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)
java-client/src/main/java/org/openapitools/client/api/AccessKeyManagementApi.java
Outdated
Show resolved
Hide resolved
java-client/src/main/java/org/openapitools/client/model/OpenAccessKeyDTO.java
Show resolved
Hide resolved
java-client/src/main/java/org/openapitools/client/model/OpenAccessKeyDTO.java
Show resolved
Hide resolved
java-client/src/main/java/org/openapitools/client/model/OpenClusterNamespaceRoleUserDTO.java
Show resolved
Hide resolved
java-client/src/main/java/org/openapitools/client/model/OpenClusterNamespaceRoleUserDTO.java
Show resolved
Hide resolved
ad20eed to
f756aad
Compare
f756aad to
87971f1
Compare
There was a problem hiding this 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
noqadirectives) are artifacts of the OpenAPI generator template and affect all generated model files. As noted in previous reviews, either excludepython/apollo_openapi/model/**/*.pyfrom 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 typeSame 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 typeThe 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
jsonObjisnullandopenapiRequiredFieldsis empty, the code falls through to line 147 and callsjsonObj.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 typeThe 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 typeThe 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 invalidateJsonObjectwhenjsonObjis null.Same issue flagged in past review: after checking
jsonObj == nullat 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 printssecret.This is a high-risk footgun. The
secretfield 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 whenjsonObj == null.When
openapiRequiredFieldsis empty andjsonObjisnull, execution falls through to line 427 wherejsonObj.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: MakeAcceptheader consistent for Void responses (delete/disable/enable).The
deleteAccessKeyCall,disableAccessKeyCall, andenableAccessKeyCallmethods use emptylocalVarAcceptsarrays, while create/find useapplication/json. Even forVoidresponses, settingAccept: application/jsonkeeps 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: FixaccessKeyIdpath param type tointeger(int64)to matchOpenAccessKeyDTO.id.
CurrentlyaccessKeyIdistype: string, but the schema usesformat: int64integer 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
OpenReleaseChangeDTOmodel's constructor, getters/setters, and property behavior to ensure correctness.Would you like me to generate the test implementations for
OpenReleaseChangeDTOcovering the propertieschangeType,key,newValue, andoldValue?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
OpenEnvNamespaceRoleUserDTOmodel'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
initAppPermissionendpoint 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/jsonjava-client/api/openapi.yaml (2)
48-49: Add missingAccessKey Managementtag entry (spec hygiene / doc grouping).
You addedPermission Managementtotags, but new endpoints also referenceAccessKey Management(e.g., Line 5377, Line 5429). If there’s no correspondingtags: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 emptydescription: ""(e.g.,OpenPermissionConditionDTO.hasPermission,OpenUserInfoDTO.*,OpenAccessKeyDTO.*). This weakens generated docs and can reduce SDK ergonomics; alsoOpenReleaseChangeDTO.changeTypelikely wants anenumif the backend has a finite set.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 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)
java-client/src/main/java/org/openapitools/client/model/OpenAppRoleUserDTO.java
Show resolved
Hide resolved
java-client/src/main/java/org/openapitools/client/model/OpenAppRoleUserDTO.java
Show resolved
Hide resolved
java-client/src/main/java/org/openapitools/client/model/OpenEnvNamespaceRoleUserDTO.java
Show resolved
Hide resolved
java-client/src/main/java/org/openapitools/client/model/OpenUserInfoDTO.java
Show resolved
Hide resolved
There was a problem hiding this 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:pathand_authare referenced but not defined/importedIn this
.pyi,used_path = path.value(Line 193) andauth_settings=_auth(Line 231) have no correspondingfrom . import path/_auth = [...]like the paireddelete.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 missingAccessKey Managementtag entry (tag used later but not declared).
Paths referencetags: [AccessKey Management], but the top-leveltags: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: AlignreleaseIdtypes across all endpoints to useformat: int64.
TherollbackandgetByReleaseendpoints both definereleaseIdasintegerwithformat: int64, butgetReleaseByIdomits the format specifier. Addformat: int64to 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_idandenvas positional arguments (or named), followed by the optionaloperatorkeyword 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 invalidateJsonObjectwhenjsonObjis null still present.The previous review comment was marked as addressed, but the fix appears incomplete. When
jsonObjis null andopenapiRequiredFieldsis empty, execution falls through to line 147 wherejsonObj.entrySet()will throw aNullPointerException.Add an early
returnafter 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 invalidateJsonObjectwhenjsonObjis null.Same issue as in
OpenPermissionConditionDTO: whenjsonObjis null andopenapiRequiredFieldsis empty, execution continues to line 231 wherejsonObj.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:toString()output.The
OpenUserInfoDTOobjects 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 emptydescription: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 includesecretintoString()(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 whenjsonObj == 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: F821comments) is correctly applied.java-client/src/main/java/org/openapitools/client/model/OpenAppRoleUserDTO.java (2)
179-210: NPE invalidateJsonObjectalready 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 (addingreturn;after line 184) is applied.
138-146: PII exposure intoString()already flagged in past reviews.The
masterUserslist containsOpenUserInfoDTOobjects with email fields that will be exposed in logs if this DTO'stoString()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 invalidateJsonObjectalready 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 addingreturn;after line 276.
224-235: PII exposure intoString()already flagged in past reviews.The
modifyRoleUsersandreleaseRoleUserslists containOpenUserInfoDTOobjects 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 whenjsonObj == null(return early).
Currently,jsonObj == nullfalls through and dereferencesjsonObj.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 beforeisJsonArray()).
CallisJsonArray()on the element beforegetAsJsonArray(...)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: E501Better 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
localVarAcceptsarray 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
localVarAcceptsarray 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
localVarAcceptsarray 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/emptyreleaseIds, 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, validatereleaseIds.trim().isEmpty()and throwApiException, 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: F401directives 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: DeclareAccessKey Managementintags:(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 excludingsecretfromequals()/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, andreleaseRoleUsers.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
OpenReleaseChangeDTOmodel.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
changesproperty (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: Inconsistentenabledfield typing across DTOs.In
OpenAccessKeyDTO,enabledis typed asBoolSchema, but inOpenUserInfoDTO, theenabledfield usesIntSchema. 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=pyjava-client/.openapi-generator/FILES (1)
9-11: Docs/API surface naming: ensure AppManagementApi vs AccessKeyManagementApi story is consistent
docs/AccessKeyManagementApi.mdis added whiledocs/AppManagementApi.mdstill 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 assertionsRight now these tests do nothing (and
Disabledis imported but not used). Consider adding@Disabledat 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 contentGiven this is OpenAPI-generator output, consider a file-level
# ruff: noqa(or ruff exclude/per-file-ignores forapollo_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 RuffRuff is also reporting docstring punctuation and “unused noqa” directives; excluding
apollo_openapi/model/**from Ruff (or adding# ruff: noqato 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@Disabledis 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 asapplication/json(or explain why it must be unset).
| $ref: '#/components/schemas/OpenEnvNamespaceRoleUserDTO' | ||
| description: | ||
| example: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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).
| ### 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 | - | | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| 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())); | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| 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.
| 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()); | ||
| }; | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| 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.
| 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())); | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| 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())); | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| 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.
| 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()); | ||
| }; | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| 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.
| 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__ = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
| 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.
| class properties: | ||
| userId = schemas.StrSchema | ||
| name = schemas.StrSchema | ||
| email = schemas.StrSchema | ||
| enabled = schemas.IntSchema | ||
| __annotations__ = { | ||
| "userId": userId, | ||
| "name": name, | ||
| "email": email, | ||
| "enabled": enabled, | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.