From f9267944b54514465e16c72b8f7db303f684c075 Mon Sep 17 00:00:00 2001 From: Zeid Zabaneh <2043828+zzzeid@users.noreply.github.com> Date: Fri, 2 Jun 2023 11:49:18 -0400 Subject: [PATCH] directory: add peers_and_owners property (bug 1836340) (#70) --- src/mots/directory.py | 15 +++++++++++++++ tests/test_directory.py | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/src/mots/directory.py b/src/mots/directory.py index ec751f9..12f3a05 100644 --- a/src/mots/directory.py +++ b/src/mots/directory.py @@ -9,6 +9,7 @@ from collections import defaultdict from dataclasses import asdict from dataclasses import dataclass +from itertools import chain import logging from mots.module import Module from mots.utils import parse_real_name @@ -118,6 +119,20 @@ def query(self, *paths: str) -> "QueryResult": return QueryResult(result, rejected) + @property + def peers_and_owners(self): + """Return a sorted list of all peers and owners.""" + all_modules = self.modules + all_submodules = list(chain(*[module.submodules for module in all_modules])) + modules_and_submodules = all_modules + all_submodules + + peers_and_owners = set() + for module in modules_and_submodules: + peers_and_owners.update( + [person["bmo_id"] for person in module.peers + module.owners] + ) + return sorted(list(peers_and_owners)) + class QueryResult: """Helper class to simplify query result interpretation.""" diff --git a/tests/test_directory.py b/tests/test_directory.py index e08b791..8e121fb 100644 --- a/tests/test_directory.py +++ b/tests/test_directory.py @@ -184,3 +184,9 @@ def test_directory__QueryResult_empty_addition(): empty_result = QueryResult() other_empty_result = QueryResult() assert not (empty_result + other_empty_result) + + +def test_directory__peers_and_owners(repo): + file_config = FileConfig(repo / "mots.yml") + directory = Directory(file_config) + assert directory.peers_and_owners == [0, 1, 2]