diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-08-16 22:45:55 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-08-16 22:45:55 +0000 |
commit | 168ed1651060fe0aeeab496954cc7921faa262af (patch) | |
tree | 8d37dee52fe98694f74e0509f84fecfbe159bcbb | |
parent | 6c05fd8543f398b1718f3df13255982757243738 (diff) | |
parent | b7130e0a5ef0b8209a42ad6a1b7004f77fa55689 (diff) | |
download | oslo-utils-168ed1651060fe0aeeab496954cc7921faa262af.tar.gz |
Merge "Allow access to reflection 'get_members'"2.3.0
-rw-r--r-- | oslo_utils/reflection.py | 5 | ||||
-rw-r--r-- | oslo_utils/tests/test_reflection.py | 31 |
2 files changed, 34 insertions, 2 deletions
diff --git a/oslo_utils/reflection.py b/oslo_utils/reflection.py index 02f0c30..486e75c 100644 --- a/oslo_utils/reflection.py +++ b/oslo_utils/reflection.py @@ -30,7 +30,7 @@ except AttributeError: _BUILTIN_MODULES = ('builtins', '__builtin__', '__builtins__', 'exceptions') -def _get_members(obj, exclude_hidden): +def get_members(obj, exclude_hidden=True): """Yields the members of an object, filtering by hidden/not hidden.""" for (name, value) in inspect.getmembers(obj): if name.startswith("_") and exclude_hidden: @@ -40,7 +40,8 @@ def _get_members(obj, exclude_hidden): def get_member_names(obj, exclude_hidden=True): """Get all the member names for a object.""" - return [name for (name, _obj) in _get_members(obj, exclude_hidden)] + return [name for (name, _obj) in + get_members(obj, exclude_hidden=exclude_hidden)] def get_class_name(obj, fully_qualified=True): diff --git a/oslo_utils/tests/test_reflection.py b/oslo_utils/tests/test_reflection.py index d66f438..fce0f70 100644 --- a/oslo_utils/tests/test_reflection.py +++ b/oslo_utils/tests/test_reflection.py @@ -50,6 +50,14 @@ def function_with_kwargs(a, b, **kwargs): pass +class TestObject(object): + def _hello(self): + pass + + def hi(self): + pass + + class Class(object): def method(self, c, d): @@ -74,6 +82,29 @@ class ClassWithInit(object): pass +class MemberGetTest(test_base.BaseTestCase): + def test_get_members_exclude_hidden(self): + obj = TestObject() + members = list(reflection.get_members(obj, exclude_hidden=True)) + self.assertEqual(1, len(members)) + + def test_get_members_no_exclude_hidden(self): + obj = TestObject() + members = list(reflection.get_members(obj, exclude_hidden=False)) + self.assertGreater(len(members), 1) + + def test_get_members_names_exclude_hidden(self): + obj = TestObject() + members = list(reflection.get_member_names(obj, exclude_hidden=True)) + self.assertEqual(["hi"], members) + + def test_get_members_names_no_exclude_hidden(self): + obj = TestObject() + members = list(reflection.get_member_names(obj, exclude_hidden=False)) + members = [member for member in members if not member.startswith("__")] + self.assertEqual(["_hello", "hi"], sorted(members)) + + class CallbackEqualityTest(test_base.BaseTestCase): def test_different_simple_callbacks(self): |