Skip to content

Instantly share code, notes, and snippets.

@gf0842wf
Last active August 29, 2015 14:14
Show Gist options
  • Save gf0842wf/79305d5a32e7827d2a45 to your computer and use it in GitHub Desktop.
Save gf0842wf/79305d5a32e7827d2a45 to your computer and use it in GitHub Desktop.
pipeline pattern by python generator
# -*- coding: utf-8 -*-
import os, sys
def default_next(func):
def wrapper(*args, **kwargs):
f = func(*args, **kwargs)
f.next()
return f
return wrapper
@default_next
def finder(target):
topdir = yield
for path, dirname, filelist in os.walk(topdir):
for filename in filelist:
target.send(os.path.join(path, filename))
@default_next
def opener(target):
while True:
name = yield
f = open(name)
target.send(f)
@default_next
def catcher(target):
while True:
f = yield
for line in f:
target.send(line)
@default_next
def printer():
while True:
line = yield
print line
if __name__ == "__main__":
pipeliner = finder(opener(catcher(printer())))
pipeliner.send('/home/fk/test')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment