--- /dev/null
+# Copyright (C) 2020 The Meme Factory, Inc. http://www.karlpinc.com/
+
+# This file is part of PGWUI_Common.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU Affero General Public License
+# as published by the Free Software Foundation, either version 3 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public
+# License along with this program. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+
+# Karl O. Pinc <kop@karlpinc.com>
+
+'''Plugin support library for PGWUI
+'''
+
+import pkg_resources
+
+
+def find_pgwui_components():
+ '''Return list of all pgwui component names as strings
+ '''
+ return [entry_point.resolve().__name__ for entry_point in
+ pkg_resources.iter_entry_points('pgwui.components')]
--- /dev/null
+# Copyright (C) 2020 The Meme Factory, Inc. http://www.karlpinc.com/
+
+# This file is part of PGWUI_Common.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU Affero General Public License
+# as published by the Free Software Foundation, either version 3 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public
+# License along with this program. If not, see
+# <http://www.gnu.org/licenses/>.
+#
+
+# Karl O. Pinc <kop@karlpinc.com>
+
+from pgwui_common import plugin
+
+
+# find_pgwui_components()
+
+def test_find_pgwui_components(monkeypatch):
+ '''Returns list of entry points via iter_entry_points()
+ '''
+ entry_points = ['a', 'b', 'c']
+
+ class MockEntryPoint():
+ def __init__(self, val):
+ self.__name__ = val
+
+ def resolve(self):
+ return self
+
+ class MockPkgResources():
+ def iter_entry_points(*args):
+ return [MockEntryPoint(name) for name in entry_points]
+
+ monkeypatch.setattr(
+ plugin, 'pkg_resources', MockPkgResources())
+
+ result = plugin.find_pgwui_components()
+
+ assert result == entry_points