ducky.streams module

Streams represent basic IO objects, used by devices for reading or writing (streams) of data.

Stream object encapsulates an actual IO object - file-like stream, raw file descriptor, or even something completely different. Stream classes then provide basic IO methods for moving data to and from stream, shielding user from implementation details, like Python2/Python3 differencies.

class ducky.streams.FDInputStream(machine, fd, **kwargs)[source]

Bases: ducky.streams.InputStream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
class ducky.streams.FDOutputStream(machine, fd, **kwargs)[source]

Bases: ducky.streams.OutputStream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
class ducky.streams.FileInputStream(machine, f, **kwargs)[source]

Bases: ducky.streams.InputStream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
class ducky.streams.FileOutputStream(machine, f, **kwargs)[source]

Bases: ducky.streams.OutputStream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
class ducky.streams.InputStream(machine, desc, stream=None, fd=None, close=True, allow_close=True)[source]

Bases: ducky.streams.Stream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
static create(machine, desc)[source]
read(size=None)[source]
write(b)[source]
class ducky.streams.MethodInputStream(machine, desc, **kwargs)[source]

Bases: ducky.streams.InputStream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
class ducky.streams.MethodOutputStream(machine, desc, **kwargs)[source]

Bases: ducky.streams.OutputStream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
class ducky.streams.OutputStream(machine, desc, stream=None, fd=None, close=True, allow_close=True)[source]

Bases: ducky.streams.Stream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
static create(machine, desc)[source]
flush()[source]
read(size=None)[source]
write(buff)[source]
class ducky.streams.StderrStream(machine)[source]

Bases: ducky.streams.OutputStream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
class ducky.streams.StdinStream(machine, **kwargs)[source]

Bases: ducky.streams.InputStream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
close()[source]
get_selectee()[source]
class ducky.streams.StdoutStream(machine)[source]

Bases: ducky.streams.OutputStream

_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
class ducky.streams.Stream(machine, desc, stream=None, fd=None, close=True, allow_close=True)[source]

Bases: object

Abstract base class of all streams.

Parameters:
  • machine – parent :py:class`ducky.machine.Machine` object.
  • desc – description of stream. This is a short, string representation of the stream.
  • streamfile-like stream that provides IO method (read() or write). If it is set, it is preferred IO object.
  • fd (int) – raw file descriptor. stream takes precedence, otherwise this file descriptor is used.
  • close (bool) – if True, and if stream has a close() method, stream will provide close() method that will close the underlaying file-like object. True by default.
  • allow_close (bool) – if not True, stream’s close() method will not close underlying IO resource. True by default.
_abc_cache = <_weakrefset.WeakSet object>
_abc_negative_cache = <_weakrefset.WeakSet object>
_abc_negative_cache_version = 29
_abc_registry = <_weakrefset.WeakSet object>
_raw_read_fd(size=None)[source]
_raw_read_stream(size=None)[source]
_raw_write_fd(data)[source]
_raw_write_stream(data)[source]
close()[source]

This method will close the stream. If allow_close flag is not set to True, nothing will happen. If the stream wasn’t created with close set to True, nothing will happen. If the wrapped IO resource does not have close() method, nothing will happen.

has_fd()[source]

Check if stream has raw file descriptor. File descriptors can be checked for IO availability by reactor’s polling task.

Return type:bool
Returns:True when stream has file descriptor.
has_poll_support()[source]

Streams that can polled for data should return True.

Return type:bool
read(size=None)[source]

Read data from stream.

Parameters:size (int) – if set, read at maximum size bytes.
Return type:bytearray (Python2), bytes (Python3)
Returns:read data, of maximum lenght of size, None when there are no available data, or empty string in case of EOF.
register_with_reactor(reactor, **kwargs)[source]

Called by owner to register the stream with reactor’s polling service.

See ducky.reactor.Reactor.add_fd() for keyword arguments.

Parameters:reactor (ducky.reactor.Reactor) – reactor instance to register with.
unregister_with_reactor(reactor)[source]

Called by owner to unregister the stream with reactor’s polling service, e.g. when stream is about to be closed.

Parameters:reactor (ducky.reactor.Reactor) – reactor instance to unregister from.
write(buff)[source]

Write data to stream.

Parameters:buff (bytearray) – data to write. bytearray (Python2), bytes (Python3)
ducky.streams.fd_blocking(fd, block=None)[source]

Query or set blocking mode of file descriptor.

Return type:bool
Returns:if block is None, current setting of blocking mode is returned - True for blocking, False for non-blocking. Othwerwise, function returns nothing.