diff --git a/os_traits/__init__.py b/os_traits/__init__.py index 84cd2eb..6b03c26 100644 --- a/os_traits/__init__.py +++ b/os_traits/__init__.py @@ -62,3 +62,18 @@ def get_traits(prefix=None): v not in excluded_values and (prefix is None or v.startswith(prefix)) ] + + +def check_traits(traits): + """ + Returns a tuple of two trait string sets, the first set contains valid + traits, and the second contains others. + + :param traits: An iterable contains trait strings. + """ + trait_set = set(traits) + valid_trait_set = set(get_traits()) + + valid_traits = trait_set & valid_trait_set + + return (valid_traits, trait_set - valid_traits) diff --git a/os_traits/tests/test_os_traits.py b/os_traits/tests/test_os_traits.py index bfdab83..4d08e7d 100644 --- a/os_traits/tests/test_os_traits.py +++ b/os_traits/tests/test_os_traits.py @@ -43,3 +43,13 @@ class TestOs_traits(base.TestCase): traits = ot.get_traits(ot.NAMESPACES['x86']) self.assertIn("hw:cpu:x86:sse42", traits) self.assertEqual(35, len(traits)) + + def test_check_traits(self): + traits = set(["hw:cpu:x86:sse42", "hw:cpu:x86:xop"]) + not_traits = set(["not_trait1", "not_trait2"]) + + check_traits = [] + check_traits.extend(traits) + check_traits.extend(not_traits) + self.assertEqual((traits, not_traits), + ot.check_traits(check_traits))