forked from goodboy/tractor
				
			Add a warning for soon to be deprecated `ctx` use in `@stream` func
							parent
							
								
									36251357b3
								
							
						
					
					
						commit
						80c96cab01
					
				| 
						 | 
				
			
			@ -57,6 +57,9 @@ class Context:
 | 
			
		|||
        timeout quickly to sidestep 2-generals...
 | 
			
		||||
 | 
			
		||||
        """
 | 
			
		||||
        assert self._portal, (
 | 
			
		||||
            "No portal found, this is likely a callee side context")
 | 
			
		||||
 | 
			
		||||
        cid = self.cid
 | 
			
		||||
        with trio.move_on_after(0.5) as cs:
 | 
			
		||||
            cs.shield = True
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +98,20 @@ def stream(func):
 | 
			
		|||
    """
 | 
			
		||||
    func._tractor_stream_function = True
 | 
			
		||||
    sig = inspect.signature(func)
 | 
			
		||||
    if 'ctx' not in sig.parameters:
 | 
			
		||||
    params = sig.parameters
 | 
			
		||||
    if 'stream' not in params and 'ctx' in params:
 | 
			
		||||
        warnings.warn(
 | 
			
		||||
            "`@tractr.stream decorated funcs should now declare a `stream` "
 | 
			
		||||
            " arg, `ctx` is now designated for use with @tractor.context",
 | 
			
		||||
            DeprecationWarning,
 | 
			
		||||
            stacklevel=2,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    if (
 | 
			
		||||
        'ctx' not in params and
 | 
			
		||||
        'to_trio' not in params and
 | 
			
		||||
        'stream' not in params
 | 
			
		||||
    ):
 | 
			
		||||
        raise TypeError(
 | 
			
		||||
            "The first argument to the stream function "
 | 
			
		||||
            f"{func.__name__} must be `ctx: tractor.Context`"
 | 
			
		||||
| 
						 | 
				
			
			@ -120,7 +136,7 @@ class ReceiveMsgStream(trio.abc.ReceiveChannel):
 | 
			
		|||
        self,
 | 
			
		||||
        ctx: Context,
 | 
			
		||||
        rx_chan: trio.abc.ReceiveChannel,
 | 
			
		||||
        portal: 'Portal',  # noqa
 | 
			
		||||
        portal: 'Portal',  # type: ignore # noqa
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        self._ctx = ctx
 | 
			
		||||
        self._rx_chan = rx_chan
 | 
			
		||||
| 
						 | 
				
			
			@ -152,7 +168,7 @@ class ReceiveMsgStream(trio.abc.ReceiveChannel):
 | 
			
		|||
                # raise the error message
 | 
			
		||||
                raise unpack_error(msg, self._portal.channel)
 | 
			
		||||
 | 
			
		||||
        except trio.ClosedResourceError:
 | 
			
		||||
        except (trio.ClosedResourceError, StopAsyncIteration):
 | 
			
		||||
            # XXX: this indicates that a `stop` message was
 | 
			
		||||
            # sent by the far side of the underlying channel.
 | 
			
		||||
            # Currently this is triggered by calling ``.aclose()`` on
 | 
			
		||||
| 
						 | 
				
			
			@ -184,7 +200,7 @@ class ReceiveMsgStream(trio.abc.ReceiveChannel):
 | 
			
		|||
    @contextmanager
 | 
			
		||||
    def shield(
 | 
			
		||||
        self
 | 
			
		||||
    ) -> Iterator['ReceiveStream']:  # noqa
 | 
			
		||||
    ) -> Iterator['ReceiveMsgStream']:  # noqa
 | 
			
		||||
        """Shield this stream's underlying channel such that a local consumer task
 | 
			
		||||
        can be cancelled (and possibly restarted) using ``trio.Cancelled``.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -243,4 +259,4 @@ class MsgStream(ReceiveMsgStream, trio.abc.Channel):
 | 
			
		|||
        self,
 | 
			
		||||
        data: Any
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        await self._chan.send({'yield': data, 'cid': self._cid})
 | 
			
		||||
        await self._ctx.chan.send({'yield': data, 'cid': self._ctx.cid})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue