From 6e15c46135ad90edc831e8baa27f784e386eb5a8 Mon Sep 17 00:00:00 2001 From: Dan Bungert Date: Sat, 1 Apr 2023 21:00:52 -0600 Subject: [PATCH] util: add matching_dicts Move some of this logic to a common util, so it can be used in unittests. The curtin version is close but expects to work on a storage config, which is not a flat list. --- subiquity/tests/api/test_api.py | 8 +++++--- subiquitycore/utils.py | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/subiquity/tests/api/test_api.py b/subiquity/tests/api/test_api.py index e2196230..fd75ca5b 100644 --- a/subiquity/tests/api/test_api.py +++ b/subiquity/tests/api/test_api.py @@ -28,7 +28,10 @@ from unittest.mock import patch from urllib.parse import unquote from subiquitycore.tests import SubiTestCase -from subiquitycore.utils import astart_command +from subiquitycore.utils import ( + astart_command, + matching_dicts, + ) default_timeout = 10 @@ -37,8 +40,7 @@ def match(items, **kw): typename = kw.pop('_type', None) if typename is not None: kw['$type'] = typename - return [item for item in items - if all(item.get(k) == v for k, v in kw.items())] + return matching_dicts(items, **kw) def timeout(multiplier=1): diff --git a/subiquitycore/utils.py b/subiquitycore/utils.py index 40307c81..540879db 100644 --- a/subiquitycore/utils.py +++ b/subiquitycore/utils.py @@ -176,3 +176,10 @@ def disable_subiquity(): "snap.subiquity.subiquity-service.service", "serial-subiquity@*.service"]) return + + +def matching_dicts(items, **kw): + """Given an input sequence of dictionaries, return a list of dicts where + the supplied keyword arguments all match those items.""" + return [item for item in items + if all(item.get(k) == v for k, v in kw.items())]