14 """Generates grpc-prefixed packages using template renderer.
16 To use this script, please use 3.7+ interpreter. This script is work-directory
17 agnostic. A quick executable command:
19 python3 tools/distrib/python/grpc_prefixed/generate.py
32 WORK_PATH = os.path.realpath(os.path.dirname(__file__))
33 LICENSE = os.path.join(WORK_PATH,
'../../../../LICENSE')
34 BUILD_PATH = os.path.join(WORK_PATH,
'build')
35 DIST_PATH = os.path.join(WORK_PATH,
'dist')
37 env = jinja2.Environment(
38 loader=jinja2.FileSystemLoader(os.path.join(WORK_PATH,
'templates')))
40 LOGGER = logging.getLogger(__name__)
41 POPEN_TIMEOUT_S = datetime.timedelta(minutes=1).total_seconds()
44 @dataclasses.dataclass
46 """Meta-info of a PyPI package."""
49 destination_package: str
50 version: str =
'1.0.0'
55 shutil.rmtree(BUILD_PATH)
56 except FileNotFoundError:
60 shutil.rmtree(DIST_PATH)
61 except FileNotFoundError:
67 package_path = os.path.join(BUILD_PATH, meta.name)
68 os.makedirs(package_path, exist_ok=
True)
71 shutil.copyfile(LICENSE, os.path.join(package_path,
'LICENSE'))
74 for template_name
in env.list_templates():
75 template = env.get_template(template_name)
77 os.path.join(package_path,
78 template_name.replace(
'.template',
'')),
'w')
as f:
79 f.write(template.render(dataclasses.asdict(meta)))
82 job = subprocess.Popen([
84 os.path.join(package_path,
'setup.py'),
'sdist',
'--dist-dir', DIST_PATH
87 stdout=subprocess.PIPE,
88 stderr=subprocess.STDOUT)
89 outs, _ = job.communicate(timeout=POPEN_TIMEOUT_S)
92 if job.returncode != 0:
93 LOGGER.error(
'Wheel creation failed with %d', job.returncode)
96 LOGGER.info(
'Package <%s> generated', meta.name)
104 name_long=
'gRPC Python',
105 destination_package=
'grpcio'))
109 name_long=
'gRPC Rich Error Status',
110 destination_package=
'grpcio-status'))
114 name_long=
'gRPC Channel Tracing',
115 destination_package=
'grpcio-channelz'))
119 name_long=
'ProtoBuf Code Generator',
120 destination_package=
'grpcio-tools'))
124 name_long=
'gRPC Reflection',
125 destination_package=
'grpcio-reflection'))
129 name_long=
'gRPC Testing Utility',
130 destination_package=
'grpcio-testing'))
134 name_long=
'gRPC Health Checking',
135 destination_package=
'grpcio-health-checking'))
139 name_long=
'gRPC Client Status Discovery Service',
140 destination_package=
'grpcio-csds'))
144 name_long=
'gRPC Admin Interface',
145 destination_package=
'grpcio-admin'))
148 if __name__ ==
"__main__":
149 logging.basicConfig(level=logging.INFO)