Tipragot
628be439b8
Cela permet de ne pas avoir de problèmes de compatibilité car python est dans le git.
36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
"""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)
|