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

Uploaded CPython 3.14Windows x86-64

archive_r_python-0.1.23-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.23-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.23-cp314-cp314-macosx_15_0_x86_64.whl (954.9 kB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

archive_r_python-0.1.23-cp314-cp314-macosx_15_0_arm64.whl (925.1 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

archive_r_python-0.1.23-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.23-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.23-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.23-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.23.tar.gz.

File metadata

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

File hashes

Hashes for archive_r_python-0.1.23.tar.gz
Algorithm Hash digest
SHA256 1fd910a5586212ce58ffbdb2711494a68ed6cbc89155b50945cb812bbbd64c03
MD5 ff19fcfc07ab5d30bf32aa33eb45d02b
BLAKE2b-256 c33cc0843409126f3735e4bdaf5e5a659d17522d6e4f8cd38c754040c24c4e43

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 174c8df2bacdb2cd3d8b4962db39da15537d3131d2c9350282f6afc73d06dfbc
MD5 c1e09fd4a6e8ff5b92cf4a5317f889b1
BLAKE2b-256 f86a37c72f4cd4538c6a2319b8ff32141474e91c3c5430934603f6dad4eb0ef6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 54b205cebe0c3f20a763862575b4eb365942001c0a9ef0da913a6c2e711da8cb
MD5 91bd2b70e1af55297baa9083f4a6c3d2
BLAKE2b-256 0e1c74c82947cf7acce42d20b1d25c974839eff31ce6a4118a41393e2b03a8ef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2957cff38ab25fe6022463dd1d9511432803ced4d655d55d0ec727df438cc406
MD5 7cfb69d014f6401fd97398f0839e3639
BLAKE2b-256 7e9ad8abf42800280f50e403df2214cbbaac426a8dca6978a4efae0be1258942

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 f6263cdd56e0567685a98ef798c736930f3b5893cd1c7417543cd3624465b217
MD5 2a72898609117c0d50460da3c2b793d5
BLAKE2b-256 5fca48ca96476c140f7bf32bbf7c5eef42e50410a0834b4d3b42a9951e2693a7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 01cd7337f1807212cb6000e35e6ae1ea90613ac1648cf27ebb3a81550b46d1da
MD5 4b425b95ac36ab70693fecd4a8d64391
BLAKE2b-256 3d2e6bb1d041a66f20ff0c746e69d61c4eb33c17a827147deb4988ba46c4f70f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 4473906030c05d70950a591793b86f9a32b0fa30241c5357fa5b2197d8083b29
MD5 2ea0c41b1fe5f5293ab53410485555a1
BLAKE2b-256 c92d20bc86c45d9259631f476410c6851b942f5006ef1c033a9580a06957987f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 08fbc64b69f68afa82c015187b0d77d7379ffa270687791ffb5798bab1a31eb1
MD5 306b3d2ef46056561c5cac955d8faae3
BLAKE2b-256 73b31752427e221da527ddd04700a45b2cb296958591983ccaf051b1ef61958f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2ab45603dc6e24db71e4c06d968120ec536512e1e6006265c30a0e1861bec19a
MD5 669fc1388e01edbf93ffb08a2f8a0ef6
BLAKE2b-256 d2270381611f09fffb1ae1059fbc37c5ff708152e3b825ae404d5ab7061d1e80

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9c847899a2f452195ca6304e7c9fc3127a3b7f194f8e5b7ead5709d04691f225
MD5 7c43484c69529d24d18239a23521fd0d
BLAKE2b-256 bea6d50e6dd347d4562a91f2f16b70ac43712a3ca4f8310856bfcf4f66dc1107

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d47b2fc8ff4e2d7df10507f4c9c0c8128921d18c50bd809c81240138b2b50af6
MD5 64ed8f404f1fb8dd997c1792aca5f66d
BLAKE2b-256 aa36d75989c90068b0561f8a84c4201d26651e5694e9365e76e2ad3d2f2ec403

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 911dc6cd288dab7e00df7301ca4267e2d1b558991838f7e7aa391c571c084091
MD5 dcbc7899415d094377b4e1240c66af9f
BLAKE2b-256 fa8aeee80e4bc7b2ad9855b41063803f9f264d3c6ec0bd294028a02b1222bb9f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 8113715bc176484d414068a40e076cd4b204842c7bbc57e643f666b25aa76995
MD5 ebcd8d55a7b96c758b2b9c21972628d9
BLAKE2b-256 73d01687641dcb7504a3aef9490dcbb42da07564f8d79a9a2500edf99a8474cc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 445da316c02dfc364074cf40e9ce3719a68db970a282003db62bd4e324f061ba
MD5 6f1aeca1d482aa7736cd5bd90b476f0b
BLAKE2b-256 cf6314061f4de46dc666396184f9233267cf9333f62868d5d19bd203ba2c5a77

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1b9d03bf266ba9aa881fab435e377140d2bfaf158d6e906e7cc879166d7c653b
MD5 cba126f4359ffa9ed162126c09cced2f
BLAKE2b-256 1429298556e04e245715e9b95a241ac99a747ba6c194926e56a1e3964484a693

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3e860c6dc6dc47b2f347b64af752af6a8e6585c7dd8ba3bdd6094d311c240ff9
MD5 550edbb01b23e955bbe05efd4f0e812b
BLAKE2b-256 c34d0330f92b798119629d8388ae75f6ddd652292b4f3a4ef062b2f3d62209e4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 e666b0c97becbcf38b41a13fca7f38a76d38a1a6a798dc54fad0db83a5d0e212
MD5 ab315dc48bbdf2e9444dc7dc7f550a61
BLAKE2b-256 71354d8125c3e4797f9a0d18eb82507a9d74b9b3305d400cdffc77338e1d26c3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 8a636479320cfd7c7d6797c9f0ccc105e1750b9345e255ccd73c184e138b5cf2
MD5 7b1e90292edee803f8d58295461e7570
BLAKE2b-256 0f174c9ffb3bde8fc617f7d7c786baa7d0e1d2b1b68325f78f9c7daaeaa962aa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6fca2cc9400e86b2edf728c327c401796d322c06941c1357edd87b452244070f
MD5 d3c6a17a6608f995469959bb5c3be631
BLAKE2b-256 fb63891da94de2a7b14631108bf5f75abdebe49bf6ed02b8b4dcdf2264a6e5b6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7a640d0651b07bc85726f3dfcfe11f281e00dfcbf2bf3fc802ec60150fba3a33
MD5 9d304d7d49e74fc536d52a00a2954428
BLAKE2b-256 9672ce8dc2b84207543fc5c378d02fa0ac5ab74db84740da1efbfeb04b4f2607

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 409711cef4f22cc1c61ebafdc61596dd3ca55aabad7c72dbc89900d72fa305ba
MD5 210685344df23acb8c00eb871f6b3adc
BLAKE2b-256 32e305ed75d403366c6c65d9073de5297c55cad8fdf4605832ee960bb3714047

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b9576900d6acc4e514c0e150555e77642a0dd269eb340cbc01eae34d7cdb923c
MD5 def77502f600165407b12a1292a2125c
BLAKE2b-256 c41b79be3d5f10e60c67b9ff96c36c069dd167b8243a4df9f609aba63ef6f9f4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 c916d76bbde0825c77cf65ebaf385db2e2eed880bdd4f8544c0156dc0503a0dc
MD5 cb7f7f339aaf636dd74642c739331097
BLAKE2b-256 39749440078bbf8600fb3a03212ce02b53331720f582ca99792c09aa29c6a4df

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 baebc1c14e459edab23e9e684d75c58897510f90ef6e1a8a211436e8c74c8d83
MD5 3f917fc2468fdbcbde653a67ec574cef
BLAKE2b-256 c15b7fcb79b9c2c81c8c2de27151bc7b97a6a552cf1a61e5329e44ecf0cf7eb9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 19a094bd1e62c6e7398f1b8fc763ffecbf1b4d4b3c2443b7792443e039577206
MD5 92c3fbf9995fcb698136af456fa5b12d
BLAKE2b-256 6df35457b4625f15d2197534f499a6ed4f6006e1f9e2503f24514e402876ea03

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3c33683c0fb66c54fd1c95227f0649961707da5168611bce88a2324b1b44a910
MD5 752b934cc8b81d67e4d6fa7d3b06af6c
BLAKE2b-256 648a8c6dc0c6f8d90a84d9f00f67d2f132c99ba08c535c4b8d1102956181d79b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 e3b129611fca9bbe77cfc75042c698ac2594b8f7e13306acb713874dd788e65e
MD5 27d437936c7c23325d645f4fa18bf6f6
BLAKE2b-256 df5b90f5956cee3593ce8a04c09094dea8f4811e8f4152685d0b553405e8dead

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.23-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 f26274a2b83e7c5d87f2890ed6f479a3882425210bf098fb059b531ec9a066a2
MD5 e965ca41eea27c9707060ea10a9d1fd0
BLAKE2b-256 b21473b6d525e980bc15d99a392da11daef34872c06f69c6f1bd30798ee5d7cd

See more details on using hashes here.

Provenance

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