Parse argv. Returns: A Namespace with parsed flags.
(self)
| 210 | return self.parser.add_argument(name, default=default, **kwargs) |
| 211 | |
| 212 | def parse_known_args(self) -> argparse_flags.argparse.Namespace: |
| 213 | """Parse argv. |
| 214 | |
| 215 | Returns: |
| 216 | A Namespace with parsed flags. |
| 217 | """ |
| 218 | args, _ = self.parser.parse_known_args(self.argv[1:], self.namespace) |
| 219 | |
| 220 | # Defaults for which no flags were provided are added as flags. |
| 221 | for arg in _flags(self.argv)[1:]: |
| 222 | # Remove an arg from `args.defaults` if its value is given explicitly. |
| 223 | # Note that args after `--` are not considered, as they are not returned by `_flags`. |
| 224 | args.defaults.pop(_argname(arg), None) |
| 225 | # Insert --<flag>=<default_value> to `args.argv`. |
| 226 | args.argv = _insert_flags(args.argv, ["=".join(arg) for arg in args.defaults.items()]) |
| 227 | |
| 228 | # Filter args if requested. |
| 229 | if args.filter_argv: |
| 230 | pat = re.compile(args.filter_argv) |
| 231 | args.argv = [args.argv[0]] + [ |
| 232 | arg for arg in _flags(args.argv)[1:] if pat.match(_argname(arg)) |
| 233 | ] |
| 234 | |
| 235 | return args |
| 236 | |
| 237 | |
| 238 | def _drop_one(items: list[str], drop: str) -> list[str]: |