A Router receives items with addressing information and dispatches them to an appropriate output, stripping the addressing information off.

Use like so:

   from tubes.tube import receiver, series
   from tubes.routing import Router, to

   aRouter = Router()
   evens = aRouter.newRoute()
   odds = aRouter.newRoute()

   @receiver()
   def evenOdd(item):
       if (item % 2) == 0:
           yield to(evens, item)
       else:
           yield to(odds, item)

   numbers.flowTo(series(evenOdd, aRouter.drain))

Assuming numbers is a fount of counting integers, this creates two founts: evens and odds, whose outputs are even and odd integers, respectively. Note that evenOdd also uses evens and odds as addresses; the first argument to to says where the value will go.

Why do this rather than just having evenOdd just call methods directly based on whether a number is even or odd?

By using a Router, flow control relationships are automatically preserved by the same mechanism that tubes usually use. The distinct drains of evens and odds can both independently pause their founts, and the pause state will be propagated to the "numbers" fount. If you want to send on outputs to multiple drains which may have complex flow-control interrelationships, you can't do that by calling the receive method directly since any one of those methods might reentrantly pause its fount.

Class Routed A Routed is a specification describing another specification that has been wrapped in a to. As such, it is an incomplete implementation of ISpecification.
Function to Construct a provider of Routed(providedBy(where)).
Class Router A drain with multiple founts that consumes Routed(IX) from its input and produces IX to its outputs.
Class _To An object destined for a specific destination.
def to(where, what):

Construct a provider of Routed(providedBy(where)).

ParameterswhereA fount returned from Router.newRoute. This must be exactly the return value of Router.newRoute, as it is compared by object identity and not by any feature of IFount.
whatthe value to deliver.
Returnsa Routed object.
See Alsotubes.routing
API Documentation for tubes, generated by pydoctor at 2016-01-18 07:46:47.