August'24: Kamaelia is in maintenance mode and will recieve periodic updates, about twice a year, primarily targeted around Python 3 and ecosystem compatibility. PRs are always welcome. Latest Release: 1.14.32 (2024/3/24)

Kamaelia.Util.RangeFilter

Filter items out that are not in range

RangeFilter passes through items received on its "inbox" inbox where item[0] lies within one or more of a specfied set of ranges of value. Items that don't match this are discarded.

Example Usage

Reading all video frames from a YUV4MPEG format video file, but only passing on video frames 25-49 and 100-199 inclusive further along the pipeline:

Pipeline( RateControlledFileReader("myvideo.yuv4mpeg",readmode="bytes"),
          YUV4MPEGToFrame(),
          TagWithSequenceNumber(),
          RangeFilter(ranges=[ (25,49), (100,199) ]),
          ...
        ).run()

Behaviour

At initialisation, specify a list of value ranges that RangeFilter should allow. The list should be of the form:

[ (low,high), (low,high), (low, high), ... ]

The ranges specified are inclusive.

Send an item to the "inbox" inbox of the form (value, .…). If the value matches one or more of the ranges specified, then the whole item (including the value) will immediately be sent on out of the "outbox" outbox.

RangeFilter can therefore be used to select slices through sequence numbered or timestamped data.

If the size limited inbox is full, this component will pause until it is able to send out the data,.

If a producerFinished message is received on the "control" inbox, this component will complete parsing any data pending in its inbox, and finish sending any resulting data to its outbox. It will then send the producerFinished message on out of its "signal" outbox and terminate.

If a shutdownMicroprocess message is received on the "control" inbox, this component will immediately send it on out of its "signal" outbox and immediately terminate. It will not complete processing, or sending on any pending data.


Kamaelia.Util.RangeFilter.RangeFilter

class RangeFilter(Axon.Component.component)

RangeFilter(ranges) -> new RangeFilter component.

Filters out items of the form (value, ...) not within at least one of a specified value set of range. Items within range are passed through.

Keyword arguments:

- ranges  -- list of (low,high) pairs representing ranges of value. Ranges are inclusive.

Inboxes

Outboxes

  • outbox : items in range
  • signal : Shutdown signalling

Methods defined here

Warning!

You should be using the inbox/outbox interface, not these methods (except construction). This documentation is designed as a roadmap as to their functionalilty for maintainers and new component developers.

__init__(self, ranges)

x.__init__(...) initializes x; see x.__class__.__doc__ for signature

canStop(self)

Checks for any shutdown messages arriving at the "control" inbox, and returns true if the component should terminate when it has finished processing any pending data.

handleControl(self)

Collects any new shutdown messages arriving at the "control" inbox, and ensures self.shutdownMsg contains the highest priority one encountered so far.

inRange(self, index)

Returns one of the ranges that the specified index falls within, otherwise returns None.

main(self)

Main loop

mustStop(self)

Checks for any shutdown messages arriving at the "control" inbox, and returns true if the component should terminate immediately.

waitSend(self, data, boxname)

Generator.

Sends data out of the "outbox" outbox. If the destination is full (noSpaceInBox exception) then it waits until there is space. It keeps retrying until it succeeds.

If the component is ordered to immediately terminate then "STOP" is raised as an exception.

Feedback

Got a problem with the documentation? Something unclear that could be clearer? Want to help improve it? Constructive criticism is very welcome - especially if you can suggest a better rewording!

Please leave you feedback here in reply to the documentation thread in the Kamaelia blog.

-- Automatic documentation generator, 05 Jun 2009 at 03:01:38 UTC/GMT