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