Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
other streams.
See also
--------
Stream.zip
Stream.combine_latest
"""
def __init__(self, *upstreams, **kwargs):
super(union, self).__init__(upstreams=upstreams, **kwargs)
def update(self, x, who=None):
return self._emit(x)
@Stream.register_api()
class pluck(Stream):
""" Select elements from elements in the stream.
Parameters
----------
pluck : object, list
The element(s) to pick from the incoming element in the stream
If an instance of list, will pick multiple elements.
Examples
--------
>>> source = Stream()
>>> source.pluck([0, 3]).sink(print)
>>> for x in [[1, 2, 3, 4], [4, 5, 6, 7], [8, 9, 10, 11]]:
... source.emit(x)
(1, 4)
(4, 7)
self.kwargs = kwargs
self.args = args
Stream.__init__(self, upstream, stream_name=stream_name)
_global_sinks.add(self)
def update(self, x, who=None):
result = self.func(x, *self.args, **self.kwargs)
if gen.isawaitable(result):
return result
else:
return []
@Stream.register_api()
class map(Stream):
""" Apply a function to every element in the stream
Parameters
----------
func: callable
*args :
The arguments to pass to the function.
**kwargs:
Keyword arguments to pass to func
Examples
--------
>>> source = Stream()
>>> source.map(lambda x: 2*x).sink(print)
>>> for i in range(5):
... source.emit(i)
self.lossless_buffer.append(x)
self.last[idx] = x
if self.missing and who in self.missing:
self.missing.remove(who)
if not self.missing:
L = []
while self.lossless_buffer:
self.last[0] = self.lossless_buffer.popleft()
L.append(self._emit(tuple(self.last)))
return L
@Stream.register_api()
class latest(Stream):
""" Drop held-up data and emit the latest result
This allows you to skip intermediate elements in the stream if there is
some back pressure causing a slowdown. Use this when you only care about
the latest elements, and are willing to lose older data.
This passes through values without modification otherwise.
Examples
--------
>>> source.map(f).latest().map(g) # doctest: +SKIP
"""
_graphviz_shape = 'octagon'
def __init__(self, upstream, loop=None):
loop = loop or upstream.loop or IOLoop.current()
self.next = 0
Stream.__init__(self, upstream, **kwargs)
@gen.coroutine
def update(self, x, who=None):
now = time()
old_next = self.next
self.next = max(now, self.next) + self.interval
if now < old_next:
yield gen.sleep(old_next - now)
yield self._emit(x)
@Stream.register_api()
class buffer(Stream):
""" Allow results to pile up at this point in the stream
This allows results to buffer in place at various points in the stream.
This can help to smooth flow through the system when backpressure is
applied.
"""
_graphviz_shape = 'diamond'
def __init__(self, upstream, n, loop=None, **kwargs):
loop = loop or upstream.loop or IOLoop.current()
self.queue = Queue(maxsize=n)
Stream.__init__(self, upstream, loop=loop, **kwargs)
self.loop.add_callback(self.cb)
--------
partition
"""
def update(self, x, who=None):
L = []
for item in x:
y = self._emit(item)
if type(y) is list:
L.extend(y)
else:
L.append(y)
return L
@Stream.register_api()
class unique(Stream):
""" Avoid sending through repeated elements
This deduplicates a stream so that only new elements pass through.
You can control how much of a history is stored with the ``history=``
parameter. For example setting ``history=1`` avoids sending through
elements when one is repeated right after the other.
Examples
--------
>>> source = Stream()
>>> source.unique(history=1).sink(print)
>>> for x in [1, 1, 2, 2, 2, 1, 3]:
... source.emit(x)
1
2
1
self.args = args
Stream.__init__(self, upstream, stream_name=stream_name)
def update(self, x, who=None):
result = self.func(x, *self.args, **self.kwargs)
return self._emit(result)
def _truthy(x):
return not not x
@Stream.register_api()
class filter(Stream):
""" Only pass through elements that satisfy the predicate
Parameters
----------
predicate : function
The predicate. Should return True or False, where
True means that the predicate is satisfied.
Examples
--------
>>> source = Stream()
>>> source.filter(lambda x: x % 2 == 0).sink(print)
>>> for i in range(5):
... source.emit(i)
0
2
def update(self, x, who=None):
self.buffer.append(x)
return self.last
@gen.coroutine
def cb(self):
while True:
L, self.buffer = self.buffer, []
self.last = self._emit(L)
yield self.last
yield gen.sleep(self.interval)
@Stream.register_api()
class delay(Stream):
""" Add a time delay to results """
_graphviz_shape = 'octagon'
def __init__(self, upstream, interval, loop=None, **kwargs):
loop = loop or upstream.loop or IOLoop.current()
self.interval = convert_interval(interval)
self.queue = Queue()
Stream.__init__(self, upstream, loop=loop, **kwargs)
self.loop.add_callback(self.cb)
@gen.coroutine
def cb(self):
while True:
last = time()
from streamz import Stream
import asyncio
from tornado.platform.asyncio import AsyncIOMainLoop
AsyncIOMainLoop().install()
source = Stream()
s = source.sliding_window(2).map(sum)
L = s.sink_to_list() # store result in a list
s.rate_limit(0.5).sink(source.emit) # pipe output back to input
s.rate_limit(1.0).sink(lambda x: print(L)) # print state of L every second
source.emit(0) # seed with initial values
source.emit(1)
def run_asyncio_loop():
loop = asyncio.get_event_loop()
try:
loop.run_forever()
except KeyboardInterrupt:
pass
async def model_flap(nursery_url, conn, partition_size=100):
with Sub0(dial=nursery_url) as sub:
sub.subscribe(b"")
stream = Stream(asynchronous=False)
(
stream.map(ujson.loads)
.flatten()
.map(flatten_record)
.partition(partition_size)
.map(pd.DataFrame)
.map(build_game_table)
.map(partial(model_train, None, conn))
.map(partial(model_test, None, conn))
.sink(print)
)
while True:
stream.emit(await sub.arecv())
if __name__=='__main__':
# Simple example of how these should be used
# Test with: python -m numismatic.exchanges.luno
from configparser import ConfigParser
from pathlib import Path
from streamz import Stream
logging.basicConfig(level=logging.INFO)
config = ConfigParser()
config.read(Path.home() / '.coinrc')
print(list(config.keys()))
api_key_id = config['Luno'].get('api_key_id', '')
api_key_secret = config['Luno'].get('api_key_secret', '')
output_stream = Stream()
printer = output_stream.map(print)
luno = LunoExchange(output_stream=output_stream, api_key_id=api_key_id,
api_key_secret=api_key_secret)
luno_btc = luno.listen('XBTZAR')
loop = asyncio.get_event_loop()
future = asyncio.wait([luno_btc], timeout=15)
completed, pending = loop.run_until_complete(future)
for task in pending:
task.cancel()