Skip to content

Commit 25d79ea

Browse files
committed
verify the existance of input files
1 parent 2577c84 commit 25d79ea

File tree

2 files changed

+36
-16
lines changed

2 files changed

+36
-16
lines changed

src/aaz_dev/ps/controller/ps_module_manager.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
from utils.config import Config
55
from utils.plane import PlaneEnum
66
from utils.readme_helper import parse_readme_file
7+
from utils.exceptions import InvalidAPIUsage, VerificationError
78
from ps.model import PSModuleConfig
89
from swagger.controller.specs_manager import SwaggerSpecsManager
9-
from swagger.model.specs import SwaggerModule
1010
from command.controller.specs_manager import AAZSpecsManager
1111
from swagger.model.specs import OpenAPIResourceProvider
1212
from swagger.utils.tools import resolve_path_to_uri
@@ -36,10 +36,10 @@ def swagger_specs(self):
3636
def _find_module_folder(self):
3737
powershell_folder = Config.POWERSHELL_PATH
3838
if not os.path.exists(powershell_folder) or not os.path.isdir(powershell_folder):
39-
raise ValueError(f"Invalid PowerShell folder: '{powershell_folder}'")
39+
raise VerificationError(f"Invalid PowerShell folder: '{powershell_folder}'")
4040
module_folder = os.path.join(powershell_folder, "src")
4141
if not os.path.exists(module_folder):
42-
raise ValueError(f"Invalid PowerShell folder: cannot find modules in: '{module_folder}'")
42+
raise VerificationError(f"Invalid PowerShell folder: cannot find modules in: '{module_folder}'")
4343
return module_folder
4444

4545
def list_modules(self):
@@ -67,7 +67,7 @@ def load_module(self, module_names):
6767
module_names = module_names.split('/')
6868
folder = os.path.join(self.folder, *module_names)
6969
if not os.path.exists(folder):
70-
raise ValueError(f"Module folder not found: '{folder}'")
70+
raise VerificationError(f"Module folder not found: '{folder}'")
7171
config = self.load_module_config(module_names)
7272
return config
7373

@@ -77,7 +77,7 @@ def load_autorest_config(self, module_names):
7777
folder = os.path.join(self.folder, *module_names)
7878
readme_file = os.path.join(folder, "README.md")
7979
if not os.path.exists(readme_file):
80-
raise ValueError(f"README.md not found in: '{readme_file}'")
80+
raise VerificationError(f"README.md not found in: '{readme_file}'")
8181
content = parse_readme_file(readme_file)
8282
return content['config'], content['title']
8383

@@ -92,15 +92,15 @@ def load_module_config(self, module_names):
9292
config.name = "/".join(module_names)
9393
config.folder = self.folder
9494
if not autorest_config:
95-
raise ValueError(f"autorest config not found in README.md for module: {config.name}")
95+
raise VerificationError(f"autorest config not found in README.md for module: {config.name}")
9696

9797
# config.swagger = autorest_config
9898
repo = autorest_config.get('repo', "https://github.com/Azure/azure-rest-api-specs/blob/$(commit)")
9999
if commit := autorest_config.get('commit'):
100100
repo = repo.replace("$(commit)", commit)
101101
if "$(commit)" in repo:
102102
# make sure the repo is valid https link or valid folder path
103-
raise ValueError(f"commit is not defined in autorest config for module: {config.name}")
103+
raise VerificationError(f"commit is not defined in autorest config for module: {config.name}")
104104
config.repo = repo
105105

106106
readme_file = None
@@ -124,7 +124,7 @@ def load_module_config(self, module_names):
124124
readme_file = resolve_path_to_uri(readme_file)
125125
break
126126
if not readme_file:
127-
raise ValueError(f"swagger readme.md not defined in autorest config for module: {config.name}")
127+
raise VerificationError(f"swagger readme.md not defined in autorest config for module: {config.name}")
128128

