Skip to main content

Adapt generators and other iterables to a file-like interface

Project description

iterable-io

Status Version Python

iterable-io is a small Python library that provides an adapter so that it's possible to read from iterable objects in the same way as file-like objects.

It is primarily useful as "glue" between two incompatible interfaces. As an example, in the case where one interface expects a file-like object to call .read() on, and the other only provides a generator of bytes.

One way to solve this issue would be to write all the bytes in the generator to a temporary file, then provide that file instead, but if the generator produces a large amount of data then this is both slow to start, and resource-intensive.

This library allows streaming data between these two incompatible interfaces so as data is requested by .read(), it's pulled from the iterable. This keeps resource usage low and removes the startup delay.

Installation

pip install iterable-io

Documentation

The functionality of this library is accessed via a single function: open_iterable().

open_iterable() is designed to work the same way as the builtin open(), except that it takes an iterable to "open" instead of a file. For example, it can open the iterable in binary or text mode, has options for buffering, encoding, etc. See the docstring of open_iterable for more detailed documentation.

Simple examples

The following examples should be enough to understand in which cases open_iterable() would be useful and get a high-level understanding of how to use it:

Read bytes from a generator of bytes:

gen = generate_bytes()

# adapt the generator to a file-like object in binary mode
# (fp.read() will return bytes)
fp = open_iterable(gen, "rb")

while chunk := fp.read(4096):
    process_chunk(chunk)

Read lines of text from a generator of bytes:

gen = generate_bytes()

# adapt the generator to a file-like object in text mode
# (fp.read() will return a string, fp.readline is also available)
fp = open_iterable(gen, "rt", encoding="utf-8")

for line in fp:
    process_line_of_text(line)

Tests

This package contains tests. To run them, install pytest (pip install pytest) and run py.test in the project directory.

License

Licensed under the GNU LGPLv3.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iterable_io-1.0.2.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

iterable_io-1.0.2-py3-none-any.whl (4.7 kB view details)

Uploaded Python 3

File details

Details for the file iterable_io-1.0.2.tar.gz.

File metadata

  • Download URL: iterable_io-1.0.2.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for iterable_io-1.0.2.tar.gz
Algorithm Hash digest
SHA256 27ff905fd35ff3c2d3cb5859a0c5b833c2d969c3dda03d1d0cebb0f18069d95e
MD5 dd83452b5028ceba1c444fe30c9e21e5
BLAKE2b-256 e54c437288111f4c73404ab3895d078294017b0ef63955f44edc58199c544694

See more details on using hashes here.

File details

Details for the file iterable_io-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: iterable_io-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 4.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for iterable_io-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 20cf5cbb5d337b1071cc3f59c86f9aec8f47871e76ddaf11b8b440d6499afd68
MD5 8286cfe5742783b87cec54bc7e15606d
BLAKE2b-256 f93cf5e66ff1b4f98cab6321665a37980b9aa7fac15600d8f7ed607e8ec569b3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page