I've mentioned this before, but both of these are overengineered. You need only define a custom class that overrides the | operator.<p>Then you get (from the original article)<p><pre><code> Pype(Users.find_all) | partial(group_by_category, max=5) | print
</code></pre>
where you have something like<p>class Pype:
def __init__(self, f):
self.f = f<p><pre><code> def __or__(self, f):
return type(self)(f(self.f))
</code></pre>
You need fancier tricks to be able to make the Pipe object transparent, but its possible.<p>The approach provided in this article is bad, it tries to reinvent a bunch of things (the operator module, for itemgetter, and stuff like getattr by wrapping them in strings.