59 lines
1.3 KiB
Python
59 lines
1.3 KiB
Python
|
# coticker.py
|
||
|
from structure import Structure
|
||
|
from validate import String, Integer, Float
|
||
|
|
||
|
class Ticker(Structure):
|
||
|
name = String()
|
||
|
price = Float()
|
||
|
date = String()
|
||
|
time = String()
|
||
|
change = Float()
|
||
|
open = Float()
|
||
|
high = Float()
|
||
|
low = Float()
|
||
|
volume = Integer()
|
||
|
|
||
|
from cofollow import consumer, follow, receive
|
||
|
from tableformat import create_formatter
|
||
|
import csv
|
||
|
|
||
|
@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('text')
|
||
|
formatter.headings(fields)
|
||
|
while True:
|
||
|
rec = yield from receive(Ticker)
|
||
|
row = [getattr(rec, name) for name in fields]
|
||
|
formatter.row(row)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
follow('../../Data/stocklog.csv',
|
||
|
to_csv(
|
||
|
create_ticker(
|
||
|
negchange(
|
||
|
ticker('text', ['name','price','change'])))))
|