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.29.tar.gz (93.1 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.29-cp314-cp314-win_amd64.whl (7.0 MB view details)

Uploaded CPython 3.14Windows x86-64

archive_r_python-0.1.29-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.29-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.29-cp314-cp314-macosx_15_0_x86_64.whl (956.7 kB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

archive_r_python-0.1.29-cp314-cp314-macosx_15_0_arm64.whl (927.0 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

archive_r_python-0.1.29-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.29-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.29-cp313-cp313-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.13Windows x86-64

archive_r_python-0.1.29-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.29-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.29-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.29-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.29-cp312-cp312-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.12Windows x86-64

archive_r_python-0.1.29-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.29-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.29-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.29-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.29-cp311-cp311-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.11Windows x86-64

archive_r_python-0.1.29-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.29-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.29-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.29-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.29-cp310-cp310-win_amd64.whl (6.7 MB view details)

Uploaded CPython 3.10Windows x86-64

archive_r_python-0.1.29-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.29-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.29-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.29-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.29.tar.gz.

File metadata

  • Download URL: archive_r_python-0.1.29.tar.gz
  • Upload date:
  • Size: 93.1 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.29.tar.gz
Algorithm Hash digest
SHA256 2d900ab1fcbe2eb1ce314c817a619fa15f2b644e1cb46f05538ba840a7773ebc
MD5 9c95bc4668b4eb731baee39dec02c054
BLAKE2b-256 2fc946e0c4934f75b493bf5389f35d3bc109c8d632ca9ee8e65dc5bba9c730ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29.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.29-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7e591940d750b0f0cbed92b02f9a8e861846c7eb43d69caa5b60b3085becb9cd
MD5 60c9dbb7ba2a0010a84d4861832515d0
BLAKE2b-256 c60d1c754d8db86827970b9521c6dbd7c2067371629779c51ca1f2ed7eb23e95

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b3faacb792e3b402a3fafb36f4b97200b0503805f7901c3eafb07601b3deee6b
MD5 c6c47d5227a08a08565699f80a907719
BLAKE2b-256 3182e99f703211b38e86f1037f154e2beb179ee1b634ffcbf27a6310c4fce0a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c419cf165b67a2e4fa8d1f282f9e30c62ce6fc59b9c1d01ffe1feb9b0b81de26
MD5 c8cbe7ac7bed6c9522f53288f20d0fd7
BLAKE2b-256 1af3c358398522717f9c791ed771c40f8b98713d4b5f4a409e2b07db6e3391aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp314-cp314-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 48f19ea797aa7af116d02b01ffd8e719f3618d84e1bba2a2a024fc3859e1770d
MD5 683832bd019f216b2df4d2ed7165eb0b
BLAKE2b-256 7444044e826fb051bfe300d0b6977f87fe3d85fad1c73c51b982ffc6c89eda63

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 b85a93209081e2cbd0294e42aa50a371bb0c25f467e6eb287cff79f84086f8b5
MD5 04ce70914c1fa6a2fbebe6d1f12f58f4
BLAKE2b-256 88f5887decf3333af60d2f6cf22063925e538320846dbfcbf6c5e010f6931d2a

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp314-cp314-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 378efb070f4fff0f2468296108f731722f2fed41e366efd79881f774707631ff
MD5 b151ef5cb8d02e63d80b6b1f31d08603
BLAKE2b-256 564ee972ee5489277d907e774a11c5c06fcbe89704ca948f22315f3c4f13ea9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp314-cp314-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 eedd11e1d7d3f44e24a82376f415cf170e0ac44a74cd0d33f16c0eeddebb8369
MD5 6b59d8afc6a1f3ec919cf8316c817b69
BLAKE2b-256 e936ca3a88d9a5d14e1539486889b7dcc5ac09a58c2bb318d700c5a612dbfa56

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4f6d9d3c67a832d6cb04006ab93511ab8f145faba83f875c39e28ce9966a6371
MD5 c146bafaba2b53c29af686d88f389548
BLAKE2b-256 8aa13fa7beba31da4653559489ccbaa87c59ae4ceb7357ebea853f3698844eed

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 34e7bfe89da3b089d5104dfe3d80466fb24b0384ad3a2ee93a7e9097281fb9b9
MD5 850b18f7a6d5372b719ba30c707bbc34
BLAKE2b-256 b8cea9d9c15f7ce01ec8879acc27bed907b8f6c0709dd415c11836e1c8169826

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 caca3e626d75dd40f92a5aef793bf6df814de85bafa7c368f6e77b63c38c0fb6
MD5 efa8ba6f9fee7a8393e53163193cc2ea
BLAKE2b-256 028a254fb4d2fc932adc45385fb7803d1ba871fae4cecfa0dea29c45ac10ad23

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp313-cp313-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 d6269334a1eb10760dbcdb4b1a6cfd34fb3830955cfe8f85c744f60e919732eb
MD5 0dd7af827d71df06a0c4c31797dd8fa4
BLAKE2b-256 5ebc99d34a5967fccc00358c705a49f9dc4fdcb11200de45ca65dcffaae782eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 43d4b45d204fb112b4d4251d06a2d1601e790e8cdbea1531c116334ca09717a4
MD5 84d078b3666a6eb62789a16b2c391f16
BLAKE2b-256 5df03f2d2669271f291c860cd0f9c0fb60a4f4c14660e14fedfe25c88639a89a

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 dd8e52042b7d802ee5b58e321b55c31dccc2f518437a1d1db1b1b1ae9a3f4b4d
MD5 d01ea475ce65429e4d4ac58d69feca94
BLAKE2b-256 89697ce75241d2b09ed676e07982c693dd9c1cc2cf462041a380f7ed709e7505

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a87043cf241edae4dfef4fb1a53276471ad3b05279607413dddd39c7381b263f
MD5 14e4c1ff362b9a1e1ba10b2f90953c66
BLAKE2b-256 57316250cac18bcdc36033dbcaf748358ff77906c81f7394de0e387496f40493

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e570f5c28db4bb86645212b2218a430cbef793d57bbbfe607af52eacdceb924f
MD5 048d717ab63c6c1926373ee82130655f
BLAKE2b-256 bb05f90af4b90cbcaba9e3a27afaa8359e3971367ac17d0cc0970ec4f9586856

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 976add84511cab2c1fc9653776f1414ad5f78527298035e783b9648aff771080
MD5 a738bb22698e8757a7b2a573f49ca4c1
BLAKE2b-256 cac9b12f0a9680e15ee871e25a24199c38a139b320d4e2eccb737218302c2cc0

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 d40b200fac0f3ad22d2c0b878b151ad7adb73fb8b5cd26cec148bba480d3cb2c
MD5 c8000ce034ef435dc4bc87d55a4658ba
BLAKE2b-256 30fc137bd90b264694e1eef84c1306bd73e4f9cb80d061446b21c6356a175f98

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 029d546962e8d56d84f2c43615680c6dba692126280ac022d2ad33f7b43c9df7
MD5 12ea13317390749e1d0a76aa55eb2756
BLAKE2b-256 cdcd4330a7d478b83b4fded643486e691e38e26fe0a19611300ae72bf2f1bd50

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7876b89beeafb7454acaa8afa3bf4402bf7a3132c5277085dce741b101a7f8b6
MD5 ea074df00d9495a368fc58035fdadb27
BLAKE2b-256 e72f005226c20bc219412f2c33bf1dc74e38202d9eb77828c088a24713e07d9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1e1164654b4c258ac20585a05ef95c42bbb2e143fa2232f864774297ab88a94a
MD5 fe86aa6a1fb0afd4d4c1abfad9d77100
BLAKE2b-256 3b6bfb47faadb2edd6479857da4cdf63029d18b5a69a15d548bd30ab5805b264

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 2724bc68def9dab6b4941acb4b1723ff83fc9a507c1ce7ea4ca8688b97c40524
MD5 f1be8661fb05ee30a67c19471d2b348e
BLAKE2b-256 9d3bcb8e2661596dbe57a3db4cea95b76bd0262e08f0590b4e0ac2df267fbf9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 e29b48cf4c2ab939373d2590036ee8b8940806d2530164d86d1b67333a37d68e
MD5 99dc3be852d169f055c7efb6bcd717f0
BLAKE2b-256 d336fa9e19caffcf34c7011e6dca7a73861c3bc6e39e9fdf3c0a325cb63634a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 88fc43edf44b6c3fc93b6d3aa7ea8a01355a28de8fc37f338fdbc12c904776c4
MD5 5b0a007e91c39b7227c716e93810acfe
BLAKE2b-256 cc58e1878e17b55451cac5ca8410e2f57d218003e92cd1d78c8f9c923c33f884

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ebeecbf858bb1a2fb65bef5ec4acc731699c29bb2ff1e3dbae00e15e11c7f664
MD5 e8ca9de71c510deda29d59def29cef96
BLAKE2b-256 aac26d244259062cde688eb4176ed8c550f2afa5d9926308c990d127d142336a

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 210a850671d3a867b31aaa5dbc0601875496ecf9e4f3c806403207f438afed4a
MD5 513663b5e12e557f51bf1eaec649a4df
BLAKE2b-256 a92b57d1db961e2096be71940afd41c41ecc1f6b08921f1a71464c33d46069c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 98a8a96821879e6e017cdd8e7a1904f6ea0b0a37623e4c899e19069b1b1b0aac
MD5 8431b2adf600c35b73f2631a5336ef4f
BLAKE2b-256 bee45a52f14f6626e46d96b7940d0cb8b273f5d6d3866033015131e7564161d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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.29-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for archive_r_python-0.1.29-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 5d48a1c4d06e3610cc5af33ed1067967445a0ed9ae7c52e03748f1de76f2da62
MD5 06da68af3465496e62a6425f2ea81c0c
BLAKE2b-256 23d2e19ed0db8eb10f50137e07e3798d071a9211272a24ec19b8f1b1b631d162

See more details on using hashes here.

Provenance

The following attestation bundles were made for archive_r_python-0.1.29-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