55from lxml import etree
66import lxml .html
77import subprocess as sp
8- from azure .storage .blob import BlobClient
9- from pathlib import Path
10- from typing import List
8+ from typing import List , Dict
119from github import Github
1210from github .Repository import Repository
1311import time
1614
1715from util import add_certificate
1816
19- SERVICE_TEST_PATH = {}
2017MAIN_REPO_SWAGGER = 'https://github.com/Azure/azure-rest-api-specs/tree/main'
2118PR_URL = 'https://github.com/Azure/azure-rest-api-specs/pull/'
2219FAILED_RESULT = []
20+ SKIP_TEXT = '-, -, -, -\n '
2321
2422def my_print (cmd ):
2523 print ('== ' + cmd + ' ==\n ' )
@@ -120,14 +118,15 @@ def output_package_size(self) -> str:
120118 else :
121119 return self .package_size
122120
123- def write_to_list (self ) :
121+ def write_to_list (self , sdk_folder : str ) -> str :
124122 response = self .project_html ("/#history" )
125123 if 199 < response .status_code < 400 :
126124 self .get_release_dict (response )
127125 self .bot_analysis ()
128- return '{package_name},{pypi_link},{track1_latest_version},{track1_latest_release_date},' \
126+ return '{sdk_folder}/{ package_name},{pypi_link},{track1_latest_version},{track1_latest_release_date},' \
129127 '{track1_ga_version},{track2_latest_version},{track2_latest_release_date},{track2_ga_version},' \
130128 '{cli_version},{track_config},{bot},{readme_link},{multiapi},{whl_size},' .format (
129+ sdk_folder = sdk_folder .split ('/' )[0 ],
131130 package_name = self ._package_name ,
132131 pypi_link = self .pypi_link ,
133132 track1_latest_version = self .track1_latest_version ,
@@ -144,7 +143,7 @@ def write_to_list(self):
144143 whl_size = self .output_package_size ())
145144 else :
146145 self .pypi_link = 'NA'
147- return
146+ return ''
148147
149148 def find_track1_ga_version (self , versions : List [str ]) -> None :
150149 if '1.0.0' in versions :
@@ -210,35 +209,32 @@ def bot_analysis(self):
210209 self .bot_warning += 'Need to add track2 config.'
211210
212211
213- def sdk_info_from_pypi (sdk_info , cli_dependency ):
212+ def sdk_info_from_pypi (sdk_info : List [ Dict [ str , str ]] , cli_dependency ):
214213 all_sdk_status = []
215214 add_certificate (str (Path ('../venv-sdk/lib/python3.8/site-packages/certifi/cacert.pem' )))
216215 for package in sdk_info :
217- if ',' in package :
218- package = package .split (',' )
219- sdk_name = package [0 ].strip ()
220- if sdk_name in cli_dependency .keys ():
221- cli_version = cli_dependency [sdk_name ]
222- else :
223- cli_version = 'NA'
224- track_config = package [1 ].strip ()
225- readme_link = package [2 ].strip ()
226- rm_link = package [3 ].strip ()
227- multi_api = package [4 ].strip ()
228- pypi_ins = PyPIClient (package_name = sdk_name , track_config = track_config ,
229- readme_link = readme_link , rm_link = rm_link , cli_version = cli_version , multi_api = multi_api )
230- text_to_write = pypi_ins .write_to_list ()
231- if pypi_ins .pypi_link != 'NA' :
232- if sdk_name == 'azure-mgmt-resource' :
233- test_result = run_playback_test ('resources' )
234- else :
235- try :
236- service_name = [k for k , v in SERVICE_TEST_PATH .items () if sdk_name in v ][0 ]
237- test_result = run_playback_test (service_name )
238- except :
239- print (f'[Error] fail to play back test recordings: { sdk_name } ' )
240- text_to_write += test_result
241- all_sdk_status .append (text_to_write )
216+ sdk_name = package ['package_name' ]
217+ if sdk_name in cli_dependency .keys ():
218+ cli_version = cli_dependency [sdk_name ]
219+ else :
220+ cli_version = 'NA'
221+ track_config = package ['track_config' ]
222+ readme_link = package ['readme_python_path' ]
223+ rm_link = package ['readme_html' ]
224+ multi_api = package ['multi_api' ]
225+ pypi_ins = PyPIClient (package_name = sdk_name , track_config = track_config ,
226+ readme_link = readme_link , rm_link = rm_link , cli_version = cli_version , multi_api = multi_api )
227+ sdk_folder = package ['sdk_folder' ]
228+ text_to_write = pypi_ins .write_to_list (sdk_folder )
229+ service_name = package ['service_name' ]
230+ if pypi_ins .pypi_link != 'NA' :
231+ test_result = SKIP_TEXT
232+ try :
233+ test_result = run_playback_test (service_name , sdk_folder )
234+ except :
235+ print (f'[Error] fail to play back test recordings: { sdk_name } ' )
236+ text_to_write += test_result
237+ all_sdk_status .append (text_to_write )
242238
243239 my_print (f'total pypi package kinds: { len (all_sdk_status )} ' )
244240 return all_sdk_status
@@ -264,12 +260,12 @@ def get_test_result(txt_path):
264260 return f'{ coverage } , { passed } , { failed } , { skipped } \n '
265261
266262
267- def run_playback_test (service_name ):
263+ def run_playback_test (service_name : str , sdk_folder : str ):
268264 if os .getenv ('SKIP_COVERAGE' ) in ('true' , 'yes' ):
269- return '-, -, -, - \n '
265+ return SKIP_TEXT
270266
271267 # eg: coverage_path='$(pwd)/sdk-repo/sdk/containerregistry/azure-mgmt-containerregistry/azure/mgmt/containerregistry/'
272- coverage_path = '' .join ([os .getenv ('SDK_REPO' ), '/sdk/' , SERVICE_TEST_PATH [ service_name ] ])
268+ coverage_path = '' .join ([os .getenv ('SDK_REPO' ), '/sdk/' , sdk_folder ])
273269 service_path = coverage_path .split ('/azure/mgmt' )[0 ]
274270 test_path = service_path + '/tests'
275271 if os .path .exists (test_path ):
@@ -295,12 +291,12 @@ def run_playback_test(service_name):
295291 if os .path .exists (service_path + '/result.txt' ):
296292 return get_test_result (service_path + '/result.txt' )
297293
298- return '-, -, -, - \n '
294+ return SKIP_TEXT
299295
300296
301297def write_to_csv (sdk_status_list , csv_name ):
302298 with open (csv_name , 'w' ) as file_out :
303- file_out .write ('package name,'
299+ file_out .write ('foler/ package name,'
304300 'pypi link,'
305301 'latest track1 version,'
306302 'latest track1 release date,'
@@ -360,17 +356,16 @@ def read_file(file_name):
360356 return content
361357
362358
363- def find_test_path (line : str , service_name : str ) -> bool :
359+ def find_test_path (line : str ) -> str :
364360 line = line .strip ('\n ' ) + '\n '
365361 try :
366- SERVICE_TEST_PATH [service_name ] = re .findall ('output-folder: \$\(python-sdks-folder\)/(.*?)\n ' , line )[0 ]
367- return True
362+ return re .findall ('output-folder: \$\(python-sdks-folder\)/(.*?)\n ' , line )[0 ]
368363 except :
369364 FAILED_RESULT .append ('[Fail to find sdk path] ' + line )
370- return False
365+ return ''
371366
372367
373- def sdk_info_from_swagger ():
368+ def sdk_info_from_swagger () -> List [ Dict [ str , str ]] :
374369 sdk_name_re = re .compile (r'azure-mgmt-[a-z]+-*([a-z])+' )
375370 sdk_folder_re = re .compile ('output-folder: \$\(python-sdks-folder\)/' )
376371 resource_manager = []
@@ -379,7 +374,7 @@ def sdk_info_from_swagger():
379374 readme_folders = glob .glob (target_file_pattern )
380375 my_print (f'total readme folders: { len (readme_folders )} ' )
381376 for folder in readme_folders :
382- found_sdk_folder = False
377+ sdk_folder = ''
383378 multi_api = ''
384379 linux_folder = Path (folder ).as_posix ()
385380 service_name = re .findall (r'specification/(.*?)/resource-manager/' , linux_folder )[0 ]
@@ -395,16 +390,16 @@ def sdk_info_from_swagger():
395390 track_config += 1
396391 if readme_python == 'NA' and sdk_name_re .search (line ) is not None and package_name == '' :
397392 package_name = sdk_name_re .search (line ).group ()
398- if sdk_folder_re .search (line ) and not found_sdk_folder :
399- found_sdk_folder = find_test_path (line , service_name )
393+ if sdk_folder_re .search (line ) and not sdk_folder :
394+ sdk_folder = find_test_path (line )
400395
401396 if readme_python != 'NA' :
402397 readme_python_text = read_file (readme_python )
403398 for text in readme_python_text :
404399 if sdk_name_re .search (text ) is not None :
405400 package_name = sdk_name_re .search (text ).group ()
406- if sdk_folder_re .search (text ) and not found_sdk_folder :
407- found_sdk_folder = find_test_path (text , service_name )
401+ if sdk_folder_re .search (text ) and not sdk_folder :
402+ sdk_folder = find_test_path (text )
408403 if 'batch:' in text and multi_api == '' :
409404 multi_api = 'fake'
410405 print (f'*********{ service_name } is fake ' )
@@ -416,11 +411,15 @@ def sdk_info_from_swagger():
416411 readme_html = folder .replace (SWAGGER_FOLDER , MAIN_REPO_SWAGGER )
417412 readme_html = Path (readme_html ).as_posix ()
418413 if package_name != '' :
419- resource_manager .append ('{},{},{},{},{}\n ' .format (package_name ,
420- track_config ,
421- readme_python ,
422- readme_html ,
423- multi_api ))
414+ resource_manager .append ({
415+ 'package_name' : package_name .strip (),
416+ 'track_config' : track_config ,
417+ 'readme_python_path' : readme_python .strip (),
418+ 'readme_html' : readme_html .strip (),
419+ 'multi_api' : multi_api .strip (),
420+ 'sdk_folder' : sdk_folder .strip (), # eg: resources/azure-mgmt-resource/azure/mgmt/resource
421+ 'service_name' : service_name ,
422+ })
424423 my_print (f'{ folder } : { package_name } ' )
425424
426425 my_print (f'total package kinds: { len (resource_manager )} ' )
0 commit comments