Skip to main content

Python bindings for archive_r: libarchive-based streaming traversal for recursive nested archives (no temp files, no large in-memory buffers)

Project description

archive_r Python Bindings

⚠️ Development Status: This library is currently under development. The API may change without notice.

Overview

Python bindings for archive_r, a libarchive-based library for processing many archive formats. It streams entry data directly from the source to recursively read nested archives without extracting to temporary files or loading large in-memory buffers. The bindings expose a Pythonic iterator API with context manager support.


Installation

From PyPI

pip install archive_r_python

From Source

cd archive_r/bindings/python
pip install .

Development Installation (Editable Mode)

cd archive_r/bindings/python
pip install -e .

Building with Parent Build Script

cd archive_r
./build.sh --with-python

This builds the core library and Python bindings, placing artifacts in build/bindings/python/.


Basic Usage

Simple Traversal

import archive_r

# Context manager ensures proper resource cleanup
with archive_r.Traverser("test.zip") as traverser:
    for entry in traverser:
        print(f"Path: {entry.path} (depth={entry.depth})")
        if entry.is_file:
            print(f"  Size: {entry.size} bytes")

Reading Entry Content

import archive_r

with archive_r.Traverser("archive.tar.gz") as traverser:
    for entry in traverser:
        if entry.is_file and entry.path.endswith('.txt'):
            # Read full content
            content = entry.read()
            print(f"Content of {entry.path}:")
            print(content.decode('utf-8', errors='replace'))

Chunked Reading (Large Files)

import archive_r

with archive_r.Traverser("large_archive.zip") as traverser:
    for entry in traverser:
        if entry.is_file:
            # Read in 8KB chunks
            chunk_size = 8192
            total_bytes = 0
            while True:
                chunk = entry.read(chunk_size)
                if not chunk:
                    break
                total_bytes += len(chunk)
                # Process chunk...
            
            print(f"{entry.path}: {total_bytes} bytes read")

Searching in Entry Content

import archive_r

def search_in_entry(entry, keyword):
    """Stream search within entry content (buffer boundary aware)"""
    overlap = b''
    buffer_size = 8192
    keyword_bytes = keyword.encode('utf-8')
    
    while True:
        chunk = entry.read(buffer_size)
        if not chunk:
            break
        
        search_text = overlap + chunk
        if keyword_bytes in search_text:
            return True
        
        # Preserve tail for next iteration
        if len(chunk) >= len(keyword_bytes) - 1:
            overlap = chunk[-(len(keyword_bytes) - 1):]
        else:
            overlap = chunk
    
    return False

with archive_r.Traverser("documents.zip") as traverser:
    for entry in traverser:
        if entry.is_file and entry.path.endswith('.txt'):
            if search_in_entry(entry, "important"):
                print(f"Found keyword in: {entry.path}")

Controlling Archive Descent

import archive_r

with archive_r.Traverser("test.zip") as traverser:
    for entry in traverser:
        # Don't expand Office files (they are ZIP internally)
        if entry.path.endswith(('.docx', '.xlsx', '.pptx')):
            entry.set_descent(False)
        
        print(f"Path: {entry.path}, Will descend: {entry.descent_enabled}")

You can also disable automatic descent globally:

# Disable automatic descent for all entries
with archive_r.Traverser("test.zip", descend_archives=False) as traverser:
    for entry in traverser:
        # Manually enable descent for specific entries
        if entry.path.endswith('.tar.gz'):
            entry.set_descent(True)

⚠️ Note: Reading entry content automatically disables descent. Call entry.set_descent(True) if you need to descend after reading.


Path Representation

The Python bindings provide three ways to access entry paths:

with archive_r.Traverser("outer.zip") as traverser:
    for entry in traverser:
        # Full path including top-level archive
        # Example: "outer.zip/inner.tar/file.txt"
        print(f"path: {entry.path}")
        
        # Last element of path_hierarchy
        # Example: "inner.tar/file.txt"
        print(f"name: {entry.name}")
        
        # Path hierarchy as list
        # Example: ["outer.zip", "inner.tar/file.txt"]
        print(f"path_hierarchy: {entry.path_hierarchy}")

path_hierarchy is particularly useful when you need custom path separators or want to represent the nesting structure explicitly.


Metadata Access

Basic Metadata

Entry objects provide common metadata through properties:

