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.21.tar.gz (92.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.21-cp314-cp314-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.14Windows x86-64

archive_r_python-0.1.21-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.21-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.21-cp314-cp314-macosx_15_0_x86_64.whl (958.4 kB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

archive_r_python-0.1.21-cp314-cp314-macosx_15_0_arm64.whl (924.9 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

archive_r_python-0.1.21-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.21-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.21-cp311-cp311-macosx_11_0_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

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

Uploaded CPython 3.10Windows x86-64

archive_r_python-0.1.21-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.21-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.21-cp310-cp310-macosx_11_0_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

archive_r_python-0.1.21-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.21.tar.gz.

File metadata

  • Download URL: archive_r_python-0.1.21.tar.gz
  • Upload date:
  • Size: 92.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.21.tar.gz
Algorithm Hash digest
SHA256 600c339901b1e10d5fe7a3a2fd5e0566233b90c4e40053cf3c6d6283c570a953
MD5 2a5fa1114687ab418500f0e95fda0f6d
BLAKE2b-256 bb5d647be171d673f7b59e9144cee6b221bef36cc9552502384aa499e26a0f73

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 73f6a2aa5a32399ea488e602c1514f24b9eb1a438ceb81dd4d8ef165c527dba7
MD5 777a7d9effd944f5dd58fc102da326d3
BLAKE2b-256 00697f6a88a903ab494f9f43f4a8a418a2b4f1b6bf4757a5bbf78ba045222218

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1fd05265d7f11a4e302f6dc082af503dd64ac1046afd8cd8a575ae4cfb564ece
MD5 af4ce08d27a01774e4ddfee39b2a28a4
BLAKE2b-256 cc6e44531905897447d73efe8fab77833b52683be02d8174465c847a46464efb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 41d3b482ca75024bfdd61bcb475b325caf771a710a720d0c5d7c8207a40b9168
MD5 a0daebde8994b5942916267534593f38
BLAKE2b-256 13b89760838646ed7adf06e794b990a2c4f4685782114761674d4edd66f1a20e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 797096a09d8f976c3f9ec4fd1146d3b6cc7a439730607f8a0d377c8fc33002c9
MD5 1afebabbd1cadcfbc182997cb9d03a74
BLAKE2b-256 4151a325e6f969d3203a29b4b3e33e17c68139688d5eaa8d5b88c6efcb74bbc4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 d999d7d9baf540dc8cb9f141ead2a483a58e0083bd0398cdbbcb7affcb2b87d2
MD5 680e62972464fbb1d5abb8baa39dceb4
BLAKE2b-256 9feb221faf498d005a6092b5fca6972e19ffcf51fa075ccd63606a64964fc868

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 54131ca53fc3c7e4ab04cab01688d784fb3fa23c8f40daf525ae5878de061856
MD5 1dfc5da3d24ef49a6799565a172e1ff1
BLAKE2b-256 dec1a4877e4df7302bbdfc8daf7f6893ba7806d7633206061776e2b43861e8fa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 6e88f8c88efe64809bbc964c1b4b530cd23fedf4f4e7635e738442855bc77dda
MD5 5987a6b24410c345bb8e6f8e312e6780
BLAKE2b-256 51be1f971736f26e4e9fc817ae4d9d23e97975a42a8832faeb695948fd9c1ca0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 aaa2ba7a4b9bf7158499a3a6fb8869f5e7b54fc8443c70e14bea3b2a9d0e2d06
MD5 5f63a5e8789bd91013610349a113f288
BLAKE2b-256 37485081632e147fef5644357bf82565280d34771a5b2d3045a04b111bc65333

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4f5795cbdbe9e1506af331d454c2f6358304dd040bdddf80ba0ad66a694d4df0
MD5 01ec548160a1bd2239d990021f370613
BLAKE2b-256 f9c8e8012755d68d36de23d60cadf87841a4b1908909b45250cad7ef74560f02

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 96f3113eeafa7823ff4c0b698dd686d009c41c453a564a3bd5129e649d00ac9d
MD5 49a8f1409a870212e0fd22287dfde26e
BLAKE2b-256 4dbe3bec077fc93562e9f9246ad62e1243ba07d001ff509d86581ac1b10b2ecd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 1da3904b5815d3ead4a8bad2d5e40117cffc173d100d018c03a7e54cc5393bce
MD5 0586dfe09d53fb0fa7ff0dd561397382
BLAKE2b-256 71a262f665bba64ee0e2aab34217ef6e658e8b79a62dd6f26b6ce77ade23fafe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 3c8e7584b1442d87a56aab883ade6ea08bf20044b70257b66c1074e523a4653a
MD5 e140f244dbad346f2aacad36de2333e5
BLAKE2b-256 336236d242d33681d2618d3fd313e689909976f1a38f9f1c5afef7fb88fc9fd6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c2db5027af14762ff7a0a8571bde99b98917e170d27f8a6ae88ef71812a9741f
MD5 0fca815fac63cd97cc19568710f28099
BLAKE2b-256 eb4d35da7106c902733be9befa18b91ff12f8152d7427c19fb95d98e6c7899ba

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bf31e5704cbef0ca7d181fa5a725ee13311a6f81c422a770ac817376bb745113
MD5 08493bfc32cf84af7590ed2d8f319519
BLAKE2b-256 0804bc3389b952a88555e57d4748081294a4295fa53283795100e988f6c78d68

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5802780b6d686732300d2a2eff6221cfaf7fb2c6a3663bd16ea360c1aab192b8
MD5 ed75b2fbafc7d77d57d9d85ad2d6d9e9
BLAKE2b-256 50c24e4064087c9c5ee62bb5e2acf5212ded2771ff70aad40dd69b05213ee29c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 af839daa3e626765f5921b9d6b2eee2a28fb2be10fd59862b508f0d23720c8f9
MD5 00c85d7757e72e90c9fe2e30882bdf6d
BLAKE2b-256 b06b8a5ae9c902642e1bb61ad4b690ec82f7bb25130c7a9788e29869e62e96e4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 eb33b09468deb013134057d2d44f099bc903f7cd0f80b9df294601c2b6098806
MD5 0c1de48b6fd0fe5a2a4e5fb1847d5e97
BLAKE2b-256 909924c9712beffeb62187e2f4a36358a530160e692f3421068f69f6ab5b10e7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9da2d05bb8daa754e6be831f80f0c5e83b387770e3add3884d39c27ccd1a15de
MD5 4f0795d4660413d71be550c63614125b
BLAKE2b-256 8c033e74222e4d83ab26baf1c57ef2006714e51d946c074adc6efc68ad5c7699

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 698f4d086de5269d8288cb41cef64b33af908b1d14d84e93bee5ef59b7cc39c5
MD5 c5a55fc8e60b518210e134be82c7991a
BLAKE2b-256 9476b1ad6570cb3e759a870ae41e7c1c003435f518f4feea24b6f6173f300737

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cd5f330ed2a1c3983af037a2c17341f95c5baacdffdea1f15573b4aa7ab88c6f
MD5 96f816ba134c9973f6d91eb7374f4701
BLAKE2b-256 0584268041130fa43a575d6ced9ac222f01a4556bf4885124952d8ff5cf31b8c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 73458964098d0e2dc93e755e96ad54f9b6544029c98f3aca4ee2b6eeb6bf979d
MD5 cda6a924331fa506c204e2e318b92b0a
BLAKE2b-256 06f6a2b9e8d2ba28f23c53e8e4f8f096252804bb37e6417f7412a4697d801d68

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 f6a0e37c9dc941a97f642f5aa57f8dfd473cdd2887245c56a503a408eaa93968
MD5 6cef26c419cf3955b2d707801007b67d
BLAKE2b-256 ea61f870231749232992602e864c5250b4d12b278925eecd2ca24664ac70792c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 81a9631ad22ef8e2024955b71fec4515cf35db132c134638200aa6452ab04bc7
MD5 f1ffbee67977a92cf8184e3aadd903fd
BLAKE2b-256 8beb0119de47c1f819bff80805c4c30c76f383d3de8f9aa81fa42f72ea6c3949

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ff27bf04faec7861242726c8fcdb6b98221dfee0a0f64e7687be515cb743f63a
MD5 6f027e8c40273985edaabcaf7ed3ff00
BLAKE2b-256 40e58fa4b9a0fa1793f0130bd891d1ab275a5e30eb1580f38034ffe8ac30bc37

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 297f7f39db50baca1c78895b991c86c6fa7943b8ae5238ef7110db1023b29060
MD5 0db544e8a25069f9f49cd3789f9dfc86
BLAKE2b-256 2d0dea1ca77679a2f697c016f6660cf3361356f18bf2ac4116320e13ec18bd39

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 56745f810d9e6af869692cfe33d434992ed005745faca67917244f2d2266012f
MD5 34572b6d7a3b366753f98d624799e920
BLAKE2b-256 979aa8b1d2705dbd8f80d4529e2238e79c61d33c06368a79e0ddf5a4837dbef0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.21-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 756e1102879fc19f781684766a4843adc90a2adb7091ba9926b176a8f9293493
MD5 53f774bfef98258ce4cfd6113f83df6f
BLAKE2b-256 f66dfab6b4dc68f7e198fae133afbd79c9949dede8a0993a6ad30fdd6c9350eb

See more details on using hashes here.

Provenance

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