|
1 | 1 | #!/usr/bin/python |
2 | | -# import os |
3 | | -# import sys |
4 | | -# |
5 | | -# this_path = os.path.dirname(os.path.abspath(__file__)) |
6 | | -# directory = os.listdir(this_path) |
7 | | -# modules = {} |
8 | | -# for pkg_file in directory: |
9 | | -# pkg, ext = os.path.splitext(pkg_file) |
10 | | -# if pkg == '__init__': |
11 | | -# continue |
12 | | -# if ext in ('.py', '.pyc'): |
13 | | -# modules[pkg] = ('from . import {}'.format(pkg)) |
14 | | -# elif os.path.isdir(os.path.join(directory, pkg_file)): |
15 | | -# modules[pkg] = 'from . import {}'.format(pkg) |
16 | | -# |
17 | | -# for pkg, pkg_imp in modules.items(): |
18 | | -# try: |
19 | | -# exec pkg_imp |
20 | | -# except Exception as e: |
21 | | -# import traceback |
22 | | -# sys.stderr.write('Can\'t import module: {}'.format(pkg)) |
23 | | -# info = sys.exc_info() |
24 | | -# type = info[0] |
25 | | -# param = info[1] |
26 | | -# tb = info[2] |
27 | | -# traceback.print_exception(type, param, tb, file=sys.stderr) |
| 2 | +import os |
| 3 | +import sys |
| 4 | +import inspect |
| 5 | +import importlib |
28 | 6 |
|
29 | | -# Manually loading nodes |
30 | | -from .math_node import MathFunctionsNode |
31 | | -from .input_nodes import (DataInputNode, TickTimeNode, TextFileInputNode) |
32 | | -from .viewer_nodes import DataViewerNode |
33 | | -from .basic_nodes import (FooNode, BarNode) |
34 | | -from .widget_nodes import (DropdownMenuNode, TextInputNode, CheckboxNode) |
| 7 | + |
| 8 | +def getNodesRecursively(path=__file__): |
| 9 | + Nodes = [] |
| 10 | + basedir, filename = os.path.split(path) |
| 11 | + for root, dirs, files in os.walk(basedir, topdown=False): |
| 12 | + if root not in sys.path: |
| 13 | + sys.path.append(root) |
| 14 | + |
| 15 | + for name in files: |
| 16 | + if name.endswith('.py') and not name.startswith('_'): |
| 17 | + module_name = name[:-3] |
| 18 | + module = importlib.import_module(module_name) |
| 19 | + for name, obj in inspect.getmembers(module): |
| 20 | + if inspect.isclass(obj) and not obj.__name__ == 'BaseNode': |
| 21 | + for clsObj in inspect.getmro(obj): |
| 22 | + if clsObj.__name__ == 'BaseNode': |
| 23 | + Nodes.append(obj) |
| 24 | + break |
| 25 | + return Nodes |
| 26 | + |
| 27 | + |
| 28 | +Nodes = getNodesRecursively() |
0 commit comments