with archive_r.Traverser("archive.tar") as traverser:
    for entry in traverser:
        print(f"Path: {entry.path}")
        print(f"  Type: {'file' if entry.is_file else 'directory'}")
        print(f"  Size: {entry.size} bytes")
        print(f"  Depth: {entry.depth}")

Extended Metadata

For additional metadata (permissions, ownership, timestamps), specify metadata_keys:

with archive_r.Traverser("archive.tar", metadata_keys=["uid", "gid", "mtime", "mode"]) as traverser:
    for entry in traverser:
        # Retrieve all specified metadata as dictionary
        metadata = entry.metadata()
        print(f"{entry.path}:")
        print(f"  UID: {metadata.get('uid')}")
        print(f"  GID: {metadata.get('gid')}")
        print(f"  Mode: {oct(metadata.get('mode', 0))}")
        
        # Or retrieve specific metadata
        mtime = entry.find_metadata("mtime")
        if mtime is not None:
            print(f"  Modified: {mtime}")

Available metadata keys depend on the archive format. Common keys include:

  • uid, gid: User/group ID
  • mtime, atime, ctime: Timestamps (Unix time)
  • mode: File permissions
  • uname, gname: User/group names
  • hardlink, symlink: Link targets

Processing Split Archives

For split archive files (e.g., .zip.001, .zip.002), use set_multi_volume_group():

import archive_r

with archive_r.Traverser("container.tar") as traverser:
    for entry in traverser:
        # Detect split archive parts
        if '.part' in entry.path:
            # Extract base name (e.g., "archive.zip.part001" → "archive.zip")
            pos = entry.path.rfind('.part')
            base_name = entry.path[:pos]
            entry.set_multi_volume_group(base_name)
        
        # After parent traversal, grouped parts are merged and expanded

Format Specification

By default, all formats supported by libarchive are enabled. To restrict to specific formats:

# Enable only ZIP and TAR
with archive_r.Traverser("test.zip", formats=["zip", "tar"]) as traverser:
    for entry in traverser:
        print(entry.path)

Common format names: "7zip", "ar", "cab", "cpio", "iso9660", "lha", "rar", "tar", "warc", "xar", "zip"

💡 Tip: Exclude pseudo-formats like "mtree" and "raw" if you encounter false positives on non-archive files.


Custom Stream Factories

You can provide custom stream objects (file-like objects with read() method) to override the default file opening behavior:

import archive_r
import io

# Register a custom stream factory
def custom_stream_factory(path):
    """Return a file-like object for the given path"""
    if path == "special_file.bin":
        # Return custom data source
        return io.BytesIO(b"custom content")
    # Return None to use default file opening
    return None

archive_r.register_stream_factory(custom_stream_factory)

with archive_r.Traverser("test.zip") as traverser:
    for entry in traverser:
        # When traverser needs to open "special_file.bin",
        # your factory will provide the BytesIO stream
        pass

Stream objects must provide:

  • read(size): Read up to size bytes
  • Optional: seek(offset, whence), tell() for seekable streams
  • Optional: rewind() (defaults to seek(0, 0) if not provided)

Error Handling

Fault Callbacks

Data errors (corrupted archives, I/O failures) are reported via callbacks without stopping traversal:

import archive_r

def fault_handler(fault_info):
    """Called when data errors occur during traversal"""
    print(f"Warning at {fault_info['hierarchy']}: {fault_info['message']}")
    if fault_info.get('errno'):
        print(f"  Error code: {fault_info['errno']}")

archive_r.on_fault(fault_handler)

with archive_r.Traverser("potentially_corrupted.zip") as traverser:
    for entry in traverser:
        # Valid entries are processed normally
        # Corrupted entries trigger fault_handler
        print(entry.path)

Read Errors

Errors during read() raise exceptions:

try:
    with archive_r.Traverser("test.zip") as traverser:
        for entry in traverser:
            if entry.is_file:
                content = entry.read()
except RuntimeError as e:
    print(f"Read error: {e}")

Thread Safety

The Python bindings follow the same thread safety constraints as the C++ core:

  • Thread-safe: Each thread can create and use its own Traverser instance independently
  • Not thread-safe: A single Traverser or Entry instance must not be shared across threads

Example

import threading
import archive_r

# ✓ SAFE: Each thread has its own Traverser
def worker():
    with archive_r.Traverser("archive.tar.gz") as traverser:
        for entry in traverser:
            # Process entry...
            pass

