55import argparse
66import logging
77import dataclasses
8+ import re
9+ import glob
810from typing import List
911
1012from modules import JavaExample , JavaFormatResult
1416
1517script_path : str = '.'
1618tmp_path : str
19+ specs_path : str
1720
1821namespace = '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+
191229def 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
275313def 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' ]
0 commit comments