Replace named tuples with Data Classes
Use Data Classes instead of named tuples since the former is the
recommended approach for Python >= 3.7.
Test: atest --host atest_unittests
Bug: 1854327
Change-Id: I6014b72c75063d0a0990363ce846a53624e10bf5
diff --git a/atest/bazel_mode.py b/atest/bazel_mode.py
index cb77489..4aea3da 100644
--- a/atest/bazel_mode.py
+++ b/atest/bazel_mode.py
@@ -22,11 +22,12 @@
# pylint: disable=missing-function-docstring
# pylint: disable=missing-class-docstring
+import dataclasses
import os
import shutil
from abc import ABC, abstractmethod
-from collections import defaultdict, namedtuple, OrderedDict
+from collections import defaultdict, OrderedDict
from pathlib import Path
from typing import Any, Dict, IO, List, Set
@@ -202,8 +203,8 @@
self.name_to_target[target_name] = target
- for bzl_package, symbol in target.required_imports():
- self.imports[bzl_package].add(symbol)
+ for i in target.required_imports():
+ self.imports[i.bzl_package].add(i.symbol)
def generate(self, workspace_out_path: Path):
package_dir = workspace_out_path.joinpath(self.path)
@@ -230,8 +231,16 @@
target.write_to_build_file(f)
-Import = namedtuple('Import', ['bzl_package', 'symbol'])
-Config = namedtuple('Config', ['name', 'out_path'])
+@dataclasses.dataclass(frozen=True)
+class Import:
+ bzl_package: str
+ symbol: str
+
+
+@dataclasses.dataclass(frozen=True)
+class Config:
+ name: str
+ out_path: Path
class Target(ABC):
@@ -330,7 +339,7 @@
fprint(f' name = "{self._name}",')
fprint(' files = select({')
- for config in sorted(self.config_files.keys()):
+ for config in sorted(self.config_files.keys(), key=lambda c: c.name):
fprint(f' "//bazel/rules:{config.name}":'
f' glob(["{self._name}/{config.name}/**/*"]),')