cli.py
Go to the documentation of this file.
1 import argparse
2 import os
3 
4 from genmsg import MsgContext, command_line, msg_loader
5 
6 from . import generator
7 from ._typing import TYPE_CHECKING
8 
9 if TYPE_CHECKING:
10  from typing import Callable, Dict, List, Optional
11 
12  SrvMsgCallback = Callable[
13  [str, List[str], Optional[str], Dict[str, List[str]]], None
14  ]
15 
16 
17 def run_message(
18  package, # type: str
19  package_files, # type: List[str]
20  outdir, # type: Optional[str]
21  search_paths, # type: Dict[str, List[str]]
22 ):
23  # type: (...) -> None
24  msg_context = MsgContext.create_default()
25 
26  for target_path in package_files:
27  target_path = os.path.abspath(target_path)
28  output_dir = outdir
29  if output_dir is None:
30  output_dir = os.path.abspath(os.path.join(target_path, os.path.pardir))
31 
32  generator.generate_stub(
33  msg_context,
34  msg_loader.load_msg_from_file,
35  generator.generate_message_stub,
36  package,
37  target_path,
38  output_dir,
39  search_paths,
40  )
41 
42 
43 def run_service(
44  package, # type: str
45  package_files, # type: List[str]
46  outdir, # type: Optional[str]
47  search_paths, # type: Dict[str, List[str]]
48 ):
49  # type: (...) -> None
50  msg_context = MsgContext.create_default()
51 
52  for target_path in package_files:
53  target_path = os.path.abspath(target_path)
54  output_dir = outdir
55  if output_dir is None:
56  output_dir = os.path.abspath(os.path.join(target_path, os.path.pardir))
57 
58  generator.generate_stub(
59  msg_context,
60  msg_loader.load_srv_from_file,
61  generator.generate_service_stub,
62  package,
63  target_path,
64  output_dir,
65  search_paths,
66  )
67 
68 
69 def run_module(
70  package_dir, # type: str
71  outdir, # type: str
72  module_finder, # type: str
73 ):
74  # type: (...) -> None
75  generator.generate_module_stub(package_dir, outdir, module_finder)
76 
77 
78 def _start_msg_srv(args):
79  # type: (argparse.Namespace) -> None
80  search_paths = command_line.includepath_to_dict(
81  args.include_path
82  ) # type: Dict[str, List[str]]
83  args.handler(args.package, args.files, args.out_dir, search_paths)
84 
85 
86 def _start_module(args):
87  # type: (argparse.Namespace) -> None
88  package_dir = args.package_dir
89  out_dir = args.out_dir
90  if out_dir is None:
91  out_dir = package_dir
92 
93  run_module(package_dir, out_dir, args.module_finder)
94 
95 
97  # type: (argparse.ArgumentParser) -> None
98  parser.add_argument(
99  "package_dir",
100  type=str,
101  help="Package directory to create __init__.pyi",
102  )
103  parser.add_argument(
104  "--module-finder",
105  type=str,
106  choices=generator.GenPyModuleFinders.keys(),
107  help=(
108  "Method to find generated messages/services. "
109  "(genmsg: Files with .msg, .srv would be regarded as modules. "
110  "py: Python files starting with `_` would be regarded as modules.)"
111  ),
112  default="genmsg",
113  )
114  parser.add_argument(
115  "--out-dir",
116  type=str,
117  help=(
118  "Output directory. "
119  "If the option is unset, __init__.pyi will be generated in the same "
120  "directory as package_dir."
121  ),
122  )
123  parser.set_defaults(func=_start_module)
124 
125 
126 def _setup_msg_srv_options(parser, handler):
127  # type: (argparse.ArgumentParser, SrvMsgCallback) -> None
128  parser.add_argument(
129  "package", type=str, help="Package name of given files", default="out"
130  )
131  parser.add_argument("files", type=str, help="Files to generate stubs", nargs="+")
132  parser.add_argument(
133  "--out-dir",
134  type=str,
135  help=(
136  "Output directory. "
137  "If the option is unset, each stub file will be generated in the same "
138  "directory as each input."
139  ),
140  )
141  parser.add_argument(
142  "--include-path",
143  "-I",
144  type=str,
145  action="append",
146  help="Include paths for processing given files",
147  )
148  parser.set_defaults(func=_start_msg_srv)
149  parser.set_defaults(handler=handler)
150 
151 
152 def cli():
153  # type: (...) -> None
154  prog = "genmypy"
155  parser = argparse.ArgumentParser(
156  prog,
157  description="""Generate python stub files from genmsg specs
158 
159 Examples:
160 $ {0} msg custom_msgs custom_msgs/msg/Custom.msg
161 $ {0} msg sensor_msgs --out-dir out \\
162  -Istd_msgs:/opt/ros/noetic/share/std_msgs/msg \\
163  -Isensor_msgs:/opt/ros/noetic/share/sensor_msgs/msg \\
164  /opt/ros/noetic/share/sensor_msgs/msg/PointCloud2.msg
165 $ {0} srv custom_msgs custom_msgs/srv/Custom.msg
166 $ {0} srv nav_msgs --out-dir out \\
167  -Istd_msgs:/opt/ros/noetic/share/std_msgs/msg \\
168  -Isensor_msgs:/opt/ros/noetic/share/sensor_msgs/msg \\
169  /opt/ros/noetic/share/sensor_msgs/srv/SetCameraInfo.srv
170 $ {0} module custom_msgs/msg/""".format(
171  prog
172  ),
173  formatter_class=argparse.RawTextHelpFormatter,
174  )
175  subparser = parser.add_subparsers()
177  subparser.add_parser("msg", help="Generate stub files from .msg files"),
178  run_message,
179  )
181  subparser.add_parser("srv", help="Generate stub files from .srv files"),
182  run_service,
183  )
185  subparser.add_parser(
186  "module", help="Generate __init__.pyi from a msg/srv directory"
187  )
188  )
189  args = parser.parse_args()
190  args.func(args)
def _setup_module_options(parser)
Definition: cli.py:96
def run_service(package, package_files, outdir, search_paths)
Definition: cli.py:48
def cli()
Definition: cli.py:152
def run_message(package, package_files, outdir, search_paths)
Definition: cli.py:22
def run_module(package_dir, outdir, module_finder)
Definition: cli.py:73
def _start_module(args)
Definition: cli.py:86
def _setup_msg_srv_options(parser, handler)
Definition: cli.py:126
def _start_msg_srv(args)
Definition: cli.py:78


genmypy
Author(s): Yuki Igarashi, Tamaki Nishino
autogenerated on Mon Apr 10 2023 02:40:49