diff --git a/tools/azure-rest-api-specs-examples-automation/java/main.py b/tools/azure-rest-api-specs-examples-automation/java/main.py index f5001d3b232..0140e69f5d7 100644 --- a/tools/azure-rest-api-specs-examples-automation/java/main.py +++ b/tools/azure-rest-api-specs-examples-automation/java/main.py @@ -177,10 +177,10 @@ def process_java_example(filepath: str) -> List[JavaExample]: lines = f.readlines() class_name = filename.split(".")[0] - return process_java_example_content(lines, class_name) + return process_java_example_content(lines, class_name, filepath) -def process_java_example_content(lines: List[str], class_name: str) -> List[JavaExample]: +def process_java_example_content(lines: List[str], class_name: str, filepath: str = None) -> List[JavaExample]: java_examples = [] if is_aggregated_java_example(lines): aggregated_java_example = break_down_aggregated_java_example(lines) @@ -199,8 +199,20 @@ def process_java_example_content(lines: List[str], class_name: str) -> List[Java example_dir, example_filename = path.split(example_filepath) try: + sdk_package_path_updated = sdk_package_path + if filepath and sdk_package_path.endswith("/resourcemanager/azure-resourcemanager"): + # special handling for libs included in azure-resourcemanager, as samples in it are copied + # from other packages. + # this behavior can change, if in automation we no longer do such copy. + sdk_package_name = filepath.replace("\\", "/").split("/")[-3] + sdk_package_path_updated = path.join( + sdk_package_path.rstrip("/resourcemanager/azure-resourcemanager"), + sdk_package_name, + "azure-resourcemanager-" + sdk_package_name, + ) + example_dir = examples_dir.try_find_resource_manager_example( - specs_path, sdk_package_path, example_dir, example_filename + specs_path, sdk_package_path_updated, example_dir, example_filename ) except NameError: pass diff --git a/tools/azure-rest-api-specs-examples-automation/java/test_process.py b/tools/azure-rest-api-specs-examples-automation/java/test_process.py index 58fbab0a7c5..3e62ae230a1 100644 --- a/tools/azure-rest-api-specs-examples-automation/java/test_process.py +++ b/tools/azure-rest-api-specs-examples-automation/java/test_process.py @@ -1,6 +1,7 @@ import sys +import tempfile import unittest -from os import path +from os import path, makedirs from main import process_java_example_content from main import _set_paths @@ -329,3 +330,142 @@ def test_process_java_example_original_file_typespec(self): "specification/mongocluster/resource-manager/Microsoft.DocumentDB/preview/2024-03-01-preview/examples-java", java_examples[0].target_dir, ) + + def test_process_java_example_original_file_typespec_resourcemanager(self): + java_code = """ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package com.azure.resourcemanager.keyvault.generated; + +/** + * Samples for Secrets List. + */ +public final class SecretsListSamples { + /* + * x-ms-original-file: 2025-05-01/listSecrets.json + */ + /** + * Sample code: List secrets in the vault. + * + * @param azure The entry point for accessing resource management APIs in Azure. + */ + public static void listSecretsInTheVault(com.azure.resourcemanager.AzureResourceManager azure) { + azure.vaults() + .manager() + .serviceClient() + .getSecrets() + .list("sample-group", "sample-vault", null, com.azure.core.util.Context.NONE); + } +} +""" + + with create_mock_test_folder_resourcemanager() as tmp_dir_name: + _set_paths( + path.join(tmp_dir_name, "azure-rest-api-specs"), + path.join(tmp_dir_name, "azure-sdk-for-java/sdk/resourcemanager/azure-resourcemanager"), + ) + java_examples = process_java_example_content( + java_code.splitlines(keepends=True), + "SecretsListSamples", + path.join( + tmp_dir_name, + "azure-sdk-for-java/sdk/resourcemanager/azure-resourcemanager/src/samples/java/com/azure/resourcemanager/keyvault/generated/SecretsListSamples.java", + ), + ) + + self.assertEqual(1, len(java_examples)) + + self.assertEqual( + "specification/keyvault/resource-manager/Microsoft.KeyVault/stable/2025-05-01/examples-java", + java_examples[0].target_dir, + ) + + +def create_mock_test_folder_resourcemanager() -> tempfile.TemporaryDirectory: + tmp_path = path.abspath(".") + tmp_dir = tempfile.TemporaryDirectory(dir=tmp_path) + try: + sdk_path = path.join(tmp_dir.name, "azure-sdk-for-java/sdk/keyvault/azure-resourcemanager-keyvault") + makedirs(sdk_path) + with open(path.join(sdk_path, "tsp-location.yaml"), "w+", encoding="utf-8") as file: + file.write( + """directory: specification/keyvault/KeyVault.Management +commit: 7eb7eaf5d0ebb12a9f0ade8e4433cfb0f6c32840 +repo: Azure/azure-rest-api-specs +additionalDirectories: +""" + ) + + keyvault_json_example_file_content = """{ + "parameters": { + "api-version": "2025-05-01", + "resourceGroupName": "sample-group", + "subscriptionId": "00000000-0000-0000-0000-000000000000", + "vaultName": "sample-vault" + }, + "responses": { + "200": { + "body": { + "value": [ + { + "name": "secret-name", + "type": "Microsoft.KeyVault/vaults/secrets", + "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sample-group/providers/Microsoft.KeyVault/vaults/sample-vault/secrets/secret-name", + "location": "westus", + "properties": { + "attributes": { + "created": 1514941476, + "enabled": true, + "updated": 1514941476 + }, + "secretUri": "https://sample-vault.vault.azure.net/secrets/secret-name", + "secretUriWithVersion": "https://sample-vault.vault.azure.net/secrets/secret-name/40af42fbc10047f8a756a73211492f56" + } + }, + { + "name": "secret-name2", + "type": "Microsoft.KeyVault/vaults/secrets", + "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sample-group/providers/Microsoft.KeyVault/vaults/sample-vault/secrets/secret-name2", + "location": "westus", + "properties": { + "attributes": { + "created": 1514941476, + "enabled": true, + "updated": 1514941476 + }, + "secretUri": "https://sample-vault.vault.azure.net/secrets/secret-name2", + "secretUriWithVersion": "https://sample-vault.vault.azure.net/secrets/secret-name2/cd7264a6f56c44d1b594423c80609aae" + } + } + ] + } + } + }, + "operationId": "Secrets_List", + "title": "List secrets in the vault" +} +""" + + # api-version 2025-05-01 + specs_path = path.join( + tmp_dir.name, + "azure-rest-api-specs/specification/keyvault/KeyVault.Management/examples/2025-05-01", + ) + makedirs(specs_path) + with open(path.join(specs_path, "listSecrets.json"), "w+", encoding="utf-8") as file: + file.write(keyvault_json_example_file_content) + + specs_path = path.join( + tmp_dir.name, + "azure-rest-api-specs/specification/keyvault/resource-manager/Microsoft.KeyVault/stable/2025-05-01/examples", + ) + makedirs(specs_path) + with open(path.join(specs_path, "listSecrets.json"), "w+", encoding="utf-8") as file: + file.write(keyvault_json_example_file_content) + except Exception as error: + tmp_dir.cleanup() + raise error + + return tmp_dir