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.25.tar.gz (92.2 kB view details)

Uploaded Source

Built Distributions

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

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

Uploaded CPython 3.14Windows x86-64

archive_r_python-0.1.25-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.25-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.25-cp314-cp314-macosx_15_0_x86_64.whl (955.9 kB view details)

Uploaded CPython 3.14macOS 15.0+ x86-64

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

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

archive_r_python-0.1.25-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.25-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.25-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.25-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.25.tar.gz.

File metadata

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

File hashes

Hashes for archive_r_python-0.1.25.tar.gz
Algorithm Hash digest
SHA256 864918b0e64c8e18dbfc40ded956e2bbe83c2085181e1466802fdf1e50bd6e09
MD5 cfd208cfc609303c68838acb22ff5e7e
BLAKE2b-256 09110dab46e0be6324b3b8da6095444f068c5496a9ae24abf928280679fb2c25

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 2963cf946c662cc6be70fc6625c8560844ae83f49684ed627986baa18259737c
MD5 e15ae7b00c9db301807772ea928dce78
BLAKE2b-256 89fcaca9716fe4255be844937504672680225ccffdefb2177a08235be3031ae1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 07ad7e6bcb6eb41c40b04c3062ef452eaf31d97385f4aa9f3c217506ddc0e08b
MD5 b6bb3335fa1061729d33accf81d0b56d
BLAKE2b-256 ba64cecbef5330fc0ddf33d542923d582ad0ebb7bc2bb795ecbd0d6f47022c15

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3748aead02895b3cf1577d5a4774ac20954c5a6348e6f95776cc1354ff3cb3a7
MD5 ca5523a982f55fd190c47f8ccc912f6e
BLAKE2b-256 9d7991de11f2b636b7430196724e647292133c86f1981e973acc541a7b0af7a8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 307782cc144a64b95c44a740e3ae6ca65cb3a66fe778301adb722048da0ad31b
MD5 29b9e1a6e5d6e387c24252d774782294
BLAKE2b-256 6365bbd3708e143f922b4e2ef33a11749de45c67964cb7519e75e486e09f8dff

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 dda7a76bc079a45573648ebe9a8fa8cef22025c2fd76d1550f324a1074432728
MD5 3b3531832fe58cba80e7d690cd4c8a16
BLAKE2b-256 0328146549fd4047952c461e90d92ad783fd5ad2c1d8f02eec11f54aa3aa6075

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 d66628019585d02ecafad16a2dcf28f3c1479120a2efaa6f350ccdc2ebfddcf1
MD5 6dbf904703ed2db0a9f01b4c086bebf9
BLAKE2b-256 2c16eb5d0ac273e4a5ec04427878d6dd11770e31d01b393a3a0d749e4ec329fa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 289e40b4acaf3a8a79da940eceb6a77d59de2ff57484707a1097fed47038b6a5
MD5 f62cef3e7bb53d5fbc7dba7399328860
BLAKE2b-256 4461c13360aee88c822044927e4a3fb9e0b8bac9001f1c33d5d6b9dc39dc9bb3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 df634f954f463fb9c1654d94b9a547ea2490584583404931456ef55da044d964
MD5 039dd1beb8bbbe6c91f25221e3124961
BLAKE2b-256 25ae87a312a6e9ced5ac0f83a2530e47b9e516a6101658659995cee796b4ac16

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f97517fd9eb3615f90bf65f9ded66bba4720c67cc46301d9b994fc5ee1d925cd
MD5 e0e6a76bef9e3729036e5a4282225b0f
BLAKE2b-256 70a540b3e596a54c74802ee6510e65d87e30925a81293beb3afe2e2d3b3cabfb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8c7ddf53065421e0f41a642c137a66003a9e7d886fb912e88227ca4c74101034
MD5 74f1602dae61c74a88eb43718182df51
BLAKE2b-256 e23cf9d1e1bb10531003136e1020c442c659614c017a1506691c2832e7754b9a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 a8503d3db85c461f47d09bcf31da9bb6b080687b28001b95a0d808547e3af837
MD5 c465597051fe6b5cbe628c6ef6b43e23
BLAKE2b-256 45c5663cbd75ec84cbefa07e886cb5eb030e36c943bcfeac343ffff40eaf42d5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 fbac862742095b8698365fa22171d46aca3b1a3f576018ade93f51cce5f5bb8e
MD5 23372f7522e83490edba6955fb1a8d78
BLAKE2b-256 f47ad37ba8db45ce3d62e18599fb71be0b7c532518528c738b1f3aac0b50c66e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 090d8d13fd8807cdf552e8803ef013ece85ce4b5674460791f672b2f3820de55
MD5 453877a3d20f92a32cc5bd0e79c72e20
BLAKE2b-256 f514005da3f1196f2fdfa637818c731784e2a585b0ca88f5126925b30c1a7b30

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 255e983841a7f81af64d512335dd32b232e2b9315ad73d06161042c09fa41d77
MD5 97611363123a9a6fb6ea79d4a9d18b30
BLAKE2b-256 848303e2c74223cef4031abc04ddb721b6e706141b90cd97188f7792820677f5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bac5e462ac5e387a4f09eac331359b570476fe2db0171216ec74c63c2bb04f06
MD5 7fea91814df4ee6ab80f14c7b8ed529a
BLAKE2b-256 375918e80ed00f085bbcff03a3753f73e2ec74c4775b00a188ea2712e8a8f387

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 98873b6b6a1faab4d94b2e07a4c6e38197e69e5d5a4c99db73379f4762c66627
MD5 79b80ed7711d6445234db6708602978e
BLAKE2b-256 b6675d68fae3cd7d1fd77a05f60167ba439e395df6829ab96c9c3f5981d319b1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 762546bb04325af1471f712b630bcbc6022f2b15ff1aa5fc9f98bca2643c57ca
MD5 77c8a1e69e4ea5dc455cf5eae1b760f7
BLAKE2b-256 7f81a53adcec01b0d51d2e213e22d0afa8f4fd50b3c02945bc4104b49814f0ec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cfc4b71a0b6499b84690b3559bfafae5f632ef999072caead1b13fe3863c4fc3
MD5 de6fc67fc91db9a67ad7bfa87267689a
BLAKE2b-256 1325861e1b857fe03de6c95c978da9b92b44a695ce5e086c005afcea1df52b0a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 343065da1a21cbd6f46210566610bc29cf52b9495d145d8677a2b1d4ec754ec3
MD5 d91190f830c1a2db39b9034fdb5d892d
BLAKE2b-256 54dbab7a77a62af8f158698fc8585a87308077735184686225f3e0f3135b4d22

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1e451c1b1336d1cd4e808ffe3e8d09339730e89f1fc9b564feb80ed956d0b499
MD5 20b49769003cca23da3f6474189447d4
BLAKE2b-256 223e79f3357625405b83a9b69157ff10681accc4fa7c5da2971b250fae069d25

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b5250ffddc3cb62efe923b2c5c5e84b3f727fda96b10e0fb1cd5a1cfc86c45d0
MD5 9d17e69565bcabeb481d0a3ad603ce72
BLAKE2b-256 8f29ca60b69250a456cfb449bd1380ac677b1060a9ed69a65bbaa2e5888034cb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 133a7cebcc30aa06c6482bd499bf5e11eba5e64d9a42f16c948ee30f7f605678
MD5 f6abea5756f50c68eb8bac24e67039f1
BLAKE2b-256 f07fa3edc9a4190929bf6d699b00b782267b61e6d35b8ce159a95b9460754787

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 21dd6b25fc2a62e85cbfea01616f2dbd660fee828f86210223726d0a2b8cb65c
MD5 a57ebb64a8ca4e519923e64785f53e30
BLAKE2b-256 e849ab87928ef3cd5673f9745f5f12f565c291b0fd8c6dbcc22e251b3e2b77f9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f16305d42ac3f067544410ca257da570feea822a2255fde5a748ea35fc8682e0
MD5 8796538baa2dce388235587be884b9d9
BLAKE2b-256 6af7a7e44ad3f6f8b4dbc0517aebf6cd62744bebdeae273edeecdd70aaf2de96

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8f19796061804f31263a5023a3fab1c2e5b94d10e2bc389f96a866031c760076
MD5 c1f5cb71d7959c9bf83828fe2d82b741
BLAKE2b-256 8de1e8ef6343f03dc7c83d38793e10d6b2f206a732d344fd998a413f12017349

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 eb2e4dd58a268a75e597883b9baf755518d3a01643dd9f0fe80d3d2931c91cba
MD5 8ea1acbe67fde954c42f1b8310a0d45e
BLAKE2b-256 4579c3f455a31bd950558d73d6a9d2d4bcda3518a8a391d0df64fd07bff3d201

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.25-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 50e0359b0e2efef45850476d1e6dec0a6ad7d8db784e3122302defcdde69696e
MD5 2e7f06ea7cbdab92b833058be0ce7511
BLAKE2b-256 908c9098f32b6dad18937e99f23dfe0f31255f607cf43581b33c5fd1b0ad9511

See more details on using hashes here.

Provenance

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