generate.py
Go to the documentation of this file.
1 # Copyright 2020 The gRPC Authors
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 """Generates grpc-prefixed packages using template renderer.
15 
16 To use this script, please use 3.7+ interpreter. This script is work-directory
17 agnostic. A quick executable command:
18 
19  python3 tools/distrib/python/grpc_prefixed/generate.py
20 """
21 
22 import dataclasses
23 import datetime
24 import logging
25 import os
26 import shutil
27 import subprocess
28 import sys
29 
30 import jinja2
31 
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')
36 
37 env = jinja2.Environment(
38  loader=jinja2.FileSystemLoader(os.path.join(WORK_PATH, 'templates')))
39 
40 LOGGER = logging.getLogger(__name__)
41 POPEN_TIMEOUT_S = datetime.timedelta(minutes=1).total_seconds()
42 
43 
44 @dataclasses.dataclass
46  """Meta-info of a PyPI package."""
47  name: str
48  name_long: str
49  destination_package: str
50  version: str = '1.0.0'
51 
52 
53 def clean() -> None:
54  try:
55  shutil.rmtree(BUILD_PATH)
56  except FileNotFoundError:
57  pass
58 
59  try:
60  shutil.rmtree(DIST_PATH)
61  except FileNotFoundError:
62  pass
63 
64 
65 def generate_package(meta: PackageMeta) -> None:
66  # Makes package directory
67  package_path = os.path.join(BUILD_PATH, meta.name)
68  os.makedirs(package_path, exist_ok=True)
69 
70  # Copy license
71  shutil.copyfile(LICENSE, os.path.join(package_path, 'LICENSE'))
72 
73  # Generates source code
74  for template_name in env.list_templates():
75  template = env.get_template(template_name)
76  with open(
77  os.path.join(package_path,
78  template_name.replace('.template', '')), 'w') as f:
79  f.write(template.render(dataclasses.asdict(meta)))
80 
81  # Creates wheel
82  job = subprocess.Popen([
83  sys.executable,
84  os.path.join(package_path, 'setup.py'), 'sdist', '--dist-dir', DIST_PATH
85  ],
86  cwd=package_path,
87  stdout=subprocess.PIPE,
88  stderr=subprocess.STDOUT)
89  outs, _ = job.communicate(timeout=POPEN_TIMEOUT_S)
90 
91  # Logs result
92  if job.returncode != 0:
93  LOGGER.error('Wheel creation failed with %d', job.returncode)
94  LOGGER.error(outs)
95  else:
96  LOGGER.info('Package <%s> generated', meta.name)
97 
98 
99 def main():
100  clean()
101 
103  PackageMeta(name='grpc',
104  name_long='gRPC Python',
105  destination_package='grpcio'))
106 
108  PackageMeta(name='grpc-status',
109  name_long='gRPC Rich Error Status',
110  destination_package='grpcio-status'))
111 
113  PackageMeta(name='grpc-channelz',
114  name_long='gRPC Channel Tracing',
115  destination_package='grpcio-channelz'))
116 
118  PackageMeta(name='grpc-tools',
119  name_long='ProtoBuf Code Generator',
120  destination_package='grpcio-tools'))
121 
123  PackageMeta(name='grpc-reflection',
124  name_long='gRPC Reflection',
125  destination_package='grpcio-reflection'))
126 
128  PackageMeta(name='grpc-testing',
129  name_long='gRPC Testing Utility',
130  destination_package='grpcio-testing'))
131 
133  PackageMeta(name='grpc-health-checking',
134  name_long='gRPC Health Checking',
135  destination_package='grpcio-health-checking'))
136 
138  PackageMeta(name='grpc-csds',
139  name_long='gRPC Client Status Discovery Service',
140  destination_package='grpcio-csds'))
141 
143  PackageMeta(name='grpc-admin',
144  name_long='gRPC Admin Interface',
145  destination_package='grpcio-admin'))
146 
147 
148 if __name__ == "__main__":
149  logging.basicConfig(level=logging.INFO)
150  main()
generate.clean
None clean()
Definition: generate.py:53
generate.generate_package
None generate_package(PackageMeta meta)
Definition: generate.py:65
generate.PackageMeta
Definition: generate.py:45
main
Definition: main.py:1
generate.main
def main()
Definition: generate.py:99
open
#define open
Definition: test-fs.c:46


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:23