gtn/.venv/Lib/site-packages/mypy/split_namespace.py

36 lines
1.3 KiB
Python
Raw Normal View History

"""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)