2727
2828no_default = '--no-default--'
2929
30- _global_sinks = set ()
31-
3230_html_update_streams = set ()
3331
3432thread_state = threading .local ()
@@ -167,8 +165,10 @@ def __init__(self, upstream=None, upstreams=None, stream_name=None,
167165 self .downstreams = OrderedWeakrefSet ()
168166 if upstreams is not None :
169167 self .upstreams = list (upstreams )
170- else :
168+ elif upstream is not None :
171169 self .upstreams = [upstream ]
170+ else :
171+ self .upstreams = []
172172
173173 self ._set_asynchronous (asynchronous )
174174 self ._set_loop (loop )
@@ -238,10 +238,7 @@ def _inform_asynchronous(self, asynchronous):
238238 def _add_upstream (self , upstream ):
239239 """Add upstream to current upstreams, this method is overridden for
240240 classes which handle stream specific buffers/caches"""
241- if self .upstreams == [None ]:
242- self .upstreams [0 ] = upstream
243- else :
244- self .upstreams .append (upstream )
241+ self .upstreams .append (upstream )
245242
246243 def _add_downstream (self , downstream ):
247244 """Add downstream to current downstreams"""
@@ -254,10 +251,7 @@ def _remove_downstream(self, downstream):
254251 def _remove_upstream (self , upstream ):
255252 """Remove upstream from current upstreams, this method is overridden for
256253 classes which handle stream specific buffers/caches"""
257- if len (self .upstreams ) == 1 :
258- self .upstreams [0 ] = [None ]
259- else :
260- self .upstreams .remove (upstream )
254+ self .upstreams .remove (upstream )
261255
262256 @classmethod
263257 def register_api (cls , modifier = identity , attribute_name = None ):
@@ -529,8 +523,8 @@ def destroy(self, streams=None):
529523 if streams is None :
530524 streams = self .upstreams
531525 for upstream in list (streams ):
532- upstream .downstreams . remove (self )
533- self .upstreams . remove (upstream )
526+ upstream ._remove_downstream (self )
527+ self ._remove_upstream (upstream )
534528
535529 def scatter (self , ** kwargs ):
536530 from .dask import scatter
@@ -656,48 +650,6 @@ def _release_refs(self, metadata, n=1):
656650 m ['ref' ].release (n )
657651
658652
659- @Stream .register_api ()
660- class sink (Stream ):
661- """ Apply a function on every element
662-
663- Examples
664- --------
665- >>> source = Stream()
666- >>> L = list()
667- >>> source.sink(L.append)
668- >>> source.sink(print)
669- >>> source.sink(print)
670- >>> source.emit(123)
671- 123
672- 123
673- >>> L
674- [123]
675-
676- See Also
677- --------
678- map
679- Stream.sink_to_list
680- """
681- _graphviz_shape = 'trapezium'
682-
683- def __init__ (self , upstream , func , * args , ** kwargs ):
684- self .func = func
685- # take the stream specific kwargs out
686- stream_name = kwargs .pop ("stream_name" , None )
687- self .kwargs = kwargs
688- self .args = args
689-
690- Stream .__init__ (self , upstream , stream_name = stream_name )
691- _global_sinks .add (self )
692-
693- def update (self , x , who = None , metadata = None ):
694- result = self .func (x , * self .args , ** self .kwargs )
695- if gen .isawaitable (result ):
696- return result
697- else :
698- return []
699-
700-
701653@Stream .register_api ()
702654class map (Stream ):
703655 """ Apply a function to every element in the stream
0 commit comments