58 lines
1.1 KiB
Python
58 lines
1.1 KiB
Python
import csv
|
|
|
|
from cofollow import consumer, receive
|
|
from tableformat import create_formatter
|
|
from ticker import Ticker
|
|
|
|
|
|
@consumer
|
|
def to_csv(target):
|
|
def producer():
|
|
while True:
|
|
yield line
|
|
|
|
reader = csv.reader(producer())
|
|
while True:
|
|
line = yield from receive(str)
|
|
target.send(next(reader))
|
|
|
|
|
|
@consumer
|
|
def create_ticker(target):
|
|
while True:
|
|
row = yield from receive(list)
|
|
target.send(Ticker.from_row(row))
|
|
|
|
|
|
@consumer
|
|
def negchange(target):
|
|
while True:
|
|
record = yield from receive(Ticker)
|
|
if record.change < 0:
|
|
target.send(record)
|
|
|
|
|
|
@consumer
|
|
def ticker(fmt, fields):
|
|
formatter = create_formatter(fmt)
|
|
formatter.headings(fields)
|
|
while True:
|
|
rec = yield from receive(Ticker)
|
|
row = [getattr(rec, name) for name in fields]
|
|
formatter.row(row)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
from cofollow import follow
|
|
|
|
follow(
|
|
'Data/stocklog.csv',
|
|
to_csv(
|
|
create_ticker(
|
|
negchange(
|
|
ticker('text', ['name', 'price', 'change'])
|
|
)
|
|
)
|
|
)
|
|
)
|