pw_cli: Avoid NamedTuple multiple inheritance
Multiple inheritance with NamedTuple is not supported in Python 3.9. Use
@dataclass instead.
Change-Id: I190396b39a2c177b1b918a879e3fef309e6a55b4
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/40062
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Reviewed-by: Joe Ethier <jethier@google.com>
diff --git a/pw_cli/py/pw_cli/envparse.py b/pw_cli/py/pw_cli/envparse.py
index 91445af..9617d78 100644
--- a/pw_cli/py/pw_cli/envparse.py
+++ b/pw_cli/py/pw_cli/envparse.py
@@ -14,9 +14,9 @@
"""The envparse module defines an environment variable parser."""
import argparse
+from dataclasses import dataclass
import os
-from typing import Callable, Dict, Generic, IO, List, Mapping
-from typing import NamedTuple, Optional, TypeVar
+from typing import Callable, Dict, Generic, IO, List, Mapping, Optional, TypeVar
class EnvNamespace(argparse.Namespace): # pylint: disable=too-few-public-methods
@@ -27,7 +27,8 @@
TypeConversion = Callable[[str], T]
-class VariableDescriptor(NamedTuple, Generic[T]):
+@dataclass
+class VariableDescriptor(Generic[T]):
name: str
type: TypeConversion[T]
default: Optional[T]
@@ -79,7 +80,7 @@
self,
name: str,
# pylint: disable=redefined-builtin
- type: TypeConversion[T] = str, # type: ignore
+ type: TypeConversion[T] = str, # type: ignore[assignment]
# pylint: enable=redefined-builtin
default: Optional[T] = None,
) -> None:
@@ -98,10 +99,7 @@
raise ValueError(
f'Variable {name} does not have prefix {self._prefix}')
- self._variables[name] = VariableDescriptor(
- name,
- type, # type: ignore
- default) # type: ignore
+ self._variables[name] = VariableDescriptor(name, type, default)
def add_allowed_suffix(self, suffix: str) -> None:
"""Registers an environmant variable name suffix to be allowed."""
@@ -128,7 +126,7 @@
val = desc.default
else:
try:
- val = desc.type(env[var])
+ val = desc.type(env[var]) # type: ignore
except Exception as err:
raise EnvironmentValueError(var, env[var]) from err