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.28.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.28-cp314-cp314-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14macOS 15.0+ x86-64

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

Uploaded CPython 3.14macOS 15.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

archive_r_python-0.1.28-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.28-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.28-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.28-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.28.tar.gz.

File metadata

  • Download URL: archive_r_python-0.1.28.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.28.tar.gz
Algorithm Hash digest
SHA256 8c1b3e51f8124e19248ffe23d568b6f0275e4b4f2ebf7bce8f1ddddd10444dc4
MD5 db9e72cb1bc9ce639737c11bed3626c2
BLAKE2b-256 099a6fc252668ebadd37df61f054060ad3aa8eaa09886a41a40c9731f0a40aef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 bbc4e1ff0513d4374e96e955498f0f9ca05072795fafd06aa9b2a810b9d1c4e9
MD5 9a555921da234dcf354888d7980d025e
BLAKE2b-256 976470f2d87cb24262dde9c73431a423777ee1ff377d4b8ac913f5489f3b087b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5fe39a2024ddbccfe09c73a6b5605249249e8e71fb0c92a6bcd468cd53fc1e9e
MD5 3ac1328b96ad517d196c92d7c1a3c6d5
BLAKE2b-256 3aa55bc13be969e502be6977515717347f533f9ca2f4d64a03df0b66a4789425

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 de83e2731ed2845ec224d930bd686d979195417ba1f0a701a96a3b37a257627e
MD5 6694606385341d7097f64d4359e1909b
BLAKE2b-256 b66e618c9b283c66f03a728c37fe1b294b0f2997dfe87a5d951695c81bd61c67

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp314-cp314-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 e231ded713011457029270aada5725537811a38eed57add26e9104436dd54af9
MD5 8a112c7dca90412dbcb57ddbba4ccfcc
BLAKE2b-256 9af35033ee23cf8d26c5d67eec8cfb8b0f134b64a260355219f57f8adc869721

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 552635a30fd5283b4fc9e2a4d890a308475b52becdd423c5d0689a83ad8bb60e
MD5 140ddd4e2fbdcdaa72fca62b4f74e514
BLAKE2b-256 5c08baa9f84f4f752fa6de1fae089fba5afe23ffb6d34772a93152b80fdd06ce

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp314-cp314-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 4e3726cd96cd5d18c267e22c8c293e6879653e4ddfa50486168aaa479b08868d
MD5 9673929193d2b329de7f9e56d8cc7f3a
BLAKE2b-256 d66da0663ef891dc88993931b6e9c59ddba350db54e9006df0fe2d8a328f9882

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp314-cp314-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 0da0c7f08cedf7bca1f0fbf175bbd89fccafc478b92b775524f3dd645aba1ad2
MD5 d3c2b9ca5b76c49a39b0c2b45f75e6b0
BLAKE2b-256 36ad2a9aa06263fbbac0c06cdae4051181c150c43d4c936e0ff4ffda370aeecc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 152c68d6c54fc8f6df1ef9c87f495f29d48652a0c30f41d55c1aaff5e5621dfa
MD5 4283585307de8e233f94315497c72fc5
BLAKE2b-256 262bd5baa3ec4cea90032c17ca11036a95e3a0bf6c302f2cfa0685336afcec20

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9c169bfb1799c234858c1807de74b8a866484ac5bdce59487cd5bc1f9e0566b5
MD5 14b6faacb90bbc3f8d09c16085560181
BLAKE2b-256 8e82757eb4528854772f3de85fdd87d3ea9915f082dda7f54318a5e17ac1d1b1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6eca63633bd71236c73414398941d523fa6af5049b5f1ad3683a59d68bb4f154
MD5 1aa234fbb24a0d7a8ecfd89f7e292aa7
BLAKE2b-256 9896bc86407b761ce4f431165578af37c35dcc4ff79776686e751d44208ee474

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp313-cp313-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 5c1ba8ae215d6da0508570148a5ae06df180d657b079314af8a1d37b45efd63f
MD5 e65a1e393600d6385677ba2fc33d9d0b
BLAKE2b-256 415ed0bd158caea794ab1ba255ea1331852a0d445078ee0257893dc0d3ee8c64

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 089713a8d718a14c4aaa25f5a1ebd2e73a19282dd671b630543fcc0353126d1a
MD5 8393ef5b0a4ceb499e6d8c05325b4f81
BLAKE2b-256 ca613257c288638b6c201cb509c81d496c0ad2403aa49c76e62e01f94107991c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 04545e6610a811e5c46df93575e435027da2950ce0df33bf7a58475b4b8f0f9c
MD5 5f98fb8c6db6c89bd09067662116e9a8
BLAKE2b-256 a7642220fc15ad44c0f645845bd3711521863c718ee113ce7d2d8b0b70bb0f1d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b0aae3ea6e4554b8f8d07f558ee0bbcc1cc41888e8142eac45b3008223ef8c41
MD5 1471864a5e93c9b1bc49ead3c7c70a6d
BLAKE2b-256 b4b5925ed5142405f0e7d4991947f217a2b161a82720488484eb7131709abac6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 aae71a5492edb24eff76b69d646d6844210e1225e7bd4b2d11e963903fdc9e9c
MD5 396a881318636e661854ee89c2d606c1
BLAKE2b-256 c5289bd5fc8e556cc6ee99db37fdeeadc32dc14df71dff40e75296fcafce3121

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 75d84d41db5ce17f04b58a9d68ea9dcee3410c48b95c25d4585b3a598ca1786d
MD5 8763353472a1ca98ff6980492b832ee6
BLAKE2b-256 651b50497b74642dd5cb7e87b48a292e1934cb55e2fffe0770dbe6579475a874

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 6cc890fe3736273450e54f102f4afbfd58083b354a35f8c125dd2b545261aa30
MD5 5fd2d6f3c0c0ba5860f00aa4a36da481
BLAKE2b-256 88063c31da7dd378ed54200869555609b58629653a64efb2c476a499a1465835

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0dec40e2405634eafc262ce09a1e6ff99710e4255d087492b230ce40c96f74ee
MD5 26ca191188908aa22573ca3b08ad1dac
BLAKE2b-256 9b7311246d6e4fd2c5fced37cd8dcebef406f0c69adb6e1745762ceab4dea2d2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fe0e257e2fc7efc676304a47710e6eb37ab7e9ffcdc258656b18a196150c1b3a
MD5 ec636fbe50e447adf537d23e1cf0a788
BLAKE2b-256 0058d26d709d08dfc567003630175de5cf4b961fc2060fe6722a53a453c34e85

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f358743e06549be2d67ead1f113bdaa50c547b6ab13120e74a76b30ce083b8b0
MD5 352c71dff6a7d1cef3e116690267af98
BLAKE2b-256 fe9607ef8381d44b32964106bab92d8e3de58f3f2a738d9ef8c4797c0fb1b970

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 5c9008748a77569ae749c2cd2c7a1abb9f28c27869c4916119b169c7d763f43f
MD5 4af75df67ebbc85c2bcf9067572049af
BLAKE2b-256 49e550dec624fd9227d9c87076fe3edd1c60c847748dc69131f6f9daf0da0b7f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 2df30955210a9a1bffc19509eb48d3c305719b058ad83376c7aadb38254c5669
MD5 49e4210191e13484e0eca750f1ff915e
BLAKE2b-256 345f85b14e37db65b8d684c7388602c314bf8d7b3c7dbaabf5f841dc2e95f49e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 53ddb8c00dec59f056700cba648a342d67349cd7391cca5f9e96e2dca44adf28
MD5 5a9be349f743bff369336a15183528f7
BLAKE2b-256 e2050f453d8580f86dfe8958d93b26a882812e2722f8405c80849c5f84ad855a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f3eec14c25cdc1e58b15330d78b9d465f0bf9a484ebafb125ad9fd67b905db1c
MD5 8cccebea585d4f377457c562dc13a291
BLAKE2b-256 dbf0ef296174ea2ab686472bd45b3c68aca10897059aaea51f01e8b7c756a2b4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 680e96987d102ad7b97b71d797b7f36a325423258124b745ade25eb1c13e50e1
MD5 3729eea94a8adb01246a968eb6aad50d
BLAKE2b-256 3f6a055d6582c91bf33949305ca71e3bd3169e2a0c21f102cf8f7fa0ad35b1dc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0f2d7932b3a63665554916e9b969c71926555d6772cd42b9326614ade592ee67
MD5 0e113866ac7472a5e3d1932aeb3e67e6
BLAKE2b-256 a8f05e78795b3c1b5db7b8f6c52224b372af5734b37e6587aa9ae5f1a90ab49b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for archive_r_python-0.1.28-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 1027e8c6d97794b9d5fd8ad308ee96e9a1e1fce2181774798da86ec49a68be55
MD5 dcdaa127678e32c46f3753255cf41943
BLAKE2b-256 32e90dafbe33b76deb2b142131cec8aea3b3eff9c0ddfed1b09cc4cbd376209a

See more details on using hashes here.

Provenance

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