1
2
3
4
5
6 from rdkit import six
7 from rdkit.VLib.Node import VLibNode
8
9
11 """ base class for nodes which dump output
12
13 Assumptions:
14
15 - destination supports a write() method
16
17 - strFunc, if provided, returns a string representation of
18 the input
19
20 - inputs (parents) can be stepped through in lockstep
21
22
23 Usage Example:
24 >>> from rdkit.VLib.Supply import SupplyNode
25 >>> supplier = SupplyNode(contents=[1,2,3])
26 >>> from rdkit.six import StringIO
27 >>> sio = StringIO()
28 >>> node = OutputNode(dest=sio,strFunc=lambda x:'%s '%(str(x)))
29 >>> node.AddParent(supplier)
30 >>> node.next()
31 1
32 >>> sio.getvalue()
33 '1 '
34 >>> node.next()
35 2
36 >>> sio.getvalue()
37 '1 2 '
38
39 """
40
41 - def __init__(self, dest=None, strFunc=None, **kwargs):
42 VLibNode.__init__(self, **kwargs)
43 self._dest = dest
44 self._func = strFunc
45
47 parents = self.GetParents()
48 args = tuple([parent.next() for parent in parents])
49 if len(args) == 1:
50 args = args[0]
51 if self._dest:
52 if self._func is not None:
53 outp = self._func(args)
54 else:
55 outp = str(args)
56 self._dest.write(outp)
57 return args
58
59
60 if six.PY3:
61 OutputNode.__next__ = OutputNode.next
62
63
64
65
66
67
69 import doctest
70 import sys
71 failed, _ = doctest.testmod(optionflags=doctest.ELLIPSIS, verbose=verbose)
72 sys.exit(failed)
73
74
75 if __name__ == '__main__':
76 _runDoctests()
77