1313from github import Github
1414from azure .storage .blob import BlobServiceClient , ContainerClient
1515from datetime import datetime , timedelta
16+ import importlib
1617
1718_LOG = logging .getLogger ()
1819
@@ -98,22 +99,6 @@ def current_time_month() -> str:
9899 date = time .localtime (time .time ())
99100 return '{}-{:02d}' .format (date .tm_year , date .tm_mon )
100101
101-
102- def set_test_env_var ():
103- setting_path = str (Path (os .getenv ('SCRIPT_PATH' )) / 'mgmt_settings_real_.py' )
104- # edit mgmt_settings_real.py
105- with open (setting_path , 'r' ) as file_in :
106- list_in = file_in .readlines ()
107-
108- for i in range (0 , len (list_in )):
109- list_in [i ] = list_in [i ].replace ('ENV_TENANT_ID' , os .environ ['TENANT_ID' ])
110- list_in [i ] = list_in [i ].replace ('ENV_CLIENT_ID' , os .environ ['CLIENT_ID' ])
111- list_in [i ] = list_in [i ].replace ('ENV_CLIENT_SECRET' , os .environ ['CLIENT_SECRET' ])
112- list_in [i ] = list_in [i ].replace ('ENV_SUBSCRIPTION_ID' , os .environ ['SUBSCRIPTION_ID' ])
113- with open (str (Path ('tools/azure-sdk-tools/devtools_testutils/mgmt_settings_real.py' )), 'w' ) as file_out :
114- file_out .writelines (list_in )
115-
116-
117102class CodegenTestPR :
118103 """
119104 This class can generate SDK code, run live test and create RP
@@ -131,6 +116,7 @@ def __init__(self):
131116 self .test_folder = os .getenv ('TEST_FOLDER' , '' )
132117
133118 self .package_name = '' # 'dns' of 'sdk/compute/azure-mgmt-dns'
119+ self .whole_package_name = '' # 'azure-mgmt-dns'
134120 self .new_branch = ''
135121 self .sdk_folder = '' # 'compute' of 'sdk/compute/azure-mgmt-dns'
136122 self .autorest_result = ''
@@ -183,16 +169,21 @@ def checkout_azure_default_branch(self):
183169 if self .spec_repo :
184170 os .chdir (Path (self .spec_repo ))
185171 self .checkout_branch ("DEBUG_REST_BRANCH" , "azure-rest-api-specs" )
172+
173+ @property
174+ def from_swagger (self ) -> bool :
175+ return "readme.md" in self .spec_readme
186176
187177 def generate_code (self ):
188178 self .checkout_azure_default_branch ()
189179
190180 # prepare input data
181+ file_name = "relatedReadmeMdFiles" if self .from_swagger else "relatedTypeSpecProjectFolder"
191182 input_data = {
192183 'headSha' : self .get_latest_commit_in_swagger_repo (),
193184 'repoHttpsUrl' : "https://github.com/Azure/azure-rest-api-specs" ,
194185 'specFolder' : self .spec_repo ,
195- 'relatedReadmeMdFiles' : [self .readme_local_folder ()]
186+ file_name : [self .readme_local_folder ()],
196187 }
197188 log (str (input_data ))
198189
@@ -216,7 +207,8 @@ def generate_code(self):
216207
217208 def get_package_name_with_autorest_result (self ):
218209 generate_result = self .get_autorest_result ()
219- self .package_name = generate_result ["packages" ][0 ]["packageName" ].split ('-' , 2 )[- 1 ]
210+ self .whole_package_name = generate_result ["packages" ][0 ]["packageName" ]
211+ self .package_name = self .whole_package_name .split ('-' , 2 )[- 1 ]
220212
221213 def prepare_branch_with_readme (self ):
222214 self .generate_code ()
@@ -229,7 +221,7 @@ def create_new_branch(self):
229221 print_check (f'git checkout -b { self .new_branch } ' )
230222
231223 def check_sdk_readme (self ):
232- sdk_readme = str (Path (f'sdk/{ self .sdk_folder } /azure-mgmt- { self .package_name } /README.md' ))
224+ sdk_readme = str (Path (f'sdk/{ self .sdk_folder } /{ self .whole_package_name } /README.md' ))
233225
234226 def edit_sdk_readme (content : List [str ]):
235227 for i in range (0 , len (content )):
@@ -249,20 +241,20 @@ def readme_python_md_path(self)-> Path:
249241 # Use the template to update readme and setup by packaging_tools
250242 @return_origin_path
251243 def check_file_with_packaging_tool (self ):
252- python_md = self .readme_python_md_path
244+ print_check (f"pip install { self .get_whl_package } " )
245+ module = importlib .import_module (self .whole_package_name .replace ("-" , "." ))
253246 title = ""
254- if python_md .exists ():
255- with open (python_md , "r" ) as file_in :
256- md_content = file_in .readlines ()
257- for line in md_content :
258- if "title:" in line :
259- title = line .replace ("title:" , "" ).strip (" \r \n " )
260- break
261- else :
262- log (f"{ python_md } does not exist" )
247+ for item in getattr (module , "__all__" ):
248+ if item .endswith ("Client" ):
249+ title = item
250+ break
251+
252+ if not title :
253+ log (f"Can not find the title in { self .whole_package_name } " )
254+
263255 os .chdir (Path (f'sdk/{ self .sdk_folder } ' ))
264256 # add `title` and update `is_stable` in sdk_packaging.toml
265- toml = Path (f"azure-mgmt- { self .package_name } " ) / "sdk_packaging.toml"
257+ toml = Path (self .whole_package_name ) / "sdk_packaging.toml"
266258 stable_config = "is_stable = " + ("true" if self .tag_is_stable else "false" ) + "\n "
267259 if toml .exists ():
268260 def edit_toml (content : List [str ]):
@@ -282,7 +274,7 @@ def edit_toml(content: List[str]):
282274 else :
283275 log (f"{ os .getcwd ()} /{ toml } does not exist" )
284276
285- print_check (f'python -m packaging_tools --build-conf azure-mgmt- { self .package_name } ' )
277+ print_check (f'python -m packaging_tools --build-conf { self .whole_package_name } ' )
286278 log ('packaging_tools --build-conf successfully ' )
287279
288280 def check_pprint_name (self ):
@@ -390,7 +382,7 @@ def check_changelog_file(self):
390382 self .edit_changelog ()
391383
392384 def check_dev_requirement (self ):
393- file = Path (f'sdk/{ self .sdk_folder } /azure-mgmt- { self .package_name } /dev_requirements.txt' )
385+ file = Path (f'sdk/{ self .sdk_folder } /{ self .whole_package_name } /dev_requirements.txt' )
394386 content = [
395387 "-e ../../../tools/azure-sdk-tools\n " ,
396388 "../../identity/azure-identity\n "
@@ -407,22 +399,23 @@ def check_package_size(self):
407399 self .check_package_size_result .append (f'ERROR: Package size is over 2MBytes: { Path (package ).name } !!!' )
408400
409401 def check_model_flatten (self ):
410- last_version = self .get_last_release_version ()
411- if last_version == "" or last_version .startswith ("1.0.0b" ):
412- with open (self .readme_md_path , 'r' ) as file_in :
413- readme_md_content = file_in .read ()
414-
415- with open (self .readme_python_md_path , 'r' ) as file_in :
416- readme_python_md_content = file_in .read ()
417-
418- if "flatten-models: false" not in readme_md_content and "flatten-models: false" not in readme_python_md_content and self .issue_link :
419- api = Github (self .bot_token ).get_repo ("Azure/sdk-release-request" )
420- issue_number = int (self .issue_link .split ('/' )[- 1 ])
421- issue = api .get_issue (issue_number )
422- assignee = issue .assignee .login if issue .assignee else ""
423- message = "please set `flatten-models: false` in readme.md or readme.python.md"
424- issue .create_comment (f'@{ assignee } , { message } ' )
425- raise Exception (message )
402+ if self .from_swagger :
403+ last_version = self .get_last_release_version ()
404+ if last_version == "" or last_version .startswith ("1.0.0b" ):
405+ with open (self .readme_md_path , 'r' ) as file_in :
406+ readme_md_content = file_in .read ()
407+
408+ with open (self .readme_python_md_path , 'r' ) as file_in :
409+ readme_python_md_content = file_in .read ()
410+
411+ if "flatten-models: false" not in readme_md_content and "flatten-models: false" not in readme_python_md_content and self .issue_link :
412+ api = Github (self .bot_token ).get_repo ("Azure/sdk-release-request" )
413+ issue_number = int (self .issue_link .split ('/' )[- 1 ])
414+ issue = api .get_issue (issue_number )
415+ assignee = issue .assignee .login if issue .assignee else ""
416+ message = "please set `flatten-models: false` in readme.md or readme.python.md"
417+ issue .create_comment (f'@{ assignee } , { message } ' )
418+ raise Exception (message )
426419
427420 def check_file (self ):
428421 self .check_file_with_packaging_tool ()
@@ -435,7 +428,7 @@ def check_file(self):
435428 self .check_model_flatten ()
436429
437430 def sdk_code_path (self ) -> str :
438- return str (Path (f'sdk/{ self .sdk_folder } /azure-mgmt- { self .package_name } ' ))
431+ return str (Path (f'sdk/{ self .sdk_folder } /{ self .whole_package_name } ' ))
439432
440433 @property
441434 def is_single_path (self ) -> bool :
@@ -451,7 +444,6 @@ def install_package_locally(self):
451444
452445 def prepare_test_env (self ):
453446 self .install_package_locally ()
454- set_test_env_var ()
455447
456448 @staticmethod
457449 def is_live_test ()-> bool :
@@ -512,7 +504,7 @@ def create_pr_proc(self):
512504 pr_body = "" if not self .check_package_size_result else "{}\n " .format ("\n " .join (self .check_package_size_result ))
513505 pr_body = pr_body + "{} \n {} \n {}" .format (self .issue_link , self .test_result , self .pipeline_link )
514506 if not self .is_single_path :
515- pr_body += f'\n BuildTargetingString\n azure-mgmt- { self .package_name } \n Skip.CreateApiReview\n true'
507+ pr_body += f'\n BuildTargetingString\n { self .whole_package_name } \n Skip.CreateApiReview\n true'
516508 res_create = api .pulls .create (pr_title , pr_head , pr_base , pr_body )
517509
518510 # Add issue link on PR
@@ -547,6 +539,10 @@ def get_private_package(self) -> List[str]:
547539 content = self .get_autorest_result ()
548540 return content ["packages" ][0 ]["artifacts" ]
549541
542+ @property
543+ def get_whl_package (self ) -> str :
544+ return [package for package in self .get_private_package () if package .endswith ('.whl' )][0 ]
545+
550546 def upload_private_package_proc (self , container_name : str ):
551547 container_client = ContainerClient .from_connection_string (conn_str = self .conn_str , container_name = container_name )
552548 private_package = self .get_private_package ()
0 commit comments