Skip to main content

An efficient library to read from new and old format .conda and .tar.bz2 conda packages.

Project description

conda-package-streaming

pre-commit.ci status

An efficient library to read from new and old format .conda and .tar.bz2 conda packages.

Download conda metadata from packages without transferring entire file. Get metadata from local .tar.bz2 packages without reading entire files.

Uses enhanced pip lazy_wheel to fetch a file out of .conda with no more than 3 range requests, but usually 2.

Uses tar = tarfile.open(fileobj=...) to stream remote .tar.bz2. Closes the HTTP request once desired files have been seen.

Quickstart

The basic API yields (tarfile, member) tuples from conda files as tarfile is needed to extract member. Note the .tar.bz2 format yields all members, not just info/, from stream_conda_info / stream_conda_component, while the .conda format yields members from the requested inner archive — allowing the caller to decide when to stop reading.

From a url,

from conda_package_streaming.url import stream_conda_info
# url = (ends with .conda or .tar.bz2)
for tar, member in stream_conda_info(url):
    if member.name == "info/index.json":
        index_json = json.load(tar.extractfile(member))
        break

From s3,

client = boto3.client("s3")
from conda_package_streaming.s3 import stream_conda_info
# key = (ends with .conda or .tar.bz2)
for tar, member in stream_conda_info(client, bucket, key):
    if member.name == "info/index.json":
        index_json = json.load(tar.extractfile(member))
        break

From a filename,

from conda_package_streaming import package_streaming
# filename = (ends with .conda or .tar.bz2)
for tar, member in package_streaming.stream_conda_info(filename):
    if member.name == "info/index.json":
        index_json = json.load(tar.extractfile(member))
        break

From a file-like object,

from contextlib import closing

from conda_package_streaming.url import conda_reader_for_url
from conda_package_streaming.package_streaming import stream_conda_component
filename, conda = conda_reader_for_url(url)

# file object must be seekable for `.conda` format, but merely readable for `.tar.bz2`
with closing(conda):
    for tar, member in stream_conda_component(filename, conda, component="info"):
        if member.name == "info/index.json":
            index_json = json.load(tar.extractfile(member))
            break

If you need the entire package, download it first and use the file-based APIs. The URL-based APIs are more efficient if you only need to access package metadata.

Package goals

  • Extract conda packages (both formats)

  • Easy to install from pypi or conda

  • Do the least amount of I/O possible (no temporary files, transfer partial packages)

  • Open files from the network / standard HTTP / s3

  • Continue using conda-package-handling to create .conda packages

Generating documentation

Uses markdown, furo theme. Requires newer mdit-py-plugins.

pip install conda-package-streaming[docs]

One time: sphinx-apidoc -o docs .

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

conda_package_streaming-0.12.0.tar.gz (56.5 kB view details)

Uploaded Source

Built Distribution

conda_package_streaming-0.12.0-py3-none-any.whl (18.9 kB view details)

Uploaded Python 3

File details

Details for the file conda_package_streaming-0.12.0.tar.gz.

File metadata

File hashes

Hashes for conda_package_streaming-0.12.0.tar.gz
Algorithm Hash digest
SHA256 422b2ff81c41e509593f5ece478a85bac72b189a6d039a9b753c74ae07ea9eb9
MD5 9322e355996992350f9ba13a27c9fa4d
BLAKE2b-256 357f06f826c49dec99476795f6ceb072f340b8ffa4f13ee025033aab49a86379

See more details on using hashes here.

File details

Details for the file conda_package_streaming-0.12.0-py3-none-any.whl.

File metadata

File hashes

Hashes for conda_package_streaming-0.12.0-py3-none-any.whl
Algorithm Hash digest
SHA256 45ae0ac0e198188703e845a42ac21292b73cd7077df358ea882d25923ab26f96
MD5 5544ea3bd068df8bdbc4e292ac3ae3bf
BLAKE2b-256 87390bd20aa98ae43756b0bb5d8b055c19de842b422fe588eaa16f11dce1f399

See more details on using hashes here.

Supported by

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