6
6
from datetime import date , datetime
7
7
from typing import Set , List , Dict
8
8
from random import randint
9
-
9
+ from pathlib import Path
10
10
from github import Github
11
11
from github .Repository import Repository
12
12
@@ -44,6 +44,7 @@ class IssueProcess:
44
44
package_name = '' # target package name
45
45
target_date = '' # target release date asked by customer
46
46
date_from_target = 0
47
+ spec_repo = None # local swagger repo path
47
48
"""
48
49
49
50
def __init__ (self , issue_package : IssuePackage , request_repo_dict : Dict [str , Repository ],
@@ -65,6 +66,7 @@ def __init__(self, issue_package: IssuePackage, request_repo_dict: Dict[str, Rep
65
66
self .date_from_target = 0
66
67
self .is_open = True
67
68
self .issue_title = issue_package .issue .title .split (": " , 1 )[- 1 ]
69
+ self .spec_repo = Path (os .getenv ('SPEC_REPO' ))
68
70
69
71
@property
70
72
def created_date_format (self ) -> str :
@@ -91,6 +93,16 @@ def handle_link_contains_commit(self, link: str) -> str:
91
93
def comment (self , message : str ) -> None :
92
94
self .issue_package .issue .create_comment (message )
93
95
96
+ # get "workloads/resource-manager" from "workloads/resource-manager/Microsoft.Workloads/stable/2023-04-01/operations.json"
97
+ def get_valid_relative_readme_folder (self , readme_folder : str ) -> str :
98
+ folder = Path (Path (readme_folder ).as_posix ().strip ("/" ))
99
+ while "resource-manager" in str (folder ):
100
+ if Path (self .spec_repo , folder , "readme.md" ).exists ():
101
+ return folder .as_posix ()
102
+ folder = folder .parent
103
+
104
+ return folder .as_posix ()
105
+
94
106
def get_readme_from_pr_link (self , link : str ) -> str :
95
107
pr_number = int (link .replace (f"{ _SWAGGER_PULL } /" , "" ).split ('/' )[0 ])
96
108
@@ -102,10 +114,10 @@ def get_readme_from_pr_link(self, link: str) -> str:
102
114
if '/resource-manager' not in contents_url :
103
115
continue
104
116
try :
105
- pk_url_name .add (re . findall ( r '/specification/(.*?)/resource-manager/' , contents_url )[ 0 ] )
117
+ pk_url_name .add (self . get_valid_relative_readme_folder ( contents_url . split ( '/specification' )[ 1 ]) )
106
118
except Exception as e :
107
119
continue
108
- readme_link = [f'{ _SWAGGER_URL } /{ item } /resource-manager ' for item in pk_url_name ]
120
+ readme_link = [f'{ _SWAGGER_URL } /{ item } ' for item in pk_url_name ]
109
121
if len (readme_link ) > 1 :
110
122
multi_link = ', ' .join (readme_link )
111
123
pr = f"{ _SWAGGER_PULL } /{ pr_number } "
@@ -146,12 +158,19 @@ def get_readme_link(self, origin_link: str):
146
158
# (i.e. https://github.com/Azure/azure-rest-api-specs/tree/main/specification/xxxx)
147
159
self .readme_link = link + '/resource-manager'
148
160
else :
149
- self .readme_link = link .split ('/resource-manager' )[0 ] + '/resource-manager'
161
+ relative_readme_folder = self .get_valid_relative_readme_folder (link .split ('/specification' )[1 ])
162
+ self .readme_link = f"{ _SWAGGER_URL } /{ relative_readme_folder } "
163
+
164
+ @property
165
+ def readme_local (self ) -> str :
166
+ return str (Path (self .spec_repo , self .readme_link .split ('specification/' )[1 ]))
167
+
168
+ def get_local_file_content (self , name : str = "readme.md" ) -> str :
169
+ with open (Path (self .readme_local , name ), 'r' , encoding = 'utf-8' ) as f :
170
+ return f .read ()
150
171
151
172
def get_default_readme_tag (self ) -> None :
152
- pattern_resource_manager = re .compile (r'/specification/([\w-]+/)+resource-manager' )
153
- readme_path = pattern_resource_manager .search (self .readme_link ).group () + '/readme.md'
154
- contents = str (self .issue_package .rest_repo .get_contents (readme_path ).decoded_content )
173
+ contents = self .get_local_file_content ()
155
174
pattern_tag = re .compile (r'tag: package-[\w+-.]+' )
156
175
self .default_readme_tag = pattern_tag .search (contents ).group ().split (':' )[- 1 ].strip ()
157
176
0 commit comments