Skip to content

Commit 3ba7515

Browse files
examples-automation, map example JSON from typespec folder to swagger folder (#8533)
1 parent edd69e4 commit 3ba7515

2 files changed

Lines changed: 79 additions & 1 deletion

File tree

tools/azure-rest-api-specs-examples-automation/java/main.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import argparse
66
import logging
77
import dataclasses
8+
import re
9+
import glob
810
from typing import List
911

1012
from modules import JavaExample, JavaFormatResult
@@ -14,6 +16,7 @@
1416

1517
script_path: str = '.'
1618
tmp_path: str
19+
specs_path: str
1720

1821
namespace = 'com.azure.resourcemanager'
1922

@@ -172,6 +175,8 @@ def process_java_example_content(lines: List[str], class_name: str) -> List[Java
172175
example_filepath = java_example_method.example_relative_path
173176
example_dir, example_filename = path.split(example_filepath)
174177

178+
example_dir = try_find_resource_manager_example(example_dir, example_filename)
179+
175180
# use Main as class name
176181
old_class_name = class_name
177182
new_class_name = 'Main'
@@ -188,6 +193,39 @@ def process_java_example_content(lines: List[str], class_name: str) -> List[Java
188193
return java_examples
189194

190195

196+
def set_specs_path(new_specs_path: str):
197+
# for test
198+
global specs_path
199+
specs_path = new_specs_path
200+
201+
202+
def try_find_resource_manager_example(example_dir: str, example_filename: str) -> str:
203+
if '/resource-manager/' not in example_dir:
204+
try:
205+
match = re.match(r'specification/([^/]+)/.*/examples/([^/]+)(.*)', example_dir)
206+
if match:
207+
# example: specification/mongocluster/DocumentDB.MongoCluster.Management/examples/2024-03-01-preview
208+
# service: mongocluster
209+
# api_version: 2024-03-01-preview
210+
# additional_path: <empty>
211+
212+
service = match.group(1)
213+
api_version = match.group(2)
214+
additional_path = match.group(3)
215+
216+
glob_resource_manager_filename = f'specification/{service}/resource-manager/**/{api_version}/examples{additional_path}/{example_filename}'
217+
candidate_resource_manager_filename = glob.glob(path.join(specs_path, glob_resource_manager_filename),
218+
recursive=True)
219+
if len(candidate_resource_manager_filename) > 0:
220+
example_path, _ = path.split(candidate_resource_manager_filename[0])
221+
example_dir = path.relpath(example_path, specs_path).replace('\\', '/')
222+
except NameError:
223+
# specs_path not defined
224+
pass
225+
226+
return example_dir
227+
228+
191229
def validate_java_examples(release: Release, java_examples: List[JavaExample]) -> JavaFormatResult:
192230
# batch validate Java examples
193231

@@ -275,6 +313,7 @@ def create_java_examples(release: Release, sdk_examples_path: str, java_examples
275313
def main():
276314
global script_path
277315
global tmp_path
316+
global specs_path
278317

279318
logging.basicConfig(level=logging.INFO,
280319
format='%(asctime)s [%(levelname)s] %(message)s',
@@ -291,7 +330,7 @@ def main():
291330
with open(input_json_path, 'r', encoding='utf-8') as f_in:
292331
config = json.load(f_in)
293332

294-
# specs_path = config['specsPath']
333+
specs_path = config['specsPath']
295334
sdk_path = config['sdkPath']
296335
sdk_examples_path = config['sdkExamplesPath']
297336
tmp_path = config['tempPath']

tools/azure-rest-api-specs-examples-automation/java/test_process.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import unittest
22

33
from main import process_java_example_content
4+
from main import set_specs_path
45

56

67
class TestProcess(unittest.TestCase):
@@ -252,3 +253,41 @@ def test_process_java_example_method_signature_newline(self):
252253

253254
self.assertEqual('specification/compute/resource-manager/Microsoft.Compute/ComputeRP/stable/2024-03-01/examples-java/virtualMachineScaleSetExamples', java_examples[1].target_dir)
254255
self.assertEqual('VirtualMachineScaleSetVM_Start_MinimumSet_Gen', java_examples[1].target_filename)
256+
257+
@unittest.skip('require call "set_specs_path" with your local azure-rest-api-specs repository')
258+
def test_process_java_example_original_file_typespec(self):
259+
java_code = '''
260+
// Copyright (c) Microsoft Corporation. All rights reserved.
261+
// Licensed under the MIT License.
262+
// Code generated by Microsoft (R) TypeSpec Code Generator.
263+
264+
package com.azure.resourcemanager.mongocluster.generated;
265+
266+
/**
267+
* Samples for MongoClusters ListConnectionStrings.
268+
*/
269+
public final class MongoClustersListConnectionStringsSamples {
270+
/*
271+
* x-ms-original-file: specification/mongocluster/DocumentDB.MongoCluster.Management/examples/2024-03-01-preview/
272+
* MongoClusters_ListConnectionStrings.json
273+
*/
274+
/**
275+
* Sample code: List the available connection strings for the Mongo Cluster resource.
276+
*
277+
* @param manager Entry point to MongoClusterManager.
278+
*/
279+
public static void listTheAvailableConnectionStringsForTheMongoClusterResource(
280+
com.azure.resourcemanager.mongocluster.MongoClusterManager manager) {
281+
manager.mongoClusters()
282+
.listConnectionStringsWithResponse("TestGroup", "myMongoCluster", com.azure.core.util.Context.NONE);
283+
}
284+
}
285+
'''
286+
287+
set_specs_path('c:/github/azure-rest-api-specs')
288+
java_examples = process_java_example_content(java_code.splitlines(keepends=True),
289+
'MongoClustersListConnectionStringsSamples')
290+
291+
self.assertEqual(1, len(java_examples))
292+
293+
self.assertEqual('specification/mongocluster/resource-manager/Microsoft.DocumentDB/preview/2024-03-01-preview/examples-java', java_examples[0].target_dir)

0 commit comments

Comments
 (0)