129129
# use the local swagger specs to find the resource provider even the repo is in remote
130130
# we can always suppose the local swagger specs will always be newer than the used commit in submitted azure.powershell code
@@ -144,7 +144,7 @@ def load_module_config(self, module_names):
144144
if rp:
145145
break
146146
if not rp:
147-
raise ValueError(f"Resource provider not found in autorest config for module: {config.name}")
147+
raise VerificationError(f"Resource provider not found in autorest config for module: {config.name}")
148148
config.rp = rp
149149
config.swagger = str(rp)
150150

@@ -153,11 +153,22 @@ def load_module_config(self, module_names):
153153
if input_files := autorest_config.get('input-file'):
154154
config.input_files = []
155155
for input_file in input_files:
156-
if input_file.startswith('$(repo)/'):
157-
input_file = input_file.replace('$(repo)/', '')
158-
config.input_files.append(input_file)
156+
if '/specification/' in input_file:
157+
file_path = input_file.split('/specification/')[1]
158+
file_path = os.path.join(self.swagger_specs.specs.spec_folder_path, *file_path.split('/'))
159+
if not os.path.exists(file_path):
160+
raise VerificationError(f"Input file not found for module: {config.name}, input file: {file_path}")
161+
config.input_files.append(file_path)
159162
if not config.input_files and not config.tag:
163+
# using the tag from swagger readme config
160164
config.tag = readme_config.get('tag', None)
165+
if config.tag and config.tag not in rp.tags:
166+
raise VerificationError(f"Tag not found in resource provider for module: {config.name} with tag: {config.tag}")
167+
if not config.input_files and config.tag:
168+
config.input_files = list(rp.tags[config.tag])
169+
170+
if not config.input_files:
171+
raise VerificationError(f"Input file not found in autorest config for module: {config.name}")
161172

162173
if readme_title.startswith("Az."):
163174
config.service_name = readme_title.split(".")[1]
@@ -168,6 +179,7 @@ def load_module_config(self, module_names):
168179
config.title = readme_config.get('title', None)
169180

170181
if not config.title:
171-
raise ValueError(f"Title not found in autorest config or swagger readme for module: {config.name}")
182+
# TODO: get title from swagger json file
183+
raise VerificationError(f"Title not found in autorest config or swagger readme for module: {config.name}")
172184

173185
return config

src/aaz_dev/ps/tests/api_tests/test_powershell.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,21 @@ def test_list_powershell_modules(self):
1919
data = rv.get_json()
2020
self.assertTrue(len(data) > 100)
2121
self.assertTrue(all(module["name"].endswith(".Autorest") for module in data))
22+
# start = None
2223
for module in data:
2324
if module["name"] in [
24-
"Communication/EmailServicedata.Autorest",
25-
"ManagedServiceIdentity/ManagedServiceIdentity.Autorest", "VoiceServices/VoiceServices.Autorest",
26-
"Resources/MSGraph.Autorest", "Migrate/Migrate.Autorest"
25+
"Communication/EmailServicedata.Autorest", # cannot figure out the resource provider name for the data plane in this module
26+
"ManagedServiceIdentity/ManagedServiceIdentity.Autorest", # invalid input files with duplicated paths in different versions
27+
"MySql/MySql.Autorest", # swagger folder structure changed
28+
"VoiceServices/VoiceServices.Autorest", # No title provided in the autorest config
29+
"Resources/MSGraph.Autorest", # swagger not in the azure-rest-api-specs repo
30+
"Migrate/Migrate.Autorest" # input files which contains multiple resource providers
2731
]:
2832
continue
33+
# if module["name"] == "MachineLearningServices/MachineLearningServices.Autorest":
34+
# start = True
35+
# if not start:
36+
# continue
2937
request_url = module["url"]
3038
rv = c.get(request_url)
3139
self.assertTrue(rv.status_code == 200)

0 commit comments

Comments
 (0)