|
1 | 1 | import argparse |
2 | 2 | import json |
3 | 3 | import logging |
4 | | -import os |
5 | 4 | from pathlib import Path |
6 | | -import re |
7 | 5 | from subprocess import check_call |
8 | 6 |
|
9 | | -from .swaggertosdk.SwaggerToSdkCore import ( |
10 | | - read_config, |
11 | | - CONFIG_FILE, |
12 | | -) |
13 | | -from azure_devtools.ci_tools.git_tools import get_add_diff_file_list |
14 | | -from .swaggertosdk.autorest_tools import build_autorest_options |
| 7 | +from .swaggertosdk.SwaggerToSdkCore import (CONFIG_FILE,) |
15 | 8 | from .generate_sdk import generate |
| 9 | +from .generate_utils import get_package_names, init_new_service, update_servicemetadata |
16 | 10 |
|
17 | 11 | _LOGGER = logging.getLogger(__name__) |
18 | | -_SDK_FOLDER_RE = re.compile(r"^(sdk/[\w-]+)/(azure[\w-]+)/", re.ASCII) |
19 | | - |
20 | | -DEFAULT_DEST_FOLDER = "./dist" |
21 | | - |
22 | | - |
23 | | -def get_package_names(sdk_folder): |
24 | | - files = get_add_diff_file_list(sdk_folder) |
25 | | - matches = {_SDK_FOLDER_RE.search(f) for f in files} |
26 | | - package_names = {match.groups() for match in matches if match is not None} |
27 | | - return package_names |
28 | | - |
29 | | - |
30 | | -def init_new_service(package_name, folder_name): |
31 | | - setup = Path(folder_name, package_name, "setup.py") |
32 | | - if not setup.exists(): |
33 | | - check_call(f"python -m packaging_tools --build-conf {package_name} -o {folder_name}", shell=True) |
34 | | - ci = Path(folder_name, "ci.yml") |
35 | | - if not ci.exists(): |
36 | | - with open("ci_template.yml", "r") as file_in: |
37 | | - content = file_in.readlines() |
38 | | - name = package_name.replace("azure-", "").replace("mgmt-", "") |
39 | | - content = [line.replace("MyService", name) for line in content] |
40 | | - with open(str(ci), "w") as file_out: |
41 | | - file_out.writelines(content) |
42 | | - |
43 | | - |
44 | | -def update_servicemetadata(sdk_folder, data, config, folder_name, package_name, spec_folder, input_readme): |
45 | | - |
46 | | - readme_file = str(Path(spec_folder, input_readme)) |
47 | | - global_conf = config["meta"] |
48 | | - local_conf = config["projects"][readme_file] |
49 | | - |
50 | | - cmd = ["autorest", input_readme] |
51 | | - cmd += build_autorest_options(global_conf, local_conf) |
52 | | - |
53 | | - # metadata |
54 | | - metadata = { |
55 | | - "autorest": global_conf["autorest_options"]["version"], |
56 | | - "use": global_conf["autorest_options"]["use"], |
57 | | - "commit": data["headSha"], |
58 | | - "repository_url": data["repoHttpsUrl"], |
59 | | - "autorest_command": " ".join(cmd), |
60 | | - "readme": input_readme, |
61 | | - } |
62 | | - |
63 | | - _LOGGER.info("Metadata json:\n {}".format(json.dumps(metadata, indent=2))) |
64 | | - |
65 | | - package_folder = Path(sdk_folder, folder_name, package_name).expanduser() |
66 | | - if not os.path.exists(package_folder): |
67 | | - _LOGGER.info(f"Package folder doesn't exist: {package_folder}") |
68 | | - _LOGGER.info("Failed to save metadata.") |
69 | | - return |
70 | | - |
71 | | - metadata_file_path = os.path.join(package_folder, "_meta.json") |
72 | | - with open(metadata_file_path, "w") as writer: |
73 | | - json.dump(metadata, writer, indent=2) |
74 | | - _LOGGER.info(f"Saved metadata to {metadata_file_path}") |
75 | | - |
76 | | - # Check whether MANIFEST.in includes _meta.json |
77 | | - require_meta = "include _meta.json\n" |
78 | | - manifest_file = os.path.join(package_folder, "MANIFEST.in") |
79 | | - if not os.path.exists(manifest_file): |
80 | | - _LOGGER.info(f"MANIFEST.in doesn't exist: {manifest_file}") |
81 | | - return |
82 | | - |
83 | | - includes = [] |
84 | | - write_flag = False |
85 | | - with open(manifest_file, "r") as f: |
86 | | - includes = f.readlines() |
87 | | - if require_meta not in includes: |
88 | | - includes = [require_meta] + includes |
89 | | - write_flag = True |
90 | | - |
91 | | - if write_flag: |
92 | | - with open(manifest_file, "w") as f: |
93 | | - f.write("".join(includes)) |
94 | 12 |
|
95 | 13 |
|
96 | 14 | def main(generate_input, generate_output): |
|
0 commit comments