t1 = threading.Thread(target=worker)
t2 = threading.Thread(target=worker)
t1.start()
t2.start()
t1.join()
t2.join()

# ✗ UNSAFE: Sharing a single Traverser instance across threads
shared_traverser = archive_r.Traverser("archive.tar.gz")
def unsafe_worker():
    for entry in shared_traverser:  # Race condition!
        pass

# Don't do this!
# t1 = threading.Thread(target=unsafe_worker)
# t2 = threading.Thread(target=unsafe_worker)

Additionally:

  • Global registration functions (register_stream_factory, on_fault) should be called during single-threaded initialization
  • Entry objects should not be shared between threads (they are tied to the Traverser's internal state)

Advanced Examples

Full Example: Recursive Archive Analyzer

import archive_r
import sys
from collections import defaultdict

def analyze_archive(archive_path):
    """Analyze archive contents and print statistics"""
    stats = defaultdict(int)
    file_types = defaultdict(int)
    
    with archive_r.Traverser(archive_path, metadata_keys=["mtime"]) as traverser:
        for entry in traverser:
            stats['total_entries'] += 1
            
            if entry.is_file:
                stats['files'] += 1
                stats['total_size'] += entry.size
                
                # Count by extension
                if '.' in entry.name:
                    ext = entry.name.rsplit('.', 1)[1]
                    file_types[ext] += 1
                
                # Find largest file
                if entry.size > stats.get('max_file_size', 0):
                    stats['max_file_size'] = entry.size
                    stats['max_file_path'] = entry.path
            else:
                stats['directories'] += 1
            
            # Track maximum depth
            if entry.depth > stats.get('max_depth', 0):
                stats['max_depth'] = entry.depth
    
    # Print results
    print(f"\nArchive Analysis: {archive_path}")
    print(f"  Total entries: {stats['total_entries']}")
    print(f"  Files: {stats['files']}")
    print(f"  Directories: {stats['directories']}")
    print(f"  Total size: {stats['total_size']:,} bytes")
    print(f"  Maximum depth: {stats['max_depth']}")
    
    if 'max_file_path' in stats:
        print(f"  Largest file: {stats['max_file_path']} ({stats['max_file_size']:,} bytes)")
    
    if file_types:
        print("\n  File types:")
        for ext, count in sorted(file_types.items(), key=lambda x: x[1], reverse=True)[:10]:
            print(f"    .{ext}: {count}")

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("Usage: python analyze.py <archive_path>")
        sys.exit(1)
    
    analyze_archive(sys.argv[1])

Testing

Run the Python binding tests:

cd archive_r/bindings/python
python -m unittest discover test

Or use the project-wide test runner:

cd archive_r
./bindings/python/run_binding_tests.sh

API Reference

Module: archive_r

Class: Traverser

Constructor:

Traverser(
    roots,                           # str or list of str/list (path hierarchy)
    formats=None,                    # list of format names (default: all)
    descend_archives=True,           # automatically expand archives
    metadata_keys=None,              # list of metadata keys to capture
    passphrases=None                 # list of passphrases for encrypted archives
)

Methods:

  • __iter__(): Returns self (iterator protocol)
  • __next__(): Returns next Entry or raises StopIteration
  • __enter__(): Context manager entry (returns self)
  • __exit__(exc_type, exc_val, exc_tb): Context manager exit

Class: Entry

Properties:

  • path: Full path string (read-only)
  • name: Last element of path hierarchy (read-only)
  • path_hierarchy: List representation of path (read-only)
  • depth: Nesting depth (read-only)
  • is_file: True if entry is a file (read-only)
  • size: File size in bytes, 0 for directories (read-only)
  • descent_enabled: Whether this entry will be expanded as an archive (read-only)

Methods:

  • read(size=None): Read entry content (bytes). If size is omitted, reads all remaining data
  • set_descent(enabled): Enable/disable archive expansion for this entry
  • set_multi_volume_group(group_name): Register this entry as part of a split archive group
  • metadata(): Return dictionary of all captured metadata
  • find_metadata(key): Return value for specific metadata key, or None if not found

Function: register_stream_factory

archive_r.register_stream_factory(factory_func)

Register a callback to provide custom stream objects for file access.

Parameters:

  • factory_func: Callable that takes a file path (str) and returns a file-like object or None

Stream object requirements:

  • Must provide read(size) method
  • Optional: seek(offset, whence), tell(), rewind()

Function: on_fault

archive_r.on_fault(callback)

Register a callback to receive fault notifications during traversal.

Parameters:

  • callback: Callable that takes a dict with keys:
    • hierarchy: List of path components where fault occurred
    • message: Human-readable error description
    • errno: Optional error number from system calls

Packaging

Building Wheels

cd archive_r
./build.sh --package-python

This creates wheel (.whl) and source distribution (.tar.gz) in build/bindings/python/dist/.

Manual Packaging

cd bindings/python
python setup.py sdist bdist_wheel

Requirements

  • Python 3.8 or later
  • libarchive 3.x (runtime dependency)
  • setuptools, wheel (build dependencies)
  • pybind11 >= 2.6.0 (build dependency, automatically vendored during packaging)

License

The Python bindings are distributed under the MIT License, consistent with the archive_r core library.

Third-Party Licenses

  • pybind11: BSD-style License (used for C++/Python interfacing)
  • libarchive: New BSD License (runtime dependency)

See Also


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

archive_r_python-0.1.26.tar.gz (92.2 kB view details)

Uploaded Source

Built Distributions

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

archive_r_python-0.1.26-cp314-cp314-win_amd64.whl (7.0 MB view details)

Uploaded CPython 3.14Windows x86-64

archive_r_python-0.1.26-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

archive_r_python-0.1.26-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

archive_r_python-0.1.26-cp314-cp314-macosx_15_0_x86_64.whl (955.9 kB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

archive_r_python-0.1.26-cp314-cp314-macosx_15_0_arm64.whl (926.1 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

archive_r_python-0.1.26-cp314-cp314-macosx_11_0_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.14macOS 11.0+ x86-64

archive_r_python-0.1.26-cp314-cp314-macosx_11_0_universal2.whl (6.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ universal2 (ARM64, x86-64)

archive_r_python-0.1.26-cp313-cp313-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.13Windows x86-64

archive_r_python-0.1.26-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

archive_r_python-0.1.26-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

archive_r_python-0.1.26-cp313-cp313-macosx_11_0_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.13macOS 11.0+ x86-64

archive_r_python-0.1.26-cp313-cp313-macosx_11_0_universal2.whl (6.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

archive_r_python-0.1.26-cp312-cp312-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.12Windows x86-64

archive_r_python-0.1.26-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

archive_r_python-0.1.26-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

archive_r_python-0.1.26-cp312-cp312-macosx_11_0_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

archive_r_python-0.1.26-cp312-cp312-macosx_11_0_universal2.whl (6.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

archive_r_python-0.1.26-cp311-cp311-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.11Windows x86-64

archive_r_python-0.1.26-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

archive_r_python-0.1.26-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

archive_r_python-0.1.26-cp311-cp311-macosx_11_0_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

archive_r_python-0.1.26-cp311-cp311-macosx_11_0_universal2.whl (6.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

archive_r_python-0.1.26-cp310-cp310-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.10Windows x86-64

archive_r_python-0.1.26-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

archive_r_python-0.1.26-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

archive_r_python-0.1.26-cp310-cp310-macosx_11_0_x86_64.whl (6.9 MB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

archive_r_python-0.1.26-cp310-cp310-macosx_11_0_universal2.whl (6.5 MB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file archive_r_python-0.1.26.tar.gz.

File metadata

  • Download URL: archive_r_python-0.1.26.tar.gz
  • Upload date:
  • Size: 92.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for archive_r_python-0.1.26.tar.gz
Algorithm Hash digest
SHA256 6c30be0f73879c9ab44370e0d2ba382dbacef8e9f5e30430ba49964c507e6463
MD5 92028f1524e3dde9878b33083fab9195
BLAKE2b-256 6e0e06fbe123dfc3fe8d1a1348284b182ab13382220a64a4f66e77caa25ba853

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26.tar.gz:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 aaa8ea9ed263d78e2a04c37a989a9aa829f1056186959ee71a77db4df7c86bf8
MD5 f8199b6abe1edf4eded558cca7adf213
BLAKE2b-256 bed01be027adaed7e382c174cb87bbeb9c61a941da05ee973d7b5335a867b5f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp314-cp314-win_amd64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 22d4f1924aafc31fb0fa0122a2de875d419cb895df70f0bc00e99aaacc28227b
MD5 a3a59ada7c2646e604347f3d9b2e1a2a
BLAKE2b-256 5be039b38a7b5647a8c69abb47d21a0412cf6ce515513b771fa2952c6def1dad

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 704a6cf5a9d6329c911a476a98e342127edca15b71db4339e2895fb3c1ef4bcc
MD5 8ed8a5a63934fcf48e70826c6c14abfe
BLAKE2b-256 8e78f5dd2f9fe2fabd400f73955491ad981e0c4fe05d7df9e695d6d26d323e20

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp314-cp314-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 560f22dbf2ba49e415f1d4027834e002691842ef8d5b16f211c725db337f0e15
MD5 f97f04c2b92a690eefac49a341140860
BLAKE2b-256 90deddc48cdb916b598c449f9c056a67ae717275bfc7b62855b9e0fc126a023e

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp314-cp314-macosx_15_0_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 f5180e5a2a97990cac36ef5b9408ec29d9f0b3f1a2797904a5fd3c5b5d018e1d
MD5 f8c183cf959dee729a7a750491be0724
BLAKE2b-256 787b76a718e863eebf5ef20c657d703ec88879e9566c6bbec939d3587bfb0723

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp314-cp314-macosx_15_0_arm64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 c95c57ac52ecc7916fab695eb4655333e9c42d4cc96cb476e7928e28b8c11ea2
MD5 4f0cf6ffa389755b8ef702ef4727dd7b
BLAKE2b-256 6dc74043e88a1df4d9b01bd5f31ea1ee6be0178939bf5ab1837e881539ecb247

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp314-cp314-macosx_11_0_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp314-cp314-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 9c032f253739757daef81fac4546f80577a1318446dd0411f2e82ecb1db103b6
MD5 167d0a16a02a3f69284dc2ff7afc79a4
BLAKE2b-256 e2034fc3f5ebf9bf026c89f30b0150861ed40c3addd29697597866e3cee35a21

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp314-cp314-macosx_11_0_universal2.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 612b4e611c5d99ba491c9225f57877b8a9bf69f1fc9da7674cbb14580e59cd25
MD5 2e3ac1dab3668d038372893f4636b384
BLAKE2b-256 5b01435eb2fb26460f3dc41badf08f592bf28a1c8ef6e5061587f1762b999382

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp313-cp313-win_amd64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2f1177f351d2083080750bf0eb38f74d6b61a89436cf5efc16ce384d462d2b28
MD5 53313e6a77694b93c22fea1c1c0473a6
BLAKE2b-256 009b595d3d6f1b52fecdbbb674467aef4118e92ebc6f12cbbee542c2622fc1ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3f7f910890e3a6fdcbc4b30c8dee5df86a8391c4a7753cc68380e066944ed408
MD5 423d7a77c9901639980b34b745a72782
BLAKE2b-256 58b01411e144ae07b2932b95f7b4444da65ff02443e768ed9cfb84d7bbe7671e

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 005f1c29d8eb7b74425294cf56f025c5f13a5fd48f7a9f4a6c7232caeb2b6a98
MD5 2f0c40cf68e0a2906f44e73808c01a9c
BLAKE2b-256 1dde5abdddb91d0f9f3333876ff71d870e9d75db15132681a146ffd9dcf23fcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp313-cp313-macosx_11_0_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 ca650a4d0b655eb1fe7db0afb990784f032d5cb8ec14f04ea6330e7ecd98109c
MD5 9e0c911e0804027065b1adac96afed75
BLAKE2b-256 9608e63133d403a9e992b6a953a46630062d5941b688bdbaea73cc02f49232cd

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp313-cp313-macosx_11_0_universal2.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fd454d7113fd2f36f178cc1975abcafcea792f5125e1aeac0e767d96740f0d6a
MD5 3920c1b21d7e0ed17b70891f1624bf17
BLAKE2b-256 81d80b1314ca137d6ff4941c086f3155bfb0288eb3c040f865001dac864893d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp312-cp312-win_amd64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e51586d79ebad8effdc211143a3924a894071506f75f6ad19496b847115b783f
MD5 83215575daea28253018478f25f2d83b
BLAKE2b-256 0e450fdf7921e02506ee0448a053f88fb1709008efd7d6f3627d661d3e8e736c

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 35e57f70781ee52c8e975a5b6393b397191247aeaac57364535b1b34e0e2afc4
MD5 218dc1746f8ae79a386ec612a61e2d62
BLAKE2b-256 2bb29d97020ff7ccdb21c62ece095b632c1b04c70955966283661291f2a8be97

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0527744bbcc6508bc24dbd94e0d1147dbb0ec534ae6d9044ed7f5d1a07affe51
MD5 52a4fea1cc215b1a127d89de77ae26e6
BLAKE2b-256 3aa1d428aca8c769f618cb5fa3064568f57860e5149c38ca10e1090578876806

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp312-cp312-macosx_11_0_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 60fb400b7c065ae809d6e0a3f8eed0d519bdb47cfe678b9387da75d41deff680
MD5 2aa923a6654abc1815e4354bfd079f6e
BLAKE2b-256 fa3a3df978b7493fdfc59db34877ea0f0a421d6cfd7631ae8e06076379f46874

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp312-cp312-macosx_11_0_universal2.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6eb1f5c813161f093408de8ef6e093a50b5c81c1031100c30adbf54d3b98056d
MD5 95823b0262eb6a7fe5345a256f438729
BLAKE2b-256 08136483f7724dce8bfeb3a572d83c1d232344320b3275b0590c02ac5197f0be

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp311-cp311-win_amd64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e85f73d083c0e58e6994d4b4f96b1628d76b79856a0ebf57e3e9d0bdf76116da
MD5 7adfb02bbd61bc39cca8709c0d81387a
BLAKE2b-256 331d29e4aba43925bd1ba404d36dd9651396b888d32caac9aa1cb7919c84f21b

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 76594e299971bcdc80d6ebc861300f1b33afd18e6bcb926a68edf78396159110
MD5 7b4d0ef9dfb50f8cc4967349305e4486
BLAKE2b-256 05fdec6339d9e57274acf29dd260db9328a39eb82ae497e0091498d621b68f0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b3b46ec51506f6d0149aee073fb4a3ff3df1cf99c9780d850de0c1e2b6c4153a
MD5 3f65b2fa139b9072d18ac0af64000762
BLAKE2b-256 9ec7a2cad9fef6b12d694357f8414b4803d28b9ec1ab89cd28d7150106655205

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp311-cp311-macosx_11_0_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 50a49915e823f308d38866a8ba37c22c3e309dae48ab9ead0aedc500745e5054
MD5 d2ac04d223e9edf5aec76461242c4c6a
BLAKE2b-256 e6c15386fcb0f634f620b0b7114d69838d4c7fa033f8d762e0428e3eecf86923

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp311-cp311-macosx_11_0_universal2.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 350e2c8149cbf922bd1bd903e7387e165bd496209d55bd13d5cabed31a1dcd63
MD5 741dc6e4f51d6b7b43793e5cd45840a7
BLAKE2b-256 fe582b40a8cdc76993a19d0da26e35dca882ef65fa72a72144ec0e6795c7fd91

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp310-cp310-win_amd64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0db98244d40c12eb43391f84e97e227b5859d2746a1e848d81d8b8ddf2a25cf4
MD5 4f66662a73071b19ad789f14d4ae377d
BLAKE2b-256 51fc6db97c9ae0376527191584bfc63e41e7e0f5d6048402b54a62826100deec

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f07d90ba0fcb111db8f57e0556df57fd6f9c42924f8a69e73d4636307d29e8a5
MD5 2e75ce841efa0e1355d9286735aa7eea
BLAKE2b-256 6947f65ba3fe63c27212f0e89212646a7315fc9e2d6d45f397671d010d334468

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 03b8979c4316360df5acd32cf5d15a68bb82316e99620efe69ae90823b14ab1a
MD5 a32c5aac14c70acc80058c51fd42e959
BLAKE2b-256 e8a9a72b90fd5334cebd8ff141a40de46a9b02d08f1e3df03508f8f053a1f0fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp310-cp310-macosx_11_0_x86_64.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file archive_r_python-0.1.26-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.26-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 6cb6725a16c3218cbe97eae254a4310ed3c2f02adf6c8817bb690341bce08625
MD5 6807bf20fa9cb76fad5d80d5da6c2ffe
BLAKE2b-256 f209f066131fe3534a8e26c8b19573f29f8995cce217fb81e8274fa4d12ffa9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.26-cp310-cp310-macosx_11_0_universal2.whl:

Publisher: release.yml on Raizo-TCS/archive_r

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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