Skip to content

Commit d53b726

Browse files
committed
__init__.py inside a Node library folder, recursively and automatically load all nodes.
1 parent 2329e78 commit d53b726

File tree

2 files changed

+28
-39
lines changed

2 files changed

+28
-39
lines changed

example_math_nodes.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/python
22
# -*- coding: utf-8 -*-
3-
import example_nodes as Nodes
3+
from example_nodes import Nodes
44
from NodeGraphQt import (NodeGraph,
55
BaseNode,
66
setup_context_menu)
@@ -40,12 +40,7 @@ def show_nodes_list(node):
4040
graph.node_double_clicked.connect(show_nodes_list)
4141

4242
# registered nodes.
43-
reg_nodes = [
44-
Nodes.__dict__[n] for n in Nodes.__dict__
45-
if hasattr(Nodes.__dict__[n], 'NODE_NAME')
46-
]
47-
48-
for n in reg_nodes:
43+
for n in Nodes:
4944
graph.register_node(n)
5045

5146
mathNodeA = graph.create_node('Math.MathFunctionsNode',

example_nodes/__init__.py

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,28 @@
11
#!/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
286

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

Comments
 (0)