| 1234567891011121314151617181920212223242526272829303132333435 |
- """Split namespace for argparse to allow separating options by prefix.
- We use this to direct some options to an Options object and some to a
- regular namespace.
- """
- # In its own file largely because mypyc doesn't support its use of
- # __getattr__/__setattr__ and has some issues with __dict__
- from __future__ import annotations
- import argparse
- from typing import Any
- class SplitNamespace(argparse.Namespace):
- def __init__(self, standard_namespace: object, alt_namespace: object, alt_prefix: str) -> None:
- self.__dict__["_standard_namespace"] = standard_namespace
- self.__dict__["_alt_namespace"] = alt_namespace
- self.__dict__["_alt_prefix"] = alt_prefix
- def _get(self) -> tuple[Any, Any]:
- return (self._standard_namespace, self._alt_namespace)
- def __setattr__(self, name: str, value: Any) -> None:
- if name.startswith(self._alt_prefix):
- setattr(self._alt_namespace, name[len(self._alt_prefix) :], value)
- else:
- setattr(self._standard_namespace, name, value)
- def __getattr__(self, name: str) -> Any:
- if name.startswith(self._alt_prefix):
- return getattr(self._alt_namespace, name[len(self._alt_prefix) :])
- else:
- return getattr(self._standard_namespace, name